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