BuK/IIm20/Vorlesung 9 Grüning
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Python</language>
= Kreativaufgabe Registermaschine für die natürliche Quadratwurzel Seite 32 =
Vorüberlegungen in Python
<code id="60a9009e3ab82">
def get_sqrt_int(n):
nat = 0
ret = 0
while True:
if nat **2 <= n:
ret = nat
else:
return ret
nat += 1
</code>
<run id="60a92361592ba">
print(get_sqrt_int(5))
</run>
Code für eine Register Maschine für $w(n) = \lfloor\sqrt n\rfloor$
Dabei ist der Parameter n im Register R_param abzulegen. Die Benennung der Register erfolgte um die Überlegungen zum Code zu beschleunigen.
Man könnte die Register wieder konventionell zurückbenennen zu R mit Indizierung.
Zu dem wurden Labelnamen vergeben, um die GOTOs bei der Erstellung des Codes nicht immer wieder anzupassen, da neue Zeilen hinzugefügt/entfernt werden können. Man könnte die Labels ebenfalls entfernen und mit den Zeilen Zahlen ersetzen.
<code id="60b0ebe4af5c7">
R_param = 5 # n
R_param_1 = 0
R_param_2 = 0
R_nat = 0 # nat
R_ret = 0 # ret
R_one = 1 # +/-= 1
while:
R_param_1 = R_nat
GOTO quad
if_sqrt:
R_param_2 = R_param
GOTO Ist_A_kleiner_gleich_B_start
A_kleiner_gleich_b_end:
#R_quad_param <= n
IFZERO R_param_1 GOTO else
R_ret = R_nat
GOTO plus
else:
R_param = R_ret
STOP
plus:
R_nat += R_one
GOTO while
quad: #R_param_1
R_second_quad_factor = R_param_1
R_quad_helper = 0
if_quad:
IFZERO R_second_quad_factor GOTO ende_quad
R_quad_helper += R_param_1 (Vorbelegungen der Register mit Null)
R_second_quad_factor -= R_one
GOTO if_quad
ende_quad:
R_param_1 = R_quad_helper
GOTO if_sqrt
Ist_A_kleiner_gleich_B_start:
IFZERO R_param_2 GOTO B_zero
IFZERO R_param_1 GOTO A_kleiner_B
R_param_1 -= R_one
R_param_2 -= R_one
GOTO Ist_A_kleiner_gleich_B_start
B_zero:
IFZERO R_param_1 GOTO A_gleich_B
A_größer_B:
R_param_1 = 0
GOTO A_kleiner_gleich_b_end
A_gleich_B:
R_param_1 = 1
GOTO A_kleiner_gleich_b_end
A_kleiner_B:
R_param_1 = 1
GOTO A_kleiner_gleich_b_end
</code>
Schreibtischtest wobei das Register immer nur bei Neubelegung aufgeschrieben wurde. R_param ist mit dem Startwert 5 belegt und liefert die 2 im gleichen Register nach dem Stop.
[[Bild:Schreibtischtest.png]]