Sono riuscito a realizzare la seguente versione del programma:

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)
                                       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;
                  if j>l then begin
                                   j:=1;
                                   goto 1;
                              end;
              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.

Con quest'ultima inserendo due matrici quadrate in ingresso ottengo una matrice quadrata anch'essa i cui elementi sono ciascuno il prodotto dell'elemento dell'altra preso riga per colonna e cioè a11*b11,a12*b21,..,an1*a1n e non la somma dei prodotti dei corrispondenti elementi di un'intera riga per un'intera colonna come dovrebbe essere....Siamo però ad un passo dalla soluzione. Credo che il problema risieda nella condizione dell'istruzione if:

codice:
for k:=1 to h
            do if(a[k].riga=i)and(b[k].colonna=j)
                then p[c].val:=p[c].val+(a[k].val)*(b[k].val);
del ciclo for in cui si calcolano i valori p11,p12,..,pnn.