Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Магистратура Языки программирования С,C++ / Лабораторная работа №4

.docx
Скачиваний:
2
Добавлен:
22.05.2023
Размер:
432.38 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

(МТУСИ)

Кафедра: Математической кибернетики и информационных технологий

Отчёт по лабораторной работе №4

Дисциплина: «Языки программирования»

по теме:

«Двумерные массивы и матрицы»

Вариант №19

Выполнил: студент группы МБСТ0000

Иванов И.И.

_________________________

Проверил:

Ассистент, Соловьев Александр Сергеевич

_________________________

Москва, 2024

  1. Цель работы

Выполнить индивидуальное задание по теме «двумерные массивы и матрицы». Используя двумерным и многомерным массивам, представлению их в линейной памяти и способам их обработки.

  1. Индивидуальное задание

Написать программу, которая вычисляет определитель квадратной матрицы вещественных чисел 3x3. Значения матрицы вводятся пользователем.

  1. Блок-схемы алгоритмов

Для решения поставленной задачи необходимо построить блок-схему алгоритма работы, на которой будет отражен общий принцип функционирования программы. Программа разделена на функции первые две функции, вывод элементов матрицы представлена на рисунке 1.

Рисунок 1 – Схема алгоритма функции PrintMatr

Следующая функция нужна разбиение матрицы на меньшие матрицы представлена на рисунке 2.

Рисунок 2 – Схема алгоритма функции GetMatr

Следующая функция нужна для поиска определителя в матрице представлена на рисунке 3.

Рисунок 3 – Схема алгоритма функции Determinant

Основная функция main вызывающие другие функции, для решения индивидуального задания представлена на рисунке 4.

Рисунок 4 – Схема алгоритма функции main

  1. Идентификаторы (описание переменных)

Идентификаторы и переменные описаны в таблице №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.

Листинг №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;

}

  1. Результат работы

Пользователь вводит количество элементов массива значение переменной m, и значения каждого элемента Matrix[i][j], после ввода пользователя ему выдается информация о определителе матрицы d, данный функционал представлен на рисунке 5.

Рисунок 5 ­ — Результат работы программы (вывод определителя матрицы)

  1. Заключение

В ходе выполнения лабораторной работы было выполнено данное индивидуальное задание. Также в ходе лабораторной работы было изучены двумерным и многомерным массивам, представлению их в линейной памяти и способам их обработки.