\documentclass{bschlangaul-aufgabe} \bLadePakete{mathe,syntax} \begin{document} \bAufgabenMetadaten{ Titel = {WHILE-berechenbar}, Thematik = {2 hoch x, ggT, if}, Referenz = THEO.Berechenbarkeit.WHILE-berechenbar, RelativerPfad = Module/70_THEO/20_Berechenbarkeit/Aufgabe_WHILE-berechenbar.tex, ZitatSchluessel = theo:ab:4, ZitatBeschreibung = {Aufgabe 2}, BearbeitungsStand = unbekannt, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {WHILE-berechenbar}, } Bestimme jeweils, ob die angegebene Funktion WHILE-berechenbar ist: \index{WHILE-berechenbar} \footcite[Aufgabe 2]{theo:ab:4} \begin{enumerate} %% % (a) %% \item $x \rightarrow 2^x$ \begin{bAntwort} \begin{minted}{md} erg = 1; WHILE x != 0 DO erg = erg * 2; x = x - 1; END; return erg; \end{minted} \end{bAntwort} %% % (b) %% \item $\text{ggT}(n, m)$, also der größte gemeinsame Teiler. Sie dürfen die (ganzzahligen) Operationen $+$, $−$, $*$ und $/$ verwenden, wobei das Minus, wie üblich, eingeschränkt ist. \begin{bAntwort} Es bietet sich an, zunächst die modulo Operation \begin{minted}{md} x_i := x_j % x_k \end{minted} durch folgendes WHILE-Programm zu definieren: \begin{minted}{md} x_n+1 := x_j / x_k; x_n+2 := x_n+1 * x_k; x_i := x_j - x_n+2; \end{minted} Wobei $x_{n+1}$ und $x_{n+1}$ im Rest des Programmes nicht verwendet werden sollen. Mit der Modulo Operation kann man nun \zB einfach den euklidischen Algorithmus verwenden (Eingabe seien $x_1$ und $x_2$, Ausgabe ist $x_1$: \begin{minted}{md} WHILE x_2 != 0 DO x_3 := x_1 % x_2; x_1 := x_2 + 0; x_2 := x_3 + 0; END \end{minted} \end{bAntwort} %% % (c) %% \item \begin{minted}{md} if x_i != 0 then P_1 else P_2 fi \end{minted} mit der üblichen Semantik. Als Nachweis kann jeweils ein WHILE-Programm angegeben werden. \begin{bAntwort} Sei $x_n$ die höchste in $P_1$ bzw. $P_2$ vorkommende Variable (o. E. $i \leq n$). \begin{minted}{md} x_n+1 := x_i + 0; x_n+2 := 1; WHILE x_n+1 != 0 DO x_n+1 := 0; x_n+2 := 0; P_1; END WHILE x n+2 6 = 0 DO x_n+2 := 0; P_2; END \end{minted} \end{bAntwort} \end{enumerate} \end{document}