A pascal matrix is a two-dimensional square matrix holding numbers from   Pascal's triangle,   also known as   binomial coefficients   and which can be shown as   nCr.

Shown below are truncated   5-by-5   matrices   M[i, j]   for   i,j   in range   0..4. 


A Pascal upper-triangular matrix that is populated with   jCi:

[[1, 1, 1, 1, 1],
 [0, 1, 2, 3, 4],
 [0, 0, 1, 3, 6],
 [0, 0, 0, 1, 4],
 [0, 0, 0, 0, 1]]

A Pascal lower-triangular matrix that is populated with   iCj   (the transpose of the upper-triangular matrix):

[[1, 0, 0, 0, 0],
 [1, 1, 0, 0, 0],
 [1, 2, 1, 0, 0],
 [1, 3, 3, 1, 0],
 [1, 4, 6, 4, 1]]

A Pascal symmetric matrix that is populated with   i+jCi:

[[1, 1, 1, 1, 1],
 [1, 2, 3, 4, 5],
 [1, 3, 6, 10, 15],
 [1, 4, 10, 20, 35],
 [1, 5, 15, 35, 70]]



Task

Write functions capable of generating each of the three forms of   n-by-n   matrices.

Use those functions to display upper, lower, and symmetric Pascal   5-by-5   matrices on this page.

The output should distinguish between different matrices and the rows of each matrix   (no showing a list of 25 numbers assuming the reader should split it into rows).



Note
 
The   Cholesky decomposition   of a Pascal symmetric matrix is the Pascal lower-triangle matrix of the same size.




10 DEFINT A-Z: S=5: DIM M(S,S)
20 PRINT "Lower-triangular matrix:": GOSUB 200: GOSUB 100
30 PRINT "Upper-triangular matrix:": GOSUB 300: GOSUB 100
40 PRINT "Symmetric matrix:": GOSUB 400: GOSUB 100
50 END
100 REM *** Print the matrix M ***
110 FOR Y=1 TO S
120 FOR X=1 TO S
130 PRINT USING " ##";M(X,Y);
140 NEXT X
150 PRINT
160 NEXT Y
170 PRINT
180 RETURN
200 REM *** Generate the lower-triangular matrix ***
210 FOR X=1 TO S: FOR Y=1 TO S
220 ON -(X>Y)-2*(X=Y OR X=1) GOTO 240,250
230 M(X,Y)=M(X-1,Y-1)+M(X,Y-1): GOTO 260
240 M(X,Y)=0: GOTO 260
250 M(X,Y)=1: GOTO 260
260 NEXT Y,X
270 RETURN
300 REM *** Generate the upper-triangular matrix ***
310 FOR X=1 TO S: FOR Y=1 TO S
320 ON -(X<Y)-2*(X=Y OR Y=1) GOTO 340,350
330 M(X,Y)=M(X-1,Y-1)+M(X-1,Y): GOTO 360
340 M(X,Y)=0: GOTO 360
350 M(X,Y)=1: GOTO 360
360 NEXT Y,X
370 RETURN
400 REM *** Generate the symmetric matrix ***
410 FOR X=1 TO S: FOR Y=1 TO S
420 IF X=1 OR Y=1 THEN M(X,Y)=1 ELSE M(X,Y)=M(X-1,Y)+M(X,Y-1)
430 NEXT Y,X
440 RETURN