2 семестр / Лабораторная работа №6
.docxФГБОУ ВО
«Уфимский государственный авиационный технический университет»
Кафедра ТК
ОТЧЕТ
по лабораторной работе № 6
по дисциплине «Программирование»
Вариант № 4
Выполнил: студент гр. ИВТ-127Б
Проверил: доцент каф. ТК
Блинова Д. В.
Уфа 2022
Тема работы: Функции. Многомерные массивы в качестве параметров функций
(динамическая реализация).
Цель работы: Целью работы является получение студентами навыков работы с динамическими массивами, и реализацией функций для вычислений матрицы по заданному условию на языке С++.
Задачи работы:
составить схему алгоритма работы программы;
написание программы на языке С++ с использованием структур;
тестирование работоспособности программы для различных исходных данных.
Вариант № 4.
Задание:
Решение задачи: Необходимо создать 4 динамических массива и реализовать следующее:
Найти проведение матрицы A на B.
Результат умножить на матрицу C.
Результат произведений возвести в степень n.
Результат записать в матрицу D и вывести на экран.
Тестовый пример:
A= B= C= n=2
A * B= * =
A * B* C= * =
(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);
}
Вывод: В ходе выполнения работы были получены навыки работы с динамическими массивами, и реализацией функций для вычислений матрицы по заданному условию на языке С++.