46 lines
1.3 KiB
Text
46 lines
1.3 KiB
Text
bell = cluster is make, get
|
|
rep = array[int]
|
|
|
|
idx = proc (row, col: int) returns (int)
|
|
return (row * (row - 1) / 2 + col)
|
|
end idx
|
|
|
|
get = proc (tri: cvt, row, col: int) returns (int)
|
|
return (tri[idx(row, col)])
|
|
end get
|
|
|
|
make = proc (rows: int) returns (cvt)
|
|
length: int := rows * (rows+1) / 2
|
|
arr: rep := rep$fill(0, length, 0)
|
|
|
|
arr[idx(1,0)] := 1
|
|
for i: int in int$from_to(2, rows) do
|
|
arr[idx(i,0)] := arr[idx(i-1, i-2)]
|
|
for j: int in int$from_to(1, i-1) do
|
|
arr[idx(i,j)] := arr[idx(i,j-1)] + arr[idx(i-1,j-1)]
|
|
end
|
|
end
|
|
return(arr)
|
|
end make
|
|
end bell
|
|
|
|
start_up = proc ()
|
|
rows = 15
|
|
|
|
po: stream := stream$primary_output()
|
|
belltri: bell := bell$make(rows)
|
|
|
|
stream$putl(po, "The first 15 Bell numbers are:")
|
|
for i: int in int$from_to(1, rows) do
|
|
stream$putl(po, int$unparse(i)
|
|
|| ": " || int$unparse(bell$get(belltri, i, 0)))
|
|
end
|
|
|
|
stream$putl(po, "\nThe first 10 rows of the Bell triangle:")
|
|
for row: int in int$from_to(1, 10) do
|
|
for col: int in int$from_to(0, row-1) do
|
|
stream$putright(po, int$unparse(bell$get(belltri, row, col)), 7)
|
|
end
|
|
stream$putc(po, '\n')
|
|
end
|
|
end start_up
|