register

Aus ProgrammingWiki

Registermaschine

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

NrMethodeBemerkung
|
1
R0 = nBerechnung der Wurzel von n
|
2
R1 = 0R1 speichert die zu quadrierende Zahl
|
3
IFZERO R0 GOTO 20Wenn R0 = 0 ist das Ergebnis 0
|
4
R2 = 1R2 bildet die Dekrementier-Variable
|
5
R1 += R2nächste zu prüfende Zahl
|
6
R3 = 0Speichert die quadrierte Zahl
|
7
R4 = R1Laufvariable für Quadrierung
|
8
R3 += R1Aufsummierung der quadrierten Zahl
|
9
R4 -= R2Laufvariable dekrementieren
|
10
IFZERO R4 GOTO 12Wenn Laufvariable = 0, prüfen der quadrierten Zahl
|
11
GOTO 8Wenn Laufvariable != 0, weiter aufsummieren
|
12
R5 = R0Laufvariable für Prüfen der quadrierten Zahl
|
13
R3 -= R2gebildete Quadratzahl dekrementieren
|
14
R5 -= R2Laufvariable dekrementieren
|
15
IFZERO R5 GOTO 18Laufvariable = 0, prüfen ob quadrierte Zahl gleich oder kleiner n
|
16
IFZERO R3 GOTO 5Wenn die quadrierte Zahl eher 0 ist als die Laufvariable, dann ist die Zahl noch zu klein, neue wird gebildet
|
17
GOTO 13Beides noch nicht 0, weiter dekrementieren
|
18
IFZERO R3 GOTO 20Quadrierte Zahl ist gleich n, deshalb gleich zurückgeben
|
19
R1 -= R2Ansonsten ist quadrierte Zahl größer n, also dekrementieren um den Wert zu erhalten
|
20
R0 = R1Ergebnis wird in Rückgaberegister geschrieben