Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перестановка элементов диагонали матрицы, помогите реализовать 
:(
    Опции темы
Клявас®
Дата 21.6.2006, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 1.9.2004
Где: Литва, Вильнюс

Репутация: нет
Всего: нет



Квадратный массив до 10 элементов.
Поменять местами главную диагональ с обратной.  

Это сообщение отредактировал(а) Клявас® - 21.6.2006, 23:40
PM MAIL WWW ICQ   Вверх
Prehistorik
Дата 22.6.2006, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 30.5.2006
Где: СПб

Репутация: нет
Всего: 3



Код

int i;
for(i = 0; i < 10; i++)
{
   d1 = a[i,i];
   d2 = a[10-i,i];
   a[i,i] = d2;
   a[10-i,i] = d1;
}


 
--------------------
Есть только один бог - Ассемблер, и С - пророк его. 
PM MAIL   Вверх
Earnest
Дата 22.6.2006, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 2
Всего: 183



Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена!  


--------------------
...
PM   Вверх
Friackazoid
Дата 22.6.2006, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: 1
Всего: 3



Prehistorik, 
Там до 10 элементов т. е необязательно их 10 будет
Но и лаже если их 10, то самый последний элемент будет иметь индекс [9] то есть
Код

void main()
{
   int n;
   cin>>n;
   int mas[10][10];
   for (int i=0; i<n; i++)
      for(int j=0; j<n; j++)
          cin>>mas[10][10];
   int temp;
   for (int i=0; i<n; i++)
   {
      temp=mas[i][i];
      mas[i][i]=mas[n-1-i][n-1-i];
      mas[n-1-i][n-1-i]=temp;
   }
   for (int i=0; i<n; i++)
      for(int j=0; j<n; j++)
          cout>>mas[10][10];
}
 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Клявас®
Дата 25.6.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 1.9.2004
Где: Литва, Вильнюс

Репутация: нет
Всего: нет



Friackazoid, 
Забыл добавить: там же ещё надо вводить матрицу с клавиатуры и выводить на экран.
Смотрите, я сделал так:
Выдаёт ошибки. Где они тут могут быть!?

Код

#include <iostream>
using namespace std;
void nived(int*);
void ived(int,int,double**,int*);
void skaic(int,int,int*,double*,double**);
void isved(int,int*,double*);
int main(){
    int i=0,j=0;
    int* n=new int;
    double ** ak= new double*[*n];
    for(i=0;i<*n;i++){
        ak [i]=new double[*n];
    }
    double* d=new double[*n-1];
    nived(n);
    ived(i,j,ak,n);
    skaic(i,j,n,d,ak);
    isved(i,n,d);
    delete []d;
    for(i=0;i<*n;i++){
        delete []ak [i];
    }
    delete n;
    delete []ak;
    return 0;
}

void nived(int * n){
    do{
        cout<<"Введите длину матрицы n: "<<endl;
        cin>>*n;
        if(*n<1||*n>10){
            cout<<"Плохо ввели. Введите ещё раз: \n";
        }
    }while (*n<1||*n>10);
}
void ived(int i, int j, double ** ak, int* n){
    for(i=0;i<*n;i++){
        for(j=0;j<*n;j++){
            cout<<"Введите элемент:  "<<i+1<<" "<< j+1<<" "<<endl;
            cin>>ak[i][j]; // *(*(ak+j)+i);
        }
    }
}

void skaic(int i, int j, int* n, double* d, double ** ak){
    for(i=0;i<*n-1;i++){
        int d=0;
        for(j=0;j<*n;j++){
            if (i=j){
      d=ak[i][j];
      ak[i][j]=ak[n-1-i][n-1-j];
      ak[n-1-i][n-1-j]=d;
            }
        }
    }
}
   for (i=0; i<n; i++)
      for(int j=0; j<n; j++)
          cin>>ak[10][10];
}


void isved(int i, int* n, double* d){
        cout<<i+1<<" Поменяв диагонали, матрица стала: " <<ak[i][j]<<endl;

}
  

