ЛБ3
.docxФГБОУ ВО
Уфимский государственный авиационный технический университет
Кафедра ТК
ОТЧЕТ
по лабораторной работе № 3
по дисциплине «Программирование»
Вариант № 5
Выполнил: студент гр. ИВТ-114
Балыбердин Н.А.
Проверил: доцент каф. ТК
Федорова Н.И.
Уфа 2017
Тема работы: Функции. Многомерные массивы в качестве параметров функций.
Цель работы: Навык составления и отладки простейших программ на языке С++
Задачи работы:
написание программы на языке С++ с использованием различных типов функций.
тестирование работоспособности программы для различных исходных данных.
Вариант № 5
Задание: Выполнить следующее задание: Заданы квадратные матрицы А и В и С.
Выполнение задания: D=(A+B+C)m
Решение задачи:
Входные данные: N, A, B, C;
Выходные данные: D;
Схема алгоритма работы программы:
Текст программы:
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
void inputMatr(double **x, int n);
void outputMatr(double **x, int n);
void addMatr(double **x, double **y, int n, double **z);
void powMatr(double **x, int n, int m, double **z);
void main()
{
setlocale(LC_ALL, "Russian");
double **a, **b, **c, **d, **ab1, **ab2, **e;
int i, n, m;
cout << "\tФункции. Многомерные массивы в качестве параметров функций.\n\n";
cout << "Введите размер матрицы n="; cin >>n;
cout << "Введите степень m="; cin >> m;
a=new double *[n];
b=new double *[n];
c=new double *[n];
d=new double *[n];
ab1=new double *[n];
ab2=new double *[n];
e=new double *[n];
for (i=0; i<n; i++)
{
a[i]=new double[n];
b[i]=new double[n];
c[i]=new double[n];
d[i]=new double[n];
ab1[i]=new double [n];
ab2[i]=new double [n];
e[i]=new double[n];
}
cout << "\nВвод матриц A, B, C" << endl;
cout << "Введите матрицу A:\n";
inputMatr(a, n);
cout << "\nВведите матрицу B: \n";
inputMatr(b, n);
cout << "\nВведите матрицу C: \n";
inputMatr(c, n);
cout << endl;
cout << "Вывод результата: " << endl << "Матрица D:" << "\n";
addMatr(a, b, n, ab1);
addMatr(ab1, c, n, ab2);
powMatr(ab2, n, m, e);
outputMatr(e, n);
getch();
for (i = 0; i < n; i++)
{
delete[]a[i];
delete[]b[i];
delete[]c[i];
delete[]d[i];
delete[]a;
delete[]b;
delete[]c;
delete[]d;
}
}
void inputMatr(double **x, int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
cout << "(" << i+1 << "," << j+1 << ")=";
cin >> x[i][j];
}
}
void outputMatr(double **x, int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
cout << "(" << i+1 << "," << j+1 << ")=" << x[i][j];
cout << endl;
}
}
void addMatr(double **x, double **y, int n, double **z)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
z[i][j]=x[i][j]+y[i][j];
}
void powMatr(double **x, int n, int m, double **z)
{
int **b, **c, i, j, k, l;
if (m == 0)
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (i == j) x[i][j] = 1;
else x[i][j] = 0;
else
{
b = new int*[n];
c = new int*[n];
for (i = 0; i < n; i++)
{
b[i] = new int[n];
c[i] = new int[n];
}
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
b[i][j] = x[i][j];
c[i][j] = 0;
}
for (l = 0; l < m - 1; l++)
{
for (i = 0; i < n; i++)
for (k = 0; k < n; k++)
for (j = 0; j < n; j++)
c[i][j] += x[i][k] * b[k][j];
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
b[i][j] = c[i][j];
c[i][j] = 0;
}
}
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
z[i][j] = b[i][j];
}
}
Тестовый пример:
Вывод: В ходе выполнения работы были получены навыки работы с функциями и динамическими массивами на языке С++.