Другие языки программирования и технологии

возведение квадратной матрицы в степень на паскале

помогите написать такую прграмму,искал -нигде нет примеров
Yaşar Doğrusoy
Yaşar Doğrusoy
1 063
Вот процедура перемножающая матрицы

procedure MatrMul(A,B: Arr2; var C: Arr2);
var
i, j, s : Integer;
begin
FillChar(C, SizeOf(C), 0); {обнуляем результирующую матрицу C}
for i:=1 to M do {цикл по строкам матрицы А}
for j:=1 to K do {цикл по столбцам матрицы В}
for s:=1 to N do {цикл по столбцам А и строкам В}
C[i,j] := C[i,j] + A[i,s]*B[s,j];
end;

Тип Arr2 описан так

type
Data = Integer;
Arr2 = array[1..M, 1..N] of Data; {двухмерный массив целых чисел}

В вашем случае M = N = K

А дальше последовательно перемножаете матрицы до получения требуемой целой, отмечу, степени.
Владимир Сарсатский
Владимир Сарсатский
59 613
Лучший ответ
стучи в аську 169527143
каждый элемент возводится по формуле exp(n*ln(a[i,j]); что тут сложно? где n- степень в которую возводится, элемент
Yaşar Doğrusoy всё не так просто ,гуру, учите матчасть
тут нужна процедура перемножения матриц, ИМХО
procedure matrix(i,j: word; degree: integer;);
var x,y: word;
begin
//расчёт на то что у матрицы M i-столбцов, и j-строк

for x:=0 to i do begin
for y:=0 to j do write(exp(ln(M[x][y])*degree)); //возводит текущее значение [x][y]-ого элемента в степень degree
writeln;
end;

end;

могу ошибаться в синтаксисе, на паскале давненько не писал.
Const max = 10;
Type
matrix = array[1..max, 1..max] of integer;

var
A, B, C, Y : matrix;

{Перемножает две матрицы: m1, m2,результат в Resul}
Procedure MultMatrix(m1, m2: matrix; var Resul : matrix);
var i, j, k : byte;
begin
for i:= 1 to kmax do begin
for j := 1 to kmax do begin
Resul[ i, j] := 0;
for k := 1 to kmax do begin
Resul[ i, j] := Resul[ i, j]+ m1[ i, k] * m2[k, j] ;
end;
end;
end;
end;

{Возводит матрицу в куб }
Procedure kub(var m:matrix);
var TempM : matrix;
begin
MultMatrix(m, m, TempM);
MultMatrix(m, TempM, m);
end;

--------------------------------------

MultMatrix(A, B, Y);

kub(A);

Похожие вопросы