Salve a tutti!!Vorrei sapere se qualcuno è in grado di dirmi perchè il programma seguente:

program VerificaMatrice(input,output);
label 99;
const n=10;
type tipoar=array[1..n,1..n]of integer;
var a : tipoar;
k : integer;
finito : boolean;

procedure LeggieScriviMat(var mat : tipoar);
var rig,col : integer;
begin
writeln('fornire gli elementi della matrice, ciascuno seguito da un <INVIO>:');
writeln;
for rig:=1 to k
do for col:=1 to k
do readln(mat[rig,col]);
writeln;
for rig:=1 to k
do begin
for col:=1 to k
do write(' ',mat[rig,col],' ':3);
writeln;
end;
end;(* fine procedura LeggieScriviMat *)
procedure MatSimmetrica(var mat : tipoar);
var rig,col : integer;
begin
for rig:=1 to k
do begin
col:=1;
finito:=true;
while(col>=1)and(col<=k)and(finito)
do begin
if(rig<>col)and(mat[rig,col]<>mat[col,rig])
then finito:=false;
col:=col+1;
end;
end;
end;(* fine procedura MatSimmetrica *)
procedure MatriangSup(var mat : tipoar);
var rig,col : integer;
begin
for col:=1 to k
do begin
rig:=col+1;
finito:=true;
while(rig>col)and(rig<=k-1)and(finito)
do begin
if mat[rig,col]<>0
then finito:=false;
rig:=rig+1;
end;
end;
end;(* fine procedura MatriangSup *)
procedure MatriangInf(var mat : tipoar);
var rig,col : integer;
begin
for rig:=1 to k
do begin
col:=rig+1;
finito:=true;
while(col>rig)and(col<=k-1)and(finito)
do begin
if mat[rig,col]<>0
then finito:=false;
col:=col+1;
end;
end;
end;(* fine procedura MatriangInf *)
procedure MatDiagonale(var mat : tipoar);
var rig,col : integer;
begin
for rig:=1 to k
do begin
col:=1;
finito:=true;
while(col>=1)and(col<=k)and(finito)
do begin if(rig<>col)and(mat[rig,col]<>0)
then finito:=false;
col:=col+1;
end;
end;
end;(* fine procedura MatDiagonale *)

begin

write('fornire la dimensione della matrice: ');
readln(k);
writeln;
if k>n then begin
writeln('dimensione troppo grande della matrice! - STOP -');
goto 99;
end
else begin
LeggieScriviMat(a);
writeln;
MatSimmetrica(a);
if not(finito)
then writeln('la matrice non e'' simmetrica')
else writeln('la matrice e'' simmetrica');
MatriangSup(a);
if not(finito)
then writeln('la matrice non e'' triangolare inferiore')
else writeln('la matrice e'' triangolare inferiore');
MatriangInf(a);
if not(finito)
then writeln('la matrice non e'' triangolare superiore')
else writeln('la matrice e'' triangolare superiore');
MatDiagonale(a);
if not(finito)
then writeln('la matrice non e'' diagonale')
else writeln('la matrice e'' diagonale');
end;
99 :
readln;

end.

che ha lo scopo di verificare se una matrice quadrata letta da ingresso è simmetrica, triangolare superiore o inferiore ed infine se è diagonale, non funziona correttamente.
Grazie in anticipo per l'aiuto che vorrete offrirmi.

Serfabio