Ааааааааааа, совсем запуталась. Написала какой-то бред.

Помогите мне исправить пожалуйста!!!
Код
Program L1;
const
N = 5;
M = 4;
Type
TMatrix= array [1..M, 1..M] of real;
Procedure MatrixPower(var h:TMatrix; a:TMatrix);
Var
i,j,k:integer;
Begin
for i:=1 to m do
for j:=1 to m do begin
a[i,j]:=0;
h[i,j]:=a[i,j]+ a[i,k]*a[k,j];
end;
end;
Procedure MatrixScale(var h:TMatrix; a:TMatrix; p:real);
var
i,j,k:integer;
Begin
For k:=1 to n do begin
writeln ('Введите действительное число р,k);
read (p);
end;
for i:=1 to m do
for j:=1 to m do
h[i,j]:=p* a[i,j];
end;
Procedure MatrixAdd (Var h:TMatrix; a,b:TMatrix);
var
i,j:integer;
Begin
for i:=1 to m do
for j:=1 to m do
h[i,j]:=a[i,j]+b[i,j];
end;
Procedure MatrixPrint(a:TMatrix);
var
i,j:integer;
Begin
for i:=1 to m do Begin
for j:=1 to m do
write(a[i,j]:9:2);
writeln;
end;
end;
var
a: TMatrix;
T,Res: TMatrix;
i, j: Integer;
BEGIN
for i:=1 to m do
for j:=1 to m do
a[i,j]:=random(20);
MatrixPrint(a);
For i:=1 to n do begin
MatrixPower(T, a);
MatrixScale(T, T,n);
MatrixAdd(Res, Res, T);
end;
MatrixPrint(Res);
End.