Bell numbers: Difference between revisions

Dialects of BASIC moved to the BASIC section.
(→‎{{header|Vlang}}: Rename "Vlang" in "V (Vlang)")
(Dialects of BASIC moved to the BASIC section.)
Line 321:
21147 25287 30304 36401 43833 52922 64077 77821 94828 115975</pre>
 
=={{header|Applesoft BASIC}}==
{{trans|C}}
<syntaxhighlight lang="gwbasic"> 100 LET ROWS = 15
110 LET M$ = CHR$ (13)
120 LET N = ROWS: GOSUB 500"BELLTRIANGLE"
130 PRINT "FIRST FIFTEEN BELL NUMBERS:"
140 FOR I = 1 TO ROWS
150 LET BR = I:BC = 0: GOSUB 350"GETBELL"
160 HTAB T * 13 + 1
170 PRINT RIGHT$ (" " + STR$ (I),2)": "BV; MID$ (M$,1,T = 2);
180 LET T = T + 1 - (T = 2) * 3
190 NEXT I
200 PRINT M$"THE FIRST TEN ROWS OF BELL'S TRIANGLE:";
210 FOR I = 1 TO 10
220 LET BR = I:BC = 0: GOSUB 350"GETBELL"
230 PRINT M$BV;
240 FOR J = 1 TO I - 1
250 IF I - 1 > = J THEN BR = I:BC = J: GOSUB 350"GETBELL": PRINT " "BV;
260 NEXT J,I
270 END
 
300 LET BI = BR * (BR - 1) / 2 + BC
310 RETURN
 
350 GOSUB 300"BELLINDEX"
360 LET BV = TRI(BI)
370 RETURN
 
400 GOSUB 300"BELLINDEX"
410 LET TRI(BI) = BV
420 RETURN
 
500 DIM TRI(N * (N + 1) / 2)
510 LET BR = 1:BC = 0:BV = 1: GOSUB 400"SETBELL"
520 FOR I = 2 TO N
530 LET BR = I - 1:BC = I - 2: GOSUB 350"GETBELL"
540 LET BR = I:BC = 0: GOSUB 400"SETBELL"
550 FOR J = 1 TO I - 1
560 LET BR = I:BC = J - 1: GOSUB 350"GETBELL":V = BV
570 LET BR = I - 1:BC = J - 1: GOSUB 350"GETBELL"
580 LET BR = I:BC = J:BV = V + BV: GOSUB 400"SETBELL"
590 NEXT J,I
600 RETURN</syntaxhighlight>
=={{header|Arturo}}==
 
{{trans|D}}
 
<syntaxhighlight lang="rebol">bellTriangle: function[n][
tri: map 0..n-1 'x [ map 0..n 'y -> 0 ]
Line 484 ⟶ 439:
4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147
21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975</pre>
 
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
{{trans|C}}
<syntaxhighlight lang="gwbasic"> 100 LET ROWS = 15
110 LET M$ = CHR$ (13)
120 LET N = ROWS: GOSUB 500"BELLTRIANGLE"
130 PRINT "FIRST FIFTEEN BELL NUMBERS:"
140 FOR I = 1 TO ROWS
150 LET BR = I:BC = 0: GOSUB 350"GETBELL"
160 HTAB T * 13 + 1
170 PRINT RIGHT$ (" " + STR$ (I),2)": "BV; MID$ (M$,1,T = 2);
180 LET T = T + 1 - (T = 2) * 3
190 NEXT I
200 PRINT M$"THE FIRST TEN ROWS OF BELL'S TRIANGLE:";
210 FOR I = 1 TO 10
220 LET BR = I:BC = 0: GOSUB 350"GETBELL"
230 PRINT M$BV;
240 FOR J = 1 TO I - 1
250 IF I - 1 > = J THEN BR = I:BC = J: GOSUB 350"GETBELL": PRINT " "BV;
260 NEXT J,I
270 END
 
300 LET BI = BR * (BR - 1) / 2 + BC
310 RETURN
 
350 GOSUB 300"BELLINDEX"
360 LET BV = TRI(BI)
370 RETURN
 
400 GOSUB 300"BELLINDEX"
410 LET TRI(BI) = BV
420 RETURN
 
500 DIM TRI(N * (N + 1) / 2)
510 LET BR = 1:BC = 0:BV = 1: GOSUB 400"SETBELL"
520 FOR I = 2 TO N
530 LET BR = I - 1:BC = I - 2: GOSUB 350"GETBELL"
540 LET BR = I:BC = 0: GOSUB 400"SETBELL"
550 FOR J = 1 TO I - 1
560 LET BR = I:BC = J - 1: GOSUB 350"GETBELL":V = BV
570 LET BR = I - 1:BC = J - 1: GOSUB 350"GETBELL"
580 LET BR = I:BC = J:BV = V + BV: GOSUB 400"SETBELL"
590 NEXT J,I
600 RETURN</syntaxhighlight>
 
==={{header|FreeBASIC}}===
<syntaxhighlight lang="freebasic">#define MAX 21
 
#macro ncp(n, p)
(fact(n)/(fact(p))/(fact(n-p)))
#endmacro
 
dim as ulongint fact(0 to MAX), bell(0 to MAX)
dim as uinteger n=0, k
 
fact(0) = 1
for k=1 to MAX
fact(k) = k*fact(k-1)
next k
 
bell(n) = 1
print n, bell(n)
for n=0 to MAX-1
for k=0 to n
bell(n+1) += ncp(n, k)*bell(k)
next k
print n+1, bell(n+1)
next n</syntaxhighlight>
 
