alpha-notation < Technische Inform. < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Hallo Zusammen,
Ich suche zur Zeit Übungsmaterial am besten samt Lösungen für Aufgaben folgender Art:
Aufgabe |
Eine Funktion [mm]\operatorname{comp}:\mathbb{Z}\times\mathbb{Z}\to\{-1,0,1\}[/mm] sei definiert als
[mm]\operatorname{comp}(a,b):=\begin{cases}
-1,&\texttt{falls }a < b\\
0,&\texttt{falls }a = b\\
1,&\texttt{falls }a > b
\end{cases}.[/mm]
Schreiben Sie ein Programm in [mm]\alpha\texttt{-Notation}[/mm], das diese Funktion implementiert. Gehen Sie davon aus, daß Akkumulator [mm]\alpha[/mm] und die Speicherzellen [mm]\rho(i),\ i\in\mathbb{N}[/mm], eine Zahl aus [mm]\mathbb{Z}[/mm] aufnehmen können und daß es beliebig viele Speicherzellen gibt.
Ihnen stehen ausschließlich folgende Befehle zur Verfügung ([mm]k\in\mathbb{Z},i\in\mathbb{N}[/mm] und [mm]\ell[/mm] ein Sprunglabel):
[mm]\begin{array}{|l|l|l|l|l|}\hline
{}&\alpha:=\alpha + 1&{}&{}&{}\\
\alpha := \rho(i)&\alpha:=\alpha - 1&\textbf{if }\alpha = 0\textbf{ then goto }\ell&\alpha := \rho(\rho(i))&\alpha := k\\
\rho(i) := \alpha&\rho(i) := \rho(i) + 1&\textbf{goto }\ell&\rho(\rho(i)):=\alpha&\alpha:=\operatorname{sgn}(\alpha)\\
{}&\rho(i) := \rho(i) - 1&{}&{}&{}\\\hline
\end{array}[/mm]
Der Befehl [mm]\alpha:= \operatorname{sgn}(\alpha)[/mm] lädt das Vorzeichen des im Akkumulator stehenden Wertes in den Akkumulator ([mm]\operatorname{sgn}(\alpha)=1[/mm], falls [mm]\alpha > 0,\ \operatorname{sgn}(\alpha)=0[/mm], falls [mm]\alpha=0[/mm] und [mm]\operatorname{sgn}(\alpha)=-1[/mm], falls [mm]\alpha < 0[/mm]). Die Eingaben [mm]a\![/mm] und [mm]b\![/mm] seien in [mm]\rho(0)[/mm] und [mm]\rho(1)[/mm] gegeben, die Ausgabe [mm]\operatorname{comp}(a,b)[/mm] soll in [mm]\rho(2)[/mm] abgelegt werden.
Hinweise:
[mm]\bullet[/mm] Sie können alle Speicherzellen, die Sie verwenden, statt durch ihren Index [mm]i\![/mm] auch mit Stringliteralen bezeichnen. Vorgegebene Bezeichner sind [mm]\rho\left(''a''\right)[/mm] für [mm]\rho(0),\ \rho(''b'')[/mm] für [mm]\rho(1)[/mm] und [mm]\rho(''\texttt{result}'')[/mm] für [mm]\rho(2)[/mm].
[mm]\bullet[/mm] Wenn die Berechnung beendet ist, soll das Programm eine Endlosschleife ausführen.
|
Hat jemand so etwas während seines Informatik-Studiums schon mal machen müssen und weiß deshalb, wo ich Informationen dazu finden kann?
Vielen Dank!
Viele Grüße
Karl
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:12 Do 30.09.2004 | Autor: | Karl_Pech |
Hallo Zusammen,
Inzwischen habe ich selber eine Lösung gefunden und dachte, daß es hier vielleicht jemanden interessieren würde.
Idee:
Ist die Zahl $b = [mm] 0\!$, [/mm] so müssen wir mit sgn nur noch das Vorzeichen von [mm] $a\!$ [/mm] bestimmen und wären dann schon fertig. (Ich denke es ist klar warum.)
Ist dem nicht so, so bestimmen wir das Vorzeichen von [mm] $b\!$ [/mm] und je nachdem, ob [mm] $b\!$ [/mm] negativ oder positiv ist, erhöhen wir [mm] $b\!$ [/mm] um 1 oder erniedrigen [mm] $b\!$ [/mm] um 1, wobei wir dasselbe auch mit [mm] $a\!$ [/mm] tun müssen, damit sich das Verhältnis (>, <, =) zwischen [mm] $a\!$ [/mm] und [mm] $b\!$ [/mm] nicht verändert. Dadurch setzen wir $b = [mm] 0\!$ [/mm] und haben den oberen Fall.
Implementierung:
[mm] $\alpha [/mm] := [mm] \rho(''b'')$
[/mm]
if [mm] $\alpha [/mm] = 0$ then goto B_NULL
[mm] $\alpha [/mm] := [mm] sgn(\alpha)$ [/mm] ; Ist [mm] $\alpha$ [/mm] negativ, so ist das Vorzeichen -1,
[mm] $\alpha [/mm] := [mm] \alpha [/mm] + 1$ ; und -1 + 1 = 0
if [mm] $\alpha [/mm] = 0$ then goto B_NEG
B_POS:
[mm] $\rho(''a'') [/mm] := [mm] \rho(''a'') [/mm] - 1$
[mm] $\rho(''b'') [/mm] := [mm] \rho(''b'') [/mm] - 1$
[mm] $\alpha [/mm] := [mm] \rho(''b'')$
[/mm]
if [mm] $\alpha [/mm] = 0$ then goto B_NULL
goto B_POS
B_NEG: ; a und b um 1 erhöhen bis b = 0. Dann Standard-Fall.
[mm] $\rho(''a'') [/mm] := [mm] \rho(''a'') [/mm] + 1$
[mm] $\rho(''b'') [/mm] := [mm] \rho(''b'') [/mm] + 1$
[mm] $\alpha [/mm] := [mm] \rho(''b'')$
[/mm]
if [mm] $\alpha [/mm] = 0$ then goto B_NULL
goto B_NEG
B_NULL:
[mm] $\alpha [/mm] := [mm] \rho(''a'')$
[/mm]
[mm] $\alpha [/mm] := [mm] sgn(\alpha)$
[/mm]
[mm] $\rho(''result'') [/mm] := [mm] \alpha$
[/mm]
END: goto END
Viele Grüße
Karl
|
|
|
|