Материалы сайта
Это интересно
Лабораторная работа №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 Ввод размера Начало