home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64Educational / MULTIPLICATION (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  7.5 KB  |  304 lines

  1. 1 OPEN 5,3
  2. 2 POKE 53280,0:POKE 53281,0:GOSUB20020
  3. 5 ML=850:DATA 162,5,32,201,255,169,147,32,210,255
  4. 6 DATA 162,250,169,32,157,255,3,157,249,4,157,243,5,157,237,6,169,1
  5. 7 DATA 157,255,215,157,249,216,157,243,217,157,237,218,202,208,225,96
  6. 8 FOR T=0 TO 43:READ A:POKE ML+T,A:NEXT
  7. 9 POKE 53280,0:POKE 53281,0:SYS(ML)
  8. 10 FOR SD=1024 TO 1063:POKE SD,160:NEXT
  9. 11 FOR SD=1024 TO 1944 STEP 40:POKE SD,160:NEXT
  10. 12 FOR SD=1063 TO 2023 STEP 40:POKE SD,160:NEXT
  11. 13 FOR SD=1984 TO 2023:POKE SD,160:NEXT
  12. 14 DIM CM$(12)
  13. 15 DO$=""
  14. 16 PRINT""LEFT$(DO$,7):PRINTTAB(8)"123 DIGIT MULTIPLICATION":PRINT
  15. 17 PRINT"BY DON ROSS"
  16. 18 PRINT:PRINT:PRINTTAB(8)"MICROCOMPUTER  WORKSHOPS"
  17. 19 PRINT:PRINT:PRINT TAB(13) "COPYRIGHT 1983"
  18. 20 FOR X=1TO2500:NEXTX
  19. 22 RE$="RETURN[146]":LC=59468
  20. 27 SYS(ML):DIM C(13)
  21. 28 PRINT"HI!  WHAT'S YOUR NAME ";:INPUT F$:IF F$="" THEN 28
  22. 29 IFLEN(F$)<2ANDASC(F$)=160THENPRINT"[145][145][145][145]";:GOTO28
  23. 30 SYS(ML):PRINT"HI "F$",":PRINT
  24. 32 PRINT"DO YOU WANT INSTRUCTIONS?"
  25. 33 GET G$:IF G$="" THEN 33
  26. 34 IF G$="N" THEN 250
  27. 35 IF G$<>"Y" THEN 33
  28. 36 SYS (ML)
  29. 37 PRINT"              INSTRUCTIONS[146]"
  30. 38 PRINT"I WILL GIVE YOU PRACTICE IN MULTIPLYING "
  31. 40 PRINT"NUMBERS. THE TOP NUMBER WILL ALWAYS HAVE"
  32. 43 PRINT"THREE DIGITS."
  33. 46 PRINT"YOU MAY CHOOSE HOW MANY DIGITS THE      "
  34. 48 PRINT"BOTTOM NUMBER MAY HAVE -- 1, 2, OR 3."
  35. 56 GOSUB 5500
  36. 60 PRINT"[147]":SYS(ML):PRINT""
  37. 61 PRINT "BECAUSE ALL PROBLEMS ARE GENERATED      "
  38. 62 PRINT"RANDOMLY, YOU WILL GET DIFFERENT        "
  39. 65 PRINT"PROBLEMS EACH TIME YOU RUN THIS PROGRAM."
  40. 66 GOSUB 5500
  41. 72 SYS(ML):PRINT
  42. 75 PRINTTAB(14)468:PRINTTAB(11)"  X  53":PRINTTAB(15)"[163][163][163]"
  43. 80 POKE 1024+4*40+17,160
  44. 81 PRINT"FOR EXAMPLE: IF YOU WANTED A TWO-DIGIT  "
  45. 82 PRINT"PROBLEM, IT WOULD LOOK LIKE THE ONE     "
  46. 83 PRINT"ABOVE."
  47. 85 GOSUB 5500
  48. 90 GOSUB 5200
  49. 95 PRINT"":PRINTLEFT$(DO$,8);
  50. 97 PRINT"THE WHITE SQUARE IS CALLED A CURSOR.    "
  51. 99 PRINT"IT WILL SHOW YOU WHERE THE NEXT NUMBER"
  52. 101 PRINT"WILL GO.                                "
  53. 102 PRINT"IF YOU TYPE A 4, IT WOULD PRINT THE 4 IN"
  54. 103 PRINT"PLACE OF THE CURSOR."
  55. 104 PRINT"             TRY[146] TYPING A 4!!"
  56. 105 GET FG$:IF FG$<>"4" THEN 105
  57. 107 POKE 1024+40*4+17,52
  58. 108 POKE 1024+16,160
  59. 115 GOSUB 5200
  60. 118 PRINT"":PRINTLEFT$(DO$,8);
  61. 120 PRINT"A 4 HAS BEEN PRINTED AND THE CURSOR IS  "
  62. 122 PRINT"NOW ABOVE THE 6.  YOU MUST NOW TYPE THE "
  63. 125 PRINT"CARRY ABOVE THE 6.  (THAT IS WHERE THE  "
  64. 127 PRINT"CARRY GOES).                            "
  65. 128 PRINT"              TRY[146] TYPING A 2!!"
  66. 129 GET HL$:IF HL$<>"2" THEN 129
  67. 130 POKE 1040,50
  68. 131 GOSUB 5200
  69. 132 PRINT"VERY GOOD!!                             "
  70. 133 PRINT"                                       "
  71. 134 PRINT"REMEMBER: YOU MUST ENTER THE CARRY EVEN "
  72. 136 PRINT"IF IT IS A ZERO."
  73. 138 GOSUB 5500
  74. 150 SYS(ML):PRINT""
  75. 250 FOR X=826 TO 838:READ T1:POKE X,T1:NEXT X
  76. 260 DATA 169,96,162,0,157,108,6,232
  77. 270 DATA 224,240,208,248,96
  78. 281 CM$(1)="VERY IMPRESSIVE!"
  79. 282 CM$(2)="I SEE YOU'VE BEEN DOING YOUR HOMEWORK!"
  80. 283 CM$(3)="TOO BAD YOUR TEACHER CAN'T SEE THIS!"
  81. 284 CM$(4)="THE MATH DEPARTMENT IS PROUD OF YOU!"
  82. 285 CM$(5)="WELL, WE CAN'T ALL BE PERFECT."
  83. 286 CM$(6)="THAT WAS A GOOD TRY."
  84. 287 CM$(7)="YOU ALMOST MADE IT ON THAT ONE."
  85. 288 CM$(8)="KEEP TRYING.  YOU'RE DOING WELL."
  86. 289 CM$(9)="KEEP TRYING.  YOU'LL GET IT."
  87. 290 CM$(10)="DON'T GET DISCOURAGED. YOU'LL DO BETTER."
  88. 291 CM$(11)="THESE PROBLEMS ARE NOT SO EASY."
  89. 292 CM$(12)="TRY AGAIN.  PRACTICE MAKES PERFECT."
  90. 920 SYS(ML): PRINT"HOW MANY DIGITS WOULD YOU LIKE IN THE":PRINT
  91. 925 PRINT"MULTIPLIER ?"
  92. 930 GET IN$:IF IN$="" THEN 930
  93. 931 IF VAL(IN$)<1 OR VAL(IN$)>3 THEN 930
  94. 932 WY=0
  95. 940 SYS(ML):GOSUB 25000:SK=PN
  96. 950 FOR I3=1TOVAL(RIGHT$(TI$,2)):X=RND(1):NEXT I3
  97. 951 FOR VM=1 TO SK
  98. 952 SYS(ML)
  99. 953 CV=0
  100. 1000 R1=0:R2=0
  101. 1010 FOR X=1TO6
  102. 1020 A(X)=0:B(X)=0:S(X)=0
  103. 1030 NEXT X
  104. 1130 L=220:U=19:C=0
  105. 1142 A=VAL(IN$)
  106. 1150 IF A=1 OR A=2 OR A=3 THEN 1170
  107. 1160 PRINT"[147]":SYS(ML):PRINT"":GOTO 920
  108. 1170 PRINT"[147]":SYS(ML):PRINT""
  109. 1175 POKE 53272,21
  110. 1210 FOR X=3 TO 1 STEP -1
  111. 1220 A(X)=INT(RND(1)*10)
  112. 1230 IF A(3)=0 GOTO 1220
  113. 1240 R1=R1+A(X)*10^(X-1)
  114. 1250 NEXT X
  115. 1260 FOR X=A TO 1 STEP -1
  116. 1270 B(X)=INT(RND(1)*10)
  117. 1280 IF B(A)=0 GOTO 1270
  118. 1290 R2=R2+B(X)*10^(X-1)
  119. 1300 NEXT X
  120. 1310 PRINTTAB(20-3);R1
  121. 1320 PRINTTAB(20-A);R2
  122. 1330 PRINTTAB(16);"[145]X[198][198][198][198][198]"
  123. 1331 PRINT"                                       "
  124. 1340 POKE1024+220,160
  125. 1350 D=0:S=0
  126. 1360 FOR X=0 TO A-1
  127. 1370 FOR Y=1 TO 4
  128. 2100 P=A(Y)*B(X+1)+C
  129. 2103 C=INT(P/10)
  130. 2106 P(X+Y)=P-C*10
  131. 2110 S(X+Y)=S(X+Y)+P(X+Y)
  132. 2112 K=X+Y
  133. 2115 POKE 1024+(L+1-Y+D-S),160
  134. 2120 GOSUB 5400
  135. 2121 IF G$="*" THEN 6000
  136. 2125 POKE 1024+(L+1-Y+D-S),48+G
  137. 2127 IF S9=0 THEN 2130
  138. 2128 GOSUB 5100
  139. 2130 IF P(X+Y)=G THEN 2160
  140. 2135 J=P(X+Y)
  141. 2140 GOSUB 5000
  142. 2145 GOTO 2115
  143. 2160 S5=0
  144. 2164 IF C=0 AND Y=3 THEN 2305
  145. 2165 IF Y=4 THEN 2305
  146. 2167 IFY=3 THEN 2300
  147. 2169 POKE 1024 +(U+1-Y),160
  148. 2175 GOSUB 5400
  149. 2176 IF G$="*" THEN 6000
  150. 2185 POKE 1024+(U+1-Y),48+G
  151. 2186 IF S9=0 THEN 2188
  152. 2187 GOSUB 5100
  153. 2188 POKE 1024+(U+2-Y),96
  154. 2190 IFC=GTHEN 2290
  155. 2194 J=C:GOSUB 5000
  156. 2200 GOTO 2169
  157. 2290 S5=0
  158. 2300 NEXT Y
  159. 2305 D=D+40:S=S+1
  160. 2306 POKE 1024+U-1,96
  161. 2310 NEXT X
  162. 2312 IF A=1 THEN 4910
  163. 2314 FOR X=0 TO 4+A
  164. 2315 POKE 1024+(221+40*A-X),67
  165. 2316 NEXT X
  166. 3500 T=220+40*A+40:C=0
  167. 3510 FOR X=1 TO K
  168. 3525 S(X)=S(X)+C
  169. 3530 P=INT(S(X)/10)
  170. 3535 B=S(X)-P*10
  171. 3540 POKE 1024+(T-X+1),160
  172. 3550 GOSUB 5400
  173. 3551 IF G$="*" THEN 6000
  174. 3566 POKE 1024+(T-X+1),48+G
  175. 3567 IF S9=0 THEN 3570
  176. 3568 GOSUB 5100
  177. 3570 IF B=G THEN 3668
  178. 3580 J=B
  179. 3590 GOSUB 5000
  180. 3600 GOTO 3540
  181. 3668 S5=0
  182. 3670 C=INT(S(X)/10)
  183. 3678 IF X=K GOTO 4800
  184. 3680 POKE 1024+(T-40*(A+2)-X),160
  185. 3690 GOSUB 5400
  186. 3691 IF G$="*" THEN 6000
  187. 3703 POKE 1024+(T-40*(A+2)-X),48+G
  188. 3705 IF S9=0 THEN 3710
  189. 3706 GOSUB 5100
  190. 3710 IF G=C THEN 3785
  191. 3715 J=C
  192. 3720 GOSUB 5000
  193. 3730 GOTO 3680
  194. 3785 POKE 1024+(T-40*(A+2)-X+1),96
  195. 3786 S5=0
  196. 3790 NEXT X
  197. 4800 IF C=0 THEN 4900
  198. 4810 POKE 1024 +(T-X),160
  199. 4815 IF S9=0 THEN 4820
  200. 4816 GOSUB 5100
  201. 4820 GOSUB 5400
  202. 4821 IF G$="*"THEN 6000
  203. 4835 POKE 1024+(T-X),48+G
  204. 4840 IF C=G THEN 4900
  205. 4850 J=C
  206. 4860 GOSUB 5000
  207. 4870 GOTO 4810
  208. 4900 POKE 1024 +(T-40*(A+2)-X+1),96
  209. 4910 XZ=1 +INT(RND(0)*4)+4*((ABS(CV>1)AND ABS(CV<4))+ABS(CV>3)*2)
  210. 4911 WE$="ERRORS.":IF CV=1 THEN WE$="ERROR."
  211. 4912 PRINT"YOU MADE"CV;WE$
  212. 4913 PRINT""CM$(XZ)
  213. 4920 FOR WA=1 TO 2000:NEXT
  214. 4927 SYS(ML):PRINT""
  215. 4928 M1=0
  216. 4929 WY=WY+CV
  217. 4930 NEXT VM
  218. 4931 VM=VM-1
  219. 4932 GOTO 6000
  220. 5000 REM SUBROUTINE FOR ERROR CORRECTION
  221. 5005 M1=M1+1
  222. 5010 PRINT"":PRINT""
  223. 5020 S5=S5+1
  224. 5030 IF S5=2 THEN 5050
  225. 5035 PRINT"SORRY "F$",":PRINT
  226. 5040 PRINTG"IS INCORRECT.TRY AGAIN."
  227. 5041 CV=CV+1
  228. 5045 GOTO 5070
  229. 5050 PRINT"SORRY "F$",":PRINT:PRINT"THE CORRECT ANSWER IS"J".":PRINT
  230. 5055 PRINT"CONTINUE WHEN YOU UNDERSTAND YOUR ERROR.";
  231. 5060 S5=0
  232. 5070 S9=1
  233. 5080 RETURN
  234. 5100 REM SUBR TO CLEAR BOTTOM OF SCREEN
  235. 5102 T1=0
  236. 5130 POKE 831,108
  237. 5140 SYS(826)
  238. 5145 POKE 831,208
  239. 5146 SYS(826)
  240. 5150 PRINT""
  241. 5160 S9=0
  242. 5170 RETURN
  243. 5200 REM BLANK PART OF SCREEN
  244. 5210 PRINT"": PRINT LEFT$(DO$,11);
  245. 5220 FOR X=1TO40:PRINT"            ";:NEXT X
  246. 5240 RETURN
  247. 5300 PRINT"":PRINT""LEFT$(DO$,20):PRINT"HIT[160]"RE$" WHEN READY TO CONTINUE."
  248. 5305 GET G$:IF G$="" THEN 5305
  249. 5310 RETURN
  250. 5400 REM SUBR FOR GET STATEMENT
  251. 5401 PRINT"            HIT * TO QUIT[146]"
  252. 5410 GET G$:IF G$="" THEN 5410
  253. 5420 IF CHR$(13)=G$ THEN 5410
  254. 5422 IF (ASC(G$)<48 OR ASC(G$)>57) AND G$ <>"*" THEN 5410
  255. 5425 G=VAL(G$)
  256. 5430 RETURN
  257. 5500 REM SUBR FOR SPACE TO CONTINUE
  258. 5505 PRINT""LEFT$(DO$,20)
  259. 5510 PRINT"         HIT SPACE[146] TO CONTINUE."
  260. 5520 GET G$:IF G$="" THEN 5520
  261. 5530 IF ASC(G$)<>32 THEN 5520
  262. 5540 RETURN
  263. 6000 SYS(ML)
  264. 6010 PRINT"ERROR ANALYSIS:":PRINT:PRINT
  265. 6020 PRINT"AVERAGE PER PROBLEM --"INT((WY/VM)*100)/100
  266. 6030 PRINT:PRINT"TOTAL --"WY
  267. 6040 FOR WA=1 TO 3000:NEXT
  268. 6050 PRINT"HIT RETURN[146] FOR MORE PROBLEMS ":PRINT"OR * TO QUIT."
  269. 6055 G$="":GET G$:IF G$="" THEN 6055
  270. 6060 IF G$="*" THEN 6100
  271. 6070 IF ASC(G$)=13 THEN 920
  272. 6080 GOTO 6055
  273. 6100 PRINT"                                       [145][145][145][145][145]"
  274. 6110 PRINT"[145][145][145][145]I HOPE YOU ENJOYED THIS SESSION."
  275. 6115 PRINT"TYPE 'RUN' RETURN[146] TO RUN AGAIN."
  276. 20000 END
  277. 20020 PRINT"[147]"
  278. 20030 PRINT"          [169]   [223][146]      [223][146]  [169]   [223][146]"
  279. 20040 PRINT"           [146][169] [223] [146]   [146]  [223] [146]   [146][169] [223] [146]"
  280. 20050 PRINT"           [146]       [146]    [146]  [223][223][146]"
  281. 20060 PRINT"           [146]       [146]  [169][146][169]   [223][223][146]"
  282. 20070 PRINT"           [146]       [146]  [223][223][146]    [223][223][146]"
  283. 20080 PRINT"           [146]       [146]    [146]     [223][223][146]"
  284. 20100 PRINT"           [223][146] [169] [146]   [146]  [169] [146]   [223][146] [169] [146]"
  285. 20110 PRINT"          [223]   [146][169]      [146][169]  [223]   [146][169]"
  286. 20120 PRINT"           SOFTWARE PRESENTS:"
  287. 20130 PRINT   "        123 DIGIT MULTIPLICATION"
  288. 20140 PRINT       "        [197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197][197]"
  289. 20150 FOR WA=1TO2000:NEXT WA
  290. 20160 PRINT"[147]"
  291. 22000 RETURN
  292. 24999 END
  293. 25000 PRINT"[147]HOW MANY PROBLEMS DO YOU WANT";
  294. 25005 INPUT PN$
  295. 25010 IF PN$="" THEN 25000
  296. 25020 PN=VAL(PN$)
  297. 25030 IF PN<1 THEN 25000
  298. 25040 IF PN<10 THEN RETURN
  299. 25050 PRINT"ARE YOU SURE YOU WANT "PN$" PROBLEMS (Y/N)?";
  300. 25060 GET DC$
  301. 25070 IF DC$<>"Y" AND DC$<>"N" THEN 25060
  302. 25080 IF DC$="Y" THEN RETURN
  303. 25090 GOTO25000
  304.