Транспонирование матрицы в С++
Здесь представлен программный код, с помощью которого выполняется транспонирование матриц. Для этой цели создана специальная функция. Функция является перегруженной, у нее два варианта: с одним аргументом и с двумя аргументами. Дело в том, что функция в качестве значения массив возвращать не может. Поэтому необходимо предусмотреть какой-то механизм возвращения результата (результат - транспонированная матрица). Сами собой напрашиваются два подхода: передавать матрицу-результат аргументом функции либо вносить изменения непосредственно в исходную матрицу. В соответствии с этим определяются и варианты функции транспонирования матриц. Исходная матрица (двумерный массив) передается пер вым аргументом функции trans(). Функция значения не возвращает. Если больше аргументов нет, изменения вносятся в эту матрицу. Если у функции есть еще один аргумент (двумерный массив такого же размера, как и первый), результат транспонирования записывается во вторую матрицу.
#include#include using namespace std; //Размер матриц: const N=3; //Транспонирование матрицы (результат-второй аргумент): void trans(double A[N][N],double B[N][N]){ int i,j; for(i=0; i < N; i++) for(j=0; j < N; j++) B[i][j]=A[j][i]; } //Транспонирование матрицы (результат записывается в аргумент): void trans(double A[N][N]){ int i,j; double s; for(i=0; i < N; i++) for(j=i+1; j < N; j++){ s=A[i][j]; A[i][j]=A[j][i]; A[j][i]=s;} } //Заполнение матрицы случайными числами: void fill(double A[N][N]){ int i,j; for(i=0; i < N; i++) for(j=0; j < N; j++) A[i][j]=rand()%10; } //Вывод матрицы на экран: void show(double A[N][N]){ int i,j; for(i=0; i < N; i++){ for(j=0; j < N; j++) cout << A[i][j] << " "; cout << endl;} } int main(){ //Двумерные массивы: double A[N][N],B[N][N]; cout << "Initial matrix:\n"; //Заполнение массива: fill(A); //Отображение массива: show(A); cout << "After transform:\n"; //Транспонирование: trans(A,B); //Результат: show(B); cout << "Initial matrix:\n"; //Транспонирование: fill(A); //Результат: show(A); cout << "After transform:\n"; trans(A); show(A); return 0; }