Рефераты

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

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

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|

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

2. Ввод элементов можно представить соответствующей подпрограммой,

структурограмма которой приведена на рис.11. Всего должно быть

выведено t*t значений для каждого массива.

3. Печать элементов матриц X, Y (а также отладочная печать). В данном

блоке определёна печать значений элементов квадратных матриц X, Y

размером t*t.

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

структурограмма которой приведена на рисунке 13.

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

рис.15.

6. Подпрограммы формирования вектора из сумм элементов выше и ниже

главной диагонали представлена структурограммой на рисунке 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. Детализация |

|подпрограммы вывода элементов|

-----------------------

Конец

Вектор из сумм элементов выше и ниже диагонали

Z=A+B

B=Y*Y

A=X*X

Ввод элементов

Печать элементов X, Y

Ввод размера

Начало


© 2010 Современные рефераты