Программа умножения и возведения матриц

Программа на языке Паскаль реализующая операции с матрицами.


TYPE PowerMatrix=1..10; { Максимальное возможное количествао строк и
                         столбцов матрицы (размер несущего массива) }
     Element=integer; { Тип элементов матрицы }
     MatrixType=record { Матрица }
                  M,N:PowerMatrix; { Фактическая размерность матрицы
                                     M - количество строк
                                     N - количестиво столбцов }
                  Matrix:array [PowerMatrix,PowerMatrix] of element
                                                      { Несущий массив }
                end;
PROCEDURE InputMatrix(var Matrix:MatrixType); { Процедура ввода матрицы }
  Var i,j:PowerMatrix;  { Счетчики строк и столбцов }
  Begin
    Write('Введите количество строк и столбцов матрицы ');
                          { Вывод приглашения ввести размерность матрицы }
    with Matrix do
    begin
      ReadLn(M,N); { Ввод размерности матрицы }
      for i:=1 to M do { Цикл ввода строк матрицы }
        for j:=1 to N do { Цикл ввода элементов матрицы }
          begin
  {          Write('Введите элемент [',i,',',j,'] ');
                                   { Вывод приглашения ввести элемент матрицы }
   {         ReadLn(Matrix[i,j]);   { Ввод элемента матрицы }
            Matrix[i,j]:=i*10+j
          end
    end
  End;
PROCEDURE OutputMatrix (Matrix:MatrixType); { Процедура вывода матрицы }
  Var i,j:PowerMatrix;   { Счетчики строк и столбцов }
  Begin
    with Matrix do
    for i:=1 to M do { Цикл вывода строк матрицы }
      begin
        for j:=1 to N do { Цикл вывода элементов матрицы }
          Write (Matrix[i,j]:10,' ');  { Вывод элемента матрицы }
        WriteLn  { Вывод конца строки }
      end
  End;
PROCEDURE MultMatrix(A,B:MatrixType; var C:MatrixType); { Процедура умножения матриц }
  Var i,j,k:PowerMatrix; { Счетчики строк и столбцов }
  Begin
    C.N:=A.M; C.M:=B.N; { Определение размерности результирующей матрицы }
    for i:=1 to A.M do   { Цикл определения строк результата }
      for j:=1 to B.N do   { Цикл определение строки результата }
      begin
        C.Matrix[i,j]:=0;  { Сброс значения элемента }
        for k:=1 to A.N do    { Цикл набора значения элемента }
          C.Matrix[i,j]:=C.Matrix[i,j]+A.Matrix[i,k]*B.Matrix[k,j];
      end
  End;
PROCEDURE PowerOfMatrix(A:MatrixType; p:byte; var B:MatrixType);
                                  { Процедура возведения матрицы в степень }
  Var i,j:PowerMatrix;   { Счетчики строк и столбцов }
  Begin
    if p=0
    then begin
           B.M:=A.M; B.N:=A.N; { Определение размерности результирующей матрицы }
           { Формирование единичной матрицы (B=A^0): }
           for i:=1 to B.M do   { Цикл заполнения строк }
             for j:=1 to B.N do { Цикл заполнения строки }
               if i=j { Диагональные элементы заполняются "1", остальные "0": }
               then B.Matrix[i,j]:=1
               else B.Matrix[i,j]:=0
         end
    else begin
           PowerOfMatrix(A,p-1,B);
           MultMatrix(A,B,B)
         end
  End;
VAR
    A,B,C,R:MatrixType; { Матрицы }
    p:byte; { Степень }
BEGIN
  WriteLn; { Пропуск строки }
  WriteLn(' ВВОД МАТРИЦЫ A:');  { Вывод подсказки }
  InputMatrix(A); { Ввод матрицы }
  WriteLn; { Пропуск строки }
  WriteLn(' Исходная матрица A: ');  { Вывод заголовка }
  OutputMatrix(A); { Вывод матрицы }

  WriteLn; { Пропуск строки }
  WriteLn(' ВВОД МАТРИЦЫ B:');  { Вывод подсказки }
  InputMatrix(B); { Ввод матрицы }
  WriteLn; { Пропуск строки }
  WriteLn(' Исходная матрица B: ');  { Вывод заголовка }
  OutputMatrix(B); { Вывод матрицы }

  WriteLn; { Пропуск строки }
  MultMatrix(A,B,R); { Получение произведения A*B=R }
  WriteLn(' Произведение матриц A*B= ');  { Вывод заголовка }
  OutputMatrix(R); { Вывод матрицы }

  WriteLn; { Пропуск строки }
  Write('Введите степень '); { Вывод приглашения ввести степень }
  ReadLn(p); { Ввод значения степени }
  PowerOfMatrix(A,p,B); { Возведение матрицы A в степень b }
  WriteLn('Матрица A^',p:0,'=');  { Вывод заголовка }
  OutputMatrix(B); { Вывод матрицы }
  (*OutputMatrixF(R); { Вывод матрицы в файл }
  Given
  Received
  Resulting *)
END.


  СХЕМА ПРОЦЕДУРЫ InputMatrix

  ***************
 *               *
 *    П У С К    *
 *               *
  ***************
         :
         :
         :
   *****************     ┌─
                         │ Ввод количества
  *               *      │
        M,N       ∙∙∙∙∙∙∙│ строк и столбцов
 *               *       │
                         │ матрицы
*****************        └─
         :
         :
         :
 *****************  ┌─
 *               *  │
 *               *  │ Инициализация
 *     i:=1      *∙∙│
 *               *  │ счетчика цикла
 *               *  │
 *****************  └─
         :
         :∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
         :                                                        :
         :                                                        :
         :                                                        :
 *****************  ┌─                                            :
 *               *  │                                 ─┐  *****************
 *               *  │ Инициализация                    │  *               *
 *     j:=1      *∙∙│                  Переопределение │  *               *
 *               *  │ счетчика цикла                   │∙∙*    i:=i+1     *
 *               *  │                  счетчика цикла  │  *               *
 *****************  └─                                 │  *               *
         :                                            ─┘  *****************
         :                                                        :
         :                                                        :
         :                                                        :
         :                                                        :
         :∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙.                                 :
         :                      :                                 :
         :              ***************         ┌─                :
         :              *               *       │                 :
         :              *               *       │ Переопределение :
         :              *    j:=j+1     *∙∙∙∙∙∙∙│                 :
         :              *               *       │ счетчика цикла  :
         :              *               *       │                 :
         :              *****************       └─                :
         :                      :                                 :
         :                      :                                 :
         :                *****************     ┌─                :
         :                                      │ Ввод            :
         :               *               *      │                 :
         :                  Matrix[i,j]  ∙∙∙∙∙∙∙│ элемента        :
         *              *               *       │                 :
       *   *                                    │ матрицы         :
     *       *         *****************        └─                :
   *           *   Нет          :                                 :
 *      j>N      *∙∙∙∙∙∙∙∙∙∙∙∙∙∙'                                 :
   *           *                                                  :
     *       *                                                    :
       *   *                                                      :
         *                                                        :
         : Да                                                     :
         :                                                        :
         *                                                        :
       *   *                                                      :
     *       *                                                    :
   *           *   Нет                                            :
 *      i>M      *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
   *           *
     *       *
       *   *
         *
         : Да
         :
         :
  ***************
 *               *
 *   К О Н Е Ц   *
 *               *
  ***************


  СХЕМА ПРОЦЕДУРЫ OutputMatrix

  ***************
 *               *
 *    П У С К    *
 *               *
  ***************
         :
         :
 *****************  ┌─
 *               *  │
 *               *  │ Инициализация
 *     i:=1      *∙∙│
 *               *  │ счетчика цикла
 *               *  │
 *****************  └─
         :
         :∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
         :                                                        :
         :                                                        :
         :                                                        :
 *****************  ┌─                                            :
 *               *  │                                 ─┐  *****************
 *               *  │ Инициализация                    │  *               *
 *     j:=1      *∙∙│                  Переопределение │  *               *
 *               *  │ счетчика цикла                   │∙∙*    i:=i+1     *
 *               *  │                  счетчика цикла  │  *               *
 *****************  └─                                 │  *               *
         :                                            ─┘  *****************
         :                                                        :
         :                                                        :
         :                                                        :
         :                                                        :
         :∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙.                                 :
         :                      :                                 :
         :              ***************         ┌─                :
         :              *               *       │                 :
         :              *               *       │ Переопределение :
         :              *    j:=j+1     *∙∙∙∙∙∙∙│                 :
         :              *               *       │ счетчика цикла  :
         :              *               *       │                 :
         :              *****************       └─                :
         :                      :                                 :
         :                      :                                 :
         :                *****************     ┌─                :
         :                                      │ Вывод           :
         :               *               *      │                 :
         :                  Matrix[i,j]  ∙∙∙∙∙∙∙│ элемента        :
         *              *               *       │                 :
       *   *                                    │ матрицы         :
     *       *         *****************        └─                :
   *           *   Нет          :                                 :
 *      j>N      *∙∙∙∙∙∙∙∙∙∙∙∙∙∙'                                 :
   *           *                                                  :
     *       *                                              *****************
       *   *
         *                                                 *    Вывод      *
         : Да                                                   конца
         :                                                *     строки    *
         *
       *   *                                             *****************
     *       *                                                    :
   *           *   Нет                                            :
 *      i>M      *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
   *           *
     *       *
       *   *
         *
         : Да
         :
         :
  ***************
 *               *
 *   К О Н Е Ц   *
 *               *
  ***************


  СХЕМА ПРОГРАММЫ

  ***************
 *               *
 *    П У С К    *
 *               *
  ***************
         :
         :
         :
 *****************
 * *           * *
 * *   Ввод    * *
 * *           * *
 * *  матрицы  * *
 * *           * *
 *****************
         :
         :
         :
 *****************
 * *           * *
 * *   Вывод   * *
 * *           * *
 * *  матрицы  * *
 * *           * *
 *****************
         :
         :
  ***************
 *               *
 *   К О Н Е Ц   *
 *               *
  ***************

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию