RosettaCodeData/Task/Pascal-matrix-generation/PL-I/pascal-matrix-generation-1.pli

63 lines
1.6 KiB
Plaintext

PASCAL_MATRIX: PROCEDURE OPTIONS (MAIN); /* derived from Fortran version 18 Decenber 2021 */
pascal_lower: procedure(a);
declare a(*,*) fixed binary;
declare (n, i, j) fixed binary;
n = hbound(a,1);
a = 0;
a(*, 1) = 1;
do i = 2 to n;
do j = 2 to i;
a(i, j) = a(i - 1, j) + a(i - 1, j - 1);
end;
end;
end pascal_lower;
pascal_upper: procedure(a);
declare a(*,*) fixed binary;
declare (n, i, j) fixed binary;
n = hbound(a,1);
a = 0;
a(1, *) = 1;
do i = 2 to n;
do j = 2 to i;
a(j, i) = a(j, i - 1) + a(j - 1, i - 1);
end;
end;
end pascal_upper;
pascal_symmetric: procedure(a);
declare a(*,*) fixed binary;
declare (n, i, j) fixed binary;
n = hbound(a,1);
a = 0;
a(*, 1) = 1;
a(1, *) = 1;
do i = 2 to n;
do j = 2 to n;
a(i, j) = a(i - 1, j) + a(i, j - 1);
end;
end;
end pascal_symmetric;
declare n fixed binary;
put ('Size of matrix?');
get (n);
begin;
declare a(n, n) fixed binary;
put skip list ('Lower Pascal Matrix');
call pascal_lower(a);
put edit (a) (skip, (n) f(3) );
put skip list ('Upper Pascal Matrix');
call pascal_upper(a);
put edit (a) (skip, (n) f(3) );
put skip list ('Symmetric Pascal Matrix');
call pascal_symmetric(a);
put edit (a) (skip, (n) f(3) );
end;
end PASCAL_MATRIX;