Скачать Matrix Multiplication Program

03.04.1985
Скачать файл (1,37 Кб)






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.