50 lines
1007 B
Plaintext
50 lines
1007 B
Plaintext
100 PROGRAM "PI.bas"
|
|
110 LET N=100 ! Nuber of digits
|
|
120 LET LN=INT(10*N/3)+16
|
|
130 DIM A(LN)
|
|
140 LET PD,N9=0:LET ND=1
|
|
150 FOR J=1 TO LN
|
|
160 LET A(J-1)=2
|
|
170 NEXT
|
|
180 FOR J=1 TO N
|
|
190 LET Q=0
|
|
200 FOR I=LN TO 1 STEP-1
|
|
210 LET X=10*A(I-1)+Q*I
|
|
220 LET A(I-1)=X-(2*I-1)*INT(X/(2*I-1))
|
|
230 LET Q=INT(X/(2*I-1))
|
|
240 NEXT
|
|
250 LET A(0)=Q-10*INT(Q/10)
|
|
260 LET Q=INT(Q/10)
|
|
270 SELECT CASE Q
|
|
280 CASE 9
|
|
290 LET N9=N9+1
|
|
300 CASE 10
|
|
310 LET D=PD+1:CALL WRITE
|
|
320 IF N9>0 THEN
|
|
330 FOR K=1 TO N9
|
|
340 LET D=0:CALL WRITE
|
|
350 NEXT
|
|
360 END IF
|
|
370 LET PD,N9=0
|
|
380 CASE ELSE
|
|
390 LET D=PD:CALL WRITE
|
|
400 LET PD=Q
|
|
410 IF N9<>0 THEN
|
|
420 FOR K=1 TO N9
|
|
430 LET D=9:CALL WRITE
|
|
440 NEXT
|
|
450 LET N9=0
|
|
460 END IF
|
|
470 END SELECT
|
|
480 NEXT
|
|
490 PRINT STR$(PD)(1)
|
|
500 END
|
|
510 DEF WRITE
|
|
520 IF ND=0 THEN
|
|
530 PRINT STR$(D)(1);
|
|
540 ELSE IF D<>0 THEN
|
|
550 PRINT STR$(D)(1);".";
|
|
560 LET ND=0
|
|
570 END IF
|
|
580 END DEF
|