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

2 семестр / Лабораторная работа №6

.docx
Скачиваний:
1
Добавлен:
16.05.2023
Размер:
51.98 Кб
Скачать

ФГБОУ ВО

«Уфимский государственный авиационный технический университет»

Кафедра ТК

ОТЧЕТ

по лабораторной работе № 6

по дисциплине «Программирование»

Вариант № 4

Выполнил: студент гр. ИВТ-127Б

Проверил: доцент каф. ТК

Блинова Д. В.

Уфа 2022

Тема работы: Функции. Многомерные массивы в качестве параметров функций

(динамическая реализация).

Цель работы: Целью работы является получение студентами навыков работы с динамическими массивами, и реализацией функций для вычислений матрицы по заданному условию на языке С++.

Задачи работы:

  • составить схему алгоритма работы программы;

  • написание программы на языке С++ с использованием структур;

  • тестирование работоспособности программы для различных исходных данных.

Вариант № 4.

Задание:

Решение задачи: Необходимо создать 4 динамических массива и реализовать следующее:

  1. Найти проведение матрицы A на B.

  2. Результат умножить на матрицу C.

  3. Результат произведений возвести в степень n.

  4. Результат записать в матрицу D и вывести на экран.

Тестовый пример:

A= B= C= n=2

  1. A * B= * =

  1. A * B* C= * =

  1. (A * B* C ) n =( )2 =

Текст программы:

#include <iostream>

#include <string>

#include <vector>

#include <fstream>

#include <iomanip>

#include <Windows.h>

#include <conio.h>

using namespace std;

void output(int** Matrix, int length) { //ввод

cout << string(8 * length, '-');

cout << "\n";

for (int i = 0; i < length; i++) {

for (int j = 0; j < length; j++) {

cout << "| " << left << setw(3) << Matrix[i][j];

}

cout << "|\n";

cout << string(8 * length, '-');

cout << "\n";

}

}

int** input(int** Matrix, int length, string sim) {//вывод

cout << "\n";

for (int i = 0; i < length; i++) {

Matrix[i] = new int[length];

for (int j = 0; j < length; j++) {

cout << sim << "(" << i + 1 << ")(" << j + 1 << ") = ";

cin >> Matrix[i][j];

}

}

return Matrix;

}

int** multiplication(int** Matrix1, int** Matrix2, int length) {//произведение

int** temp_matr = new int* [length];

for (int i = 0; i < length; i++)

{

temp_matr[i] = new int[length];

for (int j = 0; j < length; j++)

{

temp_matr[i][j] = 0;

for (int k = 0; k < length; k++) {

temp_matr[i][j] += Matrix1[i][k] * Matrix2[k][j];

}

}

}

return temp_matr;

}

int** amount(int** Matrix1, int** Matrix2, int length) {//сложение

int** temp_matr = new int* [length];

for (int i = 0; i < length; i++)

{

temp_matr[i] = new int[length];

for (int j = 0; j < length; j++)

{

temp_matr[i][j] = Matrix1[i][j] + Matrix2[i][j];

}

}

return temp_matr;

}

int** copy(int** Matrix, int length) {

int** temp_matr = new int* [length];

for (int i = 0; i < length; i++)

{

temp_matr[i] = new int[length];

for (int j = 0; j < length; j++)

{

temp_matr[i][j] = Matrix[i][j];

}

}

return temp_matr;

}

int** single(int length) {//единичная

int** temp_matr = new int* [length];

for (int i = 0; i < length; i++)

{

temp_matr[i] = new int[length];

for (int j = 0; j < length; j++)

{

if (i != j) {

temp_matr[i][j] = 0;

}

else {

temp_matr[i][j] = 1;

}

}

}

return temp_matr;

}

int** degree(int** Matrix, int deg, int length) {// степень

int** temp_matr = copy(Matrix, length);

if (deg == 1) {

return temp_matr;

}

else if (deg == 0) {

return single(length);

}

deg -= 1;

for (int i = 0; i < deg; i++) {

temp_matr = copy(multiplication(temp_matr, Matrix, length), length);

}

return temp_matr;

}

int main()

{

setlocale(LC_ALL, "rus");

setlocale(LC_CTYPE, "Russian");

cout << "Программа по вычислению матрицы D в соответсвии с заданной формулой.\n\n";

int length, n;

cout << "Введите n:\nn = ";

cin >> n;

cout << "Введите размерность матриц: ";

cin >> length;

int** A = new int* [length];

int** B = new int* [length];

int** C = new int* [length];

int** D = new int* [length];

for (int i = 0; i < length; i++)

{

D[i] = new int[length];

for (int j = 0; j < length; j++)

{

D[i][j] = 0;

}

}

cout << "\nВведите элементы матрицы A по отдельности:";

A = input(A, length, "a");

cout << "\nВведите элементы матрицы B по отдельности:";

B = input(B, length, "b");

cout << "\nВведите элементы матрицы С по отдельности:";

C = input(C, length, "С");

cout << "\nМатрица A:\n";

output(A, length);

cout << "\nМатрица B:\n";

output(B, length);

cout << "\nМатрица С:\n";

output(C, length);

for (int i = 0; i < n + 1; i++) {

//D = copy(amount(D, multiplication(degree(A, n - i, length), degree(B, i, length), length), length), length);

D = degree(multiplication(multiplication(A,B,length),C,length), n, length);

}

cout << "\nМатрица D, полученная в результате применения формулы:\n";

output(D, length);

}

Вывод: В ходе выполнения работы были получены навыки работы с динамическими массивами, и реализацией функций для вычислений матрицы по заданному условию на языке С++.