Цель работы:Изучение правилописания ивызова подпрограмм:процедур ифункций. Получениенавыков и овладениеприемами работынад подпрограммами.
Задание№ 17.Посчитать суммуэлементовлежащих вышеглавной диагоналиматрицы дляматрицы Z=X2+Y2.
Программа наTurbo Pascal
{Программа:Kyrsaсh }
{Цель:Найти суммуэлементов вышеглавной диагонали }
{Переменные: }
{ X,Y - вводимыемассивы }
{ N, M, A,B,Z - промежуточныемассивы }
{ t - Размер массива }
{ i, j - переменныецикла }
{Программист:Позднышев А.А.группа 316 }
{Проверил:Новичков В.С. }
ProgramLab_12;
usescrt;
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 - массив}
ProcedureVvod (t:integer; Var X:matrics);
Var
i,j:integer;
Begin{Vvod}
Fori:=1 to t do
Forj:=1 to t do
Begin {Вводэлементов}
Write ('[',i,',',j,']=');
Read(X[i,j]);
End; {Вводэлементов}
Fori:=1 to t do
Begin {Выводэлементов}
For j:=1 to t do
Write (X[i,j]:5);
Writeln
End {Выводэлементов}
End;{Vvod}
{Процедуравывода элеменовматриц}
{Параметры:X,Y - матрицы, t - размер}
ProcedureEcho (t:integer; X:matrics);
var
i,j:byte;
begin{Echo}
Fori:=1 to t do
Begin
Forj:=1 to t do
Write(X[i,j]:5);
Writeln
End
end;{Echo}
{Процедураумноженияматриц}
{Параметры:X,Y - начальныемассивы, Z - массиврезультат,t -размер}
ProcedureUmn (X,Y:matrics;t:integer; Var Z:matrics);
var
i,j,k,s:integer;
begin{Umno}
fori:=1 to t do
forj:=1 to t do
begin
S:=0;
fork:=1 to t do
s:=s+X[k,i]*Y[j,k];
Z[i,j]:=s;
end;
end; {Umno}
{Процедурасложения массивов}
{Параметры:X,Y - начальныемассивы, Z - массиврезультат, t -размер}
ProcedureSumma(X,Y:matrics; t:integer; Var Z:matrics);
var
i,j:integer;
begin{Summa}
fori:=1 to t do
forj:=1 to t do
Z[i,j]:=X[i,j]+Y[i,j]
end; {Summa}
{Процедурадля нахождениясуммы нижеглавной диагонали}
{Параметры:X - начальныемассивы, Y - массиврезультат, t -размер}
ProcedureUnder (X:matrics; t:integer; Var Y:masiv);
var
s:real;
Begin
S:= 0;
Fori := 2 to t do
Forj := 1 to i-1 do
S:=S + X[i, j];
WriteLn('Сумма элементов,лежащих нижеглавной диагонали=',S:5:1);
End;
{Процедурадля нахождениясуммы вышеглавной диагонали}
{Параметры:X - начальныемассивы, Y - массиврезультат, t -размер}
ProcedureOver (X:matrics; t:integer; Var Y:masiv);
var
s:real;
Begin
S :=0;
Fori := 1 to t-1 do
Forj := 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