#c #matrix #struct
Вопрос:
Моя программа заключается в том, чтобы выполнить транспонирование матрицы и отобразить ее с помощью структур. Я использую указатель на структуры в каждой функции, просто для практики, хотя я мог бы сделать это, просто передав структуру или по ссылке. Программа работает нормально до тех пор, пока не появится функция inputMatrix. Программа принимает входные данные, а затем завершает выполнение без каких-либо выходных данных.
Что я точно знаю, так это то, что проблема заключается в функции отображения или структуре, которую я создаю в main(которая имеет конечный результат).
Мой код приведен ниже:
#include <iostream>
#include <iomanip>
using namespace std;
struct Matrix
{
int **data;
int rows;
int columns;
};
void createMatrix(Matrix *mat)
{
mat->data = new int *[mat->rows];
for (int i = 0; i < mat->columns; i )
{
mat->data[i] = new int[mat->columns];
}
}
void inputMatrix(Matrix *mat)
{
for (int i = 0; i < mat->rows; i )
{
for (int j = 0; j < mat->columns; j )
{
cout << "Enter element of row " << i 1 << " and column " << j 1<<endl;
cin >> mat->data[i][j];
}
}
}
Matrix transpose(Matrix* mat)
{
Matrix transpose;
transpose.rows = mat->rows;
transpose.columns = mat->columns;
for (int i = 0; i < mat->rows;i )
{
for(int j = 0;j<mat->columns;j )
{
transpose.data[i][j] = mat->data[j][i];
}
}
return transpose;
}
void display(Matrix* mat)
{
for(int i = 0;i<mat->rows;i )
{
for(int j = 0;j<mat->columns;j )
{
cout<<setw(3)<<mat->data[i][j];
}
cout<<endl;
}
}
int main()
{
Matrix mat;
cout<<"Enter the rows of matrix: n";
cin>>mat.rows;
cout<<"nEnter the columns of matrix: n";
cin>>mat.columns;
createMatrix(amp;mat);
inputMatrix(amp;mat);
cout<<endl;
Matrix trans = transpose(amp;mat);
display(amp;trans);
return 0;
}
Комментарии:
1. В вашей функции
transpose
, для чего вы выделяете местоtranspose.data
?
Ответ №1:
Проблема заключалась в транспонировании функций, мне нужно было выделить память для Matrix transpose
Код приведен ниже:
Matrix transpose(Matrix* mat)
{
Matrix transpose;
transpose.rows = mat->rows;
transpose.columns = mat->columns;
createMatrix(amp;transpose);
for (int i = 0; i < mat->columns;i )
{
for(int j = 0;j<mat->rows;j )
{
transpose.data[i][j] = mat->data[j][i];
}
}
return transpose;
}