home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib31b.dsk
/
DENSITY.DRILL.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
8KB
|
173 lines
10 REM **********************
20 REM * DENSITY DRILL *
30 REM * BY MICHAEL WAUGH *
40 REM * COPYRIGHT (C) 1987 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA. 01742 *
70 REM **********************
80 TEXT : HOME : CLEAR
90 GOTO 1140
100 REM *** CALCULATOR ROUTINE ***
110 HOME : VTAB 20: HTAB 13: PRINT "ERROR": POKE 32,1: POKE 33,39: GOSUB 900: POKE 32,4: POKE 33,36: HOME : TEXT :FL = 0: GOTO 130
120 ONERR GOTO 110
130 VTAB 17: HTAB 1: PRINT " ";: INVERSE : PRINT "CALCULATOR MODE";: NORMAL : PRINT " ": REM 12/12 SPACES
140 VTAB 18: HTAB 1: INVERSE : PRINT " * / + - ^ WITH ANY TWO NUMBERS ": NORMAL
150 VTAB 23: INVERSE : PRINT TAB( 4);"PRESS <ESC> TO RETURN TO PROBLEM ": NORMAL
160 VTAB 22: HTAB 1: PRINT "--> "
170 POKE 33,36: POKE 32,4: POKE 34,18: POKE 35,22
180 VTAB 19: HTAB 4: PRINT "EXAMPLE --> 12*2 <RETURN>"
190 VTAB 20: HTAB 16: PRINT "12 * 2 = 24"
200 VTAB 22: HTAB 1
210 PP$ = ""
220 GET A$
230 L = LEN(PP$)
240 IF L = 0 AND A$ = CHR$(45) THEN 360
250 IF FL = 1 THEN 310
260 IF L >0 AND A$ = CHR$(42) THEN PRINT A$;:OP$ = A$: GOTO 390
270 IF L >0 AND A$ = CHR$(47) THEN PRINT A$;:OP$ = A$: GOTO 400
280 IF L >0 AND A$ = CHR$(43) THEN PRINT A$;:OP$ = A$: GOTO 410
290 IF L >0 AND A$ = CHR$(45) THEN PRINT A$;:OP$ = A$: GOTO 420
300 IF L >0 AND A$ = CHR$(94) THEN PRINT A$;:OP$ = A$: GOTO 430
310 IF A$ = CHR$(27) THEN 590
320 IF A$ = CHR$(13) THEN PRINT : GOTO 380
330 IF A$ = CHR$(8) THEN 540
340 IF A$ < CHR$(46) OR A$ > CHR$(57) THEN 220
350 IF A$ = CHR$(47) THEN 220
360 PRINT A$;
370 PP$ = PP$ +A$: GOTO 220
380 N2$ = PP$: GOTO 450
390 OP = 1: GOTO 440
400 OP = 2: GOTO 440
410 OP = 3: GOTO 440
420 OP = 4: GOTO 440
430 OP = 5: GOTO 440
440 N1$ = PP$:FL = 1: GOTO 210
450 N1 = VAL(N1$):N2 = VAL(N2$)
460 IF N1 = 0 AND N2 = 0 THEN PRINT "0":FL = 0: PRINT : GOTO 210
470 IF OP = 1 THEN AN = N1 *N2
480 IF OP = 2 AND N2 < >0 THEN AN = N1/N2
490 IF OP = 2 AND N2 = 0 THEN PRINT "UNDEFINED!":FL = 0: PRINT : GOTO 210
500 IF OP = 3 THEN AN = N1 +N2
510 IF OP = 4 THEN AN = N1 -N2
520 IF OP = 5 THEN AN = N1 ^N2
530 PRINT N1;" ";OP$;" ";N2;" = ";AN:FL = 0:N1$ = "": PRINT : GOTO 210
540 IF PP$ = "" AND FL = 0 THEN 220
550 PRINT A$;
560 IF PP$ = "" AND FL = 1 THEN OP$ = "":FL = 0:PP$ = N1$: GOTO 220
570 IF LEN(PP$) = 1 THEN PP$ = "": GOTO 220
580 IF LEN(PP$) >1 THEN L = LEN(PP$):PP$ = LEFT$(PP$,L -1): GOTO 220
590 POKE 33,40: POKE 32,0: POKE 34,0: POKE 35,24
600 HTAB 1: VTAB 23: PRINT " ": REM 39 SPACES
610 REM *** STUDENT INPUT
620 VTAB 11: HTAB 24
630 GET X$: IF X$ = CHR$(27) THEN GOSUB 1710: GOTO 1590
640 IF X$ < = CHR$(45) THEN 630
650 IF X$ = CHR$(47) THEN 630
660 IF X$ > = CHR$(58) THEN 630
670 PRINT X$;: INPUT "";AN$: VTAB 11: HTAB CH +1: PRINT S6$
680 AN$ = X$ +AN$
690 AN = VAL(AN$)
700 IF A = AN THEN FB = 1:R = R +1: GOTO 730
710 IF ABS(A -AN) = <.02 THEN FB = 1:FF = 0:R = R +1: GOTO 730
720 FB = 2:WR = WR +1
730 VTAB 12: ON FB GOTO 750,830
740 REM *** FEEDBACK TO STUDENT ***
750 FOR I = 1 TO 3: PRINT CHR$(7);: NEXT
760 IF FF = 0 THEN PRINT "CLOSE ENOUGH! I ROUNDED AND GOT ";: INVERSE : PRINT A: NORMAL : GOTO 1070
770 HTAB 7: FLASH
780 IF FF = 1 THEN PRINT "WAY TO GO!": GOTO 1070
790 IF FF = 2 THEN PRINT "NOT TOO SHABBY!": GOTO 1070
800 IF FF = 3 THEN PRINT "SUPER BAD!": GOTO 1070
810 IF FF = 4 THEN PRINT "VERY GOOD.": GOTO 1070
820 IF FF = 5 THEN PRINT "NICE WORK.": GOTO 1070
830 PRINT CHR$(7);
840 IF FF = 1 THEN PRINT "NOT QUITE. ";: GOTO 890
850 IF FF = 2 THEN PRINT "THAT'S NOT RIGHT. ";: GOTO 890
860 IF FF = 3 THEN PRINT "CHECK YOUR WORK! ";: GOTO 890
870 IF FF = 4 THEN PRINT "BE CAREFUL. ";: GOTO 890
880 IF FF = 5 THEN PRINT "BETTER TRY AGAIN. ";: GOTO 890
890 PRINT "I GOT ";A: GOTO 920
900 VTAB 23: HTAB 1: CALL -958: HTAB 1: INVERSE : PRINT " PRESS <RETURN> TO CONTINUE ";: NORMAL : GET Z$: PRINT : RETURN
910 REM *** KEYPRESS FOR HELP ROUTINE ***
920 POKE 34,16: VTAB 18: HOME : POKE 34,0
930 VTAB 17: INVERSE : PRINT "<PRESS 'H' FOR HELP--ANY KEY CONTINUES>";: NORMAL
940 GET X$
950 IF X$ = "H" THEN 980
960 IF X$ = CHR$(27) THEN GOSUB 1710
970 GOTO 1140
980 HTAB 1: VTAB 17: PRINT " ";: INVERSE : PRINT "PRESS <RETURN> TO CONTINUE";: NORMAL : PRINT " ": REM 6 SPACES
990 VTAB 14:SP = 100
1000 A$ = "D=M/V........M=D*V........V=M/D.........": REM 8/8/9 PERIODS
1010 L = LEN(A$)
1020 IF L <40 THEN FOR I = L +1 TO 40:A$ = A$ +" ": NEXT
1030 P = P +1: IF P >40 THEN P = 1
1040 VTAB 15: HTAB 1: PRINT RIGHT$(A$,41 -P);: IF P >1 THEN PRINT LEFT$(A$,P -1)
1050 FOR I = 1 TO SP: NEXT :X = PEEK( -16384): IF X <127 THEN FOR J = 1 TO 2:S = PEEK( -16336): NEXT : GOTO 1030
1060 POKE -16368,0: GOTO 1140
1070 NORMAL : GOSUB 900: GOTO 1140
1080 REM *** EXIT CHECK ***
1090 VTAB 14: HTAB 10: PRINT "MORE PROBLEMS? (Y/N)";
1100 GET X$
1110 IF X$ = "Y" THEN Q = 0: GOTO 1140
1120 GOTO 1720
1130 REM *** RANDOM NUMBER GENERATOR ***
1140 ONERR GOTO 1710
1150 HOME :Q = Q +1: IF Q >10 THEN 1090
1160 VTAB 12: HTAB 10: PRINT "ONE MOMENT, PLEASE..."
1170 D = INT( RND( PEEK(78) + PEEK(79) *256) *1930 +1)/100: IF D <.5 THEN 1170
1180 A$ = STR$(D): GOSUB 1300
1190 D = VAL(A$)
1200 V = RND( PEEK(78) + PEEK(79) *256) *100 +1:A$ = STR$(V): GOSUB 1300
1210 V = VAL(A$)
1220 M = D *V:A$ = STR$(M): GOSUB 1300
1230 M = VAL(A$)
1240 TP = INT( RND( PEEK(78) + PEEK(79) *256) *3 +1)
1250 FF = INT( RND( PEEK(78) + PEEK(79) *256) *5 +1)
1260 IF TP = 1 THEN A = D
1270 IF TP = 2 THEN A = M
1280 IF TP = 3 THEN A = V
1290 GOTO 1400
1300 DE = 2: FOR I = 1 TO LEN(A$)
1310 IF MID$ (A$,I,1) < >"E" THEN NEXT
1320 FOR J = 1 TO I -1
1330 IF MID$ (A$,J,1) < >"." THEN NEXT
1340 IF J +DE < = I -1 THEN N = J +DE: GOTO 1360
1350 N = I -1
1360 L = VAL( LEFT$(A$,N +1)):P = 10 ^DE:LL = INT(L *P +.5)/P:L$ = STR$(LL)
1370 A$ = L$ + MID$ (A$,I)
1380 RETURN
1390 REM *** PROBLEM VARIETY ***
1400 ON TP GOTO 1410,1460,1510
1410 S1$ = "MASS":S2$ = "GRAMS"
1420 S3$ = "VOLUME":S4$ = "CC"
1430 S5$ = "DENSITY":S6$ = "G/CC"
1440 O1 = M:O2 = V
1450 GOTO 1590
1460 S1$ = "VOLUME":S2$ = "CC"
1470 S3$ = "DENSITY":S4$ = "G/CC"
1480 S5$ = "MASS":S6$ = "GRAMS"
1490 O1 = V:O2 = D
1500 GOTO 1590
1510 S1$ = "MASS":S2$ = "GRAMS"
1520 S3$ = "DENSITY":S4$ = "G/CC"
1530 S5$ = "VOLUME":S6$ = "CC"
1540 O1 = M:O2 = D
1550 REM *** NEW PROBLEM TYPES ***
1560 REM *** NEW PROBLEM TYPES ***
1570 REM *** NEW PROBLEM TYPES ***
1580 REM *** SCREEN LAYOUT ***
1590 HOME
1600 HTAB 14: PRINT "PROBLEM ";Q: GOSUB 1730
1610 HTAB 1: VTAB 3: INVERSE : PRINT "ROUND YOUR ANSWERS TO 2 DECIMAL PLACES!": NORMAL
1620 VTAB 5: PRINT "AN OBJECT HAS A ";S1$;" OF ";O1;" ";S2$;"."
1630 VTAB 6: PRINT "AND A ";S3$;" OF ";O2;" ";S4$;"."
1640 VTAB 8: PRINT "WHAT IS THIS OBJECT'S ";S5$;"?"
1650 A$ = STR$(A):X = LEN(A$)
1660 VTAB 11: HTAB 7: PRINT "YOUR ANSWER? --> ";: FOR I = 1 TO X: PRINT CHR$(95);: NEXT I: PRINT " ";:CH = PEEK(36): PRINT S6$;"."
1670 VTAB 17: HTAB 3: PRINT "WOULD YOU LIKE A CALCULATOR? (Y/N)";: GET X$
1680 IF X$ = "Y" THEN 120
1690 IF X$ = CHR$(27) THEN GOSUB 1710: GOTO 1590
1700 PRINT "N": GOTO 620
1710 HOME : VTAB 11: INPUT "ARE YOU SURE YOU WANT TO QUIT? ";YN$: IF YN$ < >"Y" AND YN$ < > CHR$(121) THEN RETURN
1720 PR = INT(R/(R + NOT R +WR) *100): HOME : VTAB 11: HTAB 7: PRINT "YOU CORRECTLY ANSWERED ";PR;" %.": VTAB 13: HTAB 18: PRINT "BYE!": END
1730 VTAB 23: HTAB 1: INVERSE : PRINT " PRESS <ESCAPE> TO QUIT ";: NORMAL : RETURN