A questo punto pubblico l'intero programma sin qui elaborato nella speranza che qualcuno sia in grado di segnalarmi gli errori commessi:

codice:
program CalcoloProdottoDiDueMatriciUsandoRecord(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;
   i:=1;
   j:=1;
   while(c>=1)and(c<=h)
   do begin
           while(i>=1)and(i<=l)
           do begin
                   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;
                  j:=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.
Spero solo che questi miei ragionamenti non cadano nel vuoto. Ciao e grazie a tutti!!!