IIm18-Kreativaufgabe7

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Random Access Maschine - Paul Bachmann, Johannes Thies

RAM zur Ermittlung von $\left\lfloor \sqrt{n} \right\rfloor$

Geben Sie mind. ein RAM-Programm zur Berechnung der Funktion $w : \N \mapsto \N$ mit $w(n) = \left\lfloor \sqrt{n} \right\rfloor$ an.

Ermittlung der Potenz

Befehlszähler Anweisung Bemerkung
0
R0 = n belegen von R0 mit einer natürlichen Zahl n
1
R1 = 1 fixer Wert für Inkrementierung/Dekrementierung
2
R2 = R0 Festlegung einer Zählvariable der Größe n
3
R3 = 0 R3 als Platzhalter für das Ergebnis
4
R3 += R0 Inkrementierung von R3 um n
5
R2 -= R1 Dekrementierung der Zählvariable
6
IFZERO R2 GOTO 8 wenn Zählvariable 0 ist, dann steht das Ergebnis in R3
7
GOTO 4 R1 von R0 subtrahieren
8
R0 = R3 Ergebnis in R0 speichern
9
STOP

Realisierung des logischen Operators $\leq$

Kein RAM, sondern nur eine Visualisierung des Gedankenganges beim Vergleich zweier natürlicher Zahlen!

Befehlszähler Anweisung Bemerkung
0
R0 = a belegen von R0 mit der ersten natürlichen Zahl a
1
R1 = b belegen von R1 mit der ersten natürlichen Zahl b
2
R0 -= R1 Dekrementierung von R0 um R1
3
IFZERO R0 GOTO ... Wenn R0 = 0, dann ist der Ursprüngliche Wert von R0 $\leq$ R1, wenn nicht, dann ist R0 > R1

Kombination beider Funktionen zur Ermittlung von $\left\lfloor \sqrt{n} \right\rfloor$

Befehlszähler Anweisung Bemerkung
0
R0 = n belegen von R0 mit einer natürlichen Zahl n
1
R1 = 1 fixer Wert für Inkrementierung/Dekrementierung
2
R2 += R1 Zähler (Testvariable)
3
R22 = R2 Potenz Zählvariable
4
R33 += R2 Inkrementierung von R3 um R2 zur Berechnung der Potenz von Testvariable
5
R22 -= R1 Dekrementierung der Potenz Zählvariable
6
IFZERO R22 GOTO 8 wenn Zählvariable 0 ist, dann steht das Ergebnis in R33
7
GOTO 4 Inkrementiere R33 solange bis Potenz Zählvariable 0 beträgt
8
R33 -= R0 kleinergelich Vergleich von Potenzergebnis und n
9
IFZERO R33 GOTO 2 wenn R33 0 beträgt, dann ist Potenz von Testvariable $\leq$ n
10
R2 -= R1 Dekrementierung von R2 um 1, wenn Potenz der Testvariable zum ersten mal größer ist als n, da wir floor berechnen wollen
11
R0 = R2 Ergebnis in R0 speichern

Beispiel für n = 10

Anweisung R0 R1 R1 R22 R33
R0 = n100000
R1 = 1101000
R2 = R0101000
R2 += R1101100
R22 = R2101110
R33 += R2101111
R22 -= R1101101
IFZERO R22 GOTO 10101101
R33 -= R0101100
IFZERO R22 GOTO 10101100
R2 += R1101200
R22 = R2101220
R33 += R2101222
R22 -= R1101212
IFZERO R22 GOTO 10101212
GOTO 6101212
R33 += R2101214
R22 -= R1101204
IFZERO R22 GOTO 10101204
R33 -= R0101200
IFZERO R22 GOTO 10101200
R2 += R1101300
R22 = R2101330
R33 += R2101333
R22 -= R1101323
IFZERO R22 GOTO 10101323
GOTO 6101323
R33 += R2101326
R22 -= R1101316
IFZERO R22 GOTO 10101316
GOTO 6101316
R33 += R2101319
R22 -= R1101309
IFZERO R22 GOTO 10101309
R33 -= R0101300
IFZERO R22 GOTO 10101300
R2 += R1101400
R22 = R2101440
R33 += R2101444
R22 -= R1101434
IFZERO R22 GOTO 10101434
GOTO 6101434
R33 += R2101438
R22 -= R1101428
IFZERO R22 GOTO 10101428
GOTO 6101428
R33 += R21014212
R22 -= R11014112
IFZERO R22 GOTO 101014112
GOTO 61014112
R33 += R21014116
R22 -= R11014016
IFZERO R22 GOTO 101014016
R33 -= R0101406
IFZERO R22 GOTO 10101406
R2 -= R1101306
R0 = R231306


