Произведение матриц в 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)
просто заставляет вторую матрицу быть только квадратной.