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.




 
Function pascal_upper(i,j)
	WScript.StdOut.Write "Pascal Upper"
	WScript.StdOut.WriteLine
	For l = i To j
		For m = i To j
			If l <= m Then
				WScript.StdOut.Write binomial(m,l) & vbTab
			Else
				WScript.StdOut.Write 0 & vbTab
			End If
		Next
		WScript.StdOut.WriteLine
	Next
	WScript.StdOut.WriteLine
End Function
 
Function pascal_lower(i,j)
	WScript.StdOut.Write "Pascal Lower"
	WScript.StdOut.WriteLine
	For l = i To j
		For m = i To j
			If l >= m Then
				WScript.StdOut.Write binomial(l,m) & vbTab
			Else
				WScript.StdOut.Write 0 & vbTab
			End If
		Next
		WScript.StdOut.WriteLine
	Next
	WScript.StdOut.WriteLine	
End Function
 
Function pascal_symmetric(i,j)
	WScript.StdOut.Write "Pascal Symmetric"
	WScript.StdOut.WriteLine
	For l = i To j 
		For m = i To j
			WScript.StdOut.Write binomial(l+m,m) & vbTab
		Next
		WScript.StdOut.WriteLine
	Next
End Function
 
Function binomial(n,k)
	binomial = factorial(n)/(factorial(n-k)*factorial(k))
End Function
 
Function factorial(n)
	If n = 0 Then
		factorial = 1
	Else
		For i = n To 1 Step -1
			If i = n Then
				factorial = n
			Else
				factorial = factorial * i
			End If
		Next
	End If
End Function
 
'Test driving
Call pascal_upper(0,4)
Call pascal_lower(0,4)
Call pascal_symmetric(0,4)
 