Программирование и комп-ры

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



                                Ввод размера



                                   Начало





смотреть на рефераты похожие на "Лабораторная работа №12"