Beispiel für n = 16

Anweisung R0 R1 R1 R22 R33
R0 = n160000
R1 = 1161000
R2 = R0161000
R2 += R1161100
R22 = R2161110
R33 += R2161111
R22 -= R1161101
IFZERO R22 GOTO 10161101
R33 -= R0161100
IFZERO R22 GOTO 10161100
R2 += R1161200
R22 = R2161220
R33 += R2161222
R22 -= R1161212
IFZERO R22 GOTO 10161212
GOTO 6161212
R33 += R2161214
R22 -= R1161204
IFZERO R22 GOTO 10161204
R33 -= R0161200
IFZERO R22 GOTO 10161200
R2 += R1161300
R22 = R2161330
R33 += R2161333
R22 -= R1161323
IFZERO R22 GOTO 10161323
GOTO 6161323
R33 += R2161326
R22 -= R1161316
IFZERO R22 GOTO 10161316
GOTO 6161316
R33 += R2161319
R22 -= R1161309
IFZERO R22 GOTO 10161309
R33 -= R0161300
IFZERO R22 GOTO 10161300
R2 += R1161400
R22 = R2161440
R33 += R2161444
R22 -= R1161434
IFZERO R22 GOTO 10161434
GOTO 6161434
R33 += R2161438
R22 -= R1161428
IFZERO R22 GOTO 10161428
GOTO 6161428
R33 += R21614212
R22 -= R11614112
IFZERO R22 GOTO 101614112
GOTO 61614112
R33 += R21614116
R22 -= R11614016
IFZERO R22 GOTO 101614016
R33 -= R0161400
IFZERO R22 GOTO 10161400
R2 += R1161500
R22 = R2161550
R33 += R2161555
R22 -= R1161545
IFZERO R22 GOTO 10161545
GOTO 6161545
R33 += R21615410
R22 -= R11615310
IFZERO R22 GOTO 101615310
GOTO 61615310
R33 += R21615315
R22 -= R11615215
IFZERO R22 GOTO 101615215
GOTO 61615215
R33 += R21615220
R22 -= R11615120
IFZERO R22 GOTO 101615120
GOTO 61615120
R33 += R21615125
R22 -= R11615025
IFZERO R22 GOTO 101615025
R33 -= R0161509
IFZERO R22 GOTO 10161509
R2 -= R1161409
R0 = R241409


Beispiel für n = 77

