program matr1; { -> 50 }
{ pascal program to perform matrix multiplication }
const rmax = 9;
cmax = 3;
type ary = array[1..rmax] of real;
arys = array[1..cmax] of real;
ary2 = array[1..rmax,1..cmax] of real;
ary2s = array[1..cmax,1..cmax] of real;
var y : ary;
g : arys;
x : ary2;
a : ary2s;
nrow,ncol : integer;
external procedure cls;
procedure get_data(var x: ary2;
var y: ary;
var nrow,ncol: integer);
{ get the values for nrow, ncol, and arrays x,y }
var i,j : integer;
begin
nrow:=5;
ncol:=3;
for i:=1 to nrow do
begin
x[i,1]:=1;
for j:=2 to ncol do
x[i,j]:=i*x[i,j-1];
y[i]:=2*i
end
end; { procedure get_data }
procedure write_data;
{ print out the answeres }
var
i,j : integer;
begin
cls;
writeln;
writeln(' X Y');
for i:=1 to nrow do
begin
for j:=1 to ncol do
write(x[i,j]:7:1,' ');
writeln(':',y[i]:7:1)
end;
writeln(' A G');
for i:=1 to ncol do
begin
for j:=1 to ncol do
write(a[i,j]:7:1,' ');
writeln(':',g[i]:7:1)
end
end; { write_data }
procedure square(x: ary2;
y: ary;
var a: ary2s;
var g: arys;
nrow,ncol: integer);
{ matrix multiplication routine }
{ a= transpose x times x }
{ g= y times x }
var
i,k,l : integer;
begin { square }
for k:=1 to ncol do
begin
for l:=1 to k do
begin
a[k,l]:=0;
for i:=1 to nrow do
begin
a[k,l]:=a[k,l]+x[i,l]*x[i,k];
if k<>l then a[l,k]:=a[k,l]
end
end; { l-loop }
g[k]:=0;
for i:=1 to nrow do
g[k]:=g[k]+y[i]*x[i,k]
end { k-loop }
end; { square }
begin { MAIN program }
get_data(x,y,nrow,ncol);
square(x,y,a,g,nrow,ncol);
write_data
end.
|