Salve amici del Forum. Provo ad aprire una nuova discussione su un argomento già trattato sperando di essere più conciso e chiaro. Si tratta di elaborare un programma Pascal che calcoli il prodotto di due matrici, con a e b matrici da moltiplicare e p matrice prodotto rappresentate sotto forma di record. Il programma che ho elaborato calcola effettivamete una matrice quadrata risultante,ma i suoi elementi non corrispondono esattamente a quelli della matrice prodotto.Credo che l'errore sia nella procedura di elaborazione del prodotto delle due matrici, ma non riesco ad individuare l'errore. Qualcuno di voi può essermi di aiuto in tal senso? Riporto il codice dell'intero programma per la verifica della sua correttezza:

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.
Ringraziandovi sin da ora per l'aiuto che vorrete darmi vi saluto tutti.Ciao!!!