Salve a tutti amici del Forum!!!Spero stavolta di essere chiaro e di usare le procedure corrette....Vorrei sapere se qualcuno di voi è in grado di dirmi perchè il programma VerificaMatrice sotto riportato con il testo redatto in Pascal, non funziona. Il programma stesso che, dovrebbe verificare se una data matrice quadrata letta da ingresso è simmetrica, triangolare superiore o inferiore e diagonale, risulta sintatticamente corretto; infatti il compilatore che uso (Dev-Pascal) dopo averlo appunto "compilato" non segnala errore, ma i problemi sorgono nella verifica degli errori a tempo di esecuzione. In particolare, mentre sembra funzionare la procedura MatSimmetrica che verifica se la matrice è simmetrica, le altre tre procedure MatriangInf, MatriagSup, MatDiagonale che dovrebbero controllare se la matrice è rispettivamente triangolare inferiore, superiore o diagonale non sempre danno risultati corretti. Ho dunque sbagliato anche la sintassi di queste tre procedure ? E se si, come vanno riscritte? Ricordo che una matrica Mat: array[1..n,1..n]of integer, quadrata, è simmetrica se risulta mat[i,j]=mat[j,i] per ogni i<>j, che è tringolare superiore o inferiore se ha tutti gli elementi nulli al di sotto o al di sopra dellla diagonale principale, e che è diagonale se vale mat[i,j]=0 per ogni i<>j. Ho provato a sviluppare quattro programmini indipendenti ciascuno con le funzioni delle singole procedure ottenendo gli stessi risultati, ovvero programmi che risultano sintatticamente corretti ma che non lo sono nella verifica degli errori a tempo di esecuzione. Riporto di seguito il testo del programma:
codice:
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(* programma principale *)
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 superiore')
else writeln('la matrice e'' triangolare superiore');
MatriangInf(a);
if not(finito)
then writeln('la matrice non e'' triangolare inferiore')
else writeln('la matrice e'' triangolare inferiore');
MatDiagonale(a);
if not(finito)
then writeln('la matrice non e'' diagonale')
else writeln('la matrice e'' diagonale');
end;
99 :
readln;
end.
Ringraziandovi sin da ora per l'attenzione che vorrete prestare al mio problema vi saluto tutti!!!
Ciao!!!!