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:
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.
Credo che l'errore sia nella procedura ProdottoDiMatriciUsandoRecord, in particolare:
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;
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.
Grazie a tutti!!!