Квадратная матрица. Вычислить A^n, по алгоритму - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите решить задачку. Дана квадратная матрица А порядка m и натуральное число n; требуется найти . Если n=2k, то , если n=2k+1, то . Для k использовать тот же алгоритм.

Решение задачи: «Квадратная матрица. Вычислить A^n, по алгоритму»

textual
Листинг программы
uses crt;
const nmax=7;
type matr=array[1..nmax,1..nmax] of real;
var m:byte;
{умножение матрицы на матрицу}
procedure Umn(a1,a2:matr;var a3:matr);
var k,j,i:byte;
begin
for k:=1 to m do
for j:=1 to m do
 begin
  a3[k,j]:=0;
  for i:=1 to m do
  a3[k,j]:=a3[k,j]+a1[k,i]*a2[i,j];
 end;
end;
{вывод на экран}
procedure Vyvod(a:matr;s:string);
var i,j:byte;
begin
writeln(s);
for i:=1 to m do
 begin
  for j:=1 to m do
  write(a[i,j]:9:1);
  writeln;
 end;
end;
 
var a,a2,b,c:matr;
    n,i,j,k:byte;
    s:string;
begin
clrscr;
randomize;
repeat
write('Размер матрицы от 2 до ',nmax,' m=');
readln(m);
until m in [2..nmax];
for i:=1 to m do
for j:=1 to m do
a[i,j]:=-2+5*random;
repeat
write('Введите натуральное число от 1 до 7 - степень матрицы n=');
readln(n);
until n in[1..7];
Vyvod(a,'Матрица A:');
if n=1 then Vyvod(a,'Матрица A^1:'){если n=1}
else {иначе}
 begin
  Umn(a,a,a2);{получем матрицу A^2}
  if n=2 then Vyvod(a2,'Матрица A^2:'){если n=2, выводим}
  else{если больше}
   begin
    k:=n div 2;{определяем количество пар}
    c:=a2;{запоминаем матрицу A^2}
    for i:=1 to k-1 do{k-1 раз}
     begin
      Umn(c,a2,b);{умножаем A^2*A^2}
      c:=b;{запомним результат}
     end;
    if odd(n) then Umn(c,a,b);{если n нечетное, домножаем на А}
    str(n,s);
    Vyvod(b,'Матрица A^'+s+':');
   end;
 end;
readln
end.

Объяснение кода листинга программы

  1. В начале программы подключается библиотека crt, которая содержит функции для работы с памятью и числами с плавающей точкой.
  2. Объявляются переменные nmax и matr, которые будут использоваться для создания и работы с матрицами.
  3. Переменная m инициализируется значением 1, так как предполагается, что матрица имеет размерность m x m.
  4. Создается тип matr, который представляет собой массив целых чисел.
  5. Создается переменная m, которая будет использоваться для итерации по матрице.
  6. Создается процедура Umn, которая реализует операцию умножения матрицы на матрицу. Она принимает три аргумента: a1, a2 и a3. Внутри процедуры происходит итерация по элементам матрицы и вычисление их произведения.
  7. Создается процедура Vyvod, которая выводит матрицу на экран. Она принимает один аргумент - матрицу. Внутри процедуры происходит итерация по элементам матрицы и вывод их на экран.
  8. Создается переменная a, которая будет использоваться для хранения матрицы.
  9. Создается переменная a2, которая будет использоваться для хранения матрицы, полученной в результате операции умножения.
  10. Создается переменная b, которая будет использоваться для хранения результата операции умножения.
  11. Создается переменная c, которая будет использоваться для хранения матрицы, полученной в результате операции умножения.
  12. Создается цикл repeat, который будет выполняться до тех пор, пока m не станет равным 1 или n не станет равным 1.
  13. Внутри цикла повторяется запрос размера матрицы и ввода значения n.
  14. Если n равно 1, то выводится матрица A.
  15. Если n больше 1, то вызывается процедура Umn, которая умножает матрицу A на матрицу a2. Результат сохраняется в переменной b.
  16. Если n нечетное, то вызывается процедура Umn, которая умножает матрицу A на матрицу a. Результат сохраняется в переменной b.
  17. Выводится матрица b.
  18. Завершается цикл repeat.
  19. Завершается программа.

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы