Задача: разработать на C++ программу, выполняющую умножение двух матриц. Из курса высшей математики известно, что произведение двух матриц имеет смысл только тогда, когда число столбцов матрицы А совпадает с числом строк матрицы В.
Поэтому в приведённом ниже фрагменте кода задаём ввод пользователем одной и той же переменной — n числа столбцов матрицы А и числа строк матрицы В. Затем вводятся число строк матрицы А и число столбцов матрицы В.
Код C++
cout "Enter cols count in matrix A and rows count in matrix B: " ;
cout "Enter rows count in matrix A: " ;
cout "Enter cols count in matrix B: " ;
Далее выделяем память под два динамических двумерных массива — соответственно матрицы А и В. Организуем ввод пользователем элементов этих двух матриц и вывод на экран заполненных матриц.
Код C++
int **aArr = new int *[m];
for (i = 0; i new int [n];
for (i = 0; i for (j = 0; j "Enter arrays elements of matrix A " ;
cout "Matrix A: " for (i = 0; i for (j = 0; j int **bArr = new int *[n];
for (i = 0; i new int [q];
for (i=0; i for (j = 0; j "Enter arrays elements of matrix B " ;
cout "Matrix B: " for (i = 0; i for (j = 0; j Код C++
int **cArr = new int *[i];
for (i = 0; i new int [j];
Затем — цикл вычисления произведения двух матриц по формуле . В цикле происходит суммирование всех произведений элементов, предусмотренной формулой.
Код C++
int **cArr = new int *[i];
for (i = 0; i new int [j];
for (i = 0; i for (j = 0; j for ( int k = 0; k Код C++
cout "Matrix C: " for (i = 0; i for (j = 0; j Код C++
using namespace std;
cout "Enter cols count in matrix A and rows count in matrix B: " ;
cout "Enter rows count in matrix A: " ;
cout "Enter cols count in matrix B: " ;
int **aArr = new int *[m];
for (i = 0; i new int [n];
for (i = 0; i for (j = 0; j "Enter arrays elements of matrix A " ;
cout "Matrix A: " for (i = 0; i for (j = 0; j int **bArr = new int *[n];
for (i = 0; i new int [q];
for (i=0; i for (j = 0; j "Enter arrays elements of matrix B " ;
cout "Matrix B: " for (i = 0; i for (j = 0; j int **cArr = new int *[i];
for (i = 0; i new int [j];
for (i = 0; i for (j = 0; j for ( int k = 0; k "Matrix C: " for (i = 0; i for (j = 0; j return 0;
Содержание
Все по программированию на С++!
Разработать программу на С++ для работы с матрицами.
Программа должна выполнять следующие операции:
— умножение на матрицу;
— умножение на константу;
— сложение двух матриц.
Скриншот кода программы:
Код программы на языке программирования С++
Матрица представляет из себя двумерный массив. Для начала создадим класс матрицы
Пока этот класс явлеятся просто оберткой для двумерного массива.
Начинаем добавлять вспомогательные методы. Сначала добавим метод, позволяющий выполнить какое-либо действие над всеми элементами матрицы.
Функции высших порядков в C#
Функции высших порядков — это функции, которые как переменные передаются в аргументы других функций. В методе выше аргумент func имеет тип Action . Это значит, что аргументом должна быть функция, принимающая 2 аргумента типа int и возвращающая void. Добавим в конструктор такой вызов:
Этот вызов присвоит 0 во все элементы матрицы. Стрелочная функция (i, j) => this.data[i, j] = 0 — это и есть наша функция высшего порядка.
Использовать стрелочные функции не обязательно, можно было передавать и метод:
Индексаторы в C#
Индексаторы — это свойства, позволяющие обращаться к объекту как к массиву. Добавим такое свойство, позволяющее обращаться к элементам матрицы по индексу
Теперь к экземпляру класса Matrix можно обращаться как к двумерному массиву.
Умножение матриц на C#
Сначала реализуем умножение матрицы на число. В результате должна получиться матрица того же размера, элементами будут элементы исходной матрицы умноженные на это число.
Перегрузка операторов в C#
Для классов в C# можно определить операторы. Определим оператор умножения, позволяющиу умножить на число.
Теперь умножить матрицу на число можно с помощью оператора умножения
Матрицу можно так же умножить на другую матрицу. Результатом будет новая матрица, элементами которой будут скалярные произведения столбцов и строк исходных матриц. Формулу можно посмотреть на википедии
Перегрузка методов в C#
C# позволяет определить несколько методов с одинаковым названием. Воспользуемся этип и сделаем еще одну реализацию оператора умножения, позволяющую умножать матрицу на другую матрицу