Компьютеры
и программирование

Произведение двух матриц: программная реализация вычислений

Задача: разработать на 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;

}

Поделиться с друзьями