Рефетека.ру / Информатика и програм-ие

Реферат: Лабораторная работа №12

Цель работы: Изучение правил описания и вызова подпрограмм: процедур и функций. Получение навыков и овладение приемами работы над подпрограммами.
Задание№ 17. Посчитать сумму элементов лежащих выше главной диагонали матрицы для матрицы Z=X2+Y2.

Программа на Turbo Pascal
{Программа: Kyrsaсh

}
{Цель: Найти сумму элементов выше главной диагонали }
{Переменные:

}
{ X,Y - вводимые массивы

}
{ N, M, A,B, Z - промежуточные массивы
}
{ t - Размер массива

}
{ i, j - переменные цикла

}
{Программист: Позднышев А.А. группа 316 }
{Проверил: Новичков В.С.

}
Program Lab_12; uses crt;
Const
Nmax=10; {Максимальный размер массива}
Type
Matrics=array[1..Nmax,1..Nmax] of integer;
Masiv=array[1..Nmax] of integer;
Var
X,Y,Z,A,B:matrics;
M,N:masiv; i,j,t:integer;
{Процедура ввода элементов массива}
{Параметры: t - размер массива, X - массив}
Procedure Vvod (t:integer; Var X:matrics);

Var i,j:integer;
Begin{Vvod}

For i:=1 to t do

For j:=1 to t do

Begin {Ввод элементов}

Write ('[',i,',',j,']=');

Read (X[i,j]);

End; {Ввод элементов}

For i:=1 to t do

Begin {Вывод элементов}

For j:=1 to t do

Write (X[i,j]:5);

Writeln

End {Вывод элементов}
End;{Vvod}
{Процедура вывода элеменов матриц}
{Параметры: X,Y - матрицы, t - размер}
Procedure Echo (t:integer; X:matrics); var i,j:byte; begin {Echo}

For i:=1 to t do

Begin

For j:=1 to t do

Write (X[i,j]:5);

Writeln

End end; {Echo}
{Процедура умножения матриц}
{Параметры: X,Y - начальные массивы, Z - массив результат,t - размер}
Procedure Umn (X,Y:matrics; t:integer; Var Z:matrics); var i,j,k,s:integer; begin {Umno} for i:=1 to t do for j:=1 to t do begin

S:=0; for k:=1 to t do s:=s+X[k,i]*Y[j,k];

Z[i,j]:=s; end; end; {Umno}
{Процедура сложения массивов}
{Параметры: X,Y - начальные массивы, Z - массив результат, t - размер}
Procedure Summa(X,Y:matrics; t:integer; Var Z:matrics); var i,j:integer; begin {Summa} for i:=1 to t do for j:=1 to t do

Z[i,j]:=X[i,j]+Y[i,j] end; {Summa}
{Процедура для нахождения суммы ниже главной диагонали}
{Параметры: X - начальные массивы, Y - массив результат, t - размер}
Procedure Under (X:matrics; t:integer; Var Y:masiv); var s:real;

Begin

S := 0;

For i := 2 to t do

For j := 1 to i-1 do

S:=S + X[i, j];

WriteLn('Сумма элементов, лежащих ниже главной диагонали=', S:5:1);

End;
{Процедура для нахождения суммы выше главной диагонали}
{Параметры: X - начальные массивы, Y - массив результат, t - размер}
Procedure Over (X:matrics; t:integer; Var Y:masiv); var s:real;

Begin

S := 0;

For i := 1 to t-1 do

For j := i+1 to t do

S := S + X[i, j];

WriteLn('Сумма элементов, лежащих выше главной диагонали=', S:5:1);

ReadLn

End; begin{lab_12} clrscr; writeln('Введите размеры матриц X,Y:');read(t); writeln('Введите ',t*t,' элемента для каждой матрицы:'); writeln('Введите матрицу X:');vvod(t,X); writeln('Введите матрицу Y:');vvod(t,Y); writeln('Результат возведения матрицы X в квадрат:');
Umn(X,X,t,A);
Echo(t,A); writeln('Результат возведения матрицы Y в квадрат:');
Umn(Y,Y,t,B);
Echo(t,B); writeln('Полученный массив после преобразований:'); summa(A,B,t,Z);
Echo(t,Z); under(Z,t,M); over(Z,t,N); end.{lab_12}

Блок-схема

Проведём детализацию в последовательности, определяемой нумерацией блоков на рис. 1.

1. Ввод размеров матриц X, Y. В данном блоке определён ввод размеров квадратных матриц X, Y (t – размер матриц).
|Имя подпрограммы: VVOD | |
|Входные параметры: | |
|количество элементов t*t | |
| I=1(1)t | |
| | J=1(1)t | |
| | |Ввод элементов | |
|Выходные параметры: X – | |
|матрица размером t*t. | |


Рис.11. Детализация блока 2 схемы алгоритма.


|Имя подпрограммы UMN |
|Входные параметры: X, Y – |
|матрицы размером t*t |
| |I=1(1)t |
| | |
| | J=1(1)t |
| | |S=0 |
| | | K=1(1)t |
| | | |S=S+X[i,k]*Y[k,j] |
| | |C[i,j]=S |
|Выходные параметры: матрица |
|Z размером t*t |
|Рис. 13. Детализация блока 4|
|схемы алгоритма |

2. Ввод элементов можно представить соответствующей подпрограммой, структурограмма которой приведена на рис.11. Всего должно быть выведено t*t значений для каждого массива.

3. Печать элементов матриц X, Y (а также отладочная печать). В данном блоке определёна печать значений элементов квадратных матриц X, Y размером t*t.

4. Умножение матриц удобно представить следующей подпрограммой, структурограмма которой приведена на рисунке 13.

5. Сложение матрицы X и матрицы Y представлено в виде подпрограммы на рис.15.

6. Подпрограммы формирования вектора из сумм элементов выше и ниже главной диагонали представлена структурограммой на рисунке 16 и 17.

|Имя подпрограммы OVER |
|Входные параметры: X – |
|матрица, размером t*t |
| |S=0 |
| |I=1(1)t–1 |
| | |J=i+1(1)t |
| | | S=S+X[i,j] |
| | |Выходные параметры: |
| | |Y – матрица размером t. |
|Рис. 16. Детализация блока 8|
|схемы алгоритма |
|Имя подпрограммы: SUMMA |
|Входные параметры: X, Y – |
|матрицы, размером t*t |
| I=1(1)t |
| | J=1(1)t |
| | |Z[i,j]=X[i,j]+Y[i,j]|
|Выходные параметры: Z – |
|матрица размером t*t. |
|Рис. 15. Детализация блока|
|7 схемы алгоритма |

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

|Имя подпрограммы UNDER |
|Входные параметры: X – |
|матрица, размером t*t |
| |S=0 |
| |I=2(1)t |
| | |J=1(1)i-1 |
| | | S=S+X[i,j] |
| | |Выходные параметры: |
| | |Y – матрица размером t. |
|Рис. 17. Детализация блока 8|
|схемы алгоритма |

|Имя подпрограммы: Echo |
|Входные параметры: X – |
|матрица, размером t*t |
| I=1(1)t |
| | J=1(1)t |
| | |Вывод элементов |
|Выходные параметры: Y – |
|матрица размером t*t. |
|Рис. 18. Детализация |
|подпрограммы вывода элементов|

-----------------------

Конец

Вектор из сумм элементов выше и ниже диагонали

Z=A+B

B=Y*Y

A=X*X

Ввод элементов

Печать элементов X, Y

Ввод размера

Начало


Рефетека ру refoteka@gmail.com