Это сообщение отредактировал(а) Клявас® - 25.6.2006, 19:39
PM MAIL WWW ICQ   Вверх
Клявас®
Дата 25.6.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 1.9.2004
Где: Литва, Вильнюс

Репутация: нет
Всего: нет



Хотя бы вот такую подправьте:

Код

#include <iostream>
using namespace std;
int main()
{
   int n,i,j;
   double mas[10][10];
     cout<<"Введите матрицы длину n:"<<endl;
               cin>>n;

               for (i=0; i<n; i++){
       for(int j=0; j<n; j++){
           cout<<"Введите элемент: "<<i+1<< j+1<<endl;
           cin>>mas[i][j];
       }
   }

               for (i=0; i<n; i++){
       for(int j=0; j<n; j++){
           if(i=j){
               mas[i][j]=mas[n-1-i][j];
           }
       }
   }

               cout<<"Поменяв диагональ, матрица получилась: "<<endl;

    for (i=0;i<n;i++){
        for (j=0;j<n;j++){
            cout<<mas[i][j]<<" ";
        }
cout<<endl;
}
return 0;
}
  

Это сообщение отредактировал(а) Клявас® - 25.6.2006, 21:00
PM MAIL WWW ICQ   Вверх
Rockie
Дата 25.6.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(Клявас® @  25.6.2006,  21:00 Найти цитируемый пост)
Хотя бы вот такую подправьте:
 

Цитата(Клявас® @  25.6.2006,  21:00 Найти цитируемый пост)
     if(i=j){


должно быть i==j
Цитата(Клявас® @  25.6.2006,  21:00 Найти цитируемый пост)
 mas[i][j]=mas[n-1-i][j];


тоже неправильно


Код
#include <iostream>
#include <conio>

using namespace std;
int main()
{
   int n,i,j, temp;
   double mas[10][10];
     cout<<"lenght n:"<<endl;
               cin>>n;
   for (i=0; i<n; i++)
       { for(int j=0; j<n; j++)
          { cout<<"\nelment: ["<<i<<"]["<<j<<"] ";
            cin>>mas[i][j];
          }
       }

    cout<<"\nresult:\n "<<endl;
    for (i=0;i<n;i++)
     { for (j=0;j<n;j++)
        { cout<<mas[i][j]<<" ";
        }
      cout<<endl;
     }

    for (i=0; i<n; i++){
       for(int j=0; j<n; j++){
           if(i==j){
           temp = mas[i][j];
           mas[i][j]=mas[n-1-i][j];
           mas[n-1-i][j] = temp;
           }
       }
   }

    cout<<"\nresult:\n "<<endl;
    for (i=0;i<n;i++)
     { for (j=0;j<n;j++)
        { cout<<mas[i][j]<<" ";
        }
      cout<<endl;
     }

getch();
return 0;    
}


хотя распечатку надо вынести в отдельную функцию. по первой программе
Цитата(Клявас® @  25.6.2006,  19:38 Найти цитируемый пост)
int* n=new int;


это незачем.. если узнаешь размер по ходу работы программы то просто 
Код
int  n;

код программы надо комментировать, тогда и тебе понятнее будет. никто не будет угадывать что ты имел в виду под
Цитата(Клявас® @  25.6.2006,  19:38 Найти цитируемый пост)
void nived(int*);    
void ived(int,int,double**,int*);    
void skaic(int,int,int*,double*,double**);
 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Клявас®
Дата 26.6.2006, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 1.9.2004
Где: Литва, Вильнюс

Репутация: нет
Всего: нет



Rockie, 
спасибо тебе большое)))  smile 

Только эти задания со стрелками меня просто уничтажают....
Вроде написал, ошибок нет, а работать не хочет.
Там ещё была необходимость:
Арифметические данные передать стрелками.
Элементы масива (-ов) выбрать только стрелками.
Массивам указывать только динамическую память. Когда она не нужна - её освобождать. 

Вот что получилось:

Код

#include <iostream>
using namespace std;

void ived(int,int,int*,double**);
void skaic(int,int,int,int*,double**);
void isved(int,int,int*,double**);

int main(){
    int i=0,j=0;
    int temp=0;
    int* n=new int;
    double ** mas= new double*[*n];
    for(i=0;i<*n;i++){
        mas [i]=new double[*n];
    }
    double* sum=new double[*n-1];
    ived(i,j,n,mas);
    skaic(temp,i,j,n,mas);
    isved(i,j,n,mas);
        for (i=0;i<*n;i++){
            delete []mas [i];
        }
    delete n;
    delete []mas;
    return 0;
}
//

   void ived(int i, int j, int* n, double ** mas){
     cout<<"Lenght n:"<<endl;
               cin>>*n;
   for (i=0; i<*n; i++){
       for(j=0; j<*n; j++){
           cout<<"\nElment: ["<<i+1<<"]["<<j+1<<"] ";
            cin>>mas[i][j];
          }
       }

    cout<<"\nPradine matrica:\n "<<endl;
    for (i=0;i<*n;i++){
        for (j=0;j<*n;j++)
        { cout<<mas[i][j]<<" ";
        }
      cout<<endl;
     }
   }

   void skaic(int temp, int i, int j, int* n, double ** mas){
    for (i=0; i<*n; i++){
       for(j=0; j<*n; j++){
           if(i==j){
           temp = mas[i][j];
           mas[i][j]=mas[*n-1-i][j];
           mas[*n-1-i][j] = temp;
           }
       }
       }
   }

void isved(int i, int j, int* n, double** mas){
    cout<<"\nNew Matrix:\n "<<endl;
    for (i=0;i<*n;i++){
        for (j=0;j<*n;j++){
            cout<<mas[i][j]<<" ";
        }
      cout<<endl;
     }
}


Добавлено @ 00:45 
Наконец-то разобрался, всем огромной спасибо, кто помогал!!!
Вы лучшие  smile  smile  smile 
Вот итоговый код:

Код

#include <iostream>
using namespace std;

void nived(int*);
void ived(int,int,int*,double**);
void skaic(int,int,int,int*,double**);
void isved(int,int,int*,double**);

int main(){
    int i=0,j=0;
    int temp=0;
    int* n=new int;
    nived(n);
    double ** mas= new double*[*n];
    for(i=0;i<*n;i++){
        mas [i]=new double[*n];
    }
    double* sum=new double[*n-1];
    ived(i,j,n,mas);
    skaic(temp,i,j,n,mas);
    isved(i,j,n,mas);
        for (i=0;i<*n;i++){
            delete []mas [i];
        }
    delete n;
    delete []mas;
    return 0;
}
//

void nived(int * n){
    do{
        cout<<"Iveskite matricos mata n: "<<endl;
        cin>>*n;
        if(*n<1||*n>10){
            cout<<"Viskas blogai bandykite dar: \n";
        }
    }while (*n<1||*n>10);
}

   void ived(int i, int j, int* n, double ** mas){
   for (i=0; i<*n; i++){
       for(j=0; j<*n; j++){
           cout<<"\nElmentas: ["<<i+1<<"]["<<j+1<<"] ";
            cin>>mas[i][j];
          }
       }
    cout<<"\nPradine matrica:\n "<<endl;
    for (i=0;i<*n;i++){
        for (j=0;j<*n;j++){
            cout<<mas[i][j]<<" ";
        }
      cout<<endl;
     }
   }

   void skaic(int temp, int i, int j, int* n, double ** mas){
    for (i=0; i<*n; i++){
       for(j=0; j<*n; j++){
           if(i==j){
           temp = mas[i][j];
           mas[i][j]=mas[*n-1-i][j];
           mas[*n-1-i][j] = temp;
           }
       }
       }
   }

void isved(int i, int j, int* n, double** mas){
    cout<<"\nMatrica su pakeistomis diagonalemis:\n "<<endl;
    for (i=0;i<*n;i++){
        for (j=0;j<*n;j++){
            cout<<mas[i][j]<<" ";
        }
      cout<<endl;
     }
}
 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.