Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Перестановка элементов диагонали матрицы


Автор: Клявас® 21.6.2006, 23:39
Квадратный массив до 10 элементов.
Поменять местами главную диагональ с обратной.  

Автор: Prehistorik 22.6.2006, 06:58
Код

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;
}


 

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

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

Автор: Friackazoid 22.6.2006, 09:39
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];
}
 

Автор: Клявас® 25.6.2006, 19:38
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, 21:00
Хотя бы вот такую подправьте:

Код

#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;
}
  

Автор: Rockie 25.6.2006, 21:36
Цитата(Клявас® @  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**);
 

Автор: Клявас® 26.6.2006, 00:37
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;
     }
}
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)