Реферат Лабораторная работа 12
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Цель работы: Изучение правил описания и вызова подпрограмм: процедур и функций. Получение навыков и овладение приемами работы над подпрограммами.
Задание№ 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. Детализация подпрограммы вывода элементов |