Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
(МТУСИ)
Кафедра: Математической кибернетики и информационных технологий
Отчёт по лабораторной работе №4
Дисциплина: «Языки программирования»
по теме:
«Двумерные массивы и матрицы»
Вариант №19
Выполнил: студент группы МБСТ0000
Иванов И.И.
_________________________
Проверил:
Ассистент, Соловьев Александр Сергеевич
_________________________
Москва, 2024
Цель работы
Выполнить индивидуальное задание по теме «двумерные массивы и матрицы». Используя двумерным и многомерным массивам, представлению их в линейной памяти и способам их обработки.
Индивидуальное задание
Написать программу, которая вычисляет определитель квадратной матрицы вещественных чисел 3x3. Значения матрицы вводятся пользователем.
Блок-схемы алгоритмов
Для решения поставленной задачи необходимо построить блок-схему алгоритма работы, на которой будет отражен общий принцип функционирования программы. Программа разделена на функции первые две функции, вывод элементов матрицы представлена на рисунке 1.
Рисунок 1 – Схема алгоритма функции PrintMatr
Следующая функция нужна разбиение матрицы на меньшие матрицы представлена на рисунке 2.
Рисунок 2 – Схема алгоритма функции GetMatr
Следующая функция нужна для поиска определителя в матрице представлена на рисунке 3.
Рисунок 3 – Схема алгоритма функции Determinant
Основная функция main вызывающие другие функции, для решения индивидуального задания представлена на рисунке 4.
Рисунок 4 – Схема алгоритма функции main
Идентификаторы (описание переменных)
Идентификаторы и переменные описаны в таблице №1
Таблица №1 — Идентификаторы (описание переменных)
№ |
Имя |
Область видимости |
Тип |
Описание и назначение |
1. |
m |
main() |
int |
количество элементов в матрице |
2. |
Matrix |
main() |
new double*[] |
исходная квадратная матрица вещественных чисел |
3. |
d |
main() |
double |
определитель матрицы |
4. |
k |
Determinant() |
int |
знак для вычисления определителя |
5. |
n |
Determinant() |
int |
Уменьшение размера матрицы для рекурсии |
6. |
d |
Determinant() |
double |
определитель матрицы |
7. |
p |
Determinant() |
new double*[] |
матрица для поиска определителя |
Исходный код программы
Следующий шаг - написание кода, позволяющий решить поставленную задачу. Исходный код программы, был представлен в листинге №1.
Листинг №1 - Исходный код программы
#include <iostream>
using namespace std;
// Функция вывода матрицы
void PrintMatr(double ** matrix, int m) {
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
cout << matrix[i][j] << " ";
cout << endl;
}
}
// Получение матрицы без i-й строки и j-го столбца
void GetMatr(double** matrix, double** p, int i, int j, int m) {
int dj;
int di = 0;
for (int ki = 0; ki < m - 1; ki++)
{ // проверка индекса строки
if (ki == i) di = 1;
dj = 0;
for (int kj = 0; kj < m - 1; kj++)
{ // проверка индекса столбца
if (kj == j) dj = 1;
p[ki][kj] = matrix[ki + di][kj + dj];
}
}
}
/// Рекурсивное вычисление определителя
double Determinant(double** matrix, int m) {
int k, n;
double d;
double** p;
p = new double* [m];
for (int i = 0; i < m; i++)
p[i] = new double[m];
d = 0;
k = 1; //(-1) в степени i
n = m - 1;
if (m < 1) cout << "Определитель вычислить невозможно!";
if (m == 1)
{
d = matrix[0][0];
return(d);
}
if (m == 2)
{
d = matrix[0][0] * matrix[1][1] - (matrix[1][0] * matrix[0][1]);
return(d);
}
if (m > 2) {
for (int i = 0; i < m; i++)
{
GetMatr(matrix, p, i, 0, m);
d = d + k * matrix[i][0] * Determinant(p, n);
k = -k;
}
}
return(d);
}
int main()
{
setlocale(LC_ALL, "Russian");
int m;
double d;
cout << "Введите размерность квадратной матрицы: ";
cin >> m;
double **Matrix = new double* [m];
for (int i = 0; i < m; i++)
{
Matrix[i] = new double[m];
for (int j = 0; j < m; j++)
{
cout << "Matrix[" << i << "][" << j << "]= ";
cin >> Matrix[i][j];
}
}
cout << endl;
cout << "Матрица: ";
cout << endl;
PrintMatr(Matrix, m);
cout << endl;
d = Determinant(Matrix, m);
cout << "Определитель матрицы равен " << d;
cout << endl;
cin.get();
return 0;
delete[] Matrix;
}
Результат работы
Пользователь вводит количество элементов массива значение переменной m, и значения каждого элемента Matrix[i][j], после ввода пользователя ему выдается информация о определителе матрицы d, данный функционал представлен на рисунке 5.
Рисунок 5 — Результат работы программы (вывод определителя матрицы)
Заключение
В ходе выполнения лабораторной работы было выполнено данное индивидуальное задание. Также в ходе лабораторной работы было изучены двумерным и многомерным массивам, представлению их в линейной памяти и способам их обработки.