Подскажите, какая ошибка присутствует в моем коде? С++
Я написал код для вычисления произведения двух двумерных неквадратных матриц. Размер матрицы задается пользователем, значения элементов матриц выбираются рандомно. Если матрицы не равны по размерности, то произведение не высчитывается.
В результате, после произведения двух матриц arr и arr2, все элементы матрицы result равны между собой. Не могу понять, почему так выходит
Код C++:
#include <iostream>
#include <cmath>
#include <algorithm>
#include <ctime>
using namespace std;
void Array(int** arr, int** arr2, int** result, int n, int m, int n1, int m1)
{
for (int i = 0; i < n; i++)
{
*(arr + i) = new int[m];
}
for (int i = 0; i < n1; i++)
{
*(arr2 + i) = new int[m1];
}
for (int i = 0; i < n; i++)
{
*(result + i) = new int[m1];
}
}
void fillArray(int** arr, int** arr2, int n, int m, int n1, int m1)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
arr[i][j] = rand() % 50 - 25;
}
}
for (int i = 0; i < n1; i++)
{
for (int j = 0; j < m1; j++)
{
arr2[i][j] = rand() % 50 - 25;
}
}
}
void showArray(int** arr, int** arr2, int n, int m, int n1, int m1)
{
cout << "Первый массив: " << endl;
cout << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "Второй массив: " << endl;
cout << endl;
for (int i = 0; i < n1; i++)
{
for (int j = 0; j < m1; j++)
{
cout << arr2[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
bool Check(int** arr, int** arr2, int n, int m, int n1, int m1)
{
if (n != n1 || m != m1)
{
cout << "Произведение матриц не может быть вычислено, так как кол-во строк и столбцов массивов не совпадают" << endl;
return true;
}
else
{
return false;
}
}
void function(int** arr, int** arr2, int** result, int n, int m, int n1, int m1)
{
for (int r1 = 0; r1 < n; r1++)
{
for (int r2 = 0; r2 < m1; r2++)
{
result[r1][r2] = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
for (int i1 = 0; i1 < n1; i1++)
{
for (int j1 = 0; j1 < m1; j1++)
{
result[r1][r2] = arr[i][j] * arr2[i1][j1];
}
}
}
}
}
}
}
void Result(int** result, int n, int m1)
{
cout << "Результат уменожения массивов: " << endl;
cout << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m1; j++)
{
cout << result[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(0));
int n = 0;
int m = 0;
int n1 = 0;
int m1 = 0;
cout << "Введите кол-во строк первого массива " << endl;
cin >> n;
cout << "Введите кол-во столбцов первого массива " << endl;
cin >> m;
cout << "Введите кол-во строк второго массива " << endl;
cin >> n1;
cout << "Введите кол-во столбцов второго массива " << endl;
cin >> m1;
int** arr = new int*[n];
int** arr2 = new int* [n1];
int** result = new int* [n];
cout << endl;
cout << endl;
Array(arr, arr2, result, n, m, n1, m1);
fillArray(arr, arr2, n, m, n1, m1);
showArray(arr, arr2, n, m, n1, m1);
if (Check(arr, arr2, n, m, n1, m1))
{
return 0;
}
function(arr, arr2, result, n, m, n1, m1);
Result(result, n, m1);
}
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
Потому что значения элементов матрицы-результата вычисляются одинаково и совершенно не зависят от того, где эти элементы находятся.
result[r1][r2] = arr[i][j] * arr2[i1][j1];
