Napskamun

Uniform acceleration in Johnny Simulator

Aug 9th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!

Lösung für gleichmässig beschleunigte Bewegung in Johnny Simluator

Berechnung der Zeit für das Zurücklegen einer Strecke mit einer gleichmässig beschleunigten Bewegung.
t=(2s/a)^(1/2)

TAKE Holt einen Befehl aus dem RAM.
ADD Addiert einen Wert zum Wert, der sich im Akkumulator befindet.
SUB Subtrahiert einen Wert zum Wert, der sich im Akkumulator befindet.
SAVE Speichert den Wert im Akkumulator an der angegebenen Speicherstelle.
JMP Springt an eine bestimmte Stelle im RAM. Ermöglicht Schleifen.
TST Testet eine Speicherstelle auf den Wert 0. Ist dieser Test positiv, überspringt der PC den nächsten Befehl.
INC Nimmt einen Wert und addiert den Wert 1 dazu.
DEC Nimmt einen Wert und subtrahiert den Wert 1.
NULL Überschreibt eine bestimmte Speicherstelle mit dem Wert 000.
HLT Bricht das Programm ab.

Speicherstelle Befehl Parameter Kommentar
0 TAKE 900 In diesem Abschnitt werden alle Zahlen aus der
1 ADD 900 Ausgangsformel zu einem Bruch zusammengefasst.
2 ADD 901 Es wird auch schon das Glied A0 gebildet.
3 SAVE 950
4 TAKE 901
5 ADD 901
6 SAVE 951
7 TAKE 950 ggT
8 SAVE 910 Um den Ausgangsbruch zu kürzen wird von Nenner und
9 TAKE 951 von Zähler nun der grösste gemeinsame Teiler gesucht.
10 SAVE 911
11 TAKE 910
12 SUB 911
13 SAVE 912
14 TST 912
15 JMP 22
16 TAKE 911
17 SAVE 912
18 TAKE 910
19 SAVE 911
20 TAKE 912
21 SAVE 910
22 NULL 912
23 TAKE 910
24 SUB 911
25 SAVE 912
26 TST 912
27 JMP 22
28 JMP 39
29 TAKE 910
30 SUB 911
31 SAVE 912
32 TST 912
33 JMP 28
34 JMP 31
35 TAKE 912
36 SAVE 910
37 JMP 22
38 TAKE 911
39 SAVE 912
40 TAKE 910
41 SAVE 911
42 TAKE 912
43 SAVE 910
44 NULL 912
45 JMP 4
46 NULL 911
47 NULL 912
48 TAKE 910 ggT=1?
49 SAVE 911 Ist der grösste gemeinsame Teiler 1,so muss man den Bruch
50 DEC 911 nicht kürzen. Man kann das Kürzen in diesem Fall
51 TST 911 überspringen.
52 JMP 54
53 JMP 78
54 NULL 911
55 TAKE 950 Mithilfe des ggT wird nun der Bruch gekürzt.
56 SAVE 911
57 TAKE 951
58 SAVE 912
59 NULL 913
60 INC 913
61 TAKE 911
62 SUB 910
63 SAVE 911
64 TST 911
65 JMP 5
66 TAKE 913
67 SAVE 950
68 NULL 913
69 INC 913
70 TAKE 912
71 SUB 910
72 SAVE 912
73 TST 912
74 JMP 14
75 TAKE 913
76 SAVE 951
77 NULL 913
78 NULL 911 Es wird nun aus dem Glied N das Glied N+1 gebildet.
79 TAKE 900 Das Ergebnis wird nicht am gleichen Ort gespeichert, damit
80 SAVE 910 es später zum Glied N addiert werden kann.
81 DEC 910
82 TAKE 911
83 ADD 951
84 SAVE 911
85 TST 910
86 JMP 3
87 TAKE 911
88 SAVE 952
89 TAKE 950
90 SAVE 953
91 TAKE 952 ggT
92 SAVE 910 Um den Ausgangsbruch zu kürzen, wird von Nenner und
93 TAKE 953 von Zähler nun der grösste gemeinsame Teiler gesucht.
94 SAVE 911
95 TAKE 910
96 SUB 911
97 SAVE 912
98 TST 912
99 JMP 22
100 TAKE 911
101 SAVE 912
102 TAKE 910
103 SAVE 911
104 TAKE 912
105 SAVE 910
106 NULL 912
107 TAKE 910
108 SUB 911
109 SAVE 912
110 TST 912
111 JMP 22
112 JMP 39
113 TAKE 910
114 SUB 911
115 SAVE 912
116 TST 912
117 JMP 28
118 JMP 31
119 TAKE 912
120 SAVE 910
121 JMP 22
122 TAKE 911
123 SAVE 912
124 TAKE 910
125 SAVE 911
126 TAKE 912
127 SAVE 910
128 NULL 912
129 JMP 4
130 NULL 911
131 NULL 912
132 TAKE 910 ggT=1?
133 SAVE 911 Ist der grösste gemeinsame Teiler 1, so muss man den Bruch
134 DEC 911 nicht kürzen. Man kann das Kürzen dann überspringen.
135 TST 911
136 JMP 138
137 JMP 162
138 NULL 911
139 TAKE 952 Kürzen
140 SAVE 911 Mithilfe des ggT wird nun der Bruch gekürzt.
141 TAKE 953
142 SAVE 912
143 NULL 913
144 INC 913
145 TAKE 911
146 SUB 910
147 SAVE 911
148 TST 911
149 JMP 5
150 TAKE 913
151 SAVE 952
152 NULL 913
153 INC 913
154 TAKE 912
155 SUB 910
156 SAVE 912
157 TST 912
158 JMP 14
159 TAKE 913
160 SAVE 953
161 NULL 913
162 TAKE 951 Es wird von den beiden Nennern das Brüche der ggT
163 SAVE 910 ermittelt, damit sie später gleichnamig gemacht werden
164 TAKE 953 können. Dazu wird aber noch das kleinste gemeinsame
165 SAVE 911 Vielfache dieser zwei Zahlen benötigt. Dies wird aus dem
166 TAKE 910 ggT und dem Produkt der zwei Zahlen ermittelt.
167 SUB 911
168 SAVE 912
169 TST 912
170 JMP 22
171 TAKE 911
172 SAVE 912
173 TAKE 910
174 SAVE 911
175 TAKE 912
176 SAVE 910
177 NULL 912
178 TAKE 910
179 SUB 911
180 SAVE 912
181 TST 912
182 JMP 22
183 JMP 39
184 TAKE 910
185 SUB 911
186 SAVE 912
187 TST 912
188 JMP 28
189 JMP 31
190 TAKE 912
191 SAVE 910
192 JMP 22
193 TAKE 911
194 SAVE 912
195 TAKE 910
196 SAVE 911
197 TAKE 912
198 SAVE 910
199 NULL 912
200 JMP 4
201 NULL 911
202 NULL 912
203 TAKE 910
204 SAVE 954
205 SAVE 955
206 Null 910
207 TAKE 951 Multiplikation.
208 SAVE 956 Für das kgV wird nun das Produkt der beiden Nenner
209 NULL 957 gebildet.
210 DEC 956
211 TAKE 957
212 ADD 953
213 SAVE 957
214 TST 956
215 JMP 3
216 TAKE 957 Bildung des kgV mit dem ggT und dem Produkt.
217 SAVE 910
218 NULL 911
219 INC 911
220 TAKE 910
221 SUB 955
222 SAVE 910
223 TST 910
224 JMP 3
225 TAKE 911
226 SAVE 955
227 TAKE 955 Gleichnamig machen und Addition.
228 SAVE 957 Die Brüche werden nun gleichnamig gemacht und
229 NULL 958 addiert. Aus zwei Brüchen wird einer.
230 TAKE 958
231 ADD 950
232 SAVE 958
233 TAKE 957
234 SUB 951
235 SAVE 957
236 TST 957
237 JMP 3
238 TAKE 958
239 SAVE 950
240 TAKE 955
241 SAVE 957
242 NULL 958
243 TAKE 958
244 ADD 952
245 SAVE 958
246 TAKE 957
247 SUB 953
248 SAVE 957
249 TST 957
250 JMP 16
251 TAKE 958
252 SAVE 952
253 TAKE 955
254 SAVE 951
255 SAVE 953
256 NULL 955
257 NULL 958
258 TAKE 950
259 ADD 952
260 SAVE 950
261 NULL 952
262 NULL 953
263 TAKE 951 *1/2
264 ADD 951 Um das Glied n+1 zu erhalten wird noch mit 2 dividiert.
265 SAVE 951
266 TAKE 950 ggT
267 SAVE 910 Um den Ausgangsbruch zu kürzen, wird von Nenner und
268 TAKE 951 von Zähler nun der grösste gemeinsame Teiler gesucht.
269 SAVE 911
270 TAKE 910
271 SUB 911
272 SAVE 912
273 TST 912
274 JMP 22
275 TAKE 911
276 SAVE 912
277 TAKE 910
278 SAVE 911
279 TAKE 912
280 SAVE 910
281 NULL 912
282 TAKE 910
283 SUB 911
284 SAVE 912
285 TST 912
286 JMP 22
287 JMP 39
288 TAKE 910
289 SUB 911
290 SAVE 912
291 TST 912
292 JMP 28
293 JMP 31
294 TAKE 912
295 SAVE 910
296 JMP 22
297 TAKE 911
298 SAVE 912
299 TAKE 910
300 SAVE 911
301 TAKE 912
302 SAVE 910
303 NULL 912
304 JMP 4
305 NULL 911
306 NULL 912
307 TAKE 910 ggT=1?
308 SAVE 911 Ist der grösste gemeinsame Teiler 1, so muss man den Bruch
309 DEC 911 nicht kürzen. Man kann das kürzen dann überspringen.
310 TST 911
311 JMP 313
312 JMP 337
313 NULL 911
314 TAKE 950 Kürzen
315 SAVE 911 Mithilfe des ggT wird nun der Bruch gekürzt.
316 TAKE 951
317 SAVE 912
318 NULL 913
319 INC 913
320 TAKE 911
321 SUB 910
322 SAVE 911
323 TST 911
324 JMP 5
325 TAKE 913
326 SAVE 950
327 NULL 913
328 INC 913
329 TAKE 912
330 SUB 910
331 SAVE 912
332 TST 912
333 JMP 14
334 TAKE 913
335 SAVE 951
336 NULL 913
337 DEC 999 Der letzte Teil ist eine Schleife, die je nach Wert an der Stelle
338 TST 999 999 das Programm beendet oder einen weiteren
339 JMP 78 Durchgang einleitet.
340 HLT 0
Add Comment
Please, Sign In to add comment