program ProdottoMatrici;
const
MaxRighe = 10;
MaxColonne = 10;
type
TipoIndiceRiga = 1..MaxRighe;
TipoIndiceColonna = 1..MaxColonne;
TipoElementoMatrice = integer;
TipoArrayMatrice = array [TipoIndiceRiga, TipoIndiceColonna] of TipoElementoMatrice;
TipoMatrice = record
righe : 0..MaxRighe;
colonne : 0..MaxColonne;
elementi : TipoArrayMatrice
end;
var
m1, m2, mprod : TipoMatrice;
i, j : integer;
procedure LeggiMatrice (var matrice: TipoMatrice);
var
nome : string;
f : text;
i, j : integer;
begin
write('Nome del file dal quale leggere la matrice ? ');
readln(nome);
assign(f, nome);
reset(f);
with matrice do
begin
read(f, righe, colonne);
for i := 1 to righe do
for j := 1 to colonne do
read(f, elementi[i,j])
end;
close(f)
end;
procedure SalvaMatrice (matrice: TipoMatrice);
var
nome : string;
f : text;
i, j : integer;
begin
write('Nome del file sul quale scrivere la matrice ? ');
readln(nome);
assign(f, nome);
rewrite(f);
with matrice do
begin
writeln(f, righe, ' ', colonne);
for i := 1 to righe do
begin
for j := 1 to colonne do
write(f, elementi[i,j]:7);
writeln(f)
end
end;
close(f);
end;
procedure StampaMatrice (matrice: TipoMatrice);
var
i, j : integer;
begin
with matrice do
for i := 1 to righe do
begin
for j := 1 to colonne do
write(elementi[i,j]:7);
writeln
end;
writeln
end;
procedure MoltiplicaMatrici (matrice1, matrice2: TipoMatrice;
var matrice_prod: TipoMatrice);
var
i, j, k : integer;
begin
if matrice1.colonne = matrice2.righe then
begin
matrice_prod.righe := matrice1.righe;
matrice_prod.colonne := matrice2.colonne;
for i := 1 to matrice_prod.righe do
for j := 1 to matrice_prod.colonne do
begin
matrice_prod.elementi[i,j] := 0;
for k := 1 to matrice1.colonne do
matrice_prod.elementi[i,j] := matrice_prod.elementi[i,j] +
matrice1.elementi[i,k] * matrice2.elementi[k,j]
end
end
else
begin
writeln('Errore. Le matrici sono di dimensioni incompatibili');
matrice_prod.righe := 0;
matrice_prod.colonne := 0
end
end;
begin
LeggiMatrice(m1);
writeln('Matrice 1:');
StampaMatrice(m1);
LeggiMatrice(m2);
writeln('Matrice 2:');
StampaMatrice(m2);
MoltiplicaMatrici(m1, m2, mprod);
writeln('Matrice prodotto:');
StampaMatrice(mprod);
SalvaMatrice(mprod)
end.