Anweisung R0 R1 R1 R22 R33
R0 = n770000
R1 = 1771000
R2 = R0771000
R2 += R1771100
R22 = R2771110
R33 += R2771111
R22 -= R1771101
IFZERO R22 GOTO 10771101
R33 -= R0771100
IFZERO R22 GOTO 10771100
R2 += R1771200
R22 = R2771220
R33 += R2771222
R22 -= R1771212
IFZERO R22 GOTO 10771212
GOTO 6771212
R33 += R2771214
R22 -= R1771204
IFZERO R22 GOTO 10771204
R33 -= R0771200
IFZERO R22 GOTO 10771200
R2 += R1771300
R22 = R2771330
R33 += R2771333
R22 -= R1771323
IFZERO R22 GOTO 10771323
GOTO 6771323
R33 += R2771326
R22 -= R1771316
IFZERO R22 GOTO 10771316
GOTO 6771316
R33 += R2771319
R22 -= R1771309
IFZERO R22 GOTO 10771309
R33 -= R0771300
IFZERO R22 GOTO 10771300
R2 += R1771400
R22 = R2771440
R33 += R2771444
R22 -= R1771434
IFZERO R22 GOTO 10771434
GOTO 6771434
R33 += R2771438
R22 -= R1771428
IFZERO R22 GOTO 10771428
GOTO 6771428
R33 += R27714212
R22 -= R17714112
IFZERO R22 GOTO 107714112
GOTO 67714112
R33 += R27714116
R22 -= R17714016
IFZERO R22 GOTO 107714016
R33 -= R0771400
IFZERO R22 GOTO 10771400
R2 += R1771500
R22 = R2771550
R33 += R2771555
R22 -= R1771545
IFZERO R22 GOTO 10771545
GOTO 6771545
R33 += R27715410
R22 -= R17715310
IFZERO R22 GOTO 107715310
GOTO 67715310
R33 += R27715315
R22 -= R17715215
IFZERO R22 GOTO 107715215
GOTO 67715215
R33 += R27715220
R22 -= R17715120
IFZERO R22 GOTO 107715120
GOTO 67715120
R33 += R27715125
R22 -= R17715025
IFZERO R22 GOTO 107715025
R33 -= R0771500
IFZERO R22 GOTO 10771500
R2 += R1771600
R22 = R2771660
R33 += R2771666
R22 -= R1771656
IFZERO R22 GOTO 10771656
GOTO 6771656
R33 += R27716512
R22 -= R17716412
IFZERO R22 GOTO 107716412
GOTO 67716412
R33 += R27716418
R22 -= R17716318
IFZERO R22 GOTO 107716318
GOTO 67716318
R33 += R27716324
R22 -= R17716224
IFZERO R22 GOTO 107716224
GOTO 67716224
R33 += R27716230
R22 -= R17716130
IFZERO R22 GOTO 107716130
GOTO 67716130
R33 += R27716136
R22 -= R17716036
IFZERO R22 GOTO 107716036
R33 -= R0771600
IFZERO R22 GOTO 10771600
R2 += R1771700
R22 = R2771770
R33 += R2771777
R22 -= R1771767
IFZERO R22 GOTO 10771767
GOTO 6771767
R33 += R27717614
R22 -= R17717514
IFZERO R22 GOTO 107717514
GOTO 67717514
R33 += R27717521
R22 -= R17717421
IFZERO R22 GOTO 107717421
GOTO 67717421
R33 += R27717428
R22 -= R17717328
IFZERO R22 GOTO 107717328
GOTO 67717328
R33 += R27717335
R22 -= R17717235
IFZERO R22 GOTO 107717235
GOTO 67717235
R33 += R27717242
R22 -= R17717142
IFZERO R22 GOTO 107717142
GOTO 67717142
R33 += R27717149
R22 -= R17717049
IFZERO R22 GOTO 107717049
R33 -= R0771700
IFZERO R22 GOTO 10771700
R2 += R1771800
R22 = R2771880
R33 += R2771888
R22 -= R1771878
IFZERO R22 GOTO 10771878
GOTO 6771878
R33 += R27718716
R22 -= R17718616
IFZERO R22 GOTO 107718616
GOTO 67718616
R33 += R27718624
R22 -= R17718524
IFZERO R22 GOTO 107718524
GOTO 67718524
R33 += R27718532
R22 -= R17718432
IFZERO R22 GOTO 107718432
GOTO 67718432
R33 += R27718440
R22 -= R17718340
IFZERO R22 GOTO 107718340
GOTO 67718340
R33 += R27718348
R22 -= R17718248
IFZERO R22 GOTO 107718248
GOTO 67718248
R33 += R27718256
R22 -= R17718156
IFZERO R22 GOTO 107718156
GOTO 67718156
R33 += R27718164
R22 -= R17718064
IFZERO R22 GOTO 107718064
R33 -= R0771800
IFZERO R22 GOTO 10771800
R2 += R1771900
R22 = R2771990
R33 += R2771999
R22 -= R1771989
IFZERO R22 GOTO 10771989
GOTO 6771989
R33 += R27719818
R22 -= R17719718
IFZERO R22 GOTO 107719718
GOTO 67719718
R33 += R27719727
R22 -= R17719627
IFZERO R22 GOTO 107719627
GOTO 67719627
R33 += R27719636
R22 -= R17719536
IFZERO R22 GOTO 107719536
GOTO 67719536
R33 += R27719545
R22 -= R17719445
IFZERO R22 GOTO 107719445
GOTO 67719445
R33 += R27719454
R22 -= R17719354
IFZERO R22 GOTO 107719354
GOTO 67719354
R33 += R27719363
R22 -= R17719263
IFZERO R22 GOTO 107719263
GOTO 67719263
R33 += R27719272
R22 -= R17719172
IFZERO R22 GOTO 107719172
GOTO 67719172
R33 += R27719181
R22 -= R17719081
IFZERO R22 GOTO 107719081
R33 -= R0771904
IFZERO R22 GOTO 10771904
R2 -= R1771804
R0 = R281804

