C/C++

Не работает транспонирование матрицы. Исправить программу

Надо сделать так, чтобы работало транспонирование матрицы размера n*m

{
int n,m;


cout<<"Введите количество строк: "; cin>>n;
cout<<"Введите количество столбцов: ";cin>>m;

int **A = new int*[n]; // A указывает на массив указателей (n штук) на тип int
int **transMatrix = new int*[m];
// Для каждого указателя выделяем память под новый массив (из m элементов в данном случае)
for(int i = 0; i < n; i++)
{
A[i] = new int[m];
}
cout<<"Матрица:\n\n";
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
A[i][j]=rand()%100;
cout<<setw(4)<<A[i][j]<<" ";

}cout<<endl;

}
cout<<endl<<endl<<endl;

cout<<"Транспонированная матрица:\n\n";
int k;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
transMatrix[j][i]=A[i][j];
}
}

for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
cout<<setw(4)<<transMatrix[i][j]<<" ";

}cout<<endl;

}

for(int i = 0; i < n; i++)
delete[] A[i];
delete[] A;


}
По-моему, всё ненужное отсюда надо убрать, а необходимое -добавить. Зачем два раза в основной программе печатать матрицу, если это действие можно вывести в отдельную функцию? И если это строго не запрещено, то в одном и том же цикле можно и формировать матрицу, и тут же сразу транспонировать её. Дилиты нужны только тогда, когда требуется память, а если программа уже выполнена, то и дилиты совершенно необязательны -и так всё автоматически дилитируется.

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
void print_matrix(int **A, int x, int y)
{
int a, b;
for (a = 0; a < x; a++)
{
for (b = 0; b < y; b++)
cout << setw(3) << A[a][b];
cout << endl;
}
cout << endl;
}
int main()
{
int i, j, n, m;
cout << "n m: ";
cin >> n >> m;
int **A = new int *[n];
int **B = new int *[m];
for (i = 0; i < n; i++) A[i] = new int[m];
for (i = 0; i < m; i++) B[i] = new int[n];
srand(time(nullptr));
for (i = 0; i < n; i++) for (j = 0; j < m; j++)
{
A[i][j] = rand() % 100;
B[j][i] = A[i][j];
}
cout << "Матрица: \n\n";
print_matrix(A, n, m);
cout << "Транспонированная матрица: \n\n";
print_matrix(B, m, n);
system("pause > nul");
}
Сергей Воронов
Сергей Воронов
66 572
Лучший ответ
Василий Богданов Очень хорошее решение?
Как минимум, добавить цикл:

for(int i = 0; i < m; i++) { transMatrix[i] = new int[n]; }

Место под элементы матрицы A ты выделяешь, а под элементы матрицы transMatrix - нет.