home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 34 / 64er_Magazin_Sonderheft_34_19xx_Markt__Technik_de_Disk_2_of_2_Side_B.d64 / chemie-trainer (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  20KB  |  582 lines

  1. 1 rem *********************************
  2. 2 rem *                         vas'88*
  3. 3 rem * chemische gleichungen uebung  *
  4. 4 rem *                               *
  5. 5 rem *    vasco alexander schmidt    *
  6. 6 rem *         sieglindestr.9        *
  7. 7 rem *         1000 berlin 41        *
  8. 8 rem *                               *
  9. 9 rem *********************************
  10. 10 :
  11. 50 :
  12. 100 poke 53281,15: poke 53280,12
  13. 110 poke 53272,23: poke   646,00
  14. 120 print chr$(147);
  15. 130 :
  16. 140 gosub  500: rem initialisierung
  17. 150 rem *** steuerteil
  18. 160 print"[147]":qt$="[205]enue: chgl.u.i":gosub63520
  19. 170 print"[145][145]----------------------------------------"
  20. 180 print"  f1 [146]   [210]eaktion [205]etall + [206]ichtmetall           ueben"
  21. 190 print"  f3 [146]   [210]eaktion [204]auge + [211]aeure ueben"
  22. 200 print"  f5 [146]   [194]eide [210]eaktionsarten ueben"
  23. 210 print"  f7 [146]   [210]eaktionsgleichungen berechnen          lassen"
  24. 220 print" shift[146] f1-f5[146]   [193]rbeitsboegen zu f1-f5"
  25. 230 print"               drucken lassen"
  26. 240 print" return[146] [215]ertigkeit"
  27. 300 print"  f8 [146]   [197]nde"
  28. 310 print "----------------------------------------"
  29. 320 z1=22:s1=14:qm$="[194]itte waehlen":gosub63525
  30. 321 z1=23:s1=14:qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163]":gosub63525
  31. 340 geta$:ifa$=""then340
  32. 350 if a$="[140]" then print"[147]";: end
  33. 355 if a$=chr$(13) then z1=17:s1=7:qm$="_":gosub63525: pp=5: gosub 5000:goto150
  34. 360 if asc(a$)<133 or asc(a$)>140 then 340
  35. 370 if a$=chr$(133) then z1=4:s1=5:qm$="_":gosub63525: pp=1
  36. 375 if a$=chr$(134) then z1=7:s1=5:qm$="_":gosub63525: pp=2
  37. 380 if a$=chr$(135) then z1=9:s1=5:qm$="_":gosub63525: pp=3
  38. 385 if a$=chr$(136) then z1=11:s1=5:qm$="_":gosub63525: pp=4
  39. 390 if asc(a$)>136 and asc(a$)<141 then z1=14:s1=12:qm$="_":gosub63525
  40. 400 :
  41. 410 onasc(a$)-132gosub10000,20000,30000,40000,19000,29000,39000
  42. 415 if pp=5 then gosub 5000
  43. 420 if qq=1 then 410
  44. 450 goto 150
  45. 499 end
  46. 500 rem *** initialisierung
  47. 510 ss=2:rr=0:tt=3:pp=1:qq=0:sk=1:d=0
  48. 515 dimta$(5,24,4),ta(5,24),w(2),na$(4,2),ko(4),st$(2),k(2),tt(tt),n$(2,50)
  49. 520 for i=1 to ss: read x: next i
  50. 530 for i=1 to tt
  51. 540 : read tt(i)
  52. 550 : for j=1 to tt(i)
  53. 560 : : for k=1 to 4
  54. 570 : : : read ta$(i,j,k)
  55. 580 : : next k
  56. 590 : : read ta(i,j)
  57. 600 : next j
  58. 610 next i
  59. 620 def fn f1(r)=int(rnd(1)*r)+1
  60. 999 return
  61. 5000 rem --- return: begriffe
  62. 5300 rem ... wertigkeit
  63. 5310 print"[147]":qt$="[197]rklaerung [215]ertigkeit": gosub 63520
  64. 5320 print"[215]ertigkeit                              [163][163][163][163][163][163][163][163][163][163]"
  65. 5325 print"[196]ie [215]ertigkeit ist ein [200]ilfsmittel"
  66. 5330 print"zur einfachen [196]arstellung von [211]toff-    verbindungen."
  67. 5331 print"[196]ie [215]ertigkeit gibt an, wieviele"
  68. 5332 print"[215]asserstoffatome ein [193]tom des jeweili-"
  69. 5333 print"gen [211]toffes binden oder ersetzen kann."
  70. 5334 print"(z.[194].: [200]2[207] - [207] 2-wertig                        [195][200]4 - [195] 4-wertig)"
  71. 5335 print"[214]erbinden sich je ein [212]eilchen zweier   [211]toffe, so haben sie die gleiche"
  72. 5336 print"[215]ertigkeit."
  73. 5337 print"[211]o konnte man die [215]ertigkeiten vieler   [211]toffe herleiten."
  74. 5338 gosub 14000
  75. 5339 print"[147]":qt$="[197]rklaerung [215]ertigkeit [201][201]": gosub 63520
  76. 5340 print"[193]us dem [208]eriodensystem kann man die     [215]ertigkeit auch herauslesen."
  77. 5341 print"[198]uer [199]ruppen  [201] - [201][214] :": print" [215]ertigkeit = [199]ruppennummer"
  78. 5342 print"[198]uer [199]ruppen  [214] - [214][201][201]": print" [215]ertigkeit = 8 - [199]ruppennummer"
  79. 5343 print"[196]as gilt nur fuer die [200]auptgruppen."
  80. 5344 print"[197]delgase haben die [215]ertigkeit 0 :       sie reagieren nicht."
  81. 5499 gosub14000: return
  82. 10000 rem --- f1: metall + nichtmetall
  83. 10100 w(1)=fn f1(24): w(2)=fn f1(8)
  84. 10110 gosub 18000: qq=0
  85. 10120 gosub 13000
  86. 10300 f$="[210]eaktionsprodukt ": g$=na$(3,1):gosub 12000: gosub 49000: gosub 12200
  87. 10310 if rr=1 then rr=0: gosub 15100: gosub 14000: gosub 13000: gosub 49000
  88. 10400 f$="1.[211]toff kurz ":g$=na$(1,2): gosub12000: gosub 12300
  89. 10410 f$="2.[211]toff kurz ":g$=na$(2,2): gosub12000: gosub 12300
  90. 10420 f$="3.[211]toff kurz ":g$=na$(3,2): gosub12000: gosub 49500: gosub 12200
  91. 10430 if rr=1 then rr=0: gosub 15200: gosub 14000: gosub 13000: gosub 49500
  92. 10500 f$="1.[203]oeffizient ":g$=right$(str$(ko(1)),1)
  93. 10505 gosub 12000: gosub 12300
  94. 10510 f$="2.[203]oeffizient ":g$=right$(str$(ko(2)),1)
  95. 10515 gosub 12000: gosub 12300
  96. 10520 f$="3.[203]oeffizient ":g$=right$(str$(ko(3)),1)
  97. 10535 gosub 12000: gosub 48000: gosub 12200
  98. 10540 if rr=1 then rr=0: gosub 15300: gosub 14000: gosub 48000
  99. 10800 z1=22:s1=14:qm$="nochmal (j) ?": gosub 63525
  100. 10810 z1=23:s1=14:qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163]": gosub 63525
  101. 10820 get a$: if a$="" then 10820
  102. 10830 if a$="j" then qq=1
  103. 10840 if pp=1 and qq=1 then 10000
  104. 11990 return
  105. 12000 rem ... abfrage
  106. 12100 z1=18:s1=0:qm$=f$:gosub63525
  107. 12110 input n$
  108. 12120 if n$=g$ then qm$="richtig!":z1=20:s1=16:gosub63525:goto12140
  109. 12130 qm$="falsch. [210]ichtig: "+g$:z1=20:s1=(40-len(qm$))/2:gosub63525
  110. 12140 for l=1 to 500: next l
  111. 12150 return
  112. 12200 :
  113. 12230 qm$="[197]rklaerung (space)":z1=22:s1=11:gosub63525
  114. 12240 qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]":z1=23:s1=11:gosub63525
  115. 12250 get a$: if a$="" then 12250
  116. 12260 if a$=" " then rr=1
  117. 12270 gosub 12300
  118. 12280 return
  119. 12300 qm$="                                       ":z1=18:s1=0:gosub63525
  120. 12310 z1=19:gosub63525: z1=20:gosub63525: z1=22:gosub63525: z1=23:gosub63525
  121. 12320 return
  122. 12321 return
  123. 13000 rem ... bildschirm
  124. 13120 print"[147]": qt$="[193]bfragen [205]etall+[206]ichtmetall": gosub 63520
  125. 13200 print"[145][199]ib das bei der [210]eaktion von"
  126. 13201 printna$(1,1)" mit "na$(2,1)
  127. 13202 print"entstehende [210]eaktionsprodukt an und"
  128. 13203 print"stelle die [210]eaktionsgleichung auf."
  129. 13300 return
  130. 14000 rem ... abfrage
  131. 14100 qm$="(return)": z1=22: s1=16: gosub 63525
  132. 14110 qm$="[163][163][163][163][163][163][163][163]": z1=23: s1=16: gosub 63525
  133. 14120 get a$: if a$<>chr$(13) then 14120
  134. 14130 return
  135. 14200 get a$: if a$="" then 14100
  136. 14210 if a$=" " then rr=1
  137. 14220 return
  138. 14990 return
  139. 15000 rem ... erk1
  140. 15100 rem ... erk1,1
  141. 15110 print"[147]": qt$="[197]rklaerung [210]eaktionsprodukt": gosub 63520
  142. 15120 printna$(1,1)" und "na$(2,1)" reagieren zu ": print "==> "na$(3,1)""
  143. 15130 print"[196]er [206]ame einer [205]etall-[206]ichtmetall-      [214]erbindung setzt sich i.a. aus"
  144. 15140 print"[205]etallname + [206]ichtmetallname + 'id'"
  145. 15150 print"zusammen."
  146. 15160 print "[193]usnahmen:  [211]auerstoff - ox-id"
  147. 15170 print "            [211]chwefel   - sulf-id"
  148. 15180 print "            [211]tickstoff - nitr-id"
  149. 15190 return
  150. 15200 rem ... erk1,2
  151. 15210 print"[147]":qt$="[197]rklaerung [211]ymbole": gosub 63520
  152. 15220 print"[196]as [211]ymbol von "na$(1,1)" heisst "ta$(1,w(1),2)"."
  153. 15230 print"[196]as [211]ymbol von "na$(2,1)" heisst "ta$(2,w(2),2)"."
  154. 15240 if right$(na$(2,2),1)<>"2" then 15260
  155. 15250 print"[196]a "na$(2,1)" ein [199]as ist und molekular"
  156. 15255 print"vorkommt, muss der [201]ndex '2' stehen:": print"==> "na$(2,2)
  157. 15260 print"[196]ie [198]ormel fuer "na$(3,1): print"heisst "na$(3,2)"."
  158. 15261 qm$="weiter (return)": z1=22: s1=12: gosub 63525
  159. 15262 qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]": z1=23: s1=12: gosub 63525
  160. 15263 get a$: if a$="" then 15263
  161. 15264 print"[147]":qt$="[197]rklaerung [211]ymbole [201][201]": gosub 63520
  162. 15265 print"[196]ie [198]ormel fuer "na$(3,1): print"heisst "na$(3,2)"."
  163. 15270 print""ta$(1,w(1),2)" ist"ta(1,w(1))"[157]-wertig.    ";
  164. 15275 printta$(2,w(2),2)" ist"ta(2,w(2))"[157]-wertig."
  165. 15280 print" 1 "na$(1,2)"-[193]tom verbindet sich"
  166. 15290 print "mit ("ta(1,w(1))"/"ta(2,w(2))") "ta$(2,w(2),2)"-[193]tom(en)."
  167. 15291 if k(1)=1 then print "1 "na$(1,2)"-[193]tom verbindet sich":goto 15293
  168. 15292 print ""k(1);na$(1,2)"-[193]tome verbinden sich"
  169. 15293 if k(2)=1 then print "mit 1 "ta$(2,w(2),2)"-[193]tom.": goto 15295
  170. 15294 print"mit"k(2);ta$(2,w(2),2)"-[193]tomen."
  171. 15295 print "==> ";na$(3,2)
  172. 15299 return
  173. 15300 rem ... erk1,3
  174. 15310 print"[147]":qt$="[197]rklaerung [203]oeffizienten": gosub 63520
  175. 15320 print na$(1,2)" + "na$(2,2)" ===> "na$(3,2)
  176. 15330 print "[196]ie [193]nzahl der [193]tome von jedem [197]lement"
  177. 15331 print"in der [199]leichung muss ausgeglichen"
  178. 15332 print"werden.":print"[193]uf beiden [211]eiten der [210]eaktionsgleichung"
  179. 15335 print "[145]muessen die [197]lemente in gleicher [193]nzahl vorhanden sein."
  180. 15340 qm$="weiter (return)": z1=22: s1=12: gosub 63525
  181. 15341 qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]": z1=23: s1=12: gosub 63525
  182. 15342 get a$: if a$="" then 15342
  183. 15345 print"[147]":qt$="[197]rklaerung [203]oeffizienten [201][201]": gosub 63520
  184. 15350 print na$(1,2)" + "na$(2,2)" ===> "na$(3,2)
  185. 15360 print "[193]uf der linken [211]eite der [199]leichung gibt es";
  186. 15361 l=1: if right$(na$(2,2),1)="2" then l=2
  187. 15362 printl;na$(2,1)"-[193]tom(e):  "na$(2,2)
  188. 15363 print "[193]uf der rechten [211]eite"
  189. 15364 l=val(right$(na$(3,2),1)): if l=0 then l=1
  190. 15365 print "[157]"l;na$(2,1)"-[193]tom(e):  "na$(3,2)
  191. 15366 print "[215]ir gleichen aus:  ";ko(2);na$(2,2)
  192. 15367 print "                   ";ko(3);na$(3,2)
  193. 15368 print "==>  "na$(1,2)" + "ko(2);na$(2,2)" ===> "ko(3);na$(3,2)
  194. 15370 qm$="weiter (return)": z1=22: s1=12: gosub 63525
  195. 15371 qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]": z1=23: s1=12: gosub 63525
  196. 15372 get a$: if a$="" then 15372
  197. 15373 print"[147]":qt$="[197]rklaerung [203]oeffizienten [201][201][201]": gosub 63520
  198. 15374 print na$(1,2)" + "ko(2);na$(2,2)" ===> "ko(3);na$(3,2)
  199. 15380 print "[206]un muss nur noch das ";na$(1,1):print"ausgeglichen werden"
  200. 15381 print"[193]uf der linken [211]eite ist":print"1 "na$(1,1)"-[193]tom vorhanden:  ";na$(1,2)
  201. 15382 print"[193]uf der rechten [211]eite":printko(1);na$(1,1)"-[193]tome:  "ko(3);na$(3,2)
  202. 15383 print "[215]ir gleichen aus:  ";ko(1);na$(1,2)
  203. 15384 print "==>  "ko(1);na$(1,2)" + "ko(2);na$(2,2)" ===> "ko(3);na$(3,2)
  204. 15399 return
  205. 17990 return
  206. 18000 rem ... ber1
  207. 18010 qt$="[194]erechnung [205]etall+[206]ichtmetall": gosub 63520: uu=1
  208. 18100 na$(1,1)=ta$(1,w(1),1)
  209. 18110 na$(2,1)=ta$(2,w(2),1)
  210. 18120 na$(3,1)=ta$(1,w(1),1)+ta$(2,w(2),3)
  211. 18130 na$(1,2)=ta$(1,w(1),2)
  212. 18140 na$(2,2)=ta$(2,w(2),2)
  213. 18145 if na$(2,2)<>"[208]" and na$(2,2)<>"[211]" then na$(2,2)=na$(2,2)+"2"
  214. 18150 if ta(1,w(1))/ta(2,w(2))=1 then k(1)=1: k(2)=1: goto 18180
  215. 18160 if ta(1,w(1))/ta(2,w(2))=2 then k(1)=1: k(2)=2: goto 18180
  216. 18170 k(1)=ta(2,w(2)): k(2)=ta(1,w(1))
  217. 18180 na$(3,2)=ta$(1,w(1),2)
  218. 18190 if k(1)<>1 then na$(3,2)=na$(3,2)+right$(str$(k(1)),1)
  219. 18200 na$(3,2)=na$(3,2)+ta$(2,w(2),2)
  220. 18210 if k(2)<>1 then na$(3,2)=na$(3,2)+right$(str$(k(2)),1)
  221. 18220 na$(4,1)="": na$(4,2)="": ko(4)=0
  222. 18230 ko(1)=k(1): ko(2)=k(2): ko(3)=1
  223. 18240 if right$(na$(2,2),1)<>"2" then 18270
  224. 18250 ko(2)=ko(2)/2
  225. 18260 if int(ko(2))<>ko(2) then ko(1)=2*ko(1): ko(2)=2*ko(2): ko(3)=2*ko(3)
  226. 18270 return
  227. 19000 rem --- f2
  228. 19010 print"[147]":qt$="[193]rbeitsbogen [205]etall+[206]ichtmetall": gosub 63520
  229. 19100 gosub 19400
  230. 19110 for l=1 to n
  231. 19120 : w(1)=fnf1(24): w(2)=fnf1(8)
  232. 19130 : n$(1,l)=ta$(1,w(1),1)
  233. 19140 : n$(2,l)=ta$(2,w(2),1)
  234. 19150 next l
  235. 19160 gosub 19500
  236. 19170 return
  237. 19400 rem ... eingabe
  238. 19420 input "[215]ieviele [193]ufgaben ";n
  239. 19430 if n>50 then print"[145][145][145]": goto 19420
  240. 19440 poke198,0: return
  241. 19500 rem ... druck
  242. 19510 poke768,61:open1,4:print#1:close1:poke768,139:if st<>-128 then goto19520
  243. 19515 input"[196]rucker eingeschaltet ";l
  244. 19520 open 1,4
  245. 19530 for l=1 to n
  246. 19540 : print#1,"";n$(1,l);"  +  ";n$(2,l);"  ====>"
  247. 19550 : print#1: print#1: print#1
  248. 19560 next l
  249. 19570 close1
  250. 19580 return
  251. 20000 rem --- f3: lauge + saeure
  252. 20010 print"[147]": qt$="[204]auge+[211]aeure": gosub 63520
  253. 20100 w(1)=fn f1(12): w(2)=fn f1(8)
  254. 20110 gosub 28000: qq=0
  255. 20120 gosub 23000
  256. 20300 f$="1.[210]eaktionsprodukt ": g$=na$(3,1): gosub 12000: gosub 12300
  257. 20350 f$="2.[210]eaktionsprodukt ": g$=na$(4,1):gosub 12000:gosub 49000: gosub 12200
  258. 20360 if rr=1 then rr=0: gosub 25100: gosub 14000: gosub 23000: gosub 49000
  259. 20400 f$="1.[211]toff kurz ":g$=na$(1,2): gosub12000: gosub 12300
  260. 20410 f$="2.[211]toff kurz ":g$=na$(2,2): gosub12000: gosub 12300
  261. 20420 f$="3.[211]toff kurz ":g$=na$(3,2): gosub12000: gosub 12300
  262. 20430 f$="4.[211]toff kurz ":g$=na$(4,2): gosub12000: gosub 49500: gosub 12200
  263. 20440 if rr=1 then rr=0: gosub 25200: gosub 14000: gosub 23000: gosub 49500
  264. 20500 f$="1.[203]oeffizient ":g$=right$(str$(ko(1)),1)
  265. 20505 gosub 12000: gosub 12300
  266. 20510 f$="2.[203]oeffizient ":g$=right$(str$(ko(2)),1)
  267. 20515 gosub 12000: gosub 12300
  268. 20520 f$="3.[203]oeffizient ":g$=right$(str$(ko(3)),1)
  269. 20525 gosub 12000: gosub 12300
  270. 20530 f$="4.[203]oeffizient ":g$=right$(str$(ko(4)),1)
  271. 20535 gosub 12000: gosub 48000: gosub 12200
  272. 20540 if rr=1 then rr=0: gosub 25300: gosub 14000: gosub 48000
  273. 20800 z1=22:s1=14:qm$="nochmal (j) ?": gosub 63525
  274. 20810 z1=23:s1=14:qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163]": gosub 63525
  275. 20820 get a$: if a$="" then 20820
  276. 20830 if a$="j" then qq=1
  277. 20840 if pp=2 and qq=1 then 20000
  278. 21990 return
  279. 23000 rem ... bildschirm
  280. 23120 print"[147]": qt$="[193]bfragen [204]auge+[211]aeure": gosub 63520
  281. 23200 print"[145][199]ib die bei der [210]eaktion von"
  282. 23201 printna$(1,1)" mit "na$(2,1)
  283. 23202 print"entstehende [210]eaktionsprodukte an und"
  284. 23203 print"stelle die [210]eaktionsgleichung auf."
  285. 23300 return
  286. 24990 return
  287. 25000 rem ... erk2
  288. 25100 rem erk 2,1
  289. 25110 print"[147]": qt$="[197]rklaerung [210]eaktionsprodukte": gosub 63520
  290. 25120 print"[145]"na$(1,1)" und "na$(2,1):print"reagieren zu ":printna$(3,1)" und [215]asser"
  291. 25130 print"[194]ei der [210]eaktion von einer [204]auge und    einer [211]aeure ensteht ein [211]alz,"
  292. 25131 print"eine [214]erbindung des [205]etalls aus der     [204]auge und des [211]aeurerestes."
  293. 25132 print"[196]er [206]ame des [211]alzes wird aus":print"[205]etallname + [211]aeurerestname gebildet."
  294. 25133 print"[194]ei dieser [210]eaktion ([206]eutralisations-   reaktion) ensteht aus dem"
  295. 25134 print"[215]asserstoff der [211]aeure und den [200]ydroxyl-teilchen der [204]auge [215]asser."
  296. 25140 print"==> "na$(3,1)
  297. 25141 print"    ("ta$(1,w(1),1)"+"ta$(3,w(2),3)")"
  298. 25142 print"==> [215]asser"
  299. 25143 return
  300. 25200 rem erk 2,2
  301. 25210 print"[147]": qt$="[197]rklaerung [211]ymbole/[198]ormeln": gosub 63520
  302. 25220 print"[196]ie [198]ormel von "na$(1,1):print"heisst "na$(1,2)".":l$=ta$(1,w(1),2)
  303. 25221 l=ta(1,w(1)):print"("l$" ist"l"wertig und bindet"l"[200]ydroxid-":print"[199]ruppe(n))"
  304. 25222 print"[196]ie [198]ormel von "na$(2,1):print"heisst "na$(2,2)"."
  305. 25223 print"[196]ie [198]ormel des [210]eaktionsproduktes       "na$(3,1)" heisst "na$(3,2)"."
  306. 25224 print"[196]ie [198]ormel von [215]asser lautet [200]2[207]."
  307. 25225 qm$="weiter (return)": z1=22: s1=12: gosub 63525
  308. 25226 qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]": z1=23: s1=12: gosub 63525
  309. 25227 get a$: if a$="" then 25226
  310. 25228 print"[147]": qt$="[197]rklaerung [211]ymbole/[198]ormeln [201][201]": gosub 63520
  311. 25230 print na$(1,2)" + "na$(2,2)" ===> "na$(3,2)" + [200]2[207]"
  312. 25231 print "[196]ie [198]ormel fuer "na$(3,1):print"heisst "na$(3,2)"."
  313. 25232 print""ta$(1,w(1),2)" ist"l"[157]-wertig. (bindet"l"[200]ydroxid-":print"[199]ruppe(n))"
  314. 25233 l=ta(3,w(2))
  315. 25234 print""ta$(3,w(2),2)" ist"l"[157]-wertig. (bindet"l"[215]asser-":print"stoffatom(e))"
  316. 25235 print" 1 "ta$(1,w(1),2)"-[212]eilchen verbindet sich"
  317. 25236 print"mit ("ta(1,w(1))"/"ta(3,w(2))") "ta$(3,w(2),2)"-[212]eilchen."
  318. 25237 print""k(1);ta$(1,w(1),2)"-[212]eilchen";:if k(1)=1 then print" verbindet";:goto25239
  319. 25238 print" verbinden";
  320. 25239 print" sich":print"mit"k(2);ta$(3,w(2),2)"-[212]eilchen."
  321. 25240 print"==> ";na$(3,2)
  322. 25299 return
  323. 25300 rem erk 2,3
  324. 25310 print"[147]":qt$="[197]rklaerung [203]oeffizienten": gosub 63520
  325. 25315 print na$(1,2)" + "na$(2,2)" ===> "na$(3,2)" + "na$(4,2)
  326. 25320 print""k(1);ta$(1,w(1),2)"-[212]eilchen";:if k(1)=1 thenprint" verbindet";:goto25322
  327. 25321 print" verbinden";
  328. 25322 print" sich":print"mit"k(2);ta$(3,w(2),2)"-[212]eilchen."
  329. 25330 print"[193]lso muessen die [203]oeffizienten heissen:"
  330. 25331 print ""ko(1);na$(1,2):printko(2);na$(2,2):printko(3);na$(3,2)
  331. 25332 print "([196]a in der [204]auge ein [205]etall-[193]tom und"
  332. 25333 print "in der [211]aeure ein [211]aeurerest-[212]eilchen   vorhanden sind)"
  333. 25334 qm$="weiter (return)": z1=22: s1=12: gosub 63525
  334. 25335 qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]": z1=23: s1=12: gosub 63525
  335. 25336 get a$: if a$="" then 25336
  336. 25337 print"[147]": qt$="[197]rklaerung [203]oeffizienten [201][201]": gosub 63520
  337. 25338 print"[157]"ko(1)na$(1,2)" +"ko(2)na$(2,2)" ===>"ko(3)na$(3,2)" + [200]2[207]"
  338. 25340 print"[202]etzt muss nur noch das [215]asser ausge-   glichen werden:"ko(4)"[200]2[207]"
  339. 25341 print"([193]uf der linken [211]eite der [210]eaktions-    gleichung sind noch"
  340. 25342 print ko(4)*2"[215]asserstoff-[193]tome und":printko(4)"[211]auerstoffatome uebrig.)"
  341. 25399 return
  342. 28000 rem ... ber2
  343. 28010 qt$="[194]erechnung [204]auge+[211]aeure": gosub 63520: uu=2
  344. 28100 na$(1,1)=ta$(1,w(1),1)+"lauge"
  345. 28110 na$(2,1)=ta$(3,w(2),1)
  346. 28120 na$(3,1)=ta$(1,w(1),1)+ta$(3,w(2),3)
  347. 28130 na$(4,1)="[215]asser"
  348. 28140 na$(1,2)=ta$(1,w(1),2)
  349. 28150 if ta(1,w(1))=1 then na$(1,2)=na$(1,2)+"[207][200]": goto 28170
  350. 28160 na$(1,2)=na$(1,2)+"([207][200])"+right$(str$(ta(1,w(1))),1)
  351. 28170 na$(2,2)="[200]"
  352. 28180 if ta(3,w(2))<>1 then na$(2,2)=na$(2,2)+right$(str$(ta(3,w(2))),1)
  353. 28190 na$(2,2)=na$(2,2)+ta$(3,w(2),2)
  354. 28200 if ta(3,w(2))/ta(1,w(1))=1 then k(1)=1: k(2)=1: goto 28220
  355. 28210 k(1)=ta(3,w(2)): k(2)=ta(1,w(1))
  356. 28220 na$(3,2)=ta$(1,w(1),2)
  357. 28230 if k(1)<>1 then na$(3,2)=na$(3,2)+right$(str$(k(1)),1)
  358. 28240 if k(2)=1 then na$(3,2)=na$(3,2)+ta$(3,w(2),2): goto 28270
  359. 28250 if ta$(3,w(1),1)="[195]l" then na$(3,2)=na$(3,2)+"[195]l"+right$(str$(k(2)),1):goto28270
  360. 28260 na$(3,2)=na$(3,2)+"("+ta$(3,w(2),2)+")"+right$(str$(k(2)),1)
  361. 28270 na$(4,2)="[200]2[207]"
  362. 28280 ko(1)=k(1): ko(2)=k(2): ko(3)=1: ko(4)=ko(1)*ta(1,w(1))
  363. 28290 return
  364. 29000 rem --- f4
  365. 29010 print"[147]":qt$="[193]rbeitsbogen [204]auge+[211]aeure": gosub 63520
  366. 29100 gosub 19400
  367. 29110 for l=1 to n
  368. 29120 : w(1)=fnf1(12): w(2)=fnf1(8)
  369. 29130 : n$(1,l)=ta$(1,w(1),1)+"lauge"
  370. 29140 : n$(2,l)=ta$(3,w(2),1)
  371. 29150 next l
  372. 29160 gosub 19500
  373. 29170 return
  374. 30000 rem --- f5: f1 / f3
  375. 30010 print"[147]": qt$="[193]bfragen": gosub 63520
  376. 30100 w=fn f1(2): qq=0
  377. 30110 on w gosub 10000,20000
  378. 30120 if qq=0 then return
  379. 30130 goto 20100
  380. 39000 rem --- f6
  381. 39010 print"[147]":qt$="[193]rbeitsbogen": gosub 63520
  382. 39100 gosub 19400
  383. 39110 for l=1 to n
  384. 39120 : w(1)=fn f1(2)
  385. 39130 : if w(1)=2 then 39180
  386. 39140 : w(1)=fn f1(24): w(2)=fn f1(8)
  387. 39150 : n$(1,l)=ta$(1,w(1),1)
  388. 39160 : n$(2,l)=ta$(2,w(2),1)
  389. 39170 : goto 39210
  390. 39180 : w(1)=fn f1(12): w(2)=fn f1(8)
  391. 39190 : n$(1,l)=ta$(1,w(1),1)+"lauge"
  392. 39200 : n$(2,l)=ta$(3,w(2),1)
  393. 39210 next l
  394. 39220 gosub 19500
  395. 39990 return
  396. 40000 rem --- f7: gleichungen
  397. 40010 print"[147]":qt$="[210]eaktionsgleichung aufstellen": gosub 63520
  398. 40020 qq=0: tt=0
  399. 40100 gosub 44000: if qq=2 then return
  400. 40110 if sk(1)+sk(2)=3 then gosub 18000
  401. 40120 if sk(1)+sk(2)=12 then gosub 28000
  402. 40130 gosub 48000
  403. 40140 qm$="[197]rklaerung (space)": z1=22: s1=11: gosub 63525
  404. 40150 qm$="[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]": z1=23: s1=11: gosub 63525
  405. 40160 get a$: if a$="" then 40160
  406. 40170 if a$=" " then gosub 41000
  407. 40180 qm$="    nochmal (j)   ": z1=22: s1=11: gosub 63525
  408. 40185 qm$="    [163][163][163][163][163][163][163][163][163][163][163]   ": z1=23: s1=11: gosub 63525
  409. 40190 get a$: if a$="" then 40190
  410. 40200 if a$="j" then 40000
  411. 40210 return
  412. 41000 rem goerk
  413. 41100 if uu=1 then gosub15100:gosub14000:gosub15200:gosub14000:gosub15300
  414. 41110 if uu=2 then gosub25100:gosub14000:gosub25200:gosub14000:gosub 25300
  415. 41120 gosub 14000: gosub 48000
  416. 41130 return
  417. 44000 rem ... eingabe
  418. 44010 print"[147]":qt$="[197]ingabe":gosub63520
  419. 44100 print "     [194]itte [210]eaktionsstoffe eingeben"
  420. 44110 print "     [163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]"
  421. 44130 i=0
  422. 44140 i=i+1: if i=3 then return
  423. 44150 qt$="[197]ingabe":gosub63520:print"": if i=2 then print""
  424. 44160 printi;: input "[157].[211]toff : ";qo$
  425. 44161 if qo$="_" then qq=2: return
  426. 44162 if qo$="^" and i<>1 then i=i-2: goto 44140
  427. 44170 st$(i)=qo$: a=0: gosub 45000
  428. 44180 sk(i)=a: w(i)=b
  429. 44190 if a=0 then print "[145]                      ";: i=i-1
  430. 44200 if i<2 then 44140
  431. 44300 restore: vv=0
  432. 44310 for l=1 to ss
  433. 44320 : read x: if sk(1)+sk(2)=x then vv=1
  434. 44330 next l
  435. 44340 data 3,12
  436. 44390 if vv=0 then 44000
  437. 44400 vv=0
  438. 44410 if sk(1)<sk(2) then vv=1
  439. 44440 if vv=1 then 44600
  440. 44450 x$=st$(1): x=sk(1): st$(1)=st$(2): sk(1)=sk(2): st$(2)=x$: sk(2)=x
  441. 44460 x=w(1): w(1)=w(2): w(2)=x
  442. 44470 for l=1 to 2: x$=na$(1,l): na$(1,l)=na$(2,l): na$(2,l)=x$: next l
  443. 44600 return
  444. 45000 rem ..  pruefen + daten
  445. 45010 qt$="[208]ruefen und [196]aten holen":gosub63520
  446. 45100 gosub 45600: rem lauge
  447. 45105 if a<>0 then return
  448. 45110 gosub 45800: rem saeure
  449. 45115 if a<>0 then return
  450. 45120 gosub 45400: rem nichtmetall
  451. 45125 if a<>0 then return
  452. 45130 gosub 45200: rem metall
  453. 45135 if a<>0 then return
  454. 45140 return
  455. 45200 rem .   pr+da metall
  456. 45210 qt$="[208]ruefen auf [205]etall": gosub 63520
  457. 45220 vv=0: tt=1: a$=qo$: gosub 50000
  458. 45300 if vv=1 then a=1
  459. 45310 return
  460. 45400 rem .   pr+da nichtmetall
  461. 45410 qt$="[208]ruefen auf [206]ichtmetall": gosub 63520
  462. 45420 vv=0: tt=2: a$=qo$: gosub 50000
  463. 45500 if vv=1 then a=2
  464. 45510 return
  465. 45600 rem .   pr+da lauge
  466. 45610 qt$="[208]ruefen auf [204]auge": gosub 63520
  467. 45620 vv=0
  468. 45630 x$=right$(qo$,2)
  469. 45640 if x$="[207][200]" then a$=left$(qo$,len(qo$)-2): vv=1: goto 45670
  470. 45650 if x$=")2" or x$=")3" then a$=left$(qo$,len(qo$)-5): vv=1: goto 45670
  471. 45660 if right$(qo$,5)="lauge" then a$=left$(qo$,len(qo$)-5): vv=1
  472. 45670 if vv=0 then 45750
  473. 45680 vv=0: tt=1: gosub 50000
  474. 45690 if b>12 then vv=0
  475. 45700 if vv=1 then a=4
  476. 45750 return
  477. 45800 rem .   pr+da saeure
  478. 45810 qt$="[208]ruefen auf [211]aeure": gosub 63520
  479. 45820 vv=0: a$=qo$
  480. 45830 x$=right$(qo$,6)
  481. 45840 if x$="[211]aeure" or x$="saeure" then vv=1
  482. 45850 x$=left$(qo$,2):ifx$="[200]2"orx$="[200]3"thenvv=1:a$=right$(qo$,len(a$)-2):goto45870
  483. 45860 if left$(qo$,1)="[200]" then vv=1: a$=right$(qo$,len(a$)-1)
  484. 45870 if vv=0 then 45950
  485. 45880 vv=0: tt=3: gosub 50000
  486. 45890 if vv=1 then a=8
  487. 45950 return
  488. 48000 rem ... ausgabe
  489. 48010 print"[147]";:qt$="[193]usgabe":gosub63520
  490. 48020 print:print na$(1,1);" + ";na$(2,1);" ===> ": print na$(3,1);
  491. 48030 if ko(4)<>0 then print " + ";na$(4,1);
  492. 48040 print ""
  493. 48050 au$=" ": if ko(1)>1 then au$=au$+right$(str$(ko(1)),1)
  494. 48055 au$=au$+" "+na$(1,2)+" + ": if ko(2)>1 then au$=au$+right$(str$(ko(2)),1)+" "
  495. 48060 au$=au$+na$(2,2)+" ===> ": if ko(3)>1 then au$=au$+right$(str$(ko(3)),1)+" "
  496. 48065 au$=au$+na$(3,2)
  497. 48070 if ko(4)=0 then 48100
  498. 48075 au$=au$+" + ": if ko(4)>1 then au$=au$+right$(str$(ko(4)),1)+" "
  499. 48080 au$=au$+na$(4,2)
  500. 48100 for l=1 to len(au$)
  501. 48110 : x$=mid$(au$,l,1)
  502. 48120 : if asc(x$)<48 or asc(x$)>57 then print x$;: goto 48150
  503. 48130 :ifasc(mid$(au$,l-1,1))=41orasc(mid$(au$,l-1,1))>64thenprint"";x$;"[145]";:goto48150
  504. 48140 : print x$;
  505. 48150 : if x$=">" and uu=2 then print"[157][157][157][157][157]";
  506. 48155 next l
  507. 48175 if pp<4 then 48200
  508. 48200 return
  509. 49000 rem ... ausgabe1
  510. 49100 z1=9:s1=1:qm$="[157]"+na$(1,1)+" + "+na$(2,1)+" ===>":gosub63525
  511. 49110 qm$="[157]"+na$(3,1): if na$(4,1)<>"" then qm$=qm$+" + "+na$(4,1)
  512. 49120 z1=11:s1=1:gosub63525
  513. 49130 return
  514. 49500 rem ... ausgabe2
  515. 49600 gosub 49000
  516. 49610 qm$=na$(1,2)+" + "+na$(2,2)+" ===> "
  517. 49611 if uu=1 then qm$=qm$+na$(3,2): goto 49630
  518. 49615 qm$=qm$+"[157][157][157][157][157][157][157][157][157][157]"+na$(3,2)
  519. 49620 if na$(4,2)<>"" then qm$=qm$+" + "+na$(4,2)
  520. 49630 z1=14:s1=1:gosub63525
  521. 49640 return
  522. 50000 rem --- tabellen
  523. 50010 for k=1 to tt(tt)
  524. 50020 :forl=1to4
  525. 50030 : : if ta$(tt,k,l)=a$ then vv=1: b=k
  526. 50040 : next l
  527. 50050 next k
  528. 50060 return
  529. 51000 rem ... metalle
  530. 51500 data 24
  531. 51600 data "[204]ithium", "[204]i", "", "", 1
  532. 51610 data "[206]atrium", "[206]a", "", "", 1
  533. 51620 data "[203]alium", "[203]", "", "", 1
  534. 51630 data "[210]ubidium", "[210]b", "", "", 1
  535. 51640 data "[195]aesium", "[195]s", "", "", 1
  536. 51650 data "[194]eryllium", "[194]e", "", "", 2
  537. 51660 data "[205]agnesium", "[205]g", "", "", 2
  538. 51670 data "[195]alcium", "[195]a", "", "", 2
  539. 51680 data "[211]trontium", "[211]r", "", "", 2
  540. 51690 data "[194]arium", "[194]a", "", "", 2
  541. 51700 data "[194]or", "[194]", "", "", 3
  542. 51710 data "[193]luminium", "[193]l", "", "", 3
  543. 51720 data "[199]allium", "[199]a", "", "", 3
  544. 51730 data "[201]ndium", "[201]n", "", "", 3
  545. 51740 data "[212]hallium", "[212]l", "", "", 3
  546. 51750 data "[211]ilicium", "[211]i", "", "", 4
  547. 51760 data "[199]ermanium", "[199]e", "", "", 4
  548. 51770 data "[218]inn", "[211]n", "", "", 4
  549. 51780 data "[194]lei", "[208]b", "", "", 4
  550. 51790 data "[193]rsen", "[193]s", "", "", 3
  551. 51800 data "[193]ntimon", "[211]b", "", "", 3
  552. 51810 data "[194]ismut", "[194]i", "", "", 3
  553. 51820 data "[211]elen", "[211]e", "", "", 2
  554. 51830 data "[212]ellur", "[212]e", "", "", 2
  555. 52000 rem ... nichtmetalle
  556. 52500 data 8
  557. 52600 data "[211]tickstoff", "[206]", "nitrid", "", 3
  558. 52610 data "[208]hosphor", "[208]", "phosphid", "", 3
  559. 52620 data "[211]auerstoff", "[207]", "oxid", "", 2
  560. 52630 data "[211]chwefel", "[211]", "sulfid", "", 2
  561. 52640 data "[198]luor", "[198]", "fluorid", "", 1
  562. 52650 data "[195]hlor", "[195]l", "chlorid", "", 1
  563. 52660 data "[194]rom", "[194]r", "bromid", "", 1
  564. 52670 data "[201]od", "[201]", "iodid", "", 1
  565. 53000 rem ... saeurereste
  566. 53500 data 8
  567. 53600 data "[211]alzsaeure", "[195]l", "chlorid", "", 1
  568. 53610 data "schwefelige [211]aeure", "[211][207]3", "sulfit", "", 2
  569. 53620 data "[211]chwefelsaeure", "[211][207]4", "sulfat", "", 2
  570. 53630 data "[203]ohlensaeure", "[195][207]3", "carbonat", "", 2
  571. 53640 data "[208]hosphorsaeure", "[208][207]4", "phosphat", "", 3
  572. 53650 data "phosphorige [211]aeure", "[208][207]3", "phosphit", "", 3
  573. 53660 data "[211]alpetersaeure", "[206][207]3", "nitrat", "", 1
  574. 53670 data "salpetrige [211]aeure", "[206][207]2", "nitrit", "", 1
  575. 63519 rem --- bildschirm
  576. 63520 print""qt$;:forq=len(qt$)to39:print" [146]";:nextq:print""
  577. 63521 poke 2018,22: poke 2019,01: poke 2020,19: poke 2021,39
  578. 63522 poke 2022,56: poke 2023,56: for q=0 to 7: poke 56288+q,12: next q: return
  579. 63523 :
  580. 63524 rem --- cursor
  581. 63525 poke 214,z1: poke 211,s1: sys 58640: print qm$;: return
  582.