RosettaCodeData/Task/Pascal-matrix-generation/VBA/pascal-matrix-generation.vba

50 lines
1.2 KiB
Plaintext

Option Base 1
Private Function pascal_upper(n As Integer)
Dim res As Variant: ReDim res(n, n)
For j = 1 To n
res(1, j) = 1
Next j
For i = 2 To n
res(i, 1) = 0
For j = 2 To i
res(j, i) = res(j, i - 1) + res(j - 1, i - 1)
Next j
For j = i + 1 To n
res(j, i) = 0
Next j
Next i
pascal_upper = res
End Function
Private Function pascal_symmetric(n As Integer)
Dim res As Variant: ReDim res(n, n)
For i = 1 To n
res(i, 1) = 1
res(1, i) = 1
Next i
For i = 2 To n
For j = 2 To n
res(i, j) = res(i - 1, j) + res(i, j - 1)
Next j
Next i
pascal_symmetric = res
End Function
Private Sub pp(m As Variant)
For i = 1 To UBound(m)
For j = 1 To UBound(m, 2)
Debug.Print Format(m(i, j), "@@@");
Next j
Debug.Print
Next i
End Sub
Public Sub main()
Debug.Print "=== Pascal upper matrix ==="
pp pascal_upper(5)
Debug.Print "=== Pascal lower matrix ==="
pp WorksheetFunction.Transpose(pascal_upper(5))
Debug.Print "=== Pascal symmetrical matrix ==="
pp pascal_symmetric(5)
End Sub