\documentclass{bschlangaul-aufgabe} \bLadePakete{syntax} \begin{document} \bAufgabenMetadaten{ Titel = {GOTO-Programme}, Thematik = {GOTO-Programme}, Referenz = THEO.Berechenbarkeit.GOTO, RelativerPfad = Module/70_THEO/20_Berechenbarkeit/Aufgabe_GOTO.tex, ZitatSchluessel = theo:ab:4, ZitatBeschreibung = {Aufgabe 4}, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {GOTO-berechenbar}, } \begin{enumerate} %% % (a) %% \item Terminieren GOTO-Programme immer? Begründe Deine Antwort. \index{GOTO-berechenbar} \footcite[Aufgabe 4]{theo:ab:4} \begin{bAntwort} GOTO-Programme terminieren nicht immer. \begin{description} \item[Variante 1:] Die Menge der GOTO-Programme ist identisch mit der Menge der WHILE-Programme. Da WHILE-Programme partielle Funktionen beschreiben und diese nicht für alle Eingaben terminieren, terminieren GOTO-Programme ebenfalls nicht für alle Eingaben. \item[Variante 2:] Die charakteristische Funktion einer semi-entscheidbaren Sprache ist Turing- bzw. GOTO-berechenbar, d.\.h. zu jeder semi-entscheidbaren Sprache gibt es eine Turing-Maschine. GOTO-Programme können Turing-Maschinen simulieren. Da hier von einer nur semi-entscheidbaren Sprache ausgegangen wird, terminiert das GOTO-Programm nicht, falls die Eingabe x kein Element der Sprache ist. \end{description} \end{bAntwort} %% % (b) %% \item Gebe ein GOTO-Programm an, dass die Summe dreier Zahlen berechnen. \begin{bAntwort} \begin{minted}{md} Eingabe x_1, x_2, x_3; x_0 := x_1; IF x_2 = 0 GOTO Z6; x_0 := x_0 + 1; x_2 := x_2 - 1; GOTO Z2; IF x_3 = 0 GOTO Z10; x_0 := x_0 + 1; x_3 := x_3 - 1; GOTO Z6; END; Ausgabe: x_0 \end{minted} \end{bAntwort} %% % (c) %% \item Gegeben ist das GOTO-Programm: \begin{minted}{md} x_4 := x_1; IF x_4 = 0 GOTO Z10; x_5 := x_2; IF x_5 = 0 GOTO Z8; x_3 := x_3 + 1; x_5 := x_5 - 1; GOTO Z4; x_4 := x_4 - 1; GOTO Z2; x_5 := x_5 - 1 \end{minted} \begin{enumerate} %% % 1. %% \item Was berechnet das Programm? \begin{bAntwort} $f(n, m) = n * m$ \end{bAntwort} %% % 2. %% \item Übertrage das Programm in ein WHILE-Programm. \begin{bAntwort} \begin{minted}{md} Eingabe x_1, x_2 : x_4 := x_1; WHILE x_4 <> 0 DO x_5 := x_2; WHILE x_5 <> 0 DO x_3 := x_3 + 1; x_5 := x_5 - 1 END; x_4 := x_4 - 1 END Ausgabe x_0 \end{minted} \begin{minted}{md} Eingabe : x_1, x_2 x_0 := mult ( x_1, x_2 ); Ausgabe : x_0 \end{minted} \end{bAntwort} \end{enumerate} \end{enumerate} \end{document}