Salve. L'errore di cui sopra era dovuto ad un'errata scrittura della generalizzazione del problema. Pubblico una versione del programma che tuttavia non dà risultati corretti, in particolare non fornisce la matrice prodotto ma un vettore con elementi errati. Ecco il codice:
Credo che l'errore sia nella procedura ProdottoDiMatriciUsandoRecord, in particolare: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,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 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 c:=1 to h do 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[k].riga)=(b[k].colonna))and(a[k].riga=i)and(b[k].colonna=j) then p[k].val:=p[k].val+(a[k].val)*(b[k].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 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); ScriviMatriceUsandoRecord(b); ProdottoDiMatriciUsandoRecord(a,b,p) end; 99 : readln; end.
dove si dovrebbe calcolare la matrice prodotto p. Qualcuno degli utenti del Forum è in grado di segnalarmi la corretta scrittura della procedura? Ve ne sarei molto grato.codice:for c:=1 to h do 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[k].riga)(b[k].colonna))and(a[k].riga=i)and(b[k].colonna=j) then p[k].val:=p[k].val+(a[k].val)*(b[k].val); end;
Grazie a tutti!!!![]()

