
Определить класс Мatrix для хранения произвольной матрицы. Предусмотреть поля для хранения
количества строк и столоцов, конструкторы по умолчанию и с параметрами. Для инициализации и обращения к элементам матрицы использовать индексатор. Рeализовать метод вывода матрицы в консоль и перегруженную операцию умножения матриц. Привести пример создания двух объектов-матриц, запросив размер и значения элементов у пользователя. Вывести на консоль результат их произведения. Предусмотреть корректность вводимых данных.

Ответы на вопрос

первый скрин - main.cpp, все последующие - Matrix.h.
1) Работает со всеми стандартными типами C++.
2) Получать результат умножения нужно в указатель класса Matrix такого же типа, что и множители.
3) Перемножать можно только объекты класса Matrix одного типа.
4) У класса Matrix есть метод Fill(), добавлен для удобства тестирования, он заполняет матрицу указанным значением (обязательно одного типа с заполняемым Matrix`ом (тоесть если у тебя матрица типа char, то вызов метода должен быть примерно таким: matrixname.Fill('A') )).
5) При перемножении Matrix`ы накладываются друг на друга, а пересекающиеся элементы перемножаются.








Для создания класса Matrix
с указанными функциональностями вам потребуется использовать язык программирования C#. Вот пример реализации класса Matrix
:
csharpusing System;
class Matrix
{
private int rows;
private int columns;
private int[,] data;
public Matrix(int rows, int columns)
{
this.rows = rows;
this.columns = columns;
data = new int[rows, columns];
}
public int Rows
{
get { return rows; }
}
public int Columns
{
get { return columns; }
}
public int this[int row, int column]
{
get { return data[row, column]; }
set { data[row, column] = value; }
}
public void Print()
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
Console.Write($"{data[i, j]} ");
}
Console.WriteLine();
}
}
public static Matrix operator *(Matrix matrix1, Matrix matrix2)
{
if (matrix1.columns != matrix2.rows)
{
throw new ArgumentException("The number of columns in the first matrix must be equal to the number of rows in the second matrix.");
}
Matrix result = new Matrix(matrix1.rows, matrix2.columns);
for (int i = 0; i < matrix1.rows; i++)
{
for (int j = 0; j < matrix2.columns; j++)
{
int sum = 0;
for (int k = 0; k < matrix1.columns; k++)
{
sum += matrix1[i, k] * matrix2[k, j];
}
result[i, j] = sum;
}
}
return result;
}
}
class Program
{
static void Main()
{
try
{
Console.Write("Введите количество строк первой матрицы: ");
int rows1 = int.Parse(Console.ReadLine());
Console.Write("Введите количество столбцов первой матрицы: ");
int columns1 = int.Parse(Console.ReadLine());
Matrix matrix1 = new Matrix(rows1, columns1);
Console.WriteLine("Введите элементы первой матрицы:");
for (int i = 0; i < rows1; i++)
{
for (int j = 0; j < columns1; j++)
{
Console.Write($"Элемент [{i}, {j}]: ");
matrix1[i, j] = int.Parse(Console.ReadLine());
}
}
Console.Write("Введите количество строк второй матрицы: ");
int rows2 = int.Parse(Console.ReadLine());
Console.Write("Введите количество столбцов второй матрицы: ");
int columns2 = int.Parse(Console.ReadLine());
Matrix matrix2 = new Matrix(rows2, columns2);
Console.WriteLine("Введите элементы второй матрицы:");
for (int i = 0; i < rows2; i++)
{
for (int j = 0; j < columns2; j++)
{
Console.Write($"Элемент [{i}, {j}]: ");
matrix2[i, j] = int.Parse(Console.ReadLine());
}
}
Console.WriteLine("Первая матрица:");
matrix1.Print();
Console.WriteLine("Вторая матрица:");
matrix2.Print();
Matrix result = matrix1 * matrix2;
Console.WriteLine("Результат умножения матриц:");
result.Print();
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
}
В приведенном примере мы создали класс Matrix
с необходимыми полями и методами, включая перегруженную операцию умножения матриц. В методе Main
, мы запрашиваем у пользователя размеры и элементы двух матриц, а затем выполняем умножение матриц и выводим результат на консоль. Обратите внимание, что код предусматривает обработку ошибок при некорректном вводе данных пользователем.


Похожие вопросы

Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili