Программа
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.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию