RosettaCodeData/Task/Pi/BASIC/pi-1.basic

52 lines
1.2 KiB
Plaintext

10 rem adopted from Commodore BASIC
20 n = 100 : rem N may be increased, but will slow execution
30 ln = int(10*n/4)
40 nd = 1
50 dim a(ln)
60 n9 = 0
70 pd = 0 :rem First pre-digit is a 0
80 rem
90 for j = 1 to ln
100 a(j-1) = 2 :rem Start with 2s
110 next j
120 rem
130 for j = 1 to n
140 q = 0
150 for i = ln to 1 step -1 :rem Work backwards
160 x = 10*a(i-1) + q*i
170 a(i-1) = x - (2*i-1)*int(x/(2*i-1)) :rem X - INT ( X / Y) * Y
180 q = int(x/(2*i - 1))
190 next i
200 a(0) = q-10*int(q/10)
210 q = int(q/10)
220 if q=9 then n9 = n9 + 1 : goto 450
240 if q<>10 then goto 350
250 rem q == 10
260 d = pd+1 : gosub 500
270 if n9 < 0 then goto 320
280 for k = 1 to n9
290 d = 0: gosub 500
300 next k
310 rem end if
320 pd = 0
330 n9 = 0
335 goto 450
340 rem q <> 10
350 d = pd: gosub 500
360 pd = q
370 if n9 = 0 then goto 450
380 for k = 1 to n9
390 d = 9 : gosub 500
400 next k
410 n9 = 0
450 next j
460 print str$(pd)
470 end
480 rem
490 rem output digits
500 if nd=0 then print str$(d); : return
510 if d=0 then return
520 print str$(d);".";
530 nd = 0
550 return