регистрация / вход

Лабораторная работа №12

Цель работы: Изучение правил описания и вызова подпрограмм: процедур и функций. Получение навыков и овладение приемами работы над подпрограммами. Задание№ 17

Цель работы: Изучение правил описания и вызова подпрограмм: процедур и функций. Получение навыков и овладение приемами работы над подпрограммами.

Задание№ 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.

  1. Ввод размеров матриц X, Y. В данном блоке определён ввод размеров квадратных матриц X, Y (t – размер матриц).

Имя подпрограммы: VVOD
Входные параметры: количество элементов t*t
I=1(1)t

J=1(1)t

Ввод элементов
Выходные параметры: X – матрица размером t*t.

Рис.11. Детализация блока 2

схемы алгоритма.


  1. Имя подпрограммы 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 значений для каждого массива.

  2. Печать элементов матриц X, Y (а также отладочная печать). В данном блоке определёна печать значений элементов квадратных матриц X, Y размером t*t.

  3. Умножение матриц удобно представить следующей подпрограммой, структурограмма которой приведена на рисунке 13.

  4. Сложение матрицы X и матрицы Y представлено в виде подпрограммы на рис.15.


  1. Подпрограммы формирования вектора из сумм элементов выше и ниже главной диагонали представлена структурограммой на рисунке 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


ОТКРЫТЬ САМ ДОКУМЕНТ В НОВОМ ОКНЕ

ДОБАВИТЬ КОММЕНТАРИЙ [можно без регистрации]

Ваше имя:

Комментарий