How to resolve the algorithm Pascal matrix generation step by step in the Nim programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Pascal matrix generation step by step in the Nim programming language

Table of Contents

Problem Statement

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: A Pascal lower-triangular matrix that is populated with   iCj   (the transpose of the upper-triangular matrix): A Pascal symmetric matrix that is populated with   i+jCi:

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).

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

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Pascal matrix generation step by step in the Nim programming language

Source code in the nim programming language

import math, sequtils, strutils

type SquareMatrix = seq[seq[Natural]]

func newSquareMatrix(n: Positive): SquareMatrix =
  ## Create a square matrix.
  newSeqWith(n, newSeq[Natural](n))

func pascalUpperTriangular(n: Positive): SquareMatrix =
  ## Create an upper Pascal matrix.
  result = newSquareMatrix(n)
  for i in 0..<n:
    for j in i..<n:
      result[i][j] = binom(j, i)

func pascalLowerTriangular(n: Positive): SquareMatrix =
  ## Create a lower Pascal matrix.
  result = newSquareMatrix(n)
  for i in 0..<n:
    for j in i..<n:
      result[j][i] = binom(j, i)

func pascalSymmetric(n: Positive): SquareMatrix =
  ## Create a symmetric Pascal matrix.
  result = newSquareMatrix(n)
  for i in 0..<n:
    for j in 0..<n:
      result[i][j] = binom(i + j, i)

proc print(m: SquareMatrix) =
  ## Print a square matrix.
  let matMax = max(m.mapIt(max(it)))
  let length = ($matMax).len
  for i in 0..m.high:
    echo "| ", m[i].mapIt(($it).align(length)).join(" "), " |"

echo "Upper:"
print pascalUpperTriangular(5)
echo "\nLower:"
print pascalLowerTriangular(5)
echo "\nSymmetric:"
print pascalSymmetric(5)


  

You may also check:How to resolve the algorithm Cumulative standard deviation step by step in the Ada programming language
You may also check:How to resolve the algorithm Quine step by step in the ooRexx programming language
You may also check:How to resolve the algorithm Closest-pair problem step by step in the IS-BASIC programming language
You may also check:How to resolve the algorithm Make directory path step by step in the Python programming language
You may also check:How to resolve the algorithm Arbitrary-precision integers (included) step by step in the Seed7 programming language