Цель работы:
Изучение правил
описания и
вызова подпрограмм:
процедур и
функций. Получение
навыков и овладение
приемами работы
над подпрограммами.
Задание№ 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
|
схемы
алгоритма |
Ввод элементов
можно представить
соответствующей
подпрограммой,
структурограмма
которой приведена
на рис.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
– матрица
размером 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
|