Цель работы: Изучение правил описания и вызова подпрограмм: процедур и функций. Получение навыков и овладение приемами работы над подпрограммами.
Задание№ 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.
Ввод размеров матриц 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 |
|||
схемы алгоритма |
Печать элементов матриц X, Y (а также отладочная печать). В данном блоке определёна печать значений элементов квадратных матриц X, Y размером t*t.
Умножение матриц удобно представить следующей подпрограммой, структурограмма которой приведена на рисунке 13.
Сложение матрицы X и матрицы Y представлено в виде подпрограммы на рис.15.
Подпрограммы формирования вектора из сумм элементов выше и ниже главной диагонали представлена структурограммой на рисунке 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. Детализация подпрограммы вывода элементов |
Министерство
образования
РФ
Рязанская
государственная
радиотехническая
академия
Кафедра ВПМ
Отчет о
лабораторной
работе № 12:
«ПРОЦЕДУРЫ
И ФУНКЦИИ»
Выполнил: ст.
гр. 316
Позднышев
А.А. Проверил:
Новичков В.С.
Рязань 2004
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |