Как исправить функцию транспонирования, которая не может правильно выполнить матрицу 3x2 и 4x3? - PullRequest
0 голосов
/ 12 апреля 2020

У меня проблемы с тем, что моя функция транспонирования хороша для транспонирования квадратной матрицы; но он делает ужасную работу, когда это прямоугольник. Он просто не создает новый столбец для определенных элементов после транспонирования, и я не уверен, как решить эту проблему. Я пытался изменить 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);
}
...