Nell'ultima versione ho dimenticato di inizializzare gli indici nei cicli while della procedura ProdottoDiMatriciUsandoRecord. La scrittura corretta sintatticamente del programma è pertanto la seguente:
Il programma medesimo continua però a non funzionare producendo in uscita un vettore di l*l elementi identici.codice:program CalcoloProdottoDiDueMatrici(input,output); label 1,99; const n=10; bell=07; type termine= record riga: integer; colonna: integer; val: real; end; mat= array[1..n*n]of termine; var a,b,p,q : mat; i,j,c,h,k,l : integer; procedure ScriviMatriceUsandoRecord( var q : mat ); begin writeln('Inserire gli elementi della matrice ciascuno separato da <INVIO>:'); writeln; for c:=1 to h do begin readln(q[c].riga); readln(q[c].colonna); readln(q[c].val); end; writeln; writeln; writeln('La matrice e'':'); writeln; writeln; for i:=1 to l do begin for j:=1 to l do for c:=1 to h do if(q[c].riga=i)and(q[c].colonna=j) then write(' ',(q[c]).val:2:2,' '); writeln; end; end;{ fine procedura ScriviMatriceUsandoRecord } procedure ProdottoDiMatriciUsandoRecord( a : mat; b : mat ; var p : mat); begin c:=1; while(c>=1)and(c<=h) do begin i:=1; while(i>=1)and(i<=l) do begin j:=1; while(j>=1)and(j<=l) do begin p[c].riga:=i; p[c].colonna:=j; p[c].val:=0; for k:=1 to h do if(a[k].riga=i)and(b[k].colonna=j)and(a[k].colonna=b[k].riga) then p[c].val:=p[c].val+(a[k].val)*(b[k].val); j:=j+1; if j<=l then goto 1; end; i:=i+1; end; 1 : c:=c+1; end; writeln; writeln; writeln('La matrice prodotto risultante e'':'); writeln; writeln; for i:=1 to l do begin for j:=1 to l do for c:=1 to h do if(p[c].riga=i)and(p[c].colonna=j) then write(' ',(p[c]).val:4:2,' '); writeln; end; end;{ fine procedura ProdottoDiMatriciUsandoRecord } { Corpo del programma } begin writeln('-------------------------- Dati di ingresso -----------------------------'); writeln; writeln; write('Fornire la dimensione delle due matrici quadrate di ingresso a e b: '); readln(l); h:=l*l; writeln; if l>10 then begin writeln(chr(bell),'Errore nei dati di ingresso! - STOP -'); goto 99; end else begin ScriviMatriceUsandoRecord(a); writeln; ScriviMatriceUsandoRecord(b); ProdottoDiMatriciUsandoRecord(a,b,p) end; 99 : readln; end.![]()

