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