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!!!