10 REM**C.A.I.**CHEM1**CHEMISTRY DRILL**MAY 19, 1972 15 REM HP 36878A, 6/74 20 K2=T=1 30 S=S2=K1=T1=T2=0 40 S3=S4=100 50 MAT Q=ZER 60 FILES REC1,$EX1,$EX2,$EX3 70 DIM I$[10],R$[72],O$[20],P$[20],A$[72],E$[72] 80 DIM N$[20],B$[20],C$[20],Q[200],F$[72] 90 Z0=TIM(0) 100 Z1=TIM(1) 110 Z2=TIM(2) 120 REM RECORD THE BEGINNING TIME 130 PRINT "GENERAL IDENTIFICATION PROGRAM" 140 PRINT "------------------------------" 150 PRINT 160 PRINT " IF YOU WANT INSTRUCTIONS TYPE 'STOP' AFTER THE QUESTION" 170 PRINT " MARK AND CONSULT DOCUMENTATION. OTHERWISE, INPUT 'GO'" 180 PRINT " AFTER THE QUESTION MARK"; 190 INPUT I$ 200 IF I$="STOP" THEN 4020 210 REM IDENTIFICATION ROUTINE 220 PRINT 230 PRINT 240 PRINT 250 PRINT "STUDENT INFORMATION" 260 PRINT "-------------------" 270 PRINT 280 PRINT "YOUR NAME :"; 290 INPUT R$ 300 REM 310 PRINT "CHOOSE TOPIC 2 OR 3. WHICH DO YOU WANT"; 320 INPUT D 330 READ #D,1 340 READ #D;O$ 350 K1=K1+1 360 IF O$#"ORDER" THEN 390 370 READ #D;N$,P$ 380 K1=K1+2 390 READ #D;A 400 K1=K1+1 410 FOR I=1 TO A 420 READ #D;A[I] 430 K1=K1+1 440 NEXT I 450 REM 460 IF O$="ORDER" THEN 490 470 B$="NONE" 480 GOTO 520 490 PRINT "ORDER ("N$" OR "P$"):"; 500 INPUT B$ 510 IF B$=P$ THEN 540 520 C=1 530 GOTO 560 540 C=2 550 REM ONLY ONE ANSWER IN REVERSE ORDER 560 L1=A[A] 570 REM 580 PRINT "LEVEL -- (1 TO "A") --"; 590 INPUT D1 600 LET D1=INT(D1) 610 IF D1 <= A THEN 640 620 PRINT "LEVEL NUMBER IS TOO LARGE -- RETYPE IT" 630 GOTO 580 640 IF D1#1 THEN 670 650 H1=1 660 GOTO 680 670 H1=A[D1-1]+1 680 LET H2=A[D1] 690 REM UPPER LIMIT IS SET 700 REM 710 REM EXHAUST THE RECORD LIST 720 PRINT "LIST OF COMMANDS:" 730 FOR I=1 TO 11 740 READ C$ 750 PRINT C$;"--"; 760 NEXT I 770 DATA "WRONG","END","STOP","LEVEL","SCORE","TIME" 780 DATA "NUMBER","ORDER","RTIME","REPEAT","IDENT" 790 PRINT 800 RESTORE 810 PRINT 820 REM 830 REM 840 REM 850 REM BEGINNING OF QUESTION AND ANSWER ROUTINE (MAIN DRILL) 860 REM 870 REM 880 PRINT 890 PRINT 900 PRINT "MAIN EXERCISE" 910 PRINT "-------------" 920 PRINT 930 IF K2>H2-H1+1 THEN 4030 940 I=INT(RND(0)*(H2-H1+1))+H1 950 FOR J=1 TO K2-1 960 IF ABS(Q[J])=I THEN 940 970 NEXT J 980 Q[K2]=I 990 K2=K2+1 1000 READ #D,1 1010 IF K1-A>2 THEN 1040 1020 READ #D;A$,A1 1030 GOTO 1050 1040 READ #D;A$,A$,A$,A1 1050 FOR J=1 TO A 1060 READ #D;A1 1070 NEXT J 1080 FOR J=1 TO I-1 1090 READ #D;A$,A1 1100 FOR J1=1 TO A1 1110 READ #D;A$ 1120 NEXT J1 1130 NEXT J 1140 IF C=2 THEN 1170 1150 READ #D;F$,A1 1160 GOTO 1180 1170 READ #D;E$,A1,F$ 1180 IF T1#0 THEN 1200 1190 PRINT "QUEST. #"T":";F$; 1200 INPUT A$ 1210 IF C=2 THEN 1280 1220 FOR J=1 TO A1 1230 READ #D;E$ 1240 IF A$=E$ THEN 1320 1250 GOSUB 1450 1260 NEXT J 1270 GOTO 1400 1280 IF A$=E$ THEN 1320 1290 GOSUB 1450 1300 GOTO 1400 1310 REM 1320 REM SCORE 1 PT. FOR CORRECT RESPONSE 1330 LET S=S+1 1340 T1=0 1350 T=T+1 1360 REM SHOW THAT THIS QUESTION HAS BEEN ASKED 1370 GOTO 930 1380 REM GO GET THE NEXT QUESTION 1390 REM 1400 REM WRONG ANSWER ROUTINE 1410 GOTO 1730 1420 REM GO SEE IF THE RESPONSE WAS A COMMAND 1430 REM 1440 REM 1450 REM MISSPELLING?? 1460 B=0 1470 FOR K=1 TO LEN(E$) MIN LEN(A$) 1480 IF A$[K,K]#E$[K,K] THEN 1500 1490 B=B+1 1500 NEXT K 1510 IF B/LEN(E$)<.5 THEN 1530 1520 PRINT " ----- MISSPELLED." 1530 RETURN 1540 REM 1550 REM IT MUST BE AN ERROR 1560 LET T1=T1+1 1570 REM INCREMENT # OF TRIES BY 1 1580 IF T1<3 THEN 1690 1590 T=T+1 1600 LET T1=0 1610 REM RESET FLAGS 1620 Q[K2-1]=-1*Q[K2-1] 1630 REM RECORD THAT A QUESTION WAS MISSED 1640 PRINT "CORRECT ANSWER -- "E$;'13;" "; 1650 PRINT "AAAAAAAAAAAAAAAAAAAAAAAAA";'13; 1660 PRINT " BBBBBBBBBBBBBBBBBBBBBBBBB" 1670 GOTO 930 1680 REM GOTO THE ANSWER INPUT STATEMENT 1690 PRINT " TRY AGAIN"; 1700 GOTO 1000 1710 REM GOTO THE ANSWER INPUT STATEMENT 1720 REM 1730 REM COMMAND ROUTINE -- FIRST CHECK TO SEE IF IT IS A COMMAND 1740 REM 1750 FOR J=1 TO 11 1760 READ C$ 1770 IF C$=A$ THEN 1820 1780 REM IF IT IS A COMMAND -- JUMP 1790 NEXT J 1800 RESTORE 1810 GOTO 1550 1820 RESTORE 1830 GOTO J OF 1840,1880,1930,1990,2270,2330,2420,2520,2810,2860,2910 1840 REM WRONG COMMAND 1850 GOTO 1590 1860 REM GO TO BE COUNTED WRONG 1870 REM 1880 REM END COMMAND -- COMMAND TO START OUT ROUTINE 1890 LET T=T-1 1900 REM DO NOT COUNT THE QUESTION WE ARE ON 1910 GOTO 3100 1920 REM 1930 REM STOP COMMAND -- COMMAND TO STOP THE PROGRAM WITHOUT THE OUT ROUTINE 1940 LET T=T-1 1950 REM DO NOT COUNT THE QUESTION WE ARE ON 1960 GOTO 3790 1970 REM GO TO THE FINALIZATION ROUTINE 1980 REM 1990 REM LEVEL COMMAND -- USED TO CHANGE THE LEVEL OF WORK DURING RUN 2000 IF A>1 THEN 2030 2010 PRINT "LEVEL CAN'T BE CHANGED -- SORRY" 2020 GOTO 1000 2030 LET T=T-1 2040 REM DO NOT COUNT THE QUESTION WE ARE ON 2050 IF T=0 THEN 2090 2060 LET S3=INT(S/T*100+.5) 2070 PRINT #1;R$,D,B$,D1,Z0,Z1,Z2,T,S3 2080 PRINT #1;TIM(0),TIM(1),TIM(2) 2090 K2=T=1 2100 S3=100 2110 S=T1=0 2120 PRINT 2130 PRINT "NEW LEVEL --"; 2140 INPUT D1 2150 IF D1 <= A THEN 2180 2160 PRINT "LEVEL NUMBER IS TOO LARGE -- RETYPE IT" 2170 GOTO 2130 2180 IF D1#1 THEN 2210 2190 H1=1 2200 GOTO 2220 2210 H1=A[D1-1]+1 2220 LET H2=A[D1] 2230 PRINT "LEVEL CHANGED -- NEW BALL GAME" 2240 GOTO 880 2250 REM START THE MAIN DRILL ROUTINE AGAIN 2260 REM 2270 REM SCORE COMMAND -- USED TO FIND OUT SCORE THUS FAR IS RUN 2280 PRINT 2290 PRINT S;" OUT OF";T-1;" ";INT(S/(T-1)*100+.5);"%" 2300 PRINT 2310 GOTO 1000 2320 REM 2330 REM TIME COMMAND -- USED TO FIND THE TIME AT PRESENT 2340 PRINT 2350 REM SKIP A LINE 2360 PRINT "BEGAN AT:"Z0"MIN."Z1"HRS."Z2"DAYS." 2370 PRINT "TIME NOW IS: "TIM(0)"MIN."TIM(1)"HRS."TIM(2)"DAYS." 2380 PRINT 2390 REM SKIP A LINE 2400 GOTO 1000 2410 REM 2420 REM NUMBER COMMAND -- USED TO FIND THE # OF POSSIBLE QUESTIONS 2430 PRINT 2440 REM SKIP A LINE 2450 PRINT "TOTAL # OF QUESTIONS :";L1 2460 PRINT "# OF QUESTIONS IN LEVEL "D1": ";H2-H1+1 2470 PRINT "# OF QUESTIONS ASKED :";T 2480 PRINT 2490 REM SKIP A LINE 2500 GOTO 1000 2510 REM 2520 REM ORDER COMMAND -- USED TO CHANGE THE ORDER OF THE QUESTION 2530 IF O$="ORDER" THEN 2560 2540 PRINT "ORDER CAN'T BE CHANGED -- SORRY" 2550 GOTO 1000 2560 LET T=T-1 2570 IF T=0 THEN 2630 2580 REM IF WE HAVEN/T STARTED, DON/T WRITE FILE 2590 LET S3=INT(S/T*100+.5) 2600 REM COMPUTE AVERAGE ON MAIN DRILL 2610 PRINT #1;R$,D,B$,D1,Z0,Z1,Z2,T,S3,TIM(0),TIM(1),TIM(2) 2620 REM 2630 PRINT "NEW ORDER --"; 2640 INPUT B$ 2650 IF B$=N$ THEN 2690 2660 IF B$=P$ THEN 2710 2670 PRINT "ILLEGAL ORDER -- CHECK ORDER LIST ABOVE AND RETYPE IT" 2680 GOTO 2630 2690 C=1 2700 GOTO 2720 2710 C=2 2720 MAT Q=ZER 2730 REM RESET Q ARRAY FOR NEW GAME 2740 PRINT "ORDER CHANGED -- NEW BALL GAME" 2750 PRINT 2760 S=T1=0 2770 S3=100 2780 K2=T=1 2790 GOTO 850 2800 REM 2810 REM RTIME COMMAND -- USED TO FIND ELAPSED RUN TIME 2820 PRINT 2830 PRINT "ELAPSED RUN TIME :"TIM(1)*60+TIM(0)-Z1*60-Z0"MIN." 2840 GOTO 1000 2850 REM 2860 REM REPEAT COMMAND -- REPEAT THE QUESTION (ONLY) 2870 IF T1=0 THEN 1000 2880 PRINT "QUEST. #";T;": ";F$ 2890 GOTO 1000 2900 REM 2910 REM IDENT COMMAND -- IDENTIFY THE USER AND PROBLEM 2920 PRINT 2930 PRINT "NAME : ";R$ 2940 PRINT "TOPIC: ";D 2950 PRINT "ORDER : ";B$ 2960 PRINT "LEVEL : ";D1 2970 PRINT "# OF QUESTIONS ASKED : "T 2980 IF T=1 THEN 3010 2990 LET S3=INT(S/(T-1)*100+.5) 3000 GOTO 3020 3010 S3=100 3020 PRINT "SCORE :"S3 3030 PRINT "BEGAN AT :"Z0"MIN."Z1"HRS."Z2"DAYS." 3040 PRINT "TIME IS: "TIM(0)"MIN."TIM(1)"HRS."TIM(2)"DAYS." 3050 PRINT "ELAPSED RUN TIME :"TIM(1)*60+TIM(0)-Z1*60-Z0"MIN." 3060 PRINT 3070 GOTO 1000 3080 REM 3090 REM 3100 REM OUT ROUTINE -- REPEAT MISSED QUESTIONS BEFORE FINISHING 3110 REM (REDRILL) 3120 REM 3130 FOR J=1 TO A[A] 3140 IF Q[J]<0 THEN 3200 3150 REM WRONG OR MISSPELLED (-1/2) 3160 NEXT J 3170 PRINT "YOU MISSED NO QUESTIONS -- PERFECT SCORE" 3180 GOTO 3790 3190 REM 3200 REM START ASKING QUESTION 3210 PRINT 3220 S4=100 3230 PRINT "RETEST" 3240 PRINT "------" 3250 S2=T2=0 3260 PRINT 3270 PRINT "FINISHING UP -- ONLY ONE TRY ON THE FOLLOWING QUESTIONS" 3280 PRINT 3290 FOR J=1 TO L1 3300 REM CHECK ALL THE QUESTIONS 3310 IF Q[J] >= 0 THEN 3700 3320 REM HAS THE QUESTION BEEN MISSED? 3330 LET T2=T2+1 3340 READ #D,1 3350 IF K1-A>2 THEN 3390 3360 REM COUNT THE QUESTION ASKED AGAIN 3370 READ #D;A$,A1 3380 GOTO 3400 3390 READ #D;A$,A$,A$,A1 3400 FOR K=1 TO A 3410 READ #D;A1 3420 NEXT K 3430 FOR K=1 TO ABS(Q[J])-1 3440 READ #D;A$,A1 3450 FOR J1=1 TO A1 3460 READ #D;A$ 3470 NEXT J1 3480 NEXT K 3490 IF C=2 THEN 3520 3500 READ #D;F$,A1 3510 GOTO 3530 3520 READ #D;E$,A1,F$ 3530 PRINT "QUEST. # "T2": ";F$; 3540 INPUT A$ 3550 IF C=2 THEN 3620 3560 REM INCORRECT ANSWER 3570 FOR K=1 TO A1 3580 READ #D;E$ 3590 IF A$=E$ THEN 3650 3600 NEXT K 3610 GOTO 3630 3620 IF A$=E$ THEN 3650 3630 IF A$="STOP" THEN 3740 3640 GOTO 3680 3650 PRINT "CORRECT" 3660 S2=S2+1 3670 GOTO 3700 3680 PRINT "WRONG. CORRECT ANSWER IS: "; 3690 PRINT E$ 3700 NEXT J 3710 GOTO 3790 3720 REM FINALIZE 3730 REM 3740 REM STOP ROUTINE FOR THE OUT ROUTINE 3750 LET T2=T2-1 3760 REM DO NOT COUNT THE QUESTION AT HAND 3770 REM 3780 REM 3790 REM FINALIZATION ROUTINE 3800 S4=100 3810 IF T=0 THEN 3840 3820 LET S3=INT(S/T*100+.5) 3830 REM % SCORE ON MAIN ROUTINE 3840 IF T2=0 THEN 3880 3850 REM SKIP AVERAGE FOR REDRILL IF NOT DONE 3860 LET S4=INT(S2/T2*100+.5) 3870 REM % SCORE ON REDRILL 3880 REM WRITE FILE RECORD HERE 3890 PRINT #1;R$,D,B$,D1,Z0,Z1,Z2,T,S3,TIM(0),TIM(1),TIM(2) 3900 PRINT #1;T2,S4 3910 PRINT 3920 PRINT 3930 PRINT "THE DRILL IS OVER" 3940 PRINT 3950 PRINT "MAIN DRILL ";S;" CORRECT OUT OF ";T;" FOR SCORE OF";S3;"%" 3960 PRINT 3970 PRINT "REDRILL: ";S2;" CORRECT OUT OF";T2;" FOR SCORE OF";S4"%" 3980 REM 3990 REM 4000 PRINT 4010 PRINT "GOODBYE" 4020 STOP 4030 T=T-1 4040 GOTO 3100 4050 END