GPS|

begin

   real procedure GPS (I, N, Z, V);
      real I, N, Z, V;
   begin
      for I := 1 step 1 until N do
         Z := V;
      GPS := 1
   end GPS;


   procedure GPS TEST 1 (m, n);
      value m, n; real m, n;
   begin
   real i, j;

   array A[1:m, 1:n];

   writetext(30, [GPS*TEST*CASE*1[c_]]);

   comment set A[i,j] to (i+j)
   ;
   i := GPS(j, n, i, GPS(i, m, A[i,j], i+j));

   writetext(30, [A[i,j]*should*be*(i+j)[c_]]);
   for i := 1 step 1 until m do
      begin
         for j := 1 step 1 until n do
            write(30, format([+d.dddddss_]), A[i,j]);
         writetext(30, [[c_]]);
      end;

   end GPS TEST 1;


   procedure GPS TEST 2 (m, n, p);
       value m, n, p; real m, n, p;
   begin
   real i, j, k;

   array A[1:m, 1:n], B[1:n, 1:p], C[1:m, 1:p];

   writetext(30, [[c_][c_]GPS*TEST*CASE*2[c_]]);

   for i := 1 step 1 until m do
      for k := 1 step 1 until n do
         A[i,k] := i/10.0^(k-1);

   for k := 1 step 1 until n do
      for j := 1 step 1 until p do
         B[k,j] := k;

   for i := 1 step 1 until m do
      for j := 1 step 1 until p do
         C[i,j] := -999999999;

   comment set C to AB
   ;
   i := GPS(i, 1.0, C[1,1], 0.0)
      × GPS(i,
            (m-1) ×
               GPS(j,
                   (p-1) ×
                      GPS(k, n, C[i,j], C[i,j] + A[i,k]×B[k,j]),
                   C[i,j+1],
                   0.0
                  ),
            C[i+1,1],
            0.0
           );

   writetext(30, [C[i,j]*should*be*1.234j_[c_]]);
   for i := 1 step 1 until m do
      begin
         for j := 1 step 1 until p do
            write(30, format([+d.dddddss_]), C[i,j]);
         writetext(30, [[c_]]);
      end;

   end  procedure GPS TEST 2;

open(30);

   GPS TEST 1(5, 3);
   GPS TEST 2(3, 4, 5);

close(30);

end
|