home *** CD-ROM | disk | FTP | other *** search
- 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.