-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathKRAKER.BAS
More file actions
539 lines (539 loc) · 16.6 KB
/
Copy pathKRAKER.BAS
File metadata and controls
539 lines (539 loc) · 16.6 KB
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
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
10 GOTO 1000:REM Basicode-2 subroutines
20 CLEAR:IN$=" ":SR=0:SR$="":CT=0:CN=0:OHT%=80:OVT%=24
22 KEY OFF:SCREEN 0:WIDTH OHT%:COLOR 7,0,0:CLS:RANDOMIZE TIMER*100
29 GOTO 1010
100 CLS:RETURN
110 GOSUB 111:LOCATE OVE%+1,OHO%+1:RETURN
111 OVE%=INT(VE):OHO%=INT(HO)
112 IF OVE%<0 THEN OVE%=0 ELSE IF OVE%>=OVT% THEN OVE%=OVT%-1
113 IF OHO%<0 THEN OHO%=0 ELSE IF OHO%>=OHT% THEN OHO%=OHT%-1
114 RETURN
120 HO=POS(0)-1:VE=CSRLIN-1:RETURN
200 IN$=INKEY$:RETURN
210 IN$=INPUT$(1):RETURN
250 BEEP:RETURN
260 RV=RND:RETURN
270 FR=FRE(""):RETURN
300 SR$=MID$(STR$(ABS(SR)),2):IF LEFT$(SR$,1)="." THEN SR$="0"+SR$
301 IF SR<0 THEN SR$="-"+SR$
302 RETURN
310 O#=ABS(SR)+.5*10^-CN:O!=INT(O#):O#=1+O#-O!:O$=""
311 IF CN THEN O$="."+STRING$(CN,48):IF O#>1 THEN MID$(O$,1)=MID$(STR$(O#),3)
312 O$=MID$(STR$(O!),2)+O$:IF VAL(O$)>0 AND SR<0 THEN O$="-"+O$
313 IF LEN(O$)<=CT THEN SR$=SPACE$(CT-LEN(O$))+O$:RETURN
314 SR$=STRING$(CT,42):RETURN
350 LPRINT SR$;:RETURN
360 LPRINT:RETURN
1000 A=3000:GOTO 20
1010 REM FORMULEKRAKER VERSIE 1
1020 XI=29:XM=59:XA=89:CN=2:CT=9
1030 DIM I$(XI),F(XM,4),N$(XA),A(XA,1)
1040 II=0:MM=0:AA=0:R=0:PU=0
1050 A(AA,0)=0:A(AA,1)=2:N$(AA)="-"
1060 AA=AA+1:SR=0:GOSUB 3900:Z$=SR$
1070 GOSUB 100
1075 PRINT"+------- FORMULEKRAKER -------+"
1080 PRINT"! Even geduld A.U.B. !"
1085 PRINT"+-----------------------------+"
1090 NT=0:RESTORE:GOSUB 2040
1100 REM HOOFDPROG.
1105 GOSUB 100
1110 PRINT"+------FORMULEKRAKER MENU ----+"
1115 PRINT"! !"
1120 PRINT"+-----------------------------+":PRINT
1125 PRINT"1) Formules toevoegen":PRINT
1130 PRINT"2) Berekeningen maken met uitleg":PRINT
1140 PRINT"3) Berekeningen maken zonder uitleg":PRINT
1150 PRINT"4) Printer uitvoer ja/nee":PRINT
1160 PRINT"5) Formule(s) verwijderen":PRINT
1170 PRINT"6) Status":PRINT
1180 PRINT"7) Uitleg":PRINT
1190 PRINT"8) Einde":PRINT
1200 REM KEUZE
1210 PRINT"Uw keuze ? ";
1220 GOSUB 210:K=VAL(IN$):IF(K<1) OR(K>8) THEN 1220
1230 PRINT K:U=0:FOR N=1 TO 100:NEXT N
1240 IF K=8 THEN 19000
1250 ON K GOSUB 2000,4000,4020,5000,10000,11000,15000
1260 GOTO 1100
2000 REM FORMULES
2010 GOSUB 100
2015 PRINT"+-- FORMULEKRAKER FORMULES ---+"
2020 PRINT"! vb. totaal=(a+2)*b+.5*c !"
2025 PRINT"! of <RETURN> !"
2030 PRINT"+-----------------------------+"
2035 GOSUB 7400
2040 IF NT=0 THEN READ A$:PRINT:PRINT A$:GOTO 2060
2050 A$="":INPUT A$
2060 IF A$="" THEN NT=1:RETURN
2100 REM CONTROLE INPUT
2110 M=0:M9=MM:A9=AA
2120 FOR N=1 TO LEN(A$)
2130 IF MID$(A$,N,1)="=" THEN M=M+1
2140 NEXT N
2150 IF M<>1 THEN PRINT"Fout: '=' ";M;" maal":GOTO 2040
2160 I$(II)=A$:II=II+1:A$=A$+"+"
2170 IF II>=XI THEN R=2:GOTO 2900
2200 REM FORMULE CODEREN
2210 P$="=+-*/^()":R$=""
2220 IF A$="" THEN PP=-1:GOTO 2300
2230 N$="":FOR N=1 TO LEN(A$)
2240 B$=MID$(A$,N,1):PP=-1:FOR P=8 TO 1 STEP-1
2250 IF B$=MID$(P$,P,1) THEN PP=P:P=1
2260 NEXT P:IF PP<>-1 THEN PP=N:N=LEN(A$):GOTO 2280
2270 IF B$<>" " THEN N$=N$+B$
2280 NEXT N:IF PP=-1 THEN 2300
2285 GOSUB 2600:IF R<>0 THEN 2900
2290 IF LEN(A$)=PP THEN A$="":GOTO 2220
2295 A$=MID$(A$,1+PP,LEN(A$)-PP):GOTO 2220
2300 REM GECODEERDE FORMULE ONTLEDEN
2310 M=0:FOR N=1 TO LEN(R$)
2320 IF MID$(R$,N,1)="(" THEN M=N
2330 NEXT N:IF M=0 THEN 2500
2340 W1=-1:H$="":S$=""
2350 FOR N=M+1 TO LEN(R$)
2360 H$=H$+S$:S$=MID$(R$,N,1)
2370 IF S$=")" THEN W1=N:N=LEN(R$)
2380 NEXT N
2390 IF W1=-1 THEN R=1:GOTO 2900
2400 REM
2410 GOSUB 3000
2420 IF R<>0 THEN 2900
2430 IF M=1 THEN R$=SR$+RIGHT$(R$,LEN(R$)-W1):GOTO 2450
2440 R$=LEFT$(R$,M-1)+SR$+RIGHT$(R$,LEN(R$)-W1)
2450 GOSUB 3100
2460 IF R<>0 THEN 2900
2470 GOTO 2300
2500 REM LAATSTE
2510 H$=LEFT$(R$,LEN(R$)-1)+"00"
2520 GOSUB 3100
2530 IF R<>0 THEN 2900
2540 GOTO 2040
2600 REM VARIABELE OF CONSTANTE
2610 IF N$<>"" THEN 2700
2620 IF(R$="") AND(B$<>"(") THEN R$=Z$+B$:RETURN
2630 IF(B$="*") OR(B$="/") THEN 2660
2640 IF(B$="-") OR(B$="+") THEN 2660
2650 IF(B$<>"^") THEN 2680
2660 N$=RIGHT$(R$,1)
2670 IF(N$="=") OR(N$="(") THEN R$=R$+Z$+B$:RETURN
2680 R$=R$+B$:RETURN
2700 REM VARIABELE
2710 IF(N$>="0") AND(N$<":") THEN 2800
2720 IF(N$>="a") AND(N$<="zzz") THEN 2740
2730 IF(N$<"A") OR(N$>"ZZZ") THEN R=1:RETURN
2740 M=-1:FOR Q=0 TO AA-1
2750 IF N$=N$(Q) THEN M=Q:Q=AA-1
2760 NEXT Q:IF(M=-1) AND(AA>XA) THEN R=2:RETURN
2770 IF M=-1 THEN M=AA:AA=AA+1:A(M,1)=0
2780 N$(M)=N$
2790 SR=M:GOSUB 3900:R$=R$+SR$+B$:RETURN
2800 REM CONSTANTE
2810 M=AA:FOR Q=0 TO AA-1
2820 IF(N$(Q)="-") AND(A(Q,0)=VAL(N$)) THEN M=Q:Q=AA-1
2830 NEXT Q
2840 N$(M)="-":A(M,0)=VAL(N$):A(M,1)=2
2850 IF(M=AA) THEN AA=AA+1:IF(AA>XA) THEN R=2:RETURN
2860 SR=M:GOSUB 3900:R$=R$+SR$+B$:RETURN
2900 REM FOUTEN
2910 II=II-1:MM=M9:AA=A9
2920 IF R=1 THEN PRINT"Fout: formule is fout":R=0:GOTO 2040
2930 PRINT"Fout: geheugen is vol":PRINT:GOSUB 11100
2940 R=0
2950 RETURN
3000 REM NIEUWE HULPCODE
3010 N=AA:IF(AA>=XA) THEN R=2:RETURN
3030 SR=AA:GOSUB 3900:H$=SR$+"="+H$+"00"
3050 N$(AA)="+":A(AA,1)=0:AA=AA+1
3060 RETURN
3100 REM SIMPELE FORMULE UITWERKEN
3110 R=0
3120 PP$="^/*-+)"
3130 FOR PP=1 TO 6
3140 P$=MID$(PP$,PP,1)
3150 IF LEN(H$)<>7 THEN 3200
3160 IF MID$(H$,1,2)=MID$(H$,4,2) THEN R=0:PP=6:A1=0:GOTO 3830
3170 H$=LEFT$(H$,5)+"+"+Z$+"00"
3200 REM ZOEK OPERATOR
3210 A1=0:FOR N=1 TO LEN(H$)
3220 IF N>LEN(H$) THEN 3820
3230 B$=MID$(H$,N,1):IF B$<>P$ THEN 3820
3240 M$=MID$(H$,N-2,5):Q$=LEFT$(H$,2)
3250 IF(LEN(H$)=10) AND(N=3) THEN Q$=MID$(H$,7,2)
3260 N$="":HQ=LEN(H$)-N-2:IF HQ>0 THEN N$=RIGHT$(H$,HQ)
3270 IF N=3 THEN N$=Q$+N$:GOTO 3290
3280 N$=LEFT$(H$,N-3)+Q$+N$
3290 IF LEN(N$)=7 THEN A1=2:H$=N$:GOTO 3400
3300 REM
3310 M=AA
3320 IF(M>XA) THEN R=2:GOTO 3800
3330 SR=M:GOSUB 3900:Q$=SR$
3340 N$(M)="+":A(M,1)=0:AA=AA+1
3350 N$="":HQ=LEN(H$)-N-2:IF HQ>0 THEN N$=RIGHT$(H$,HQ)
3360 IF N=3 THEN N$=Q$+N$:GOTO 3380
3370 N$=LEFT$(H$,N-3)+Q$+N$
3380 A1=1:N=LEN(H$):H$=N$
3400 REM
3410 M$=Q$+"="+M$
3500 REM DEELFORMULE
3510 B=0
3520 F1=ASC(MID$(M$,1,1))-65
3530 F2=ASC(MID$(M$,4,1))-65
3540 F3=ASC(MID$(M$,7,1))-65
3550 F1=F1*26+ASC(MID$(M$,2,1))-65
3560 F2=F2*26+ASC(MID$(M$,5,1))-65
3570 F3=F3*26+ASC(MID$(M$,8,1))-65
3600 REM
3610 IF(F1<0) OR(F1>675) THEN R=1:GOTO 3800
3620 IF(F2<0) OR(F2>675) THEN R=1:GOTO 3800
3630 IF(F3<0) OR(F3>675) THEN R=1:GOTO 3800
3640 B$=MID$(M$,6,1):IF B$="+" THEN B=1
3650 IF B$="-" THEN B=1
3660 IF B$="*" THEN B=2
3670 IF B$="/" THEN B=2
3680 IF B$="^" THEN B=3
3700 REM
3710 IF B=0 THEN R=1:GOTO 3800
3720 IF(B$="-") OR(B$="/") THEN F=F1:F1=F2:F2=F
3730 IF MM>XM THEN R=2:GOTO 3800
3740 F(MM,0)=F1
3750 F(MM,1)=F2
3760 F(MM,2)=F3
3770 F(MM,3)=B
3780 F(MM,4)=II
3790 MM=MM+1:GOTO 3820
3800 REM+++
3810 N=LEN(H$)
3820 NEXT N:IF R<>0 THEN PP=LEN(PP$):GOTO 3840
3830 IF A1=1 THEN 3200
3840 NEXT PP
3850 IF(R<>0) OR(LEN(H$)<9) THEN RETURN
3860 IF MID$(H$,6,3)<>"+"+Z$ THEN R=1
3870 RETURN
3900 REM CODE NIEUWE VARIABELE
3910 S1=INT(SR/26):S2=SR-S1*26
3920 SR$=CHR$(S1+65)+CHR$(S2+65)
3930 RETURN
4000 REM INVOER WAARDEN
4010 U=1
4020 GOSUB 100
4030 M=PU:PU=0:N$="Invoer: ":W1=2:GOSUB 7500:PU=M
4040 PRINT
4045 PRINT"+--- FORMULEKRAKER INVOER ----+"
4050 IF MM<>0 THEN A1=0:GOTO 4075
4055 PRINT"! Er zijn (nog) geen formules !"
4060 PRINT"! aanwezig !"
4065 PRINT"+-----------------------------+"
4070 GOSUB 210:RETURN
4075 PRINT"! vb. a=3, totaal=? !"
4080 PRINT"! of <RETURN> !"
4085 PRINT"+-----------------------------+"
4090 A$="":INPUT A$:IF A$="" THEN 4600
4100 REM STRING ONTLEDEN
4110 N$="":M=0:FOR N=1 TO LEN(A$)
4120 B$=MID$(A$,N,1)
4130 IF B$="=" THEN M=N:N=LEN(A$):GOTO 4150
4140 IF B$<>" " THEN N$=N$+B$
4150 NEXT N:IF M=0 THEN 4500
4155 IF LEN(A$)=M THEN B$="":GOTO 4400
4160 B$=MID$(A$,1+M,LEN(A$)-M)
4170 IF N$="" THEN 4300
4180 IF(N$="+") OR(N$="-") THEN 4300
4190 IF(VAL(B$)=0) THEN IF(B$<>"0") AND(B$<>"?") THEN 4400
4200 REM WAARDE TOEKENNEN
4210 M=-1:FOR N=0 TO AA-1
4220 IF N$=N$(N) THEN M=N:N=AA-1
4230 NEXT N
4240 IF M=-1 THEN 4300
4250 A1=1:IF B$="?" THEN A(M,1)=0:GOTO 4090
4260 A(M,0)=VAL(B$)
4270 A(M,1)=2:GOTO 4090
4300 REM FOUT
4310 PRINT"Fout: naam '";N$;"' is onbekend"
4320 GOTO 4090
4400 REM FOUT
4410 PRINT"Fout: waarde '";B$;"' is fout"
4420 GOTO 4090
4500 REM FOUT
4510 PRINT"Fout: geen '='"
4520 GOTO 4090
4600 REM EINDE INVOER
4610 IF A1=0 THEN RETURN
4620 SR$="---------------------------------"
4630 IF PU=1 THEN GOSUB 350:GOSUB 360
4640 GOSUB 6000:GOTO 4040
5000 REM PRINTER
5005 GOSUB 100
5010 PRINT"+--- FORMULEKRAKER PRINTER ---+"
5015 PRINT"! !"
5020 PRINT"+-----------------------------+"
5030 PRINT:PRINT"Wilt u alle uitvoer ook naar"
5040 PRINT"de printer <j/n> ? ";
5050 GOSUB 210
5060 IF(IN$="j") OR(IN$="J") THEN PU=1:GOTO 5090
5070 IF(IN$<>"n") AND(IN$<>"N") THEN 5050
5080 PU=0
5090 PRINT IN$:FOR N=1 TO 200:NEXT N
5095 RETURN
6000 REM BEREKENEN
6010 YM=0:IF U=1 THEN GOSUB 7000
6020 C1=0:M=YM
6030 A1=F(M,0)
6040 A2=F(M,1)
6050 A3=F(M,2)
6060 Q1=A(A1,1)
6070 Q2=A(A2,1)
6080 Q3=A(A3,1)
6100 REM ONBEKENDE
6110 A=0:K=0
6120 K1=Q1*Q2
6130 K2=Q1*Q3
6140 K3=Q2*Q3
6150 IF K1<>0 THEN K=1
6160 IF K2<>0 THEN K=2
6170 IF K3<>0 THEN K=3
6180 IF K=0 THEN 6590
6200 REM ONBEKENDE
6210 W1=A(A1,0)
6220 W2=A(A2,0)
6230 W3=A(A3,0)
6240 B=F(M,3)
6250 F=F(M,4)
6300 REM BEREKEN ONBEKENDE
6310 Q=F(M,3-K)
6320 R=0
6330 ON B GOSUB 8100,8200,8300
6340 IF R=1 THEN 7800
6400 REM BEWAREN OF CONTROLE
6410 IF A(Q,1)<>0 THEN 6900
6420 IF U<>0 THEN GOSUB 7100
6430 A(Q,0)=A:C1=1
6440 FOR P=0 TO 4
6450 Q=F(M,P):F(M,P)=F(YM,P):F(YM,P)=Q
6460 NEXT P:YM=YM+1:M=M-1:IF M=-1 THEN M=0
6500 REM
6510 Q1=A(A1,1)
6520 Q2=A(A2,1)
6530 Q3=A(A3,1)
6540 A(A1,1)=(Q1-1.5)*(Q1-1.5)+.75
6550 A(A2,1)=(Q2-1.5)*(Q2-1.5)+.75
6560 A(A3,1)=(Q3-1.5)*(Q3-1.5)+.75
6570 A(A3,1)=(A(A3,1)-1.5)^2+.75
6580 IF YM>MM-1 THEN 6620
6590 M=M+1:IF M<=MM-1 THEN 6030
6600 REM EINDE BEREKENING ?
6610 IF C1=1 THEN 6020
6620 IF U+R=0 THEN 6700
6630 GOSUB 200:IF IN$<>"" THEN 6630
6640 PRINT:PRINT"<TOETS>";:GOSUB 210
6650 IF PU=1 THEN GOSUB 360
6700 REM WEERGEVEN
6710 GOSUB 100:N$="Gebruikt: "
6720 W1=1:GOSUB 7500
6730 N$="Ongebruikt:"
6740 W1=2:GOSUB 7500
6750 N$="Berekend: "
6760 W1=3:GOSUB 7500
6800 REM SCHOONMAKEN
6810 FOR N=0 TO AA-1
6820 A=A(N,1)-1.5:A(N,1)=2-2*INT(ABS(A))
6830 NEXT N
6840 RETURN
6900 REM CONTROLE
6910 IF A<>0 THEN 6940
6920 IF ABS(A(Q,0))<1E-04 THEN 6510
6930 GOTO 6950
6940 IF ABS(A(Q,0)/A-1)<1E-04 THEN 6510
6950 SR$="Fout: tegenstrijdig"
6960 PRINT SR$:IF PU=1 THEN GOSUB 350:GOSUB 360
6970 IF U<>0 THEN GOSUB 7100
6980 GOTO 6630
7000 REM UITLEG 1
7010 GOSUB 100
7020 N$="Invoer: "
7030 W1=2:GOSUB 7500
7040 SR$="+--- FORMULEKRAKER UITLEG ----+"
7050 PRINT:PRINT SR$:IF PU=1 THEN GOSUB 360:GOSUB 350:GOSUB 360
7060 PRINT"! !"
7070 PRINT"+-----------------------------+"
7080 RETURN
7100 REM UITLEG 2
7110 N$=N$(Q):IF(N$="+") OR(N$="-") THEN 7170
7120 SR$=I$(F-1)
7130 PRINT SR$:IF PU=1 THEN GOSUB 350:GOSUB 360
7140 SR=A:GOSUB 310
7150 SR$=" "+LEFT$(N$+" ",9)+"="+SR$
7160 PRINT SR$:IF PU=1 THEN GOSUB 350:GOSUB 360
7170 RETURN
7400 REM PRINT FORMULES
7410 IF II=0 THEN 7460
7420 PRINT
7430 FOR N=0 TO II-1
7440 PRINT N+1;" ";I$(N)
7450 NEXT N:PRINT
7460 RETURN
7500 REM SUB PRINTEN
7510 A1=0
7520 FOR N=0 TO AA-1:A=INT(A(N,1)+.5)
7530 Q1=0:IF(N$(N)<>"+") AND(N$(N)<>"-") THEN Q1=1
7540 IF(Q1=1) AND(A=W1) THEN GOSUB 7600:A1=1
7550 NEXT N
7560 IF A1<>0 THEN 7590
7570 SR$=N$+" geen":PRINT SR$
7580 IF PU=1 THEN GOSUB 350:GOSUB 360
7590 RETURN
7600 REM PRINT NAAM + WAARDE
7610 SR=A(N,0):GOSUB 310
7620 SR$=N$+" "+LEFT$(N$(N)+" ",9)+"="+SR$
7630 PRINT SR$:IF PU=1 THEN GOSUB 350:GOSUB 360
7640 N$=" "
7650 RETURN
7800 REM ERROR
7810 SR$="Fout: onmogelijke berekening"
7820 PRINT SR$:IF PU=1 THEN GOSUB 350:GOSUB 360
7830 IF U<>0 THEN A=9999999:GOSUB 7100
7840 GOTO 6630
8000 REM+-*/~
8100 REM+-
8110 ON K GOTO 8120,8130,8140
8120 A=W1-W2:RETURN
8130 A=W1-W3:RETURN
8140 A=W2+W3:RETURN
8200 REM*/
8210 ON K GOTO 8220,8240,8260
8220 IF W2=0 THEN R=1:RETURN
8230 A=W1/W2:RETURN
8240 IF W3=0 THEN R=1:RETURN
8250 A=W1/W3:RETURN
8260 A=W2*W3:RETURN
8300 REM EN INV.
8310 ON K GOTO 8320,8350,8370
8320 IF(W1<=0) OR(W2<=0) THEN R=1:RETURN
8330 IF W2=1 THEN R=1:RETURN
8340 A=LOG(W1)/LOG(W2):RETURN
8350 IF(W3=0) OR(W1<0) THEN R=1:RETURN
8360 A=W1^(1/W3):RETURN
8370 IF W2<0 THEN R=1:RETURN
8380 A=W2^W3:RETURN
10000 REM ALLES VERWIJDEREN ?
10010 GOSUB 100
10015 PRINT"+- FORMULEKRAKER VERWIJDEREN -+"
10020 IF II=0 THEN 4055
10025 PRINT"! !"
10030 PRINT"+-----------------------------+"
10035 PRINT"Wilt u alles verwijderen (j/n) ";
10040 GOSUB 210
10050 IF(IN$="n") OR(IN$="N") THEN 10500
10060 IF(IN$<>"j") AND(IN$<>"J") THEN 10040
10070 MM=0:II=0
10100 REM VAR SCHONEN
10110 M=1:PRINT
10120 PRINT:PRINT"Alles verwijderen behalve"
10130 PRINT"variabelen en hun waarden"
10140 FOR N=1 TO AA-1
10150 IF(N$(N)="-") OR(N$(N)="+") THEN 10180
10160 A(M,0)=A(N,0):A(M,1)=A(N,1)
10170 N$(M)=N$(N):M=M+1
10180 NEXT N:AA=M
10190 FOR N=1 TO 500:NEXT N:RETURN
10500 REM FORMULE(S) VERWIJDEREN
10510 L=-1
10520 GOSUB 100
10525 PRINT"+- FORMULEKRAKER VERWIJDEREN -+"
10530 PRINT"! !"
10535 PRINT"+-----------------------------+"
10540 PRINT"De aanwezige formules zijn:"
10545 GOSUB 7400
10550 PRINT"Typ nr in van te verwijderen formule"
10600 REM
10610 PRINT"0 = geen -1 = laatste ongedaan maken"
10620 A$="":INPUT A$:A=INT(VAL(A$)+.5)
10630 IF(A>=0) OR(L=-1) THEN 10650
10640 H$=I$(L):I$(L)=L$:L$=H$:GOTO 10520
10650 IF A<=0 THEN 10700
10660 IF A>II THEN PRINT"Foute invoer":GOTO 10610
10670 IF I$(A-1)="--" THEN 10520
10680 L=A-1:L$=I$(L):I$(L)="--"
10690 GOTO 10520
10700 REM WERKELIJK VERWIJDEREN
10710 N=0:M=0:PRINT"Even geduld A.U.B."
10720 IF I$(M)="--" THEN GOSUB 10900:GOTO 10740
10730 GOSUB 10800:N=N+1
10740 M=M+1:IF M<II THEN 10720
10750 II=N:RETURN
10800 REM VERANDER DEELFORM. NR M IN N
10810 I$(N)=I$(M)
10820 IF(MM=0) OR(N=M) THEN 10860
10830 FOR A=0 TO MM-1
10840 IF F(A,4)=M+1 THEN F(A,4)=N+1
10850 NEXT A
10860 RETURN
10900 REM VERWIJDER DEELFORM.S NR M
10910 A=0:Q=0
10920 IF F(A,4)=M+1 THEN 10960
10930 FOR P=0 TO 4
10940 F(Q,P)=F(A,P)
10950 NEXT P:Q=Q+1
10960 A=A+1:IF A<MM THEN 10920
10970 MM=Q:RETURN
11000 REM STATUS
11010 GOSUB 100
11020 PRINT"+--- FORMULEKRAKER STATUS ----+"
11030 PRINT"! !"
11040 PRINT"+-----------------------------+"
11050 PRINT
11100 REM STATUS AFDRUK
11110 GOSUB 270
11120 PRINT TAB(13);"Aantal max."
11130 PRINT"Formules";TAB(14);II;TAB(20);XI+1
11140 PRINT"Deelformules";TAB(14);MM;TAB(20);XM+1
11150 PRINT"Variabelen";TAB(14);AA;TAB(20);XA+1
11160 PRINT:PRINT"Geheugen";TAB(14);FR;" bytes vrij"
11170 PRINT:PRINT"<TOETS>":GOSUB 210
11180 RETURN
15000 REM UITLEG FORMULEKRAKER
15020 GOSUB 100
15030 PRINT"+--- FORMULEKRAKER UITLEG ----+"
15040 PRINT"! !"
15050 PRINT"+-----------------------------+"
15060 PRINT
15070 PRINT"Dit is een veelzijdig rekenprogramma"
15080 PRINT"voor vele typen computers. Het geeft"
15090 PRINT"de mogelijkheid tot berekeningen op"
15100 PRINT"wiskundig, zakelijk of wetenschap-"
15110 PRINT"pelijk terrein.":PRINT
15120 PRINT"Door de eenvoud van invoeren kunt"
15130 PRINT"u snel en nauwkeurig de gewenste"
15140 PRINT"berekeningen uitvoeren.":PRINT
15150 PRINT"Essentieel is dat ook de omgekeerde"
15160 PRINT"bewerking snel uit te rekenen is,"
15170 PRINT"zonder dat daarvoor de formules"
15180 PRINT"omgeschreven hoeven te worden."
15190 PRINT:PRINT"<TOETS>":GOSUB 210
15200 RETURN
19000 REM EINDE
19010 PRINT"(c) H van Deelen 1989"
19020 END
25000 REM DATA VASTE FORMULES
25010 DATA"bedrag=inleg*(1+rente/100)^jaar"
25020 DATA"bedrag=inleg*(1+mndrente/100)^maand"
25030 DATA"jaar*12=maand"
29000 DATA""
30000 REM+------- FORMULEKRAKER -------+
30010 REM! !
30020 REM+-----------------------------+
30030 REM
30040 REM EEN PROGRAMMA DAT HET
30050 REM LASTIGE UITWERKEN VAN
30060 REM FORMULES AUTOMATISEERT
30070 REM
30080 REM REGEL 1020 XI :MAXIMUM FORMULES
30090 REM XM :MAXIMUM DEELFORMULES
30100 REM XA :MAXIMUM VARIABELEN
30110 REM
32000 REM IDEE EN ONTWERP
32010 REM H VAN DEELEN
32020 REM RUDOLPHLAAN 28
32030 REM 3794 MZ DE GLIND
32040 REM
32050 REM COPYRIGHT NOS HILVERSUM