forked from robhagemans/basicode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
B10_Programmeren-3.bc3
291 lines (290 loc) · 13 KB
/
B10_Programmeren-3.bc3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
1000 A=700:GOTO20:REM ** BASICODE-3 UITLEG **
1010 HT=HO:VT=VE:S$="":FORI=1 TOHT:S$=S$+" ":NEXTI
1020 SX=0:X=0:H=0:V=0:T=0:FR=1:GOSUB280
1030 HL=0:HR=HT:VL=2:VR=VT-2:R$="":READT$
1040 GOSUB1450:HO=(HT-LEN(SR$)-6)/2:VE=0:GOSUB110
1050 GOSUB150:PRINT:PRINT:PRINT:T$="BASICODE"
1060 PRINT"Wilt u de uitleg op "
1070 PRINT:PRINT" 1 Het beeldscherm,"
1080 PRINT" 2 De printer."
1090 PRINT:PRINT"Welk nummer kiest u ";:GOSUB210
1100 SC=IN-48:PRINTSC:IFSC<>2 THENSC=1:GOTO1230
1110 PRINT:PRINT"Hoeveel spaties wilt u aan het"
1120 INPUT"begin van elke regel ";HL
1130 PRINT:PRINT"Hoeveel tekens echte tekst wilt"
1140 INPUT"u op elke regel ";I:HR=HL+I-1
1150 PRINT:PRINT"Hoeveel regels tekst wilt u op"
1160 INPUT"elk blad ";VR:VR=VR-3
1170 PRINT"Gebruikt u (K)ettingpapier of"
1180 PRINT" (L)osse vellen (K/L)"
1190 GOSUB210:IFIN=76 THENVL=-1:GOTO1230
1200 IFIN<>75 THEN GOSUB250:GOTO1170
1210 PRINT:PRINT"Hoeveel regels wilt u bij de scheurlijn"
1220 INPUT"laten overslaan ";VL:VR=VR+VL
1230 MM$="":IFHL>0 THENMM$=LEFT$(S$,HL)
1240 GOSUB1390:M$=MM$:AL=VL:IFSC=2 THEN GOSUB1370
1250 IFLEN(R$)>HR-HL THEN GOSUB1920
1260 GOSUB1480:IFR$<>"" THENR$=R$+" "
1270 R$=R$+D$:GOTO1250
1280 IFSC=2 THENSR$=M$+SR$:GOSUB350:GOSUB360:GOTO1300
1290 GOSUB120:PRINTM$;SR$;:VE=VE+1:HO=0:GOSUB110:HL=0
1300 M$=MM$:AL=AL+1:IFAL<VR THENRETURN
1310 IFSC=1 THEN1390
1320 IFVL>=0 THENFORI=1 TOVL:GOSUB360:NEXTI:GOTO1360
1330 PRINT"Leg een nieuw vel in de printer en"
1340 PRINT"druk dan op RETURN/ENTER"
1350 GOSUB210:IFIN<>13 THEN1350
1360 AL=VL
1370 SR$=LEFT$(S$,(HR-HL-LEN(T$))/2)+T$:GOSUB1280
1380 SR$="":GOSUB1280:AL=VL:RETURN
1390 HO=3:VE=VT:GOSUB110
1400 PRINT"<RETURN> = vervolg,<S> = schermdump";
1410 GOSUB210:IFIN=13 THEN1450
1420 IFIN<>83 THEN1410
1430 FORVE=0 TOVT:SR$="":FORHO=0 TOHT:GOSUB220
1440 SR$=SR$+CHR$(IN):NEXTHO:GOSUB350:GOSUB360:NEXTVE
1450 GOSUB100:AL=VL
1460 SR$=T$:PRINTLEFT$(S$,(HT-LEN(SR$))/2-3);:GOSUB150
1470 PRINT:PRINT:RETURN
1480 READD$
1490 IF(D$="*")AND(SC=2)THENSX=1:X=1:GOTO1990
1500 IFD$="*" THEND$="":GOTO1990
1510 IFD$="" THEN1480
1520 IFLEFT$(D$,1)="." THEN1600
1530 IFLEFT$(D$,1)="=" THEN GOSUB1860:GOTO1560
1540 IFLEFT$(D$,1)<>"!" THENRETURN
1550 IFD$="!" THEND$="":GOTO1570
1560 D$=MID$(D$,2)
1570 GOSUB1860:IFAL+3>VR THENJ=3:GOSUB1880
1580 GOTO1510
1590 D$="=Wordt op het scherm getoond.":RETURN
1600 IFD$<>".E" THEN1650
1610 J=1:GOSUB1860:T$="Tot de volgende keer"
1620 SR$="":GOSUB1280:GOSUB1280:SR$=T$:GOSUB1280:T$=""
1630 SR$="":GOSUB1280:IFAL<>VL THEN1630
1640 GOTO950
1650 IFD$=".Q" THENR$=R$+CHR$(34):GOTO1480
1660 DD$=MID$(D$,2,1):D$=MID$(D$,3)
1670 IFDD$<>"R" THEN1720
1680 IFSC=2 THENRETURN
1690 IFLEN(R$)+6+LEN(D$)>=HR-HL THENSR$=R$:GOSUB1280:R$=""
1700 PRINTM$;R$;:SR$=D$:GOSUB150:M$=""
1710 HL=HL+LEN(R$)+LEN(D$)+6:R$="":GOTO1480
1720 IFDD$<>"M" THEN1750
1730 I=VAL(D$):MM$="":IFI+HL=0 THEN1480
1740 MM$=LEFT$(S$,I+HL):GOTO1480
1750 IFDD$="P" THENJ=VAL(D$):GOSUB1860:GOSUB1880:GOTO1480
1760 IFDD$="T" THENT$=D$:J=10:GOSUB1860:GOSUB1880:GOTO1680
1770 IFDD$="X" THENT$=T$:GOSUB1860:GOSUB1880
1780 IFDD$="A" THEN GOSUB1860:GOTO1480
1790 IFDD$="Q" THENR$=R$+CHR$(34)+D$:GOTO1480
1800 IFDD$<>"F" THEN1830
1810 J=VAL(D$):GOSUB1860
1820 J=J-1:IFJ>-1 THENSR$="":GOSUB1280:GOTO1820
1830 IFDD$<>"C" THEN1850
1840 SR$=LEFT$(S$,(HR-HL-LEN(D$))/2)+D$:GOSUB1280
1850 GOTO1480
1860 GOSUB1920:SR$=R$:GOSUB1280:R$="":J=J-1
1870 RETURN
1880 IF(SC=1)OR(AL+J>VR)THEN1900
1890 SR$="":GOSUB1280:GOSUB1280:RETURN
1900 IFAL<>VL THENSR$="":GOSUB1280:GOTO1900
1910 RETURN
1920 K=HR-HL+1-LEN(M$)
1930 IFLEN(R$)<=K THENRETURN
1940 IFMID$(R$,K,1)=" " THEN1970
1950 K=K-1:IFK>0 THEN1940
1960 SR$="":GOTO1980
1970 SR$=LEFT$(R$,K-1):R$=MID$(R$,K+1)
1980 GOSUB1280:GOTO1920
1990 READA
2000 IFX=1 THENX=0:GOSUB1590
2010 IFSX=1 THENSX=0:GOTO1510
2020 ONA GOTO2030,2150,2260,2360,2390,2420
2030 R=AL+3:VE=R:HO=5:GOSUB110
2040 PRINT"DRUK EEN TOETS";
2050 V=R+3
2060 GOSUB210:IFIN=74 THEN2100
2070 VE=V:HO=5:GOSUB110
2080 PRINT"U drukte niet op de J toets"
2090 SD=5:GOSUB450:GOSUB2130:R=V:GOTO2060
2100 VE=V:HO=5:GOSUB110
2110 PRINT"U drukte op de J toets"
2120 SD=5:GOSUB450:GOTO1390
2130 VE=V:GOSUB110:PRINT" "
2140 RETURN
2150 PRINT"GEBRUIK DE CURSOR RECHTS TOETS":H=5
2160 VE=5:HO=6:GOSUB110:PRINT"BASICODE"
2170 GOSUB210:IF(IN<29)OR(IN>29)THEN2170
2180 VE=6:HO=H:GOSUB110:PRINT" "
2190 H=H+1
2200 VE=5:HO=H:GOSUB110:T=T+1:GOSUB220
2210 VE=6:HO=H:GOSUB110:PRINT"-"
2220 VE=9:HO=8:GOSUB110
2230 PRINT"De waarde is ";IN
2240 IFT=8 THEN1390
2250 GOTO2160
2260 R=AL+3:VE=R:HO=5:GOSUB110:PRINT"DRUK EEN TOETS";
2270 V=R+3
2280 GOSUB210:IFIN=74 THEN2320
2290 GOSUB250:VE=V:GOSUB110
2300 PRINT"U drukte niet op de J toets"
2310 SD=5:GOSUB450:GOSUB2340:R=V:GOTO2280
2320 VE=V:GOSUB110:PRINT"U drukte op de J toets"
2330 V=V+3:AL=V:VE=V:GOSUB110:GOTO1480
2340 VE=V:GOSUB110:PRINT" "
2350 RETURN
2360 GOSUB260:VE=5:HO=8:GOSUB110
2370 PRINT"Het toevalsgetal is ";RV
2380 AL=8:VE=8:GOSUB110:GOTO1480
2390 GOSUB260:R=INT(RV):VE=5:HO=8:GOSUB110
2400 PRINT"Het toevalsgetal is nu ";R
2410 AL=10:VE=10:GOSUB110:GOTO1480
2420 GOSUB260:E=INT(10*RV)+1
2430 VE=2:HO=10:GOSUB110:PRINT"Het toevalsgetal is: ";E
2440 VE=5:HO=5:GOSUB110:PRINT"Nog een keertje J/N ";
2450 GOSUB210:IFIN=74 THEN GOSUB100:GOTO2420
2460 IFIN<>78 THEN GOSUB250:GOTO2450
2470 GOTO1390
25000 DATA"BASICODE uitleg programma deel 3"
25010 DATA"=In de vorige afleveringen zijn we met de"
25020 DATA"subroutines gekomen tot routine 200.","We gaan"
25030 DATA"nu verder met de subroutines 210, 220, 250 en"
25040 DATA"260.",".TGOSUB 210"
25050 DATA"=Deze subroutine wacht tot er een toets is"
25060 DATA"ingedrukt en zet de toetswaarde in de variabelen"
25070 DATA"IN$ en IN, hetzelfde als in de vorige routine."
25080 DATA"!Deze routine kan als volgt in een programma"
25090 DATA"worden gebruikt:","=2000 GOSUB 210","!2010 IF"
25100 DATA"IN<>74 THEN 2000","!2020 ----","!----","!2500"
25110 DATA"(verder met het programma)","=In dit"
25120 DATA"programmagedeelte wordt dus gekeken of de"
25130 DATA"toetsaanslag een ",".QJ",".Q is (74 is de"
25140 DATA"ASCII-waarde voor de J toets)."
25150 DATA"!Als dit zo is gaat het programma verder met"
25160 DATA"regel 2500. Is de waarde geen 74 dan gaat het"
25170 DATA"programma terug naar regel 2000 en blijft dus"
25180 DATA"wachten tot de juiste toets wordt aangeslagen."
25190 DATA"=Probeert u het maar eens.",".A","*",1
25200 DATA"=Als u alleen van de routine GOSUB 210 gebruik"
25210 DATA"maakt, maakt het niet uit welke toets er dan"
25220 DATA"wordt gebruikt.",".TGOSUB 220","=Deze"
25230 DATA"subroutine kijkt welk karakter zich op het"
25240 DATA"scherm bevindt op de plaats aangegeven met"
25250 DATA"de variabelen VE en HO en geeft dan de waarde"
25260 DATA"van het karakter weer in de variabele IN."
25270 DATA"=Voorbeeld:"
25280 DATA"=2000 VE=4:HO=6:GOSUB 110:PRINT",".QBASICODE"
25290 DATA".Q","!2010 HO=6:GOSUB 220:PRINT IN"
25300 DATA"!2020 HO=7:GOSUB 220:PRINT IN","!---- enz."
25310 DATA"=In regel 2000 staat de string ",".QBASICODE"
25320 DATA".Q en in regel 2010 zal de waarde van IN=66 zijn"
25330 DATA"en 65 in regel 2020.","=We gaan dit nu in de"
25340 DATA"praktijk even bekijken.",".X","*",2,"=U zag dus"
25350 DATA"dat elke letter een andere waarde heeft. Deze"
25360 DATA"waarde kunt u ook gebruiken in combinatie"
25370 DATA"met de vorige routine.","=Voorbeeld:","=2000"
25380 DATA"GOSUB 210","!2010 IF IN=71 THEN 4000","!2020"
25390 DATA"IF IN<>71 THEN 2000"
25400 DATA"!4000 (verder met het programma)","=Hier wordt"
25410 DATA"dus gekeken of de toetsaanslag een G is. Als dat"
25420 DATA"zo is gaat het programma verder met regel 4000."
25430 DATA".TGOSUB 250","=Deze subroutine levert een"
25440 DATA"attentiesein.","!Met deze routine kunnen we de"
25450 DATA"gebruiker erop attent maken dat hij of zij een"
25460 DATA"verkeerde handeling doet in het programma."
25470 DATA"=In het volgende voorbeeld laat ik u zien hoe u"
25480 DATA"deze routine in een programma kunt toepassen."
25490 DATA"=Voorbeeld:","=2000 GOSUB 210","!2010 IF IN<>74"
25500 DATA"THEN GOSUB 250:GOTO 2000","!----","!2500 (verder"
25510 DATA"met programma)","=Een kleine uitleg wat hier"
25520 DATA"gebeurt.","!In regel 2010 geeft de computer dus"
25530 DATA"het attentiesignaal als we een andere letter"
25540 DATA"indrukken dan de J. Probeert u het maar eens."
25550 DATA".A","*",3,"=U moet er wel op letten dat u deze"
25560 DATA"routine niet te veel gebruikt, aangezien het"
25570 DATA"attentiesignaal dan als storend wordt ervaren."
25580 DATA".TGOSUB 260","=Deze routine levert"
25590 DATA"een willekeurig getal op in de variabele RV."
25600 DATA"!Dit wordt gedaan door gebruik te maken van de"
25610 DATA"RaNDomize funktie in de computer.","!Deze"
25620 DATA"RaNDomize funktie wordt meestal in een BASIC"
25630 DATA"programma als volgt opgegeven, RND(X) waarbij"
25640 DATA"X een getal moet zijn. Dit getal kan bij sommige"
25650 DATA"computers een getal zijn tussen 1 en 100, maar"
25660 DATA"bij BASICODE is dit getal 1.","!Dat wil dus"
25670 DATA"zeggen dat de RND funktie een getal zal"
25680 DATA"genereren"
25690 DATA"dat niet kleiner is dan 0 en wel kleiner dan 1."
25700 DATA"!Als u dus in BASICODE de opdracht geeft GOSUB"
25710 DATA"260:PRINT RV, dan zal er een willekeurig getal"
25720 DATA"op het scherm verschijnen tussen 0 en 1."
25730 DATA"!Zullen we dat eens proberen!",".X","*",4
25740 DATA"=Natuurlijk kunnen we met zo'n getal niet veel"
25750 DATA"beginnen, want het getal heeft decimalen achter"
25760 DATA"de komma.","!Deze decimalen hebben we niet nodig"
25770 DATA"bij een toevalsgetal.","!Om nu van dit getal"
25780 DATA"een geheel getal te maken, dus niets meer achter"
25790 DATA"de komma, gebruiken we de funktie INT(X).","!De"
25800 DATA"funktie INT(X) maakt van het getal een integer"
25810 DATA"getal waarbij alles wat achter de komma staat"
25820 DATA"wordt weggegooid.","!Maar als we nu in het"
25830 DATA"programma opgeven:","=GOSUB 260:R=INT(RV):PRINT"
25840 DATA"R","=dan krijgen we op het scherm een nul te"
25850 DATA"zien, aangezien het willekeurige getal altijd"
25860 DATA"kleiner is dan 1.","=Zullen we eens gaan kijken"
25870 DATA"of dat zo is?",".X","*",5,"=Aan een nul als"
25880 DATA"toevalsgetal hebben we natuurlijk niet veel."
25890 DATA"Daarom gaan we aan de regel nog iets toevoegen."
25900 DATA"!We geven nu op:","=GOSUB 260:R=INT(RV*10):PRINT"
25910 DATA"R","=We gaan nu het toevalsgetal van 0 tot 1"
25920 DATA"vermenigvuldigen met 10 om zo een getal te"
25930 DATA"krijgen van 0 tot 10.","!Alleen als we dit"
25940 DATA"doen blijkt dat er nooit precies 10 op het"
25950 DATA"scherm komt. Dit komt doordat het toevalsgetal"
25960 DATA"in RV altijd minder dan 1 is.","!Om nu toch het"
25970 DATA"getal tien op het scherm te krijgen veranderen"
25980 DATA"we de regel weer en deze komt er dan als volgt"
25990 DATA"uit te zien:","=GOSUB 260:R=INT(RV*10)+1:PRINT"
26000 DATA"R","=Door de toevoeging van +1 wordt er iedere"
26010 DATA"keer 1 toegevoegd aan het toevalsgetal."
26020 DATA"=Voorbeeld:","=2000 GOSUB 260:E=INT(RV*10)+1"
26030 DATA"!2010 VE=2:HO=15:GOSUB 110:PRINT E","!2020"
26040 DATA"VE=5:HO=5:GOSUB 110","!2030 PRINT ",".QNog een"
26050 DATA"keertje J/N",".Q;:GOSUB 210","!2040 IF IN=74"
26060 DATA"THEN 2000","!2050 IF IN<>78 THEN GOSUB 250:GOTO"
26070 DATA"2020","!----","!2600 (verder met het programma)"
26080 DATA"=In regel 2000 wordt de subroutine 260"
26090 DATA"aangesproken daarna wordt de waarde van RV"
26100 DATA"omgezet in een waarde van 0 tot 9 (+1)."
26110 DATA"!Nu gaan we dat even in de praktijk bekijken."
26120 DATA".X","*",6,"=Zo kunt u dus in een spelletje het"
26130 DATA"toevalsgetal toepassen. Ook bij het maken van"
26140 DATA"rekensommen kan het toevalsgetal worden"
26150 DATA"toegepast. U kunt dan met het toevalsgetal"
26160 DATA"steeds een andere vermenigvuldiging latan maken"
26170 DATA"uit dezelfde tafel.","=Voorbeeld:","=2000 GOSUB"
26180 DATA"260:E=INT(10*RV)+1","!2010 G=2:VE=5:HO=4:GOSUB"
26190 DATA"110:PRINT G;",".Q X ",".Q;E",".Q = ",".Q;:INPUT"
26200 DATA"T","=Een kleine uitleg:","=In regel 2000"
26210 DATA"genereren we weer een getal tussen 0 en 9 (+1)."
26220 DATA"Daarna geven we de variabele G de waarde van"
26230 DATA"twee. Op het scherm komt het er dan zo uit te"
26240 DATA"zien:","=6 X 2 =","=waarbij 6 dan"
26250 DATA"het toevalsgetal is. Doordat deze waarde steeds"
26260 DATA"verandert krijgen we dus ook steeds een andere"
26270 DATA"som.","!Ik hoop dat u een beetje begrijpt wat u"
26280 DATA"zoal met deze subroutine kunt doen.",".TBASICODE"
26290 DATA"==Einde van het derde deel.",".P14","Dit was:"
26300 DATA"="
32000 DATA".C**************************"
32010 DATA".C* *"
32020 DATA".C* BASICODE-3 *"
32030 DATA".C* *"
32040 DATA".C* Uitleg programma *"
32050 DATA".C* *"
32060 DATA".C* RZ-Software *"
32070 DATA".C* Braamkamp 40 *"
32080 DATA".C* 7206 HB ZUTPHEN *"
32090 DATA".C* *"
32100 DATA".C**************************",".E"