Программа


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

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

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