home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib31b.dsk / DENSITY.DRILL.bas < prev    next >
BASIC Source File  |  2023-02-26  |  8KB  |  173 lines

  1. 10  REM  **********************
  2. 20  REM  *   DENSITY DRILL    *
  3. 30  REM  *  BY MICHAEL WAUGH  *
  4. 40  REM  * COPYRIGHT (C) 1987 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA. 01742 *
  7. 70  REM  **********************
  8. 80  TEXT : HOME : CLEAR 
  9. 90  GOTO 1140
  10. 100  REM    *** CALCULATOR ROUTINE ***
  11. 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
  12. 120  ONERR  GOTO 110
  13. 130  VTAB 17: HTAB 1: PRINT "            ";: INVERSE : PRINT "CALCULATOR MODE";: NORMAL : PRINT "            ": REM  12/12 SPACES
  14. 140  VTAB 18: HTAB 1: INVERSE : PRINT "   * / + - ^   WITH ANY TWO NUMBERS    ": NORMAL 
  15. 150  VTAB 23: INVERSE : PRINT  TAB( 4);"PRESS <ESC> TO RETURN TO PROBLEM    ": NORMAL 
  16. 160  VTAB 22: HTAB 1: PRINT "--> "
  17. 170  POKE 33,36: POKE 32,4: POKE 34,18: POKE 35,22
  18. 180  VTAB 19: HTAB 4: PRINT "EXAMPLE --> 12*2 <RETURN>"
  19. 190  VTAB 20: HTAB 16: PRINT "12 * 2 = 24"
  20. 200  VTAB 22: HTAB 1
  21. 210 PP$ = ""
  22. 220  GET A$
  23. 230 L =  LEN(PP$)
  24. 240  IF L = 0  AND A$ =  CHR$(45)  THEN 360
  25. 250  IF FL = 1  THEN 310
  26. 260  IF L >0  AND A$ =  CHR$(42)  THEN  PRINT A$;:OP$ = A$: GOTO 390
  27. 270  IF L >0  AND A$ =  CHR$(47)  THEN  PRINT A$;:OP$ = A$: GOTO 400
  28. 280  IF L >0  AND A$ =  CHR$(43)  THEN  PRINT A$;:OP$ = A$: GOTO 410
  29. 290  IF L >0  AND A$ =  CHR$(45)  THEN  PRINT A$;:OP$ = A$: GOTO 420
  30. 300  IF L >0  AND A$ =  CHR$(94)  THEN  PRINT A$;:OP$ = A$: GOTO 430
  31. 310  IF A$ =  CHR$(27)  THEN 590
  32. 320  IF A$ =  CHR$(13)  THEN  PRINT : GOTO 380
  33. 330  IF A$ =  CHR$(8)  THEN 540
  34. 340  IF A$ < CHR$(46)  OR A$ > CHR$(57)  THEN 220
  35. 350  IF A$ =  CHR$(47)  THEN 220
  36. 360  PRINT A$;
  37. 370 PP$ = PP$ +A$: GOTO 220
  38. 380 N2$ = PP$: GOTO 450
  39. 390 OP = 1: GOTO 440
  40. 400 OP = 2: GOTO 440
  41. 410 OP = 3: GOTO 440
  42. 420 OP = 4: GOTO 440
  43. 430 OP = 5: GOTO 440
  44. 440 N1$ = PP$:FL = 1: GOTO 210
  45. 450 N1 =  VAL(N1$):N2 =  VAL(N2$)
  46. 460  IF N1 = 0  AND N2 = 0  THEN  PRINT "0":FL = 0: PRINT : GOTO 210
  47. 470  IF OP = 1  THEN AN = N1 *N2
  48. 480  IF OP = 2  AND N2 < >0  THEN AN = N1/N2
  49. 490  IF OP = 2  AND N2 = 0  THEN  PRINT "UNDEFINED!":FL = 0: PRINT : GOTO 210
  50. 500  IF OP = 3  THEN AN = N1 +N2
  51. 510  IF OP = 4  THEN AN = N1 -N2
  52. 520  IF OP = 5  THEN AN = N1 ^N2
  53. 530  PRINT N1;" ";OP$;" ";N2;" = ";AN:FL = 0:N1$ = "": PRINT : GOTO 210
  54. 540  IF PP$ = ""  AND FL = 0  THEN 220
  55. 550  PRINT A$;
  56. 560  IF PP$ = ""  AND FL = 1  THEN OP$ = "":FL = 0:PP$ = N1$: GOTO 220
  57. 570  IF  LEN(PP$) = 1  THEN PP$ = "": GOTO 220
  58. 580  IF  LEN(PP$) >1  THEN L =  LEN(PP$):PP$ =  LEFT$(PP$,L -1): GOTO 220
  59. 590  POKE 33,40: POKE 32,0: POKE 34,0: POKE 35,24
  60. 600  HTAB 1: VTAB 23: PRINT "                                       ": REM  39 SPACES
  61. 610  REM   *** STUDENT INPUT
  62. 620  VTAB 11: HTAB 24
  63. 630  GET X$: IF X$ =  CHR$(27)  THEN  GOSUB 1710: GOTO 1590
  64. 640  IF X$ < =  CHR$(45)  THEN 630
  65. 650  IF X$ =  CHR$(47)  THEN 630
  66. 660  IF X$ > =  CHR$(58)  THEN 630
  67. 670  PRINT X$;: INPUT "";AN$: VTAB 11: HTAB CH +1: PRINT S6$
  68. 680 AN$ = X$ +AN$
  69. 690 AN =  VAL(AN$)
  70. 700  IF A = AN  THEN FB = 1:R = R +1: GOTO 730
  71. 710  IF  ABS(A -AN) =  <.02  THEN FB = 1:FF = 0:R = R +1: GOTO 730
  72. 720 FB = 2:WR = WR +1
  73. 730  VTAB 12: ON FB GOTO 750,830
  74. 740  REM   *** FEEDBACK TO STUDENT ***
  75. 750  FOR I = 1 TO 3: PRINT  CHR$(7);: NEXT 
  76. 760  IF FF = 0  THEN  PRINT "CLOSE ENOUGH! I ROUNDED AND GOT ";: INVERSE : PRINT A: NORMAL : GOTO 1070
  77. 770  HTAB 7: FLASH 
  78. 780  IF FF = 1  THEN  PRINT "WAY TO GO!": GOTO 1070
  79. 790  IF FF = 2  THEN  PRINT "NOT TOO SHABBY!": GOTO 1070
  80. 800  IF FF = 3  THEN  PRINT "SUPER BAD!": GOTO 1070
  81. 810  IF FF = 4  THEN  PRINT "VERY GOOD.": GOTO 1070
  82. 820  IF FF = 5  THEN  PRINT "NICE WORK.": GOTO 1070
  83. 830  PRINT  CHR$(7);
  84. 840  IF FF = 1  THEN  PRINT "NOT  QUITE. ";: GOTO 890
  85. 850  IF FF = 2  THEN  PRINT "THAT'S NOT RIGHT. ";: GOTO 890
  86. 860  IF FF = 3  THEN  PRINT "CHECK YOUR WORK! ";: GOTO 890
  87. 870  IF FF = 4  THEN  PRINT "BE CAREFUL. ";: GOTO 890
  88. 880  IF FF = 5  THEN  PRINT "BETTER TRY AGAIN. ";: GOTO 890
  89. 890  PRINT "I GOT ";A: GOTO 920
  90. 900  VTAB 23: HTAB 1: CALL  -958: HTAB 1: INVERSE : PRINT " PRESS <RETURN> TO CONTINUE ";: NORMAL : GET Z$: PRINT : RETURN 
  91. 910  REM   *** KEYPRESS FOR HELP ROUTINE ***
  92. 920  POKE 34,16: VTAB 18: HOME : POKE 34,0
  93. 930  VTAB 17: INVERSE : PRINT "<PRESS 'H' FOR HELP--ANY KEY CONTINUES>";: NORMAL 
  94. 940  GET X$
  95. 950  IF X$ = "H"  THEN 980
  96. 960  IF X$ =  CHR$(27)  THEN  GOSUB 1710
  97. 970  GOTO 1140
  98. 980  HTAB 1: VTAB 17: PRINT "       ";: INVERSE : PRINT "PRESS <RETURN> TO CONTINUE";: NORMAL : PRINT "      ": REM  6 SPACES
  99. 990  VTAB 14:SP = 100
  100. 1000 A$ = "D=M/V........M=D*V........V=M/D.........": REM  8/8/9 PERIODS
  101. 1010 L =  LEN(A$)
  102. 1020  IF L <40  THEN  FOR I = L +1 TO 40:A$ = A$ +" ": NEXT 
  103. 1030 P = P +1: IF P >40  THEN P = 1
  104. 1040  VTAB 15: HTAB 1: PRINT  RIGHT$(A$,41 -P);: IF P >1  THEN  PRINT  LEFT$(A$,P -1)
  105. 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
  106. 1060  POKE  -16368,0: GOTO 1140
  107. 1070  NORMAL : GOSUB 900: GOTO 1140
  108. 1080  REM   *** EXIT CHECK ***
  109. 1090  VTAB 14: HTAB 10: PRINT "MORE PROBLEMS? (Y/N)";
  110. 1100  GET X$
  111. 1110  IF X$ = "Y"  THEN Q = 0: GOTO 1140
  112. 1120  GOTO 1720
  113. 1130  REM   *** RANDOM NUMBER GENERATOR ***
  114. 1140  ONERR  GOTO 1710
  115. 1150  HOME :Q = Q +1: IF Q >10  THEN 1090
  116. 1160  VTAB 12: HTAB 10: PRINT "ONE MOMENT, PLEASE..."
  117. 1170 D =  INT( RND( PEEK(78) + PEEK(79) *256) *1930 +1)/100: IF D <.5  THEN 1170
  118. 1180 A$ =  STR$(D): GOSUB 1300
  119. 1190 D =  VAL(A$)
  120. 1200 V =  RND( PEEK(78) + PEEK(79) *256) *100 +1:A$ =  STR$(V): GOSUB 1300
  121. 1210 V =  VAL(A$)
  122. 1220 M = D *V:A$ =  STR$(M): GOSUB 1300
  123. 1230 M =  VAL(A$)
  124. 1240 TP =  INT( RND( PEEK(78) + PEEK(79) *256) *3 +1)
  125. 1250 FF =  INT( RND( PEEK(78) + PEEK(79) *256) *5 +1)
  126. 1260  IF TP = 1  THEN A = D
  127. 1270  IF TP = 2  THEN A = M
  128. 1280  IF TP = 3  THEN A = V
  129. 1290  GOTO 1400
  130. 1300 DE = 2: FOR I = 1 TO  LEN(A$)
  131. 1310  IF  MID$ (A$,I,1) < >"E"  THEN  NEXT 
  132. 1320  FOR J = 1 TO I -1
  133. 1330  IF  MID$ (A$,J,1) < >"."  THEN  NEXT 
  134. 1340  IF J +DE < = I -1  THEN N = J +DE: GOTO 1360
  135. 1350 N = I -1
  136. 1360 L =  VAL( LEFT$(A$,N +1)):P = 10 ^DE:LL =  INT(L *P +.5)/P:L$ =  STR$(LL)
  137. 1370 A$ = L$ + MID$ (A$,I)
  138. 1380  RETURN 
  139. 1390  REM   *** PROBLEM VARIETY ***
  140. 1400  ON TP GOTO 1410,1460,1510
  141. 1410 S1$ = "MASS":S2$ = "GRAMS"
  142. 1420 S3$ = "VOLUME":S4$ = "CC"
  143. 1430 S5$ = "DENSITY":S6$ = "G/CC"
  144. 1440 O1 = M:O2 = V
  145. 1450  GOTO 1590
  146. 1460 S1$ = "VOLUME":S2$ = "CC"
  147. 1470 S3$ = "DENSITY":S4$ = "G/CC"
  148. 1480 S5$ = "MASS":S6$ = "GRAMS"
  149. 1490 O1 = V:O2 = D
  150. 1500  GOTO 1590
  151. 1510 S1$ = "MASS":S2$ = "GRAMS"
  152. 1520 S3$ = "DENSITY":S4$ = "G/CC"
  153. 1530 S5$ = "VOLUME":S6$ = "CC"
  154. 1540 O1 = M:O2 = D
  155. 1550  REM  *** NEW PROBLEM TYPES ***
  156. 1560  REM  *** NEW PROBLEM TYPES ***
  157. 1570  REM  *** NEW PROBLEM TYPES ***
  158. 1580  REM   *** SCREEN LAYOUT ***
  159. 1590  HOME 
  160. 1600  HTAB 14: PRINT "PROBLEM ";Q: GOSUB 1730
  161. 1610  HTAB 1: VTAB 3: INVERSE : PRINT "ROUND YOUR ANSWERS TO 2 DECIMAL PLACES!": NORMAL 
  162. 1620  VTAB 5: PRINT "AN OBJECT HAS A ";S1$;" OF ";O1;" ";S2$;"."
  163. 1630  VTAB 6: PRINT "AND A ";S3$;" OF ";O2;" ";S4$;"."
  164. 1640  VTAB 8: PRINT "WHAT IS THIS OBJECT'S ";S5$;"?"
  165. 1650 A$ =  STR$(A):X =  LEN(A$)
  166. 1660  VTAB 11: HTAB 7: PRINT "YOUR ANSWER? --> ";: FOR I = 1 TO X: PRINT  CHR$(95);: NEXT I: PRINT " ";:CH =  PEEK(36): PRINT S6$;"."
  167. 1670  VTAB 17: HTAB 3: PRINT "WOULD YOU LIKE A CALCULATOR? (Y/N)";: GET X$
  168. 1680  IF X$ = "Y"  THEN 120
  169. 1690  IF X$ =  CHR$(27)  THEN  GOSUB 1710: GOTO 1590
  170. 1700  PRINT "N": GOTO 620
  171. 1710  HOME : VTAB 11: INPUT "ARE YOU SURE YOU WANT TO QUIT? ";YN$: IF YN$ < >"Y"  AND YN$ < > CHR$(121)  THEN  RETURN 
  172. 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 
  173. 1730  VTAB 23: HTAB 1: INVERSE : PRINT " PRESS <ESCAPE> TO QUIT ";: NORMAL : RETURN