10 REM A MULTIPICATION TESTER 20 REM BY ANDREW YORK IN 1996 30 REM ---------------------- 40 MODE7:VDU23;10,32;0;0;0 50 ON ERROR IF ERR=17 THEN RUN ELSE GOTO 2070 60 *FX4,1 70 *FX18 80 PRINT" Times Table Tester "; 90 PRINT" TImes Table Tester "; 100 PRINT" "; 110 PRINT" "; 120 PRINT" "; 130 PRINT" "; 140 PRINT" "; 150 PRINT"1. A test to pit your wits against "; 160 PRINT" "; 170 PRINT"2. A random test! " 180 PRINT" "; 190 PRINT"3. View Multipication table "; 200 PRINT" "; 210 PRINT"4. Leave program and return to basic "; 220 PRINT" "; 230 PRINT" "; 240 PRINT" "; 250 PRINT" "; 260 PRINT" "; 270 PRINT" "; 280 PRINT" "; 290 PRINT" "; 300 PRINT" "; 310 PRINT"By A.M.York For The BBC Micro 1996 "; 320 REPEAT 330 CHOICE$=GET$:SOUND1,20,90,1 340 IF CHOICE$="1" THEN PROCtest 350 IF CHOICE$="2" THEN PROCmajortest 360 IF CHOICE$="3" THEN PROCtable 370 IF CHOICE$="4" THEN PROCexit 380 UNTIL FALSE 390 DEFPROCtest 400 INPUTTAB(1,18);"What table (2-12) ?"A 410 VDU28,0,24,39,2:CLS:VDU26 411 IF A <2 THEN A=2 412 IF A >12 THEN A=12 420 C=1 430 D=5 440 E=2 450 F=0 451 REM"Im not very good at using all 452 REM"these stupid variables! 460 VDU28,0,24,39,2:CLS:VDU26 470 PRINTTAB(1,3);"Correct " 480 PRINTTAB(21,3);"Wrong " 490 PRINTTAB(4,5);"0" 500 PRINTTAB(25,5);"0" 510 FOR B = 1 TO 12 520 D=D+2 530 IF B =7 THEN E=E+20:D=7 540 ANSWER= A * B 550 PRINTTAB(E,D);"";B" X ";A" = "; 560 INPUT input 570 IFinput=ANSWER THEN F=F+1:PRINTTAB(5,5);F:SOUND 1,90,19,1 580 IFinput <> ANSWER THEN G=G+1:PRINTTAB(25,5);G:SOUND 1,50,90,1:PROCpractice 590 NEXT B:PROCwelldone:ENDPROC 600 END 610 DEFPROCpractice:B=B-1:CORRECT=A*B 620 VDU28,0,24,39,18 630 PRINTTAB(5);"ppppppppppppppppppppppp" 640 E=0:REPEAT:PRINTTAB(5);" ":E=E+1:UNTIL E=4 650 PRINTTAB(5);"ppppppppppppppppppppp" 660 PRINTTAB(7,2);"";B;" X ";A;" = "; 670 INPUT wrong 680 IF wrong <> CORRECT THEN CLS:VDU7:GOTO 620 690 PRINTTAB(7,4);"";wrong;" + ";A;" = "; 700 INPUT ok 710 IF ok <> wrong + A THEN CLS:PRINTTAB(5);"ppppppppppppppppppppppp":E=0:REPEAT:PRINTTAB(5);" ":E=E+1:UNTIL E=4:PRINTTAB(5);"ppppppppppppppppppppp":PRINTTAB(7,2);"";B;" X ";A;" = ";wrong::GOTO 690 720 CLS:B=B+1 730 IF B >=7 THEN E=22 ELSE E=2 740 VDU26:ENDPROC 750 DEFPROCwelldone 760 VDU28,0,24,39,18:CLS 770 SOUND1,20,120,1 780 IF F=12 THEN PRINT'"Welldone you got all twelve right!":GOTO840 790 IF F = 6 THEN PRINT'"Welldone you got half right!":GOTO840 800 IF F >10 THEN PRINT'"Good try you nearly got all them right":GOTO840 810 IF F <6 THEN PRINT'"Good try but you need some more":PRINT"practice.":GOTO840 820 IF F <4 THEN PRINT'"You need to learn your tables!":GOTO840 830 PRINT'"Good try you got ";F;" right out of twelve" 840 PRINTTAB(5);"Press Space to contine"; 850 REPEAT:A$=GET$:UNTIL A$=" " 860 CLS:VDU26:VDU28,0,24,39,2:CLS:RUN 870 DEFPROCmajortest 871 REM"WHAT A MESS! 872 REM"WELL AT LEAST IT WORKS 880 E=2 890 D=5 900 G=0 910 H=0 920 VDU28,0,24,39,2:CLS:VDU26 930 PRINTTAB(1,3);"Correct " 940 PRINTTAB(21,3);"Wrong " 950 PRINTTAB(4,5);"0" 960 PRINTTAB(25,5);"0" 970 FOR OG = 1 TO 18 980 B=RND(12):IF B=0 THEN B=3 990 A=RND(12):IF A=0 THEN A=4 1000 D=D+2 1010 IF OG =10 THEN E=23:D=7 1020 PRINTTAB(E,D);"";B" X ";A" = "; 1030 right=B*A 1040 INPUT input 1050 IF input=right G=G+1:PRINTTAB(4,5);"";G:SOUND1,20,90,1 ELSE H=H+1:PRINTTAB(25,5);"";H :SOUND1,20,30,1 1060 NEXT OG 1070 PRINTTAB(12,D+1);"PRESS SPACE"; 1080 REPEAT:A$=GET$:UNTIL A$=" ":RUN 1090 ENDPROC 2000 DEFPROCexit 2010 *FX8 2020 *FX4,0 2030 :VDU28,0,24,39,2:CLS:VDU26 2040 PRINTTAB(2,5);"BYE ....":VDU28,0,24,39,2:VDU14 2050 END 2060 ENDPROC 2070 ONERROR OFF 2080 *FX4,0 2090 VDU26 2100 CLS 2110 REPORT:PRINT"atline";ERL 2120 END 2130 DEFPROCtable:CLS 2140 PRINT" Multipication Table "; 2150 PRINT" MUlTIpIcaTIOn Table "; 2160 PRINT" "; 2170 PRINT" 0 1 2 3 4 5 6 7 8 9 10 "; 2180 PRINT" "; 2190 PRINT" 1 1 2 3 4 5 6 7 8 9 10 "; 2200 PRINT" "; 2210 PRINT" 2 2 4 6 8 10 12 14 16 18 20 "; 2220 PRINT" "; 2230 PRINT" 3 3 6 9 12 15 18 21 24 27 30 "; 2240 PRINT" "; 2250 PRINT" 4 4 8 12 16 20 24 28 32 36 40 "; 2260 PRINT" "; 2270 PRINT" 5 5 10 15 20 25 30 35 40 45 50 "; 2280 PRINT" "; 2290 PRINT" 6 6 12 18 24 30 36 42 48 54 60 "; 2300 PRINT" "; 2310 PRINT" 7 7 14 21 28 35 42 49 56 63 70 "; 2320 PRINT" "; 2330 PRINT" 8 8 16 24 32 40 48 56 64 72 80 "; 2340 PRINT" "; 2350 PRINT" 9 9 18 27 36 45 54 63 72 81 90 "; 2360 PRINT" "; 2370 PRINT"1010 20 30 40 50 60 70 80 90 100 "; 2380 PRINT"Press space"; 2390 REPEAT:A$=GET$:UNTIL A$=" ":RUN:ENDPROC