Произведение двух матриц: программная реализация вычислений
Задача: разработать на C++ программу, выполняющую умножение двух матриц. Из курса высшей математики известно, что произведение двух матриц имеет смысл только тогда, когда число столбцов матрицы А совпадает с числом строк матрицы В.
Поэтому в приведённом ниже фрагменте кода задаём ввод пользователем одной и той же переменной - n числа столбцов матрицы А и числа строк матрицы В. Затем вводятся число строк матрицы А и число столбцов матрицы В.
Код C++
int n, m, q, i, j;
cout << "Enter cols count in matrix A and rows count in matrix B: ";
cin >> n;
cout << "Enter rows count in matrix A: ";
cin >> m;
cout << "Enter cols count in matrix B: ";
cin >> q;
Далее выделяем память под два динамических двумерных массива - соответственно матрицы А и В. Организуем ввод пользователем элементов этих двух матриц и вывод на экран заполненных матриц.
Код C++
int **aArr = new int *[m];
for (i = 0; i < m; i++)
aArr[i] = new int [n];
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cout << "Enter arrays elements of matrix A ";
cin >> aArr[i][j];
}
}
cout << "Matrix A: " << endl;
for(i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
cout << setw(5) << aArr[i][j];
cout << endl;
}
int **bArr = new int *[n];
for (i = 0; i < n; i++)
bArr[i] = new int [q];
for (i=0; i { for (j = 0; j < q; j++) { cout << "Enter arrays elements of matrix B "; cin >> bArr[i][j]; } } cout << "Matrix B: " << endl; for(i = 0; i < n; i++) { for (j = 0; j < q; j++) cout << setw(5) << bArr[i][j]; cout << endl; }
Далее аналогично выделяем память под динамический двумерный массив C, который и является произведением двух матриц. В ней число строк равно числу строк матрицы А, а число столбцов равно числу столбцов матрицы В.
Код C++
int **cArr = new int *[i];
for (i = 0; i < m; i++)
cArr[i] = new int [j];
Затем - цикл вычисления произведения двух матриц по формуле
. В цикле происходит
суммирование всех произведений элементов, предусмотренной формулой.
Код C++
int **cArr = new int *[i];
for (i = 0; i < m; i++)
cArr[i] = new int [j];
for(i = 0; i < m; i++)
for(j = 0; j < q; j++)
{
cArr[i][j] = 0;
for(int k = 0; k <= q + 1; k++)
cArr[i][j] += (aArr[i][k] * bArr[k][j]);
}
Организуем вывод произведения двух матриц A и B - матрицы C.
Код C++
cout << "Matrix C: " << endl;
for(i = 0; i < m; i++)
{
for (j = 0; j < q; j++)
cout << setw(5) << cArr[i][j];
cout << endl;
}
И, наконец, полный листинг программы на C++, вычисляющей произведение двух матриц.
Проверить работу программы можно, воспользовавшись её веб-версией Калькулятор произведения матриц онлайн.
Код C++
#include<iostream>
#include<iomanip>
using namespace std;
int main ()
{
int n, m, q, i, j;
cout << "Enter cols count in matrix A and rows count in matrix B: ";
cin >> n;
cout << "Enter rows count in matrix A: ";
cin >> m;
cout << "Enter cols count in matrix B: ";
cin >> q;
int **aArr = new int *[m];
for (i = 0; i < m; i++)
aArr[i] = new int [n];
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cout << "Enter arrays elements of matrix A ";
cin >> aArr[i][j];
}
}
cout << "Matrix A: " << endl;
for(i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
cout << setw(5) << aArr[i][j];
cout << endl;
}
int **bArr = new int *[n];
for (i = 0; i < n; i++)
bArr[i] = new int [q];
for (i=0; i { for (j = 0; j < q; j++) { cout << "Enter arrays elements of matrix B "; cin >> bArr[i][j]; } } cout << "Matrix B: " << endl; for(i = 0; i < n; i++) { for (j = 0; j < q; j++) cout << setw(5) << bArr[i][j]; cout << endl; } int **cArr = new int *[i]; for (i = 0; i < m; i++) cArr[i] = new int [j]; for(i = 0; i < m; i++) for(j = 0; j < q; j++) { cArr[i][j] = 0; for(int k = 0; k <= q + 1; k++) cArr[i][j] += (aArr[i][k] * bArr[k][j]); } cout << "Matrix C: " << endl; for(i = 0; i < m; i++) { for (j = 0; j < q; j++) cout << setw(5) << cArr[i][j]; cout << endl; } return 0; }
Поделиться с друзьями