150 HCOLOR= 0: IF L1 +L2 = 2 THEN DRAW 11 AT 110,AY +40: HCOLOR= 3: DRAW 12 AT 110,AY +40
160 IF L1 +L2 >2 THEN DRAW 11 AT 95,AY +40: HCOLOR= 3: DRAW 12 AT 95,AY +40
170 ANS = N1 -N2:LA = LEN( STR$(ANS))
180 RETURN
190 REM -- ADDITION --
200 IF L1 +L2 = 2 THEN DRAW N1 +(N1 = 0) *10 AT 140,AY: DRAW 11 AT 110,AY +40: DRAW N2 +(N2 = 0) *10 AT 140,AY +40: GOTO 250
210 IF L1 = 1 THEN DRAW N1 +(N1 = 0) *10 AT 155,AY
220 IF L2 = 1 THEN DRAW N2 +(N2 = 0) *10 AT 155,AY +40
230 DRAW 11 AT 95,AY +40: IF L1 = 2 THEN N1$ = STR$(N1):NA = VAL( LEFT$(N1$,1)):NB = VAL( RIGHT$(N1$,1)): DRAW NA +(NA = 0) *10 AT 125,AY: DRAW NB +(NB = 0) *10 AT 155,AY
240 IF L2 = 2 THEN N2$ = STR$(N2):NA = VAL( LEFT$(N2$,1)):NB = VAL( RIGHT$(N2$,1)): DRAW NA +(NA = 0) *10 AT 125,AY +40: DRAW NB +(NB = 0) *10 AT 155,AY +40
250 ANS = N1 +N2:LA = LEN( STR$(ANS))
260 RETURN
270 REM -- MULTIPLICATION --
280 GOSUB 200
290 HCOLOR= 0: IF L1 +L2 = 2 THEN DRAW 11 AT 110,AY +40: HCOLOR= 3: DRAW 13 AT 110,AY +40
300 IF L1 +L2 >2 THEN DRAW 11 AT 95,AY +40: HCOLOR= 3: DRAW 13 AT 95,AY +40
310 ANS = N1 *N2:LA = LEN( STR$(ANS))
320 RETURN
330 REM -- DIVISION --
340 N1 = N1 *N2:L1 = LEN( STR$(N1)): IF N2 = 0 THEN N2 = 1
350 IF L1 +L2 = 2 THEN DRAW N2 AT 95,EY: DRAW 15 AT 125,EY: DRAW N1 +(N1 = 0) *10 AT 155,EY: DRAW 16 AT 155,EY
360 IF L1 = 2 THEN N1$ = STR$(N1):NA = VAL( LEFT$(N1$,1)):NB = VAL( RIGHT$(N1$,1))
370 IF L2 = 2 THEN N2$ = STR$(N2):ND = VAL( LEFT$(N2$,1)):NE = VAL( RIGHT$(N2$,1))
380 IF L1 = 3 THEN N1$ = STR$(N1):NA = VAL( LEFT$(N1$,1)):NB = VAL( MID$ (N1$,2,1)):NC = VAL( RIGHT$(N1$,1))
390 GOSUB 470
400 IF L2 = 1 AND L1 = 2 THEN DRAW N2 AT 80,EY: DRAW 15 AT 110,EY: DRAW NA AT 140,EY: DRAW 16 AT 140,EY: DRAW NB AT 170,EY: DRAW 16 AT 170,EY
410 IF L2 = 1 AND L1 = 3 THEN DRAW N2 AT 65,EY: DRAW 15 AT 95,EY: DRAW NA AT 125,EY: DRAW 16 AT 125,EY: DRAW NB +(NB = 0) *10 AT 155,EY: DRAW 16 AT 155,EY: DRAW NC +(NC = 0) *10 AT 185,EY: DRAW 16 AT 185,EY
420 IF L2 = 2 AND L1 = 2 THEN DRAW ND AT 65,EY: DRAW NE AT 95,EY: DRAW 15 AT 125,EY: DRAW NA AT 155,EY: DRAW 16 AT 155,EY: DRAW NB AT 185,EY: DRAW 16 AT 185,EY
430 IF L2 = 2 AND L1 = 1 THEN DRAW ND AT 80,EY: DRAW NE AT 110,EY: DRAW 15 AT 140,EY: DRAW N1 +(N1 = 0) *10 AT 170,EY: DRAW 16 AT 170,EY
440 IF L2 = 2 AND L1 = 3 THEN DRAW ND AT 50,EY: DRAW NE AT 80,EY: DRAW 15 AT 110,EY: DRAW NA AT 140,EY: DRAW 16 AT 140,EY: DRAW NB AT 170,EY: DRAW 16 AT 170,EY: DRAW NC AT 200,EY: DRAW 16 AT 200,EY
450 ANS = N1/N2:LA = LEN( STR$(ANS)): GOSUB 530
460 RETURN
470 IF NA = 0 THEN NA = 10
480 IF NB = 0 THEN NB = 10
490 IF NC = 0 THEN NC = 10
500 IF ND = 0 THEN ND = 10
510 IF NE = 0 THEN NE = 10
520 RETURN
530 DY = EY -50: IF L1 +L2 = 2 THEN DX = 155: RETURN
540 IF L2 = 1 AND L1 = 2 THEN DX = 200 -30 *LA: RETURN
550 IF L2 = 1 AND L1 = 3 THEN DX = 215 -30 *LA: RETURN
560 IF L2 = 2 AND L1 = 2 THEN DX = 215 -30 *LA: RETURN
570 IF L2 = 2 AND L1 = 3 THEN DX = 230 -30 *LA: RETURN
580 IF L2 = 2 AND L1 = 1 THEN DX = 200 -30 *LA: RETURN
590 RETURN
600 REM -- INITIALIZATION --
610 PRINT CHR$(4);"BLOAD NUMBERS,A$4000"
620 POKE 232,0: POKE 233,64
630 HOME :EY = 58:AY = 18
640 DIM N1(50),N2(50),S1(50),S2(50)
650 DIM MS(40)
660 CO = 0:WR = 0
670 FOR I = 1 TO 7: READ OP$(I): NEXT
680 DATA "ADDITION","SUBTRACTION","ADDITION AND SUBTRACTION","MULTIPLICATION","DIVISION","MULTIPLICATION AND DIVISION","ALL FOUR"
690 INVERSE : HTAB 15: PRINT "FLASHCARD": NORMAL
700 PRINT : PRINT : PRINT "THE OPTIONS ARE:": PRINT
780 VTAB 10: PRINT "DO YOU WANT EASY ONES, HARD ONES,": INPUT "OR BOTH (TYPE E, H, OR B)?";B$
790 IF B$ = "E" OR B$ = "H" OR B$ = "B" THEN 810
800 VTAB 15: CALL -958: INPUT "ENTER E, H, OR B:";B$: GOTO 790
810 VTAB 20: IF B$ = "E" THEN PRINT "OK, LET'S PRACTICE EASY ONES.":BN = 7:CN = 0
820 IF B$ = "H" THEN PRINT "OK, LET'S PRACTICE HARD ONES.":BN = 6:CN = 7
830 IF B$ = "B" THEN PRINT "OK, LET'S PRACTICE BOTH.":BN = 13:CN = 0
840 FOR I = 1 TO 2000: NEXT I
850 HOME : POKE 34,20: HOME
860 POKE 230,32: CALL 62450
870 SCALE= 1: ROT= 0: HCOLOR= 3
880 POKE -16300,0: POKE -16301,0: POKE -16297,0
890 HOME
900 FOR PROB = 1 TO 50
910 POKE -16303,0: CALL 62450
920 POKE 35,22
930 HOME
940 POKE 35,24
950 Z = PEEK( -16368)
960 N1 = INT( RND(1) *BN) +CN
970 L1 = LEN( STR$(N1))
980 N2 = INT( RND(1) *BN) +CN
990 L2 = LEN( STR$(N2))
1000 IF A = 1 THEN P1 = 2:P2 = 2
1010 IF A = 2 THEN P1 = 2:P2 = 7
1020 IF A = 3 THEN P1 = 2:P2 = INT( RND(1) *10)
1030 IF A = 4 THEN P1 = 7:P2 = 2
1040 IF A = 5 THEN P1 = 7:P2 = 7
1050 IF A = 6 THEN P1 = 7:P2 = INT( RND(1) *10)
1060 IF A = 7 THEN P1 = INT( RND(1) *10):P2 = INT( RND(1) *10)
1070 IF P1 < = 4 AND P2 < = 4 THEN GOSUB 200
1080 IF P1 < = 4 AND P2 > = 5 THEN GOSUB 130
1090 IF P1 > = 5 AND P2 < = 4 THEN GOSUB 280
1100 IF P1 > = 5 AND P2 > = 5 THEN GOSUB 340: GOTO 1150
1110 IF L1 +L2 = 2 THEN DRAW 14 AT 110,AY +80: DRAW 14 AT 140,AY +80
1120 IF L1 +L2 >2 THEN DRAW 14 AT 95,AY +80: DRAW 14 AT 125,AY +80: DRAW 14 AT 155,98
1130 DY = AY +90: IF L1 +L2 = 2 THEN DX = 170 -30 *LA: GOTO 1150
1140 IF L1 +L2 >2 THEN DX = 185 -30 *LA
1150 POKE -16304,0: REM SW TO HIRES
1160 VTAB (23): HTAB (37):NO = CO +WR +1
1170 PRINT SPC( 2 - LEN( STR$(NO)));NO
1180 ANS$ = STR$(ANS)
1190 LA = LEN(ANS$)
1200 TIME = 200
1210 G1 = -1
1220 G2 = -1
1230 G3 = -1
1240 HCOLOR= 6
1250 FOR I = 1 TO TIME
1260 X = PEEK( -16384): IF X <176 OR X >185 THEN X = 33
1270 IF G1 > = 0 THEN 1300
1280 IF X >127 THEN G1 = X:Y = PEEK( -16368): DRAW G1 -176 +(G1 = 176) *10 AT DX,DY
1290 GOTO 1370
1300 IF LA = 1 THEN 1380
1310 IF G2 > = 0 THEN 1340
1320 IF X >127 THEN G2 = X:Y = PEEK( -16368): DRAW G2 -176 +(G2 = 176) *10 AT DX +30,DY
1330 GOTO 1370
1340 IF LA = 2 THEN 1380
1350 IF G3 > = 0 THEN 1380
1360 IF X >127 THEN G3 = X:Y = PEEK( -16368): DRAW G3 -176 +(G3 = 176) *10 AT DX +60,DY
1370 NEXT I
1380 G1$ = STR$(G1 -176)
1390 HCOLOR= 3
1400 G2$ = STR$(G2 -176)
1410 G3$ = STR$(G3 -176)
1420 GUESS = VAL(G1$)
1430 IF LA = 2 THEN GUESS = VAL(G1$ +G2$)
1440 IF LA = 3 THEN GUESS = VAL(G1$ +G2$ +G3$)
1450 VTAB 21
1460 IF ANS = GUESS THEN PRINT "THAT'S CORRECT!"; CHR$(7):CO = CO +1
1470 REM CTRL G IN STATEMENT 1460
1480 IF ANS < >GUESS THEN PRINT "THAT'S WRONG!":WR = WR +1
1490 IF ANS < >GUESS THEN N1(WR) = N1:N2(WR) = N2:S1(WR) = P1:S2(WR) = P2
1500 IF ANS < >GUESS THEN FOR I = 1 TO 20:X = PEEK( -16336): NEXT I
1510 FOR I = 1 TO 300: NEXT I
1520 NEXT PROB
1530 TEXT
1540 HOME : VTAB (9)
1550 PRINT "YOU GOT ";CO;" RIGHT AND ";WR;" WRONG."
1560 SC = CO/(CO +WR)
1570 SG = INT(100 *SC +.5)
1580 PRINT : PRINT "YOUR SCORE IS ";SG;"."
1590 PRINT : PRINT : PRINT
1600 GOSUB 1680
1610 IF SC > = .95 THEN PRINT "THAT'S EXCELLENT! I'M PROUD OF YOU. NOW YOU CAN PLAY A GAME.": GOTO 1660
1620 IF SC > = .9 THEN PRINT "THAT'S VERY GOOD! KEEP UP THE GOOD WORK. NOW YOU CAN PLAY A GAME.": GOTO 1660
1630 IF SC > = .8 THEN PRINT "THAT'S GOOD! YOU NEED JUST A LITTLE MORE PRACTICE.": GOTO 1660
1640 IF SC > = .7 THEN PRINT "YOU NEED SOME MORE PRACTICE. LET ME GIVE YOU THE PROBLEMS YOU GOT WRONG. TYPE 'RUN PRACTICE' AND WE'LL SEE IF YOU CAN DO BETTER.": GOTO 1660
1650 PRINT "COME ON, YOU CAN DO BETTER THAN THAT. LET ME GIVE YOU THE PROBLEMS YOU GOT WRONG. TYPE 'RUN PRACTICE' AND WE'LL SEE IF YOU CAN DO BETTER."
1660 GOTO 1820
1670 END
1680 IF WR = 0 THEN RETURN
1690 D$ = CHR$(4)
1700 PRINT D$;"OPEN PROBLEMS"
1710 PRINT D$;"DELETE PROBLEMS"
1720 PRINT D$;"OPEN PROBLEMS"
1730 PRINT D$;"WRITE PROBLEMS"
1740 PRINT WR
1750 FOR J = 1 TO WR
1760 PRINT N1(J)
1770 PRINT N2(J)
1780 PRINT S1(J): PRINT S2(J)
1790 NEXT J
1800 PRINT D$;"CLOSE PROBLEMS"
1810 RETURN
1820 PRINT : PRINT : PRINT "BEFORE YOU DO, LET ME SHOW YOU YOUR PROGRESS."