У меня проблемы с тем, что моя функция транспонирования хороша для транспонирования квадратной матрицы; но он делает ужасную работу, когда это прямоугольник. Он просто не создает новый столбец для определенных элементов после транспонирования, и я не уверен, как решить эту проблему. Я пытался изменить l oop безрезультатно. Я думал об изменении функции дисплея, но чувствовал, что это может вызвать некоторые проблемы.
#include <iostream>
#include <vector>
class Matrix
{
public:
Matrix();
void transpose(int &numRows, int &numCols);
void fill2dArray(int &numRows, int &numCols);
void display2dArray(int &numRows, int &numCols) const;
private:
static const int ROW_MAX = 10, COL_MAX = 10;
double data[ROW_MAX][COL_MAX];
};
Matrix::Matrix()
{
data[10][10] = {};
}
void Matrix::transpose(int &numRows, int &numCols)
{
for (int r=0; r<numRows; ++r)
{
for (int c=0; c<numCols; ++c)
{
if (r < c)
{
std::swap(data[r][c],data[c][r]);
}
}
}
}
void Matrix::display2dArray(int &numRows, int &numCols) const
{
for (int r=0; r<numRows; ++r)
{
for (int c=0; c<numCols; ++c)
{
std::cout << " " << data[r][c] << " ";
}
std::cout << std::endl;
}
}
void Matrix::fill2dArray(int &numRows, int &numCols)
{
for (int r=0; r<numRows; ++r)
{
std::cout << "Enter " << numCols << " values for row #" << r << std::endl;
for (int c = 0; c < numCols; ++c)
{
std::cin >> data[r][c];
}
std::cout << std::endl;
}
}
int main()
{
std::cout << "You may enter up to 10 rows and 10 columns of numbers." << std::endl;
std::cout << "\n How many rows? ";
int numRows;
std::cin >> numRows;
std::cout << "How many columns? ";
int numCols;
std::cin >> numCols;
std::cout << std::endl;
Matrix matrix;
matrix.fill2dArray(numRows,numCols);
std::cout << "Contents of the " << numRows << " x " << numCols << " array:" << std::endl;
matrix.display2dArray(numRows,numCols);
std::cout << "\nAfter transpose" << std::endl;
matrix.transpose(numRows, numCols);
matrix.display2dArray(numRows, numCols);
}