Произведение матриц в c+. Работает только при введении одинаковых значений размеров матрицы

#include \<iostream\>

using namespace std;

void multiply(double A\[\]\[100\], double B\[\]\[100\], double C\[\]\[100\], int m, int n, int o) {
if (n != o) {
cout \<\< "Невозможно умножить матрицы: количество столбцов первой матрицы не совпадает с количеством строк второй матрицы." \<\< endl;
return;
}

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            C[i][j] = 0;
            for (int k = 0; k < o; k++) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

}

int main() {
setlocale(LC_ALL, "ru");
double A\[100\]\[100\], B\[100\]\[100\], C\[100\]\[100\];
int m, n, o;

    cout << "Введите количество строк первой матрицы: ";
    cin >> m;
    
    cout << "Введите количество столбцов первой матрицы (и строк второй матрицы): ";
    cin >> n;
    
    cout << "Введите количество столбцов второй матрицы: ";
    cin >> o;
    
    // Заполнение матрицы
    srand(time(NULL));
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            A[i][j] = rand() % 11 - 5;
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < o; ++j) {
            B[i][j] = rand() % 11 - 5;
        }
    }
    
    multiply(A, B, C, m, n, o);
    
    // Вывод матрицы A
    cout << "Matrix A:" << endl;
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            cout << A[i][j] << " ";
        }
        cout << endl;
    }
    
    // Вывод матрицы B
    cout << "\nMatrix B:" << endl;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < o; ++j) {
            cout << B[i][j] << " ";
        }
        cout << endl;
    }
    // Вывод результата С
    cout << "\nMatrix C:" << endl;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < o; j++) {
            cout << C[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;

}

например

m=4, n=2, o=4 - не работает

m=4, n=4, o=4 - работает

Не могу понять почему не работает, думаю что проблема в функции которая выполняет произведение двух матриц.


Ответы (1 шт):

Автор решения: sibedir

У вас

 cout << "Введите количество столбцов первой матрицы (и строк второй матрицы): ";
 cin >> n;

Т.е. условие "количество столбцов первой матрицы совпадает с количеством строк второй матрицы" выполнено по определению. А условие:

if (n != o)

просто заставляет вторую матрицу быть только квадратной.

→ Ссылка