Надо сделать так, чтобы работало транспонирование матрицы размера 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;
}
C/C++
Не работает транспонирование матрицы. Исправить программу
По-моему, всё ненужное отсюда надо убрать, а необходимое -добавить. Зачем два раза в основной программе печатать матрицу, если это действие можно вывести в отдельную функцию? И если это строго не запрещено, то в одном и том же цикле можно и формировать матрицу, и тут же сразу транспонировать её. Дилиты нужны только тогда, когда требуется память, а если программа уже выполнена, то и дилиты совершенно необязательны -и так всё автоматически дилитируется.
#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");
}

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

Василий Богданов
Очень хорошее решение?
Как минимум, добавить цикл:
for(int i = 0; i < m; i++) { transMatrix[i] = new int[n]; }
Место под элементы матрицы A ты выделяешь, а под элементы матрицы transMatrix - нет.
for(int i = 0; i < m; i++) { transMatrix[i] = new int[n]; }
Место под элементы матрицы A ты выделяешь, а под элементы матрицы transMatrix - нет.
Похожие вопросы
- Помогите исправить программу на языке СИ, работает коряво.
- Помогите исправить программу на С++
- Составьте программу удаления столбца, содержащего максимальный элемент матрицы A[N][N] НА ЯЗЫКЕ СИ
- Структуры на языке С++ Скажите пожалуйста, почему не работает программа ,и как её исправить?
- Найти максимальный элементы в строке матрицы
- Помогите исправить и дописать программу с массивами на языке C++. Буду благодарен, т. к. самому уже не понятно.
- Чёт не пойму, как сделать рандомные значения матрицы через массив, прошу доработать, пж прогу!
- Некорректно работает написанная программа
- Код работает некорректно. Язык Си. Нахождение максимального отрицательного элемента матрицы и замена его числом.
- Записать в файл те строки матрицы, которые содержат только один ноль С++ ПОМОГИТЕ ИСПРАВИТЬ КОД