У меня есть этот код для транспонирования матрицы:
for(j=0; j<col; j++) {
for(k=0; k<row; k++) {
mat2[j][k] = mat[k][j];
}
Кажется, он работает с квадратной матрицей, но не с неквадратной матрицей. Помоги мне!
У меня есть этот код для транспонирования матрицы:
for(j=0; j<col; j++) {
for(k=0; k<row; k++) {
mat2[j][k] = mat[k][j];
}
Кажется, он работает с квадратной матрицей, но не с неквадратной матрицей. Помоги мне!
Это будет работать для неквадратной матрицы, но вы должны убедиться, что количество строк в mat2
соответствует количеству столбцов в mat
, и наоборот. То есть, если mat
является матрицей NxM
, то mat2
должна быть матрицей MxN
.
Это фактический код, который вы использовали в своем приложении? Потому что это неправильно.
Синтаксис оператора for
таков:
for (Initialization; Condition to continue with the loop; Step Operation) {}
В вашем случае вы должны использовать что-то вроде этого:
#define COLS 10
#define ROWS 5
int mat[COLS][ROWS];
int mat2[ROWS][COLS];
int i, j;
for (i = 0; i < COLS; i ++) {
for (j = 0; j < ROWS; j++) {
mat2[j][i] = mat[i][j];
}
}
Таким образом, это может транспонировать вашу матрицу. Естественно для этого нужно заранее знать размеры матрицы. Другим способом может быть динамическая инициализация вашей матрицы с использованием некоторых данных, предоставленных пользователем, например:
int ** mat;
int ** mat2;
int cols, rows;
int i, j;
/* Get matrix dimension from the user */
mat = (int **) malloc (sizeof(int *) * cols);
for (i = 0; i < cols; i++) {
mat[i] = (int *) malloc (sizeof(int) * rows);
}
Таким образом, вы динамически инициализируете матрицу, а затем можете транспонировать ее так же, как и раньше.
Если col — это количество строк в mat2 (и столбцов в mat), а row — это количество столбцов в mat2 (и строк в mat), то это должно работать.
Вам нужен очень близкий кудрявый, но я предполагаю, что он у вас есть в вашем коде.
Код для транспонирования неквадратной матрицы с предопределенными размерами в С++ будет выглядеть примерно так:
#include <iostream>
using namespace std;
int main()
{
int a[7][6],b[6][7],x,i,j,k;
/*Input Matrix from user*/
cout<<"Enter elements for matrix A\n";
for(i=0;i<7;i++)
{for(j=0;j<6;j++)
{
cin>>a[i][j];
}
}
/*Print Input Matrix A*/
cout<<"MATRIX A:-"<<endl;
for(i=0;i<7;i++)
{for(j=0;j<6;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
/*calculate TRANSPOSE*/
for(i=0;i<7;i++)
{for(j=0,k=5;j<6;j++,k--)
{
x=j+(k-j);
b[x][i]=a[i][j];
}
}
/*Print Output Matrix B*/
cout<<"matrix B:-\n";
for(i=0;i<6;i++)
{for(j=0;j<7;j++)
{
cout<<b[i][j];
}
cout<<endl;
}
}
Вы можете заменить их соответствующими операторами заголовка и печати/сканирования, чтобы написать код на C, а также получить ввод от пользователя и реализовать то же самое.