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.




//Pascal Matrix Generator
 
object pascal{
	def main( args:Array[String] ){
 
		println("Enter the order of matrix")
		val n = scala.io.StdIn.readInt()
 
		var F = new Factorial()
 
		var mx = Array.ofDim[Int](n,n)
 
		for( i <- 0 to (n-1); j <- 0 to (n-1) ){
 
			if( i>=j ){			//iCj
				mx(i)(j) = F.fact(i) / ( ( F.fact(j) )*( F.fact(i-j) ) )
			}
		}
 
		println("iCj:")
		for( i <- 0 to (n-1) ){		//iCj print
			for( j <- 0 to (n-1) ){
				print( mx(i)(j)+" " )
			}
			println("")
		}
 
		println("jCi:")
		for( i <- 0 to (n-1) ){		//jCi print
			for( j <- 0 to (n-1) ){
				print( mx(j)(i)+" " )
			}
			println("")
		}
 
		//(i+j)C j
		for( i <- 0 to (n-1); j <- 0 to (n-1) ){
 
			mx(i)(j) = F.fact(i+j) / ( ( F.fact(j) )*( F.fact(i) ) )
		}
		//print (i+j)Cj
		println("(i+j)Cj:")
		for( i <- 0 to (n-1) ){
			for( j <- 0 to (n-1) ){
				print( mx(i)(j)+" " )
			}
			println("")
		}
 
	}
}
 
class Factorial(){
 
	def fact( a:Int ): Int = {
 
		var b:Int = 1
 
		for( i <- 2 to a ){
			b = b*i
		}
		return b
	}
}
 