==={{header|Visual Basic .NET}}===
{{trans|C#}}
<syntaxhighlight lang="vbnet">Imports System.Numerics
Imports System.Runtime.CompilerServices
 
Module Module1
 
<Extension()>
Sub Init(Of T)(array As T(), value As T)
If IsNothing(array) Then Return
For i = 0 To array.Length - 1
array(i) = value
Next
End Sub
 
Function BellTriangle(n As Integer) As BigInteger()()
Dim tri(n - 1)() As BigInteger
For i = 0 To n - 1
Dim temp(i - 1) As BigInteger
tri(i) = temp
tri(i).Init(0)
Next
tri(1)(0) = 1
For i = 2 To n - 1
tri(i)(0) = tri(i - 1)(i - 2)
For j = 1 To i - 1
tri(i)(j) = tri(i)(j - 1) + tri(i - 1)(j - 1)
Next
Next
Return tri
End Function
 
Sub Main()
Dim bt = BellTriangle(51)
Console.WriteLine("First fifteen Bell numbers:")
For i = 1 To 15
Console.WriteLine("{0,2}: {1}", i, bt(i)(0))
Next
Console.WriteLine("50: {0}", bt(50)(0))
Console.WriteLine()
Console.WriteLine("The first ten rows of Bell's triangle:")
For i = 1 To 10
Dim it = bt(i).GetEnumerator()
Console.Write("[")
If it.MoveNext() Then
Console.Write(it.Current)
End If
While it.MoveNext()
Console.Write(", ")
Console.Write(it.Current)
End While
Console.WriteLine("]")
Next
End Sub
 
End Module</syntaxhighlight>
{{out}}
<pre>First fifteen Bell numbers:
1: 1
2: 1
3: 2
4: 5
5: 15
6: 52
7: 203
8: 877
9: 4140
10: 21147
11: 115975
12: 678570
13: 4213597
14: 27644437
15: 190899322
50: 10726137154573358400342215518590002633917247281
 
The first ten rows of Bell's triangle:
[1]
[1, 2]
[2, 3, 5]
[5, 7, 10, 15]
[15, 20, 27, 37, 52]
[52, 67, 87, 114, 151, 203]
[203, 255, 322, 409, 523, 674, 877]
[877, 1080, 1335, 1657, 2066, 2589, 3263, 4140]
[4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147]
[21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975]</pre>
 
=={{header|C}}==
Line 1,382 ⟶ 1,493:
{{out}}
As above.
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">#define MAX 21
 
#macro ncp(n, p)
(fact(n)/(fact(p))/(fact(n-p)))
#endmacro
 
dim as ulongint fact(0 to MAX), bell(0 to MAX)
dim as uinteger n=0, k
 
fact(0) = 1
for k=1 to MAX
fact(k) = k*fact(k-1)
next k
 
bell(n) = 1
print n, bell(n)
for n=0 to MAX-1
for k=0 to n
bell(n+1) += ncp(n, k)*bell(k)
next k
print n+1, bell(n+1)
next n</syntaxhighlight>
 
=={{header|Go}}==
Line 3,973 ⟶ 4,060:
4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147
21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975</pre>
 
=={{header|Visual Basic .NET}}==
{{trans|C#}}
<syntaxhighlight lang="vbnet">Imports System.Numerics
Imports System.Runtime.CompilerServices
 
Module Module1
 
<Extension()>
Sub Init(Of T)(array As T(), value As T)
If IsNothing(array) Then Return
For i = 0 To array.Length - 1
array(i) = value
Next
End Sub
 
Function BellTriangle(n As Integer) As BigInteger()()
Dim tri(n - 1)() As BigInteger
For i = 0 To n - 1
Dim temp(i - 1) As BigInteger
tri(i) = temp
tri(i).Init(0)
Next
tri(1)(0) = 1
For i = 2 To n - 1
tri(i)(0) = tri(i - 1)(i - 2)
For j = 1 To i - 1
tri(i)(j) = tri(i)(j - 1) + tri(i - 1)(j - 1)
Next
Next
Return tri
End Function
 
Sub Main()
Dim bt = BellTriangle(51)
Console.WriteLine("First fifteen Bell numbers:")
For i = 1 To 15
Console.WriteLine("{0,2}: {1}", i, bt(i)(0))
Next
Console.WriteLine("50: {0}", bt(50)(0))
Console.WriteLine()
Console.WriteLine("The first ten rows of Bell's triangle:")
For i = 1 To 10
Dim it = bt(i).GetEnumerator()
Console.Write("[")
If it.MoveNext() Then
Console.Write(it.Current)
End If
While it.MoveNext()
Console.Write(", ")
Console.Write(it.Current)
End While
Console.WriteLine("]")
Next
End Sub
 
End Module</syntaxhighlight>
{{out}}
<pre>First fifteen Bell numbers:
1: 1
2: 1
3: 2
4: 5
5: 15
6: 52
7: 203
8: 877
9: 4140
10: 21147
11: 115975
12: 678570
13: 4213597
14: 27644437
15: 190899322
50: 10726137154573358400342215518590002633917247281
 
The first ten rows of Bell's triangle:
[1]
[1, 2]
[2, 3, 5]
[5, 7, 10, 15]
[15, 20, 27, 37, 52]
[52, 67, 87, 114, 151, 203]
[203, 255, 322, 409, 523, 674, 877]
[877, 1080, 1335, 1657, 2066, 2589, 3263, 4140]
[4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147]
[21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975]</pre>
 
=={{header|V (Vlang)}}==
Line 4,231:
The fiftieth Bell number: 10726137154573358400342215518590002633917247281
</pre>
 
{{omit from|PL/0}}
{{omit from|Tiny BASIC}}
511

edits