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

  1. 0 OPEN 5,3:ML=850:DATA 162,5,32,201,255,169,147,32,210,255
  2. 1 DATA 162,250,169,32,157,255,3,157,249,4,157,243,5,157,237,6,169,1
  3. 2 DATA 157,255,215,157,249,216,157,243,217,157,237,218,202,208,225,96
  4. 3 FOR T=0 TO 43:READ A:POKE ML+T,A:NEXT
  5. 4 DIM CM$(12):POKE 53280,0:POKE 53281,0:GOSUB 20020
  6. 5 PRINT"[147]":SYS(ML):DO$="":RI$=""
  7. 6 POKE 53280,0:POKE 53281,0
  8. 20 FOR X=3 TO 37:POKE1024+40*2+X,160:POKE1024+40*22+X,160:NEXTX
  9. 30 FOR X=3TO22:POKE1024+40*X+3,160:POKE1024+40*X+37,160:NEXTX
  10. 40 PRINT""RI$" L O N G  D I V I S I O N"
  11. 42 PRINT""RI$"[195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195]"
  12. 45 PRINT""RI$RI$"BY DON ROSS"
  13. 50 PRINT""LEFT$(DO$,14)RI$"MICROCOMPUTER WORKSHOPS"
  14. 60 PRINT""LEFT$(DO$,17)RI$RI$"COPYRIGHT 1983"
  15. 70 FORX=1TO1500:NEXTX
  16. 71 CM$(1)="VERY IMPRESSIVE!"
  17. 72 CM$(2)="I SEE YOU'VE BEEN DOING YOUR HOMEWORK!"
  18. 73 CM$(3)="TOO BAD YOUR TEACHER CAN'T SEE THIS!"
  19. 74 CM$(4)="THE MATH DEPARTMENT IS PROUD OF YOU!"
  20. 75 CM$(5)="WELL, WE CAN'T ALL BE PERFECT."
  21. 76 CM$(6)="THAT WAS A GOOD TRY."
  22. 77 CM$(7)="YOU ALMOST MADE IT ON THAT ONE."
  23. 78 CM$(8)="KEEP TRYING.  YOU'RE DOING WELL."
  24. 79 CM$(9)="KEEP TRYING.  YOU'LL GET IT."
  25. 80 CM$(10)="DON'T GET DISCOURAGED. YOU'LL DO BETTER."
  26. 81 CM$(11)="THESE PROBLEMS ARE NOT SO EASY."
  27. 82 CM$(12)="TRY AGAIN.  PRACTICE MAKES PERFECT."
  28. 150 PRINT"[147]":SYS(ML)
  29. 200 R$="RETURN[146]"
  30. 210 PRINT"[147]HI!  WHAT'S YOUR NAME ";
  31. 211 INPUT F$:IF F$="" THEN 210
  32. 220 IFLEN(F$)<2ANDASC(F$)=160THEN 210
  33. 230 PRINT"[147]":SYS(ML)
  34. 235 PRINT"HI[160]"F$",":PRINT:PRINT"DO YOU WANT INSTRUCTIONS ?"
  35. 240 GET AN$:IF AN$="" THEN 240
  36. 250 IFCHR$(13)=AN$THEN240
  37. 255 IFAN$="N"THEN670
  38. 260 IFAN$<>"Y"THEN230
  39. 270 PRINT"[147]":SYS(ML)
  40. 280 PRINT"              INSTRUCTIONS[146]"
  41. 281 PRINT"I WILL GIVE YOU PRACTICE IN LONG        "
  42. 283 PRINT"DIVISION.  BECAUSE ALL PROBLEMS ARE     "
  43. 285 PRINT"GENERATED RANDOMLY, YOU WILL GET        "
  44. 287 PRINT"DIFFERENT PROBLEMS EACH TIME YOU RUN    "
  45. 289 PRINT"THIS PROGRAM."
  46. 290 GOSUB 2690
  47. 292 PRINT""
  48. 294 PRINT"YOU MAY DECIDE HOW DIFFICULT THE        "
  49. 296 PRINT"PROBLEM WILL BE BY CHOOSING THE NUMBER  "
  50. 298 PRINT"OF DIGITS IN THE DIVISOR.               "
  51. 300 PRINT"THE DIVISOR MAY BE 1, 2, OR 3 DIGITS.   "
  52. 302 GOSUB 2690
  53. 390 PRINT"[147]":SYS(ML)
  54. 400 PRINTLEFT$(DO$,9);:PRINT"FOR EXAMPLE: IF THE DIVISOR WERE 2      "
  55. 410 PRINT"DIGITS, THE PROBLEM WOULD LOOK LIKE     "
  56. 420 PRINT"THIS."
  57. 430 PRINT"THE WHITE SQUARE IS CALLED A CURSOR.  IT"
  58. 440 PRINT"TELLS YOU WHERE THE NEXT NUMBER SHOULD  "
  59. 445 PRINT"GO."
  60. 460 PRINT""
  61. 470 PRINTTAB(16)"[164][164][164][164][164]"
  62. 480 PRINTTAB(13)"59[167]16756"
  63. 490 POKE1024+18,160
  64. 491 PRINT"HIT SPACE[146] TO CONTINUE."
  65. 501 GET GH$:IF GH$<>" " THEN 501
  66. 502 PRINT"FOR EXAMPLE: IF YOU TYPE A 2, THEN A 2  "
  67. 503 PRINT"WILL APPEAR WHERE THE CURSOR IS.        "
  68. 504 FOR CV=1 TO 10:PRINT"                                        [157]";:NEXT CV
  69. 505 PRINT"TRY[146] TYPING A 2!!      "
  70. 509 GET FG$:IF FG$<>"2" THEN 509
  71. 510 PRINT"":PRINTLEFT$(DO$,6);
  72. 520 PRINT"THE[160]2 WILL PRINT IN PLACE OF THE      "
  73. 530 PRINT"CURSOR AND THE CURSOR WILL MOVE BELOW"
  74. 540 PRINT"THE 7.  IT IS JUST LIKE WRITING ON A "
  75. 550 PRINT"PIECE OF PAPER!!"
  76. 570 POKE1024+18,50
  77. 580 POKE1024+18+3*40,160
  78. 590 PRINT"HIT SPACE[146] TO CONTINUE."
  79. 591 GET DJ$:IF DJ$<>" " THEN 591
  80. 600 PRINT"":PRINT LEFT$(DO$,6);
  81. 602 PRINT"IF YOU MAKE A MISTAKE, I WILL GIVE YOU  "
  82. 604 PRINT"ANOTHER TRY.  AFTER TWO TRIES, I WILL   "
  83. 606 PRINT"GIVE YOU THE CORRECT ANSWER AND WILL    "
  84. 608 PRINT"ALLOW YOU TO CONTINUE."
  85. 610 GOSUB 2690
  86. 670 REM
  87. 680 PRINT"[147]":SYS(ML)
  88. 690 FORI=1TOVAL(RIGHT$(TI$,2)):R=RND(1):NEXTI
  89. 710 DIM C(20):
  90. 720 FORX=1TO13:READ C(X):NEXT
  91. 730 REM
  92. 740 REM
  93. 770 PRINT"[147]":SYS(ML):GOSUB 25000:SK=PN
  94. 772 PRINT"[147]":SYS(ML)
  95. 773 CX=0
  96. 780 PRINT"HOW MANY DIGITS WOULD YOU LIKE IN THE":PRINT:PRINT"DIVISOR ?"
  97. 790 GET IN$:IF VAL(IN$)<1 OR VAL(IN$)>3 THEN 790
  98. 795 IF ASC(IN$)=160 THEN PRINT"[145]";:GOTO790
  99. 796 FOR VM=1 TO SK
  100. 797 M(1)=200:M(2)=321:M(3)=442
  101. 798 D1=0:J2=0:K2=0
  102. 799 SUB=0:TP=0:H2=0:H3=0:H5=1:V4=0:CV=0
  103. 800 D=VAL(IN$)
  104. 810 IFD<>1ANDD<>2ANDD<>3THEN770
  105. 820 A(D)=1
  106. 830 FOR X=1TOD
  107. 840 A(X)=INT(RND(1)*10)
  108. 850 IFA(D)=0THEN840
  109. 860 D1=D1+A(X)*10^(X-1)
  110. 870 NEXT X
  111. 880 IFD1=1THEND1=0:GOTO830
  112. 890 Q=INT(RND(1)*998+1)
  113. 900 D2=D1*Q
  114. 910 L=INT(LOG(Q)/LOG(10))+1
  115. 920 L2=INT(LOG(D2)/LOG(10))+1
  116. 925 IF L2<3 THEN 890
  117. 930 T=Q
  118. 940 FORX=1TOL
  119. 950 Q(X)=T-INT(T/10)*10
  120. 960 T=INT(T/10)
  121. 970 NEXT X
  122. 980 T=D2
  123. 990 FORX=1TOL2
  124. 1000 D(X)=T-INT(T/10)*10
  125. 1010 T=INT(T/10)
  126. 1020 NEXT X
  127. 1030 PRINT"[147]":SYS(ML):PRINT:C$=STR$(D1)
  128. 1040 PRINTTAB(14+D+1)"[176]";
  129. 1050 FORX=1TOL2:PRINT"[192]";:NEXT X
  130. 1060 PRINT:PRINTTAB(14);C$"[194]"
  131. 1070 FORX=L2TO1STEP-1
  132. 1080 POKE1024+96+D+L2-X,48+D(X)
  133. 1090 NEXTX
  134. 1100 M4=1
  135. 1110 FORE4=1TOL-1:M4=M4*10:NEXTE4
  136. 1120 TP=INT(D2/M4)
  137. 1130 FORX=LTO1STEP-1
  138. 1140 X1=L-X
  139. 1150 POKE1024+16+D+L2-L+X1,160
  140. 1160 GOSUB2640
  141. 1161 IF G$="*" THEN 3000
  142. 1170 POKE1024+16+D+L2-L+X1,48+G
  143. 1180 IFS9=0THEN1200
  144. 1190 GOSUB2310
  145. 1200 IFG=Q(X)THEN1230
  146. 1210 J=Q(X):GOSUB2160
  147. 1220 GOTO 1150
  148. 1230 S5=0
  149. 1240 C=0
  150. 1250 FORZ=1TOD
  151. 1260 IFQ(X)=0ANDX=1THEN2010
  152. 1270 IFQ(X)=0THENJ2=1:GOTO1620
  153. 1280 P=Q(X)*D1
  154. 1290 PD=Q(X)*A(Z)+C:C=INT(PD/10)
  155. 1300 PD=PD-C*10
  156. 1310 IFJ2=1THENX1=X1-1:K2=1
  157. 1320 POKE1024+17-Z+D+L2-L+X1+120*(X1+1)+K2,160
  158. 1330 GOSUB2640
  159. 1331 IF G$="*" THEN 3000
  160. 1340 POKE1041-Z+D+L2-L+X1+120*(X1+1)+K2,48+G
  161. 1350 IFJ2=1THENX1=X1+1:K2=0
  162. 1360 IFS9=0THEN1380
  163. 1370 GOSUB2310
  164. 1380 IFPD=GTHEN1410
  165. 1390 J=PD:GOSUB2160
  166. 1400 GOTO1310
  167. 1410 S5=0:IFZ=DTHEN2460
  168. 1420 POKE1024+54+D-Z,160
  169. 1430 GOSUB2640
  170. 1431 IF G$="*" THEN 3000
  171. 1440 POKE1024+54+D-Z,48+G
  172. 1450 IFS9=0THEN1470
  173. 1460 GOSUB2310
  174. 1470 IFC=GTHEN1500
  175. 1480 J=C:GOSUB 2160
  176. 1490 GOTO1420
  177. 1500 S5=0:POKE 1024+55+D-Z,96
  178. 1510 NEXTZ
  179. 1520 SUB=Q(X)*D1
  180. 1530 POKE1024+55+D-(Z+1),96
  181. 1540 LS=INT(LOG(SUB)/LOG(10))+1
  182. 1550 IFJ2=1THENX1=X1-1
  183. 1560 IFX=1THENH5=0
  184. 1570 FORW=1TOL2
  185. 1580 POKE1199+W+D+X1*120,67
  186. 1590 NEXTW
  187. 1600 V=V+1
  188. 1610 IFJ2=1THENX1=X1+1
  189. 1620 SUB=Q(X)*D1
  190. 1630 DF=INT(TP)-INT(SUB)
  191. 1640 IFDF<>OTHEN1670
  192. 1650 LS=1:S(1)=0:H2=1:IFJ2=1THEN1860
  193. 1660 GOTO1740
  194. 1670 IF DF<=0 THEN 797 LS=INT(LOG(DF)/LOG(10))+1
  195. 1680 IFJ2=1THEN1860
  196. 1690 T=DF
  197. 1700 FORX7=1TOLS
  198. 1710 S(X7)=T-INT(T/10)*10
  199. 1720 T=INT(T/10)
  200. 1730 NEXTX7
  201. 1740 IFX=1THEN2010
  202. 1750 FORX7=1TOLS
  203. 1760 POKE1041+D+L2-L-X7+M(X1+1),160
  204. 1770 GOSUB2640
  205. 1771 IF G$="*" THEN 3000
  206. 1780 POKE1041+D+L2-L-X7+M(X1+1),48+G
  207. 1790 IFS9=0THEN1810
  208. 1800 GOSUB2310
  209. 1810 IFG=S(X7)THEN1840
  210. 1820 J=S(X7):GOSUB 2160
  211. 1830 GOTO1760
  212. 1840 S5=0
  213. 1850 NEXTX7
  214. 1860 IFX=1THEN2010
  215. 1870 IFJ2=1THENX1=X1-1
  216. 1880 IFJ2=1ANDH2=1THENH3=1
  217. 1890 POKE1041+D+L2-L-X7+M(X1+1)+LS+1+H3,160
  218. 1900 GOSUB2640
  219. 1901 IF G$="*" THEN 3000
  220. 1910 POKE1041+D+L2-L-X7+M(X1+1)+LS+1+H3,48+G
  221. 1920 IFJ2=1THENX1=X1+1
  222. 1930 IFS9=0THEN1950
  223. 1940 GOSUB2310
  224. 1950 IFG=D(L-(X1+1))THEN1980
  225. 1960 J=D(L-(X1+1)):GOSUB 2160
  226. 1970 GOTO1860
  227. 1980 S5=0
  228. 1990 TP=DF*10+D(L-(X1+1))
  229. 2000 NEXTX
  230. 2010 XZ=1+INT(RND(0)*4)+4*((ABS(CV>1) AND ABS(CV<4))+ABS(CV>3)*2)
  231. 2011 FR$="ERRORS":IF CV=1 THEN FR$="ERROR"
  232. 2020 PRINT"YOU MADE"CV""FR$".":PRINT:PRINT CM$(XZ):CX=CX+CV
  233. 2021 PRINT"                                   "
  234. 2022 FOR WA=1 TO 3000:NEXT
  235. 2130 M1=0
  236. 2140 NEXT VM
  237. 2141 VM=VM-1
  238. 2142 G$="@"
  239. 2143 GOTO 3000
  240. 2160 REM SUBR
  241. 2170 M1=M1+1
  242. 2180 S5=S5+1
  243. 2190 IFS5=2THEN2250
  244. 2200 E1=E1+1
  245. 2220 PRINT""LEFT$(DO$,19);"SORRY "F$".":PRINT
  246. 2230 PRINT"YOUR ANSWER IS INCORRECT. TRY AGAIN."
  247. 2231 CV=CV+1
  248. 2240 GOTO2290
  249. 2250 PRINT""LEFT$(DO$,15);F$",":PRINT:PRINT"THE CORRECT ANSWER IS"J".":PRINT
  250. 2260 PRINT"WHEN YOU UNDERSTAND YOUR ERROR,TYPE":PRINT
  251. 2270 PRINT"THE CORRECT ANSWER.":E1=E1+1
  252. 2280 S5=0
  253. 2290 S9=1
  254. 2300 RETURN
  255. 2310 REM SUBR
  256. 2320 T1=0
  257. 2350 FORU2=826TO838
  258. 2360 T1=T1+1:POKE U2,C(T1)
  259. 2370 NEXTU2
  260. 2380 SYS(826)
  261. 2390 POKE831,168
  262. 2400 SYS(826)
  263. 2410 PRINT"                        "
  264. 2420 S9=0
  265. 2430 RETURN
  266. 2440 DATA 169,96,162,0,157,108,6,232
  267. 2450 DATA 224,240,208,248,96
  268. 2460 REM
  269. 2470 IFC=0THEN1500
  270. 2480 IFJ2=1THENX1=X1-1:K2=1
  271. 2490 POKE1040-Z+D+L2-L+X1+120*(X1+1)+K2,160
  272. 2500 GET G$:IF G$="" THEN 2500
  273. 2510 G=VAL(G$)
  274. 2520 IFS9=OTHEN2540
  275. 2530 GOSUB 2310
  276. 2540 IFC=GTHEN2570
  277. 2550 J=C:GOSUB 2160
  278. 2560 GOTO2490
  279. 2570 POKE1040-Z+D+L2-L+X1+120*(X1+1)+K2,48+G
  280. 2580 IFJ2=1THENX1=X1+1:K2=0
  281. 2590 POKE1024+55+D-Z,96
  282. 2600 GOTO1500
  283. 2640 REM
  284. 2641 PRINT"            HIT * TO QUIT[146]"
  285. 2650 GETG$:IF G$=""THEN2650
  286. 2660 IFCHR$(13)=G$THEN2650
  287. 2669 IF (ASC(G$)<48 OR ASC(G$)>57) AND G$<>"*" THEN 2650
  288. 2670 G=VAL(G$)
  289. 2680 RETURN
  290. 2690 REM
  291. 2700 PRINT"":PRINTLEFT$(DO$,21);:PRINT"HIT SPACE[146] TO CONTINUE."
  292. 2705 B5$="                                       "
  293. 2710 GETG$:IFG$=""THEN2710
  294. 2720 IFASC(G$)<>32THEN2710
  295. 2730 PRINT"":PRINTLEFT$(DO$,9);
  296. 2740 FOR QE=1TO13:PRINTB5$:NEXT QE
  297. 2760 RETURN
  298. 3000 PRINT"[147]":SYS(ML):PRINT"ERROR ANALYSIS:":PRINT
  299. 3010 PRINT"AVERAGE PER PROBLEM -- "INT((CX/VM)*100)/100
  300. 3020 PRINT:PRINT"TOTAL -- "CX
  301. 3030 FOR WA=1 TO 3000:NEXT
  302. 3035 PRINT"HIT RETURN[146] FOR MORE PROBLEMS ":PRINT"OR * TO QUIT."
  303. 3036 G$="":GET G$:IF G$="" THEN 3036
  304. 3037 IF ASC(G$)<>13 AND G$<>"*" THEN3036
  305. 3040 IF G$<>"*" THEN 770
  306. 3060 PRINT"I HOPE YOU ENJOYED THIS SESSION!!"
  307. 3070 PRINT"TYPE 'RUN' RETURN[146] TO BEGIN AGAIN."
  308. 20000 END
  309. 20020 PRINT"[147]"
  310. 20030 PRINT"          [169]   [223][146]      [223][146]  [169]   [223][146]"
  311. 20040 PRINT"           [146][169] [223] [146]   [146]  [223] [146]   [146][169] [223] [146]"
  312. 20050 PRINT"           [146]       [146]    [146]  [223][223][146]"
  313. 20060 PRINT"           [146]       [146]  [169][146][169]   [223][223][146]"
  314. 20070 PRINT"           [146]       [146]  [223][223][146]    [223][223][146]"
  315. 20080 PRINT"           [146]       [146]    [146]     [223][223][146]"
  316. 20100 PRINT"           [223][146] [169] [146]   [146]  [169] [146]   [223][146] [169] [146]"
  317. 20110 PRINT"          [223]   [146][169]      [146][169]  [223]   [146][169]"
  318. 20120 PRINT"           SOFTWARE PRESENTS:"
  319. 20130 PRINT"       L O N G   D I V I S I O N"
  320. 20140 PRINT"       [183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183]"
  321. 20150 FOR WA=1TO2000:NEXT WA
  322. 22000 RETURN
  323. 24999 END
  324. 25000 PRINT"[147]HOW MANY PROBLEMS DO YOU WANT";
  325. 25005 INPUT PN$
  326. 25010 IF PN$="" THEN 25000
  327. 25020 PN=VAL(PN$)
  328. 25030 IF PN<1 THEN 25000
  329. 25040 IF PN<10 THEN RETURN
  330. 25050 PRINT"ARE YOU SURE YOU WANT "PN$" PROBLEMS (Y/N)?";
  331. 25060 GET DC$
  332. 25070 IF DC$<>"Y" AND DC$<>"N" THEN 25060
  333. 25080 IF DC$="Y" THEN RETURN
  334. 25090 GOTO25000
  335.