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