RAM zur Ermittlung des größten gemeinsamen Teilers (ggt) - Euklidischer Algorithmus

Befehlszähler Anweisung Bemerkung
0
R0 = a belegen von R0 mit der ersten natürlichen Zahl a
1
R1 = b belegen von R1 mit der ersten natürlichen Zahl b
2
IFZERO R1 GOTO 12 Sprung zu 12 da R0 das Ergebnis beinhaltet
3
IFZERO R0 GOTO 11 Sprung zu 11 da R1 das Ergebnis beinhaltet
4
R2 = R0 Zwischenspeichern von R0 in R2 für Größer vergleich
5
R2 -= R1 R1 von R2 subtrahieren für Größer vergleich
6
IFZERO R2 GOTO 9 wenn R2 0 ist, ist R1 > R0
7
R0 -= R1 R1 von R0 subtrahieren
8
GOTO 2 Sprung zum Schleifenanfang
9
R1 -= R0 R0 von R1 subtrahieren
10
GOTO 2 Sprung zum Schleifenanfang
11
R0 = R1 Ergebnis in R0 schreiben
12
STOP



Beispiel mit a = 2 und b = 4

Anweisung R0 R1 R1
R0 = a 200
R1 = b 240
IFZERO R1 GOTO 12 240
IFZERO R0 GOTO 11240
R2 = R0 242
R2 -= R1 240
IFZERO R2 GOTO 11 240
R1 -= R0 220
GOTO 2 220
IFZERO R1 GOTO 12 220
IFZERO R0 GOTO 11220
R2 = R0 222
R2 -= R1 220
IFZERO R2 GOTO 11 220
R1 -= R0 200
GOTO 2 200
IFZERO R1 GOTO 12 200



Beispiel mit a = 2 und b = 15

Anweisung R0 R1 R1
R0 = a 200
R1 = b 2150
IFZERO R1 GOTO 12 2150
IFZERO R0 GOTO 112150
R2 = R0 2152
R2 -= R1 2150
IFZERO R2 GOTO 11 2150
R1 -= R0 2130
GOTO 2 2130
IFZERO R1 GOTO 12 2130
IFZERO R0 GOTO 112130
R2 = R0 2132
R2 -= R1 2130
IFZERO R2 GOTO 11 2130
R1 -= R0 2110
GOTO 2 2110
IFZERO R1 GOTO 12 2110
IFZERO R0 GOTO 112110
R2 = R0 2112
R2 -= R1 2110
IFZERO R2 GOTO 11 2110
R1 -= R0 290
GOTO 2 290
IFZERO R1 GOTO 12 290
IFZERO R0 GOTO 11290
R2 = R0 292
R2 -= R1 290
IFZERO R2 GOTO 11 290
R1 -= R0 270
GOTO 2 270
IFZERO R1 GOTO 12 270
IFZERO R0 GOTO 11270
R2 = R0 272
R2 -= R1 270
IFZERO R2 GOTO 11 270
R1 -= R0 250
GOTO 2 250
IFZERO R1 GOTO 12 250
IFZERO R0 GOTO 11250
R2 = R0 252
R2 -= R1 250
IFZERO R2 GOTO 11 250
R1 -= R0 230
GOTO 2 230
IFZERO R1 GOTO 12 230
IFZERO R0 GOTO 11230
R2 = R0 232
R2 -= R1 230
IFZERO R2 GOTO 11 230
R1 -= R0 210
GOTO 2 210
IFZERO R1 GOTO 12 210
IFZERO R0 GOTO 11210
R2 = R0 212
R2 -= R1 211
IFZERO R2 GOTO 11 211
R0 -= R1 111
GOTO 2 111
IFZERO R1 GOTO 12 111
IFZERO R0 GOTO 11111
R2 = R0 111
R2 -= R1 110
IFZERO R2 GOTO 11 110
R1 -= R0 100
GOTO 2 100
IFZERO R1 GOTO 12 100



