-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathDRIEHOEK.BAS
More file actions
658 lines (658 loc) · 21.6 KB
/
DRIEHOEK.BAS
File metadata and controls
658 lines (658 loc) · 21.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
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
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=1300:GOTO 20:REM DRIEHOEKEN 2.0
1010 DIM A$(23),I$(7),H$(10),W(7),I(7),M(5,1)
1020 P=3.14159265:REM INSTELLING PI
1030 RD=360:REM VOLLE CIRKEL 360 GRADEN
1040 CN=2:REM AANTAL DECIMALEN (MAX 4)
1099 REM////////////////////////////////////////
1100 RD=2*P/RD:REM VARIABELEN VULLEN
1110 FOR N=0 TO 19
1120 READ A$(N):REM SCHERM INLEZEN
1130 NEXT N
1140 A$(23)=A$(19)
1150 FOR N=1 TO 9
1160 H$(N)=A$(N+5)
1170 NEXT N
1180 H$(10)=" Invoer ok. "
1199 REM////////////////////////////////////////
1200 GOSUB 100:REM SCHERM BINAIR OPMETEN
1210 H=0:VE=0:HP=64
1220 FOR N=1 TO 7
1230 H=H+HP:HO=H
1240 GOSUB 110
1250 GOSUB 120
1260 IF HO<>H THEN H=H-HP
1270 HP=HP/2
1280 NEXT N
1299 REM////////////////////////////////////////
1300 H=INT((H-37)/2):REM SCHERM CENTREREN
1310 L$=" - "
1320 W$=" "
1330 H$=""
1340 IF H<1 THEN H=0:GOTO 1400
1350 FOR N=1 TO H
1360 H$=H$+" "
1370 NEXT N
1399 REM////////////////////////////////////////
1400 FOR I=1 TO 5:REM MENU WIJZER POSITIE INLEES
1410 FOR N=0 TO 1
1420 READ M(I,N)
1430 NEXT N
1440 NEXT I
1499 REM////////////////////////////////////////
1500 M=1:REM HOOFDMENU WIJZER INSTELLING
1510 GOSUB 2550:REM VOET TEKST #1
1520 GOSUB 6100:REM WISSEN
1530 GOSUB 3100:REM UITLEG
1599 REM////////////////////////////////////////
1600 HO=H:VE=4:REM HOOFDMENU WIJZER ZETTEN
1610 GOSUB 110:PRINT A$(4)
1620 HO=M(M,1)+H:VE=4
1630 GOSUB 110:PRINT">";
1640 HO=M(M,0)+H:VE=4
1650 GOSUB 110:PRINT"<";
1699 REM////////////////////////////////////////
1700 GOSUB 210:REM MENU KEUZE TOETS
1710 IF ASC(IN$)=13 THEN 1900
1720 IF IN$=" " THEN 1800
1730 A$="uUiIbBwWsS":F=0
1740 FOR N=1 TO 10
1750 IF IN$=MID$(A$,N,1) THEN M=INT((N+1)/2):F=1
1760 NEXT N
1770 IF F=1 THEN 1900
1780 GOTO 1700
1799 REM////////////////////////////////////////
1800 M=M+1:REM SPATIE => MENU WIJZER BIJSTELLEN
1810 IF M>5 THEN M=1
1820 GOTO 1600
1899 REM////////////////////////////////////////
1900 HO=H:VE=4:REM STARTEN VAN HOOFDMENUKEUZE
1910 GOSUB 110:PRINT A$(4)
1920 IF M=5 THEN 7000
1930 ON M GOSUB 3000,4000,5000,6000
1940 GOTO 1600
1999 REM########################################
2000 HO=H:VE=0:REM SCHERMPRINT ROUTINE
2010 FOR N=0 TO 17
2020 GOSUB 110:VE=VE+1
2030 PRINT A$(N);
2040 NEXT N
2099 REM////////////////////////////////////////
2100 HO=0:VE=15:GOSUB 110:REM VOETBALK PRINT ROUTINE
2110 FOR N=16 TO 23
2120 PRINT
2130 PRINT H$;A$(N);
2140 NEXT N
2150 RETURN
2199 REM########################################
2200 FOR N=1 TO 23:REM BEREKENING OP PAPIER PRINTEN
2210 SR$=" "+A$(N)
2220 IF N<>4 THEN 2240
2230 SR$=" ! in BASICODE 2 !"
2240 IF(N>14) AND(N<18) THEN 2260
2250 GOSUB 350:GOSUB 360
2260 NEXT N
2270 RETURN
2499 REM########################################
2500 A$(20)=A$(3):REM VOETBALK SCHERMPRINT ROUTINE
2510 A$(22)=A$(3)
2520 ON V GOSUB 2550,2600,2650,2700,2750,2800,2850,2900,2950
2530 GOSUB 2100
2540 RETURN
2549 REM////////////////////////////////////////
2550 A$(20)="! Selecteer uw keuze met !"
2560 A$(21)="! de spatiebalk en druk op !"
2570 A$(22)="! de RETURN of ENTER toets. !"
2580 V=1
2590 RETURN
2599 REM////////////////////////////////////////
2600 A$(20)="! Voer nu uw waarde in met een !"
2610 A$(21)="! punt i.p.v. een komma en druk !"
2620 A$(22)="! op de RETURN of ENTER toets. !"
2630 RETURN
2649 REM////////////////////////////////////////
2650 A$(21)="! Foute waarde; probeer opnieuw. !"
2660 RETURN
2699 REM////////////////////////////////////////
2700 A$(21)="! Gegevens zijn strijdig. !"
2710 RETURN
2749 REM////////////////////////////////////////
2750 A$(21)="! Even geduld voor berekenen A.U.B. !"
2760 RETURN
2799 REM////////////////////////////////////////
2800 A$(21)="! Te weinig waarden zijn ingevoerd. !"
2810 RETURN
2849 REM////////////////////////////////////////
2850 A$(21)="! Berekening klaar. !"
2860 RETURN
2899 REM////////////////////////////////////////
2900 A$(21)="! Alle invoer wordt gewist. !"
2910 RETURN
2949 REM////////////////////////////////////////
2950 A$(21)="! Einde van dit programma. !"
2960 RETURN
2999 REM########################################
3000 RESTORE:REM UITLEG
3010 FOR N=0 TO 19
3020 READ A$:REM SCHERM OVERSLAAN
3030 NEXT N
3040 FOR N=1 TO 10
3050 READ A:REM MENU TABEL OVERSLAAN
3060 NEXT N
3099 REM////////////////////////////////////////
3100 FOR J=1 TO 6:REM SCHERMEN WEERGEVEN
3110 GOSUB 3500
3120 IF(IN$="s") OR(IN$="S") THEN J=7
3130 NEXT J
3140 GOSUB 100
3150 GOSUB 2000:REM SCHERM HERSTELLEN
3160 RETURN
3499 REM########################################
3500 GOSUB 100:REM 1 SCHERM WEERGEVEN
3510 PRINT:PRINT H$;A$(1):REM SCHERM KOPBALK
3520 PRINT H$;A$(2)
3530 PRINT H$;A$(5)
3599 REM////////////////////////////////////////
3600 FOR N=1 TO 17:REM SCHERM WEERGEVEN
3610 READ A$
3620 PRINT H$;A$
3630 NEXT N
3699 REM////////////////////////////////////////
3700 PRINT H$;A$(1):REM SCHERM VOETBALK
3710 PRINT H$;"! Geef een toets, S is stop uitleg !"
3720 PRINT H$;A$(1);
3730 HO=H+19:VE=22:GOSUB 110
3740 GOSUB 210
3750 RETURN
3999 REM########################################
4000 I=1:F=0:REM WAARDEN INVOER
4010 GOSUB 6200
4020 GOSUB 2000
4030 A$(15)=H$(10)
4040 HO=H:VE=15:GOSUB 110
4050 PRINT H$(10);
4099 REM////////////////////////////////////////
4100 HO=H+3:VE=I+7:REM INVOER WIJZER ZETTEN
4110 GOSUB 110
4120 PRINT"<";
4130 HO=HO+11
4140 GOSUB 110
4150 PRINT">";
4160 IF F=1 THEN 4500
4199 REM////////////////////////////////////////
4200 GOSUB 210:REM INVOER KEUZE TOETS
4210 F=0
4220 IF ASC(IN$)=13 THEN 4500
4230 HO=H:VE=I+7
4240 GOSUB 110
4250 PRINT A$(I+7);
4260 IF IN$=" " THEN 4400
4299 REM////////////////////////////////////////
4300 A$="aabbccAABBCGoOiI":REM DIRECTE INVOER KEUZE
4310 FOR N=1 TO 16
4320 IF IN$=MID$(A$,N,1) THEN I=INT((N+1)/2):F=1
4330 NEXT N
4340 GOTO 4100
4399 REM////////////////////////////////////////
4400 I=I+1:REM SPATIE => INVOER WIJZER BIJSTELLEN
4410 IF I>8 THEN I=1
4420 GOTO 4100
4499 REM////////////////////////////////////////
4500 IF I=8 THEN 4800:REM INVOER OK
4510 V=2:GOSUB 2500:REM TEKST 'WAARDE INVOEREN
4520 SR=I(I):GOSUB 300
4530 HO=H:VE=17:GOSUB 110
4540 PRINT A$(0);:GOSUB 110
4550 PRINT H$(I+2);
4560 IN$=""
4570 INPUT IN$
4580 IF IN$<>"" THEN SR$=IN$
4599 REM////////////////////////////////////////
4600 SR=VAL(SR$):REM INVOER WAARDE CONTROLEREN
4610 IF SR<0 THEN 4640
4620 IF(I<4) OR(I>6) THEN 4650
4630 IF SR<P/RD THEN 4650
4640 V=3:GOSUB 2500:GOTO 4520:REM TEKST 'WAARDE FOUT
4650 I(I)=SR
4699 REM////////////////////////////////////////
4700 IF SR=0 THEN SR$=L$:GOTO 4720:REM INVOER VERWERKEN
4710 CT=8:GOSUB 310
4720 A$(I+7)=H$(I+2)+SR$
4730 I$(I)=SR$
4740 HO=H:GOSUB 110
4750 PRINT A$(0);
4760 V=1:GOSUB 2500:REM TEKST 'SPATIE/RETURN
4770 IN$=" "
4780 GOTO 4210
4799 REM////////////////////////////////////////
4800 A$(15)=A$(0):REM INVOER OK. , EINDE
4810 GOSUB 2000
4820 RETURN
4999 REM########################################
5000 IF S>0 THEN V=S:GOTO 5750:REM BEREKENEN
5010 V=5:GOSUB 2500:REM TEKST 'EVEN GEDULD
5020 FOR N=1 TO 9
5030 A$(N+5)=H$(N)
5040 NEXT N
5050 T=SGN(I(1))+SGN(I(2))+SGN(I(3)):REM AANTAL ZIJDEN
5060 U=SGN(I(4))+SGN(I(5))+SGN(I(6)):REM AANTAL HOEKEN
5070 W=SGN(I(7)):REM AANTAL OPPERVLAKTE
5099 REM////////////////////////////////////////
5100 S=0:Z=0:J=0:REM OPLOSSINGSSOORT KIEZEN
5110 IF(T>0) AND(U>0) AND(W=1) THEN Z=5:REM ZIJDE,HOEK,OPP
5120 IF(T>1) AND(U>0) THEN Z=2:REM 2 ZIJDEN, 1 HOEK
5130 IF T=3 THEN Z=1:REM 3 ZIJDEN
5140 IF(T>0) AND(U>1) THEN Z=3:REM 1 ZIJDE, 2 HOEKEN
5150 IF(T>1) AND(W=1) THEN Z=4:REM 2 ZIJDE + OPPERVLAKTE
5160 IF(U>1) AND(W=1) THEN Z=6:REM 2 HOEK + OPPERVLAKTE
5170 IF Z=0 THEN V=6:GOTO 5750:REM TEKST 'TE WEINIG WAARDEN
5199 REM////////////////////////////////////////
5200 K=0:L=0:R=0:V=1:REM INVOER WAARDEN OMWERKEN
5210 A=I(1)
5220 B=I(2)
5230 C=I(3)
5240 HA=I(4)*RD:REM HOEKEN NAAR RADIALEN
5250 HB=I(5)*RD
5260 HG=I(6)*RD
5270 Q=I(7)
5280 ON Z GOSUB 14010,15010,16010,17010,18010,19010
5299 REM////////////////////////////////////////
5300 IF V>1 THEN 5700:REM DRIEHOEK TERUGROTEREN/SPIEGELEN
5310 IF K=1 THEN GOSUB 12000:REM SPIEGEL TERUG A/B
5320 IF L=1 THEN GOSUB 11000:REM SPIEGEL TERUG B/C
5330 IF R-INT(R/3)*3<>0 THEN GOSUB 10000:GOTO 5330
5340 Q=C*B*SIN(HA)/2
5399 REM////////////////////////////////////////
5400 W(1)=A:REM BEREKENWAARDEN OPSLAAN
5410 W(2)=B
5420 W(3)=C
5430 W(4)=HA/RD:REM HOEKEN NAAR GRADEN
5440 W(5)=HB/RD
5450 W(6)=HG/RD
5460 W(7)=Q
5499 REM////////////////////////////////////////
5500 F=1:REM BEREKENWAARDEN CONTROLEREN
5510 Y=10^(0-CN)
5520 FOR N=1 TO 7
5530 IF I(N)=0 THEN 5560
5540 X=ABS(W(N)-I(N))
5550 IF X>Y THEN F=5:N=7
5560 NEXT N
5570 IF F=5 THEN V=4:GOTO 5700
5599 REM////////////////////////////////////////
5600 J=J+1:REM OPLOSSING OPSLAAN
5610 A$(6)=A$(6)+"Oplossing "
5620 CT=8
5630 FOR N=1 TO 7
5640 SR=W(N):GOSUB 310
5650 A$(N+7)=A$(N+7)+SR$+" "
5660 NEXT N
5699 REM////////////////////////////////////////
5700 IF S=1 THEN 5200:REM RESULTAAT WEERGAVE
5710 IF J>0 THEN V=7:REM TEKST 'BEREKENING KLAAR
5720 IF J=2 THEN A$(7)=A$(7)+" X Y"
5730 IF J=0 THEN GOSUB 6200:GOTO 5750
5740 GOSUB 2000
5750 GOSUB 2500:REM VOETBALK WEERGAVE
5799 REM////////////////////////////////////////
5800 HO=H:VE=17:GOSUB 110:REM PRINTER AFDRUK VRAGEN
5810 PRINT" Berekening naar printer J/N ? ";
5820 GOSUB 210
5830 GOSUB 110
5840 PRINT A$(0);
5850 IF(IN$="n") OR(IN$="N") THEN 5900
5860 IF(IN$<>"j") AND(IN$<>"J") THEN 5800
5870 GOSUB 2200:REM PRINTEN
5899 REM////////////////////////////////////////
5900 S=V:REM TERUG NAAR HOOFDMENU
5910 V=1:GOSUB 2500:REM TEKST 'SPATIE/RETURN
5920 RETURN
5999 REM########################################
6000 V=8:GOSUB 2500:REM WISSEN
6010 GOSUB 6100
6020 GOSUB 2550:REM TEKST 'SPATIE/RETURN
6030 GOSUB 2000
6040 RETURN
6099 REM////////////////////////////////////////
6100 FOR N=1 TO 7:REM ALLES WISSEN
6110 I(N)=0:I$(N)=L$
6120 NEXT N
6130 GOSUB 6200
6150 S=6:REM TE WEINIG WAARDEN BEKEND
6160 RETURN
6199 REM////////////////////////////////////////
6200 A$(6)=A$(0):REM BEREKENING WISSEN
6210 A$(7)=A$(0)
6220 FOR N=1 TO 7
6230 A$(N+7)=H$(N+2)+I$(N)+W$
6240 NEXT N
6250 S=0:REM GEEN BEREKENING KLAAR
6260 RETURN
6999 REM########################################
7000 V=9:GOSUB 2500:REM EINDE PROGRAMMA
7010 HO=0:VE=15:GOSUB 110
7020 END
9999 REM########################################
10000 R=R+1:REM ROTATIE DRIEHOEK LINKSOM
10010 Y=A
10020 A=B
10030 B=C
10040 C=Y
10050 Y=HA
10060 HA=HB
10070 HB=HG
10080 HG=Y
10090 RETURN
10999 REM########################################
11000 L=1-L:REM SPIEGELING DRIEHOEK B/C
11010 Y=HG
11020 HG=HB
11030 HB=Y
11040 Y=B
11050 B=C
11060 C=Y
11070 RETURN
11999 REM########################################
12000 K=1-K:REM SPIEGELING DRIEHOEK A/B
12010 Y=HA
12020 HA=HB
12030 HB=Y
12040 Y=B
12050 B=A
12060 A=Y
12070 RETURN
12999 REM########################################
13000 IF X>1 THEN V=4:RETURN:REM I=INV SIN (X)
13010 IF X>.999999 THEN I=P/2:RETURN:REM HOEK 90 GRADEN
13020 I=ATN(X/SQR(1-X*X))
13030 IF S=0 THEN S=1:RETURN:REM OPLOSSING 1
13040 S=3:I=P-I:RETURN:REM OPLOSSING 2
13999 REM########################################
14000 REM BEREKENEN ALS 3 ZIJDEN BEKEND
14010 F=0:FOR N=1 TO 3
14020 GOSUB 10000:REM ROTEER LINKSOM
14030 X=(A*A+C*C-B*B)/(2*A*C)
14040 IF(X<=-1) OR(X>=1) THEN F=1:N=3:GOTO 14080
14050 IF 1-X*X<=0 THEN X=-X:S=1
14060 HB=P/2-ATN(X/SQR(1-X*X)):REM INV COS(X)
14070 IF S=1 THEN HB=P-HB:S=0
14080 NEXT N:IF F=1 THEN V=4:REM STRIJDIG
14090 RETURN
14999 REM########################################
15000 REM BEREKENEN ALS 2 ZIJDEN EN 1 HOEK BEKEND
15010 IF HA=0 THEN GOSUB 10000:GOTO 15010:REM ROTEER LINKSOM
15020 IF(B=0) OR(C=0) THEN 15500
15030 HO=SIN(HA)*B:REM HOOGTELIJN
15040 C1=COS(HA)*B
15050 C2=C-C1
15060 HB=ATN(HO/C2)
15070 IF HB<0 THEN HB=P+HB
15080 HG=P-HA-HB
15090 IF HG<0 THEN V=4:RETURN:REM FOUT, STRIJDIG
15100 A=HO/SIN(HB)
15110 RETURN
15499 REM////////////////////////////////////////
15500 IF B=0 THEN GOSUB 11000:REM BEREKENEN MET ALFA, A EN B
15510 X=SIN(HA)*B/A
15520 GOSUB 13000:HB=I:REM INV SIN(X)
15530 IF V>1 THEN RETURN:REM FOUT, STRIJDIG
15540 HG=P-HA-HB
15550 IF HG<0 THEN V=4:RETURN:REM FOUT, STRIJDIG
15560 C=COS(HA)*B+COS(HB)*A
15570 IF C<0 THEN V=4:REM FOUT, STRIJDIG
15580 RETURN
15999 REM########################################
16000 REM BEREKENEN ALS 1 ZIJDE EN 2 HOEKEN BEKEND
16010 IF(HA=0) OR(HB=0) THEN GOSUB 10000:GOTO 16010
16020 HG=P-HA-HB
16030 IF HG<0 THEN V=4:RETURN:REM FOUT, STRIJDIG
16040 IF A=0 THEN GOSUB 10000:GOTO 16040:REM ROTEER LINKSOM
16045 IF HA=0 THEN V=4:RETURN:REM FOUT, STRIJDIG
16050 B=A*SIN(HB)/SIN(HA)
16060 C=A*SIN(HG)/SIN(HA)
16070 RETURN
16999 REM########################################
17000 REM BEREKEN ALS 2 ZIJDEN EN OPPERVLAK BEKEND
17010 IF(A=0) OR(C=0) THEN GOSUB 10000:GOTO 17010
17020 HO=2*Q/C
17030 X=HO/A
17040 GOSUB 13000:HB=I:REM INV SIN(X)
17050 IF V>1 THEN RETURN:REM FOUT, STRIJDIG
17060 GOSUB 15010:REM BEREKEN MET 2 ZIJDEN EN 1 HOEK
17070 RETURN
17999 REM########################################
18000 REM BEREKEN ALS 1 ZIJDE, 1 HOEK EN OPPERVLAK BEKEND
18010 IF C=0 THEN GOSUB 10000:GOTO 18010:REM ROTEER LINKSOM
18020 HO=2*Q/C
18030 IF HG<>0 THEN 18500
18040 IF HA=0 THEN GOSUB 12000:REM SPIEGEL A/B
18050 B=HO/SIN(HA)
18060 IF K=1 THEN GOSUB 12000:REM SPIEGEL TERUG A/B
18070 GOSUB 15010:REM BEREKEN MET 2 ZIJDEN EN 1 HOEK
18080 RETURN
18499 REM////////////////////////////////////////
18500 Y=C*C-4*(HO*HO-C*HO/TAN(HG)):REM BEREKEN MET C & GAMMA
18510 IF Y<0 THEN V=4:RETURN:REM FOUT, STRIJDIG
18520 C1=(C+SQR(Y))/2
18530 HA=ATN(HO/C1)
18540 IF S=1 THEN GOSUB 12000:K=0:S=3:GOTO 18560
18550 S=1
18560 GOSUB 16010:REM BEREKEN MET 1 ZIJDE EN 2 HOEKEN
18570 RETURN
18999 REM########################################
19000 REM BEREKEN ALS 2 HOEKEN EN OPPERVLAK BEKEND
19010 IF(HA=0) OR(HB=0) THEN GOSUB 10000:GOTO 19010
19020 HO=10:REM HOOGTE AANNAME
19030 C=HO/TAN(HA)+HO/TAN(HB)
19035 IF C<=0 THEN V=4:RETURN:REM STRIJDIG
19040 F=SQR(Q*2/(HO*C)):REM FACTOR NA AANNAME FOUT
19050 C=C*F
19060 GOSUB 16010:REM BEREKEN MET 1 ZIJDE EN 2 HOEKEN
19070 RETURN
19999 REM########################################
25000 DATA" "
25010 DATA"+------------------------------------+"
25020 DATA"! Driehoek Berekeningen v2.0 !"
25030 DATA"! !"
25040 DATA"! Uitleg Invoer Bereken Wis Stop !"
25050 DATA"+------------------------------------+"
25060 DATA" "
25070 DATA" "
25080 DATA" Lijnstuk a "
25090 DATA" Lijnstuk b "
25100 DATA" Lijnstuk c "
25110 DATA" Hoek Alpha "
25120 DATA" Hoek Beta "
25130 DATA" Hoek Gamma "
25140 DATA" Oppervlak "
25150 DATA" "
25160 DATA"",""
25170 DATA" "
25180 DATA"+------------------------------------+"
25190 REM HOOFDMENU WIJZER POSITIE
25200 DATA 1,8,9,16,17,25,26,30,31,36
25210 DATA" Beta => +"
25220 DATA" /!"
25230 DATA" / !"
25240 DATA" c / ! a "
25250 DATA" --- / ! ---"
25260 DATA" / !"
25270 DATA" / !"
25280 DATA" Alfa => +------+ <= Gamma"
25290 DATA" b"
25300 DATA" ---"
25310 DATA"Alfa is altijd de tegenover liggende"
25320 DATA"hoek van zijde a. Beta is dit van b"
25330 DATA"en Gamma van c."
25340 DATA""
25350 DATA"Vul alleen de bekende waarden in en"
25360 DATA"de onbekenden worden uitgerekend"
25370 DATA"",""
25380 DATA"Driehoeken berekenen is een programma"
25390 DATA"waarmee u de missende waarden van"
25400 DATA"een driehoek kunt uitrekenen."
25410 DATA""
25420 DATA"Als u van een driehoek drie van de u"
25430 DATA"bekende gegevens ingeeft, zal de rest"
25440 DATA"uitgerekend kunnen worden."
25450 DATA"Dit kunnen zijn lengte van zijde,"
25460 DATA"grootte van hoek of oppervlakte van"
25470 DATA"de driehoek."
25480 DATA""
25490 DATA"Als er meer oplossingen mogelijk zijn"
25500 DATA"worden deze ook gegeven."
25510 DATA"","","",""
25520 DATA"De invoerwaarden kunnen in alle"
25530 DATA"mogelijke kombinaties opgegeven"
25540 DATA"worden. De u niet bekende waarden"
25550 DATA"vult u gewoon niet in, of maakt deze 0"
25560 DATA""
25570 DATA"In het geval dat u alleen weet hoe"
25580 DATA"groot de drie hoeken zijn, is een"
25590 DATA"oplossing onmogelijk. Dit is omdat de"
25600 DATA"driehoek alle mogelijke groottes"
25610 DATA"kan hebben."
25620 DATA""
25630 DATA"Voor het rekenen wordt altijd"
25640 DATA"uitgegaan van een A B C driehoek."
25650 DATA"Als u andere namen gebruikt, zult u"
25660 DATA"hier rekening mee moeten houden."
25670 DATA"",""
25680 DATA"U kunt met het programma werken door"
25690 DATA"met de spatiebalk uw keuze uit te"
25700 DATA"zoeken, en deze met return te starten."
25710 DATA"Een andere methode is de eerste letter"
25720 DATA"van uw keuze in te toetsen. Deze wordt"
25730 DATA"dan direct gestart."
25740 DATA""
25750 DATA"In het hoofdmenu kunt u kiezen uit :"
25760 DATA""
25770 DATA"U : Deze uitleg."
25780 DATA"I : Invoer van waarden."
25790 DATA"B : Berekenen van driehoek."
25800 DATA"W : Wissen van invoerwaarden."
25810 DATA"S : Stop dit programma."
25820 DATA"","",""
25830 DATA"Als u I toetst voor INVOER kunt u"
25840 DATA"kiezen uit :"
25850 DATA""
25860 DATA"a : Lijnstuk a"
25870 DATA"b : Lijnstuk b"
25880 DATA"c : Lijnstuk c"
25890 DATA"A : Hoek Alfa"
25900 DATA"B : Hoek Beta"
25910 DATA"C : Hoek Gamma"
25920 DATA"G : Ook hoek Gamma"
25930 DATA"O : Oppervlak"
25940 DATA"I : Invoer ok."
25950 DATA""
25960 DATA"Met invoer ok. verlaat u invoer weer"
25970 DATA"en komt u in het hoofdmenu."
25980 DATA"",""
25990 DATA"Nu kunt u BEREKENEN kiezen. De niet"
26000 DATA"ingevulde waarden zullen nu"
26010 DATA"uitgerekend worden."
26020 DATA""
26030 DATA"Als u meer dan drie waarden ingevoerd"
26040 DATA"heeft, kan het zijn dat door"
26050 DATA"afrondfouten deze strijdig met elkaar"
26060 DATA"zijn. U moet dan deze nauwkeuriger"
26070 DATA"invoeren, of deze laten vervallen."
26080 DATA""
26090 DATA"Bij berekenen wordt gevraagd of u een"
26100 DATA"afdruk op papier wenst. U dient hier"
26110 DATA"een J of N in te toetsen."
26120 DATA""
26130 DATA"Basicode 2, (c) 1989 M v Deelen"
26140 DATA""
29999 REM########################################
30000 REM DRIEHOEKEN BEREKENEN
30010 REM
30020 REM VERSIE 2.0 DD 14-9-1989
30030 REM
30040 REM GESCHREVEN IN BASICODE 2
30050 REM OP EEN COMMODORE C128
30060 REM
30070 REM VARIABELEN
30080 REM
30090 REM A$( 23) SCHERM BEELD
30100 REM H$( 10) INVOER KEUZES
30110 REM I$( 7) INGEVOERDE WAARDEN
30120 REM
30130 REM I ( 7) INGEVOERDE WAARDEN
30140 REM M (5,1) MENU WIJZER POSITIE
30150 REM W ( 7) BEREKENDE WAARDEN
30160 REM
30170 REM A$ HULP
30180 REM H$ SCHERM CENTREER
30190 REM IN$ TOETS TEKEN
30200 REM L$ WAARDE LEEG
30210 REM SR$ DIVERSEN
30220 REM W$ WAARDE WISSEN
30230 REM
30240 REM A ZIJDE A
30250 REM B ZIJDE B
30260 REM C ZIJDE C
30270 REM C1 DEEL ZIJDE C
30280 REM C2 DEEL ZIJDE C
30290 REM CN AANTAL DECIMALEN WEERGAVE
30300 REM CT AANTAL TEKENS GETAL WEERG.
30310 REM F DIVERSEN VLAG
30320 REM H SCHERM CENTREER
30330 REM HA HOEK ALFA
30340 REM HB HOEK BETA
30350 REM HG HOEK GAMMA
30360 REM HO HOOGTELIJN OF CURSOR PLAATSEN
30370 REM HP SCHERMGROOTTE HORIZONTAAL
30380 REM J VOOR FOR-NEXT
30390 REM K TELLER SPIEGELEN A/B
30400 REM L TELLER SPIEGELEN B/C
30410 REM M HOOFDMENU WIJZER
30420 REM N VOOR FOR-NEXT
30430 REM P WAARDE PI =3.1416...
30440 REM Q OPPERVLAKTE DRIEHOEK
30450 REM R ROTATIE TELLER
30460 REM RD OMREKENINGSFACTOR VAN GRADEN/RADIALEN
30470 REM S AANTAL OPLOSSINGEN OF VOETTEKST VOOR BEREKENEN
30480 REM T AANTAL ZIJDEN INGEGEVEN
30490 REM U AANTAL HOEKEN INGEGEVEN
30500 REM V VOETMELD TEKST
30510 REM VE CURSOR PLAATSEN
30520 REM W AANTAL OPPERVLAKTE
30530 REM X HULP BIJ BEREKENEN
30540 REM Y HULP BIJ BEREKENEN
30550 REM Z OPLOSSINGS METHODE
30560 REM
31999 REM########################################
32000 REM ONTWORPEN EN GESCHREVEN DOOR
32010 REM
32020 REM M VAN DEELEN
32030 REM RUDOLPHLAAN 28
32040 REM 3794 MZ DE GLIND
32050 REM
32060 REM COPYRIGHT NOS HILVERSUM