Лабораторная работа №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.

Ввод размеров матриц 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


1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...
Лабораторная работа №12