Beispiel mit a = 119 und b = 7

Anweisung R0 R1 R1
R0 = a 11900
R1 = b 11970
IFZERO R1 GOTO 12 11970
IFZERO R0 GOTO 1111970
R2 = R0 1197119
R2 -= R1 1197112
IFZERO R2 GOTO 11 1197112
R0 -= R1 1127112
GOTO 2 1127112
IFZERO R1 GOTO 12 1127112
IFZERO R0 GOTO 111127112
R2 = R0 1127112
R2 -= R1 1127105
IFZERO R2 GOTO 11 1127105
R0 -= R1 1057105
GOTO 2 1057105
IFZERO R1 GOTO 12 1057105
IFZERO R0 GOTO 111057105
R2 = R0 1057105
R2 -= R1 105798
IFZERO R2 GOTO 11 105798
R0 -= R1 98798
GOTO 2 98798
IFZERO R1 GOTO 12 98798
IFZERO R0 GOTO 1198798
R2 = R0 98798
R2 -= R1 98791
IFZERO R2 GOTO 11 98791
R0 -= R1 91791
GOTO 2 91791
IFZERO R1 GOTO 12 91791
IFZERO R0 GOTO 1191791
R2 = R0 91791
R2 -= R1 91784
IFZERO R2 GOTO 11 91784
R0 -= R1 84784
GOTO 2 84784
IFZERO R1 GOTO 12 84784
IFZERO R0 GOTO 1184784
R2 = R0 84784
R2 -= R1 84777
IFZERO R2 GOTO 11 84777
R0 -= R1 77777
GOTO 2 77777
IFZERO R1 GOTO 12 77777
IFZERO R0 GOTO 1177777
R2 = R0 77777
R2 -= R1 77770
IFZERO R2 GOTO 11 77770
R0 -= R1 70770
GOTO 2 70770
IFZERO R1 GOTO 12 70770
IFZERO R0 GOTO 1170770
R2 = R0 70770
R2 -= R1 70763
IFZERO R2 GOTO 11 70763
R0 -= R1 63763
GOTO 2 63763
IFZERO R1 GOTO 12 63763
IFZERO R0 GOTO 1163763
R2 = R0 63763
R2 -= R1 63756
IFZERO R2 GOTO 11 63756
R0 -= R1 56756
GOTO 2 56756
IFZERO R1 GOTO 12 56756
IFZERO R0 GOTO 1156756
R2 = R0 56756
R2 -= R1 56749
IFZERO R2 GOTO 11 56749
R0 -= R1 49749
GOTO 2 49749
IFZERO R1 GOTO 12 49749
IFZERO R0 GOTO 1149749
R2 = R0 49749
R2 -= R1 49742
IFZERO R2 GOTO 11 49742
R0 -= R1 42742
GOTO 2 42742
IFZERO R1 GOTO 12 42742
IFZERO R0 GOTO 1142742
R2 = R0 42742
R2 -= R1 42735
IFZERO R2 GOTO 11 42735
R0 -= R1 35735
GOTO 2 35735
IFZERO R1 GOTO 12 35735
IFZERO R0 GOTO 1135735
R2 = R0 35735
R2 -= R1 35728
IFZERO R2 GOTO 11 35728
R0 -= R1 28728
GOTO 2 28728
IFZERO R1 GOTO 12 28728
IFZERO R0 GOTO 1128728
R2 = R0 28728
R2 -= R1 28721
IFZERO R2 GOTO 11 28721
R0 -= R1 21721
GOTO 2 21721
IFZERO R1 GOTO 12 21721
IFZERO R0 GOTO 1121721
R2 = R0 21721
R2 -= R1 21714
IFZERO R2 GOTO 11 21714
R0 -= R1 14714
GOTO 2 14714
IFZERO R1 GOTO 12 14714
IFZERO R0 GOTO 1114714
R2 = R0 14714
R2 -= R1 1477
IFZERO R2 GOTO 11 1477
R0 -= R1 777
GOTO 2 777
IFZERO R1 GOTO 12 777
IFZERO R0 GOTO 11777
R2 = R0 777
R2 -= R1 770
IFZERO R2 GOTO 11 770
R1 -= R0 700
GOTO 2 700
IFZERO R1 GOTO 12 700
Persönliche Werkzeuge