10 ! FRACCY.BAS FRACTION CYCLE GENERATOR
20 ! BYTE NOV '85 P.434-6
MAP1 NUMER,F
MAP1 DENOM,F
MAP1 NEW'REMAIN,S,3,"YES"
MAP1 DIGIT,F,,1
MAP1 DIVIDEND,F
MAP1 EXACT,S,3,""
MAP1 N,F
MAP1 D,F
SIGNIFICANCE 11
30 PRINT TAB(-1,0)
PRINT "FRACTION CYCLE GENERATOR"
40 PRINT
50 PRINT "THIS PROGRAM CALCULATES THE CYCLE OF REPEATING DECIMALS"
PRINT "FOR POSITIVE FRACTIONS. ANSWERS ARE PRINTED AS #.##_##..."
PRINT "WHERE THE NUMBERS BETWEEN '_' AND '...' ARE REPEATED INFINITELY."
PRINT
PRINT
100 INPUT "ENTER THE FRACTION'S NUMERATOR ";N:NUMER=ABS(N)
110 INPUT "ENTER THE FRACTION'S DENOMINATOR ";D:DENOM=ABS(D)
130 DIM TERM(DENOM),REMAIN(DENOM)
150 TERM(1)=INT(NUMER/DENOM)
170 REMAIN=NUMER-TERM(1)*DENOM:REMAIN(REMAIN)=1
200 NEW'REMAINDER:
220 DIGIT=DIGIT+1
230 DIVIDEND=10*REMAIN
240 TERM(DIGIT)=INT(DIVIDEND/DENOM)
250 REMAIN=DIVIDEND-TERM(DIGIT)*DENOM
270 IF REMAIN=0 THEN EXACT="YES":REMAIN(REMAIN)=DIGIT
290 IF REMAIN(REMAIN)=0 THEN REMAIN(REMAIN)=DIGIT+1 ELSE NEW'REMAIN="NO"
300 IF NEW'REMAIN="YES" GOTO NEW'REMAINDER
320 PRINT NUMER;"/";DENOM;"=";
340 PRINT TERM(1);". ";
360 FOR I=2 TO REMAIN(REMAIN)-1
370 PRINT USING "#";TERM(I);
380 NEXT I
400 IF EXACT<>"YES" THEN PRINT "_";
420 FOR I=REMAIN(REMAIN) TO DIGIT
430 PRINT USING "#";TERM(I);
440 NEXT I
460 IF EXACT<>"YES" THEN PRINT "...":PRINT:PRINT "THE CYCLE LENGTH IS ";DIGIT-REMAIN(REMAIN)+1
480 IF EXACT="YES" THEN PRINT:PRINT:PRINT "THIS IS A NON-REPEATING DECIMAL."
490 END