-
Notifications
You must be signed in to change notification settings - Fork 11
/
A02_Romeinse_Cijfers.bc3
179 lines (178 loc) · 5.79 KB
/
A02_Romeinse_Cijfers.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
1000 A=200:GOTO20:REM ROMEINSE CIJFERS
1010 DIMX(30),M$(9),FT$(9)
1020 AA=ASC("A"):A0=ASC("0")
1030 RESTORE:FORN=1 TO9:READM$(N):NEXTN
1040 JA=0:GOSUB100:SR$=" Romeinse Cijfers ":GOSUB150
1050 PRINT:PRINT:PP=0:FT=0
1060 PRINT" Dit programma vertaalt":PRINT
1070 PRINT" Romeinse cijfers naar":PRINT
1080 PRINT" decimale getallen ,en":PRINT
1090 PRINT" andersom.":PRINT
1100 PRINT" 1 = UITLEG":PRINT
1110 PRINT" 2 = VERTALEN":PRINT
1120 PRINT" 3 = ROMEINS TELLEN":PRINT
1130 PRINT" S = stoppen":PRINT
1140 PRINT" TIK 1, 2, 3 of S ";:GOSUB210:V=IN-48
1150 IFIN=83 THEN950
1160 IF(V<1)OR(V>3)THEN1040
1170 ONV GOTO1200,1230,1280
1180 REM
1190 REM === UITLEG ===
1200 GOSUB9010:GOTO1040
1210 REM
1220 REM === VERTALEN ===
1230 JA=0:VR$="Wat moet ik vertalen "
1240 GOSUB6010:ONMM GOSUB7020,2010
1250 ONJA GOTO1230,1040
1260 REM
1270 REM === TELLEN ===
1280 FT=0:JA=0:VR$="ROMEINSE GETALLEN vanaf "
1290 GOSUB6010:ONMM GOSUB7020,2010
1300 IFJA=1 THEN1280
1310 GOSUB120:HO=0:VE=VE+2:IFFT>0 THEN1280
1320 GOSUB110:GOSUB8010:GOTO1040
1330 REM
1340 REM
2000 REM === SBR.ROMEINS DECODER ===
2010 L=LEN(R$):T=0:FT=0
2020 FORN=L TO1 STEP-1
2030 X$=MID$(R$,N,1):T=T+1
2040 GOSUB4010:SD=20
2050 IFW=0 THENFT=FT+1:FT$(FT)=X$
2060 X(T)=W:NEXTN
2070 IFFT>0 THEN GOSUB5010:GOTO2210
2080 REM --- X() OPTELLEN ---
2090 G=0:H=0
2100 FORN=1 TOT
2110 IFX(N)<H THENG=G-X(N):GOTO2130
2120 G=G+X(N)
2130 H=X(N)
2140 NEXTN:IFG<3001 THEN2170
2150 PRINT"Ik kan van I tot MMM":GOSUB9510:JA=1:RETURN
2160 REM --- CONTROLE VIA ENCODER ---
2170 PP=1:GOSUB7010:PP=0
2180 IFR$=U$ THEN2210
2190 PRINT"Bedoel je soms ";U$;" ?":PRINT
2200 REM --- DE UITKOMST ---
2210 IFFT=0 THENPRINT"DAT IS ";G
2220 IFV=3 THENSD=20:GOSUB450:RETURN
2230 GOSUB3010
2240 RETURN
3000 REM === SBR.JA/NEE ===
3010 PRINT:PRINT"Nog een getal ? (J/N) ";
3020 GOSUB210
3030 IFIN=74 THENJA=1:RETURN
3040 IFIN=78 THENJA=2:RETURN
3050 GOTO3020
4000 REM === SBR.ANALYSE ===
4010 IFX$="I" THENW=1:RETURN
4020 IFX$="V" THENW=5:RETURN
4030 IFX$="X" THENW=10:RETURN
4040 IFX$="L" THENW=50:RETURN
4050 IFX$="C" THENW=100:RETURN
4060 IFX$="D" THENW=500:RETURN
4070 IFX$="M" THENW=1000:RETURN
4080 W=0:RETURN
5000 REM === SBR.LETTERFOUT ===
5010 FORK=FT TO1 STEP-1:PRINTFT$(K);" ";:NEXTK
5020 PRINT"ken ik niet"
5030 PRINT:PRINT"Gebruik alleen de letters MDCLXVI"
5040 IFV=3 THEN GOSUB9510
5050 RETURN
6000 REM === SBR.GETALINVOER ===
6010 FT=0:GOSUB100:PRINTVR$;:INPUTSR$:PRINT
6020 IFSR$="" THEN6010
6030 IFLEN(SR$)<21 THEN6050
6040 PRINT"Dit is te lang":GOSUB9510:GOTO6010
6050 GOSUB330:SR$=SR$:AX=ASC(LEFT$(SR$,1))
6060 IF(AX<A0)OR(AX>A0+9)THENR$=SR$:MM=2:RETURN
6070 FORN=1 TOLEN(SR$):Q=ASC(MID$(SR$,N,1))
6080 IF(Q<A0)OR(Q>A0+9)THENFT=1
6090 NEXTN
6100 IFFT=1 THENPRINT"Raar getal!":SD=20:GOSUB450:GOTO6010
6110 J=VAL(SR$):G=INT(J)
6120 J=G:IF(J>0)AND(J<3001)THENMM=1:RETURN
6130 PRINT"Ik kan van 1 tot 3000":GOSUB9510:GOTO6010
7000 REM === SBR.ROMEINS-ENCODER ===
7010 IFPP=1 THENJ=INT(G):GOTO7030
7020 IFV<3 THENPRINT"DAT IS ";
7030 X(1)=INT(J/1000):J=J-1000*X(1)
7040 X(2)=INT(J/100):J=J-100*X(2)
7050 X(3)=INT(J/10):X(4)=J-10*X(3)
7060 U$="":FORN=4 TO1 STEP-1:V$=""
7070 IFX(N)=0 THEN7190
7080 N2=N+N
7090 ONX(N)GOTO7120,7110,7100,7130,7140,7150,7160,7170,7180
7100 V$=M$(N2+1)
7110 V$=V$+M$(N2+1)
7120 V$=V$+M$(N2+1):GOTO7190
7130 V$=M$(N2+1)+M$(N2):GOTO7190
7140 V$=M$(N2):GOTO7190
7150 V$=M$(N2)+M$(N2+1):GOTO7190
7160 V$=M$(N2)+M$(N2+1)+M$(N2+1):GOTO7190
7170 V$=M$(N2)+M$(N2+1)+M$(N2+1)+M$(N2+1):GOTO7190
7180 V$=M$(N2+1)+M$(N2-1)
7190 U$=V$+U$
7200 NEXTN:IFPP=1 THENRETURN
7210 IFV=3 THENRETURN
7220 PRINTU$
7230 GOSUB3010
7240 RETURN
8000 REM === SBR.ROMEINS TELLEN ===
8010 PP=1
8020 PRINT;G;:GOSUB7010:HO=10:GOSUB110:PRINTU$
8030 GOSUB120:G=G+1:IFG>3000 THEN GOSUB210:RETURN
8040 VU=VE:HO=0:VE=0:GOSUB110
8050 PRINT"W = WACHTEN, S = STOPPEN "
8060 PRINT" ":VE=VU:GOSUB110
8070 SD=5:GOSUB450:IFIN=83 THENRETURN
8080 IFIN=87 THEN GOSUB210
8090 GOTO8010
8100 REM
9000 REM === SBR.UITLEG ===
9010 GOSUB100
9020 PRINT"ROMEINSE CIJFERS":PRINT:PRINT:PRINT
9030 PRINT"De Romeinen hadden geen":PRINT
9040 PRINT"cijfers zoals wij":PRINT
9050 PRINT"Zij schreven hun getallen":PRINT
9060 PRINT"met de letters MDCLXVI en":PRINT
9070 PRINT"de nul kenden ze niet":PRINT
9080 PRINT"Het is erg lastig om met":PRINT
9090 PRINT"zulke getallen te rekenen":PRINT
9100 GOSUB9510
9110 PRINT" I = 1 ; V = 5 ; X = 10":PRINT
9120 PRINT" L = 50 ; C = 100":PRINT
9130 PRINT" D = 500 en M = 1000":PRINT
9140 PRINT"Een getal bestaat uit een":PRINT
9150 PRINT"optelling van die letters":PRINT
9160 PRINT"maar een 'lagere' letter":PRINT
9170 PRINT"voor een 'hogere' letter":PRINT
9180 PRINT"moet daarvan afgetrokken":PRINT
9190 PRINT"worden. Ingewikkeld?":PRINT
9200 GOSUB9510
9210 PRINT"Hier een paar voorbeelden":PRINT:PRINT
9220 PRINT:PRINT" 1=I 2=II 3=III 4=IV 5=V":PRINT
9230 PRINT" 6=VI 7=VII 8=VIII 9=IX":PRINT
9240 PRINT" 10=X 22=XXII 91=XCI":PRINT:PRINT
9250 PRINT:PRINT"MCMLXXXIX is dus 1989":PRINT
9260 PRINT"En XXVI maal XXXII is een":PRINT
9270 PRINT"erg moeilijke rekensom!":PRINT
9280 GOSUB9510
9290 PRINT" Jaartallen op gebouwen,":PRINT
9300 PRINT" monumenten en bruggen en":PRINT
9310 PRINT" uitgavejaar van boeken":PRINT
9320 PRINT" zijn vaak in het Romeins":PRINT
9330 PRINT" Wil je dat kunnen lezen?":PRINT
9340 PRINT" Dan moet je even oefenen":PRINT
9350 PRINT:PRINT:PRINT" *"
9360 GOSUB9510:RETURN
9500 REM === SUBR. TIK EEN TOETS ===
9510 HO=5:VE=20:GOSUB110:PRINT"Tik een toets ";
9520 GOSUB210:GOSUB100:RETURN
25000 DATA" "," ","M","D","C","L","X","V","I"
25010 REM---------------------------
32000 REM Ch.W.Brederode
32010 REM Von Bonninghausenlaan 33
32020 REM 2161 ES LISSE
32030 REM
32040 REM TROS-RADIO dd 900418