BuK-KA-RAM-Programm

Aus ProgrammingWiki
Archivierte Version vom 2012-05-22T18:08:47+00:00. Aktuelle Version

Inhaltsverzeichnis

Registermaschine

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

RAM-Programm: (Jens Heider und Daniel Tasche)

NrMethodeBemerkung
|
0
R0 = 3R0 = n (Berechnung Wurzel von 3)
|
1
R2 = 1R2 = fixer Wert für Inkrement/Dekrement
|
2
R1 += R2R1 = aktuelle Testvariable
|
3
R3 = R1R3 = dekrementierter Wert bei Multiplikation
|
4
R4 = 0R4 = Summe bei Multiplikation
|
5
IFZERO R3 GOTO 9Quadratzahl des aktuellen Testwerts gebildet?
|
6
R4 += R1Aufsummierung für Multiplikation
|
7
R3 -= R2Dekrementierung des Multiplikation-Zählers
|
8
GOTO 5
|
9
R5 = R0Begin des Tests, ob gebildete Quadratzahl größer als n
|
10
IFZERO R5 GOTO 15Wenn n kleiner gleich gebildete Quadratzahl
|
11
IFZERO R4 GOTO 2gebildete Quadratzahl noch nicht groß genug. Mit nächsten Testkandidaten fortfahren
|
12
R4 -= R2gebildete Quadratzahl dekrementieren
|
13
R5 -= R2n dekrementieren
|
14
GOTO 10
|
15
IFZERO R4 GOTO 17Ist gebildete Quadratzahl = n, dann Ergebnis direkt erreicht.
|
16
R1 -= R2Ansonsten muss gebildete Quadratzahl "abgerundet" werden
|
17
R0 = R1Ergebnis in Rückgaberegister schreiben.

Test mit 4:

Sijeheid_RAM_Wurzel_4.jpg

Test mit 5:

Sijeheid_RAM_Wurzel_5.jpg

RAM-Programm (Stefan Scheumann)

BNrMethodeBemerkung
|
0
R0 = 25Berechnung Wurzel 25
|
1
R1 = 1R1 = aktueller Testwert
|
2
R2 = 0R2 = alter Testwert
|
3
R5 = 1Inkrement-Variable
|
4
R10 = R1Parameter für die Berechnung des Quadrats; Beginne Quadrierung
|
5
R11=R10Schleifenindex
|
6
IFZERO R10 GOTO 10
|
7
R12 += R10
|
8
R11 -= R13
|
9
GOTO 4
|
10
R3 = R12R3 = Quadrat von aktuellen Testwert; Ende Quadrierung
|
11
R20 =R0Vorbereitung Vergleich(Kopieren der Register) von gesuchten Wert mit Ergebnis der Quadrierung
|
12
R21 = R3
|
13
R20 -= R5Beginn Vergleich errechneten Wert <= gegebenen Wert; Aufbau: beide Variablen dekrementieren bis eine oder beide 0 sind.
|
14
R21 -= R5
|
15
IFZERO R20 GOTO 21R20(Gesuchter Wert) kleiner oder gleich R21(berechnetes Quadrat des aktuellen Testwertes)
|
16
IFZERO R21 GOTO 18R21 kleiner R20 => weitermachen mit neuen Testwerten
|
17
GOTO 13Wiederholen bis R20 oder R21 = 0
|
18
R2 = R1alter Testwert = aktueller Testwert
|
19
R1 += R2aktueller Testwert + 1
|
20
GOTO 4Mit neuen Testwert von vorn anfangen.
|
21
R0 = R2Ergebnis in Rückgaberegister schreiben.

RAM-Programm: (Robert Rosenberger)

| 1R0 = 25
|2R3 = 1
|3R1 += R3
|4R5 = R1
|5R5 -= R3
|6R6 = R1
|7FZERO R5 GOTO 11
|8R5 -= R3
|9R6 += R1
|10GOTO 6
|11R10 = R0
|12R10 -= R6
|13IFZERO R10 GOTO 15
|14GOTO 3
|15R15 = R6
|16R16 = R0
|17IF ZERO R16 GOTO 21
|18R16 -= R3
|19R15 -= R3
|20GOTO 17
|21IFZERO R15 GOTO 23
|22R1 -= R3
|23R0 = R1
|24STOP