Salve a tutti amici del Forum!!!Voglio sottoporvi un problema da risolvere mediante un programma redatto in linguaggio Pascal che mi dà purtroppo un errore a tempo di compilazione che non riesco ad interpretare ( è per questo che chiedo il vostro aiuto). Si tratta di realizzare un programma che calcoli il prodotto di due matrici quadrate di ordine n, che non supporremo mai superiore a 10, usando per rappresentare le medesime la nozione di record, dunque sia le matrici da moltiplicare che quella risultante saranno del tipo:
codice:
type termine= record
riga: integer;
colonna: integer;
val: real;
end;
mat= array[1..n*n]of termine;
Il programma che ho elaborato è il seguente:
codice:
program CalcoloProdottoDiDueMatrici(input,output);
label 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 : 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 risultante e'':');
writeln;
writeln;
for i:=1 to n
do begin
for j:=1 to n
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
for i:=1 to n
do for j:=1 to n
do begin
p[c].riga:=i;
p[c].colonna:=j;
p[c].val:=0;
for k:=1 to h
do if(a[c].colonna)=(b[c].riga)
then p[c].val:=p[c].val+(a[c].val)*(b[c].val);
end;
writeln;
writeln;
writeln('La matrice prodotto risultante e'':');
writeln;
writeln;
for i:=1 to n
do begin
for j:=1 to n
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 n delle due matrici quadrate di ingresso a e b: ');
readln(n);
h:=n*n;
writeln;
if n>10 then begin
writeln(chr(bell),'Errore nei dati di ingresso! - STOP -');
goto 99;
end
else begin
ScriviMatriceUsandoRecord(a);
writeln;
ScriviMatriceUsandoRecord(b);
writeln;
ProdottoDiMatriciUsandoRecord(a,b,p)
end;
99 :
readln;
end.
Solo che quando vado a compilarlo (uso il compilatore Dev-Pascal) mi dà il seguente risultato:
Fatal: Internal error 334.
Qualcuno è in grado di spiegarmi il significato dell'errore interno 334, poichè cercando con Google non sono riuscito a trovare granchè, ed è altresì in grado di dirmi quindi se il programma è corretto o come fare per eliminare l'errore? Grazie mille per la collaborazione. Ciao!!!