Aufgabe Vorschlag C1 - Aufgabe 6 · Abitur Hessen Informatik LK 2022

Thema: Registermaschine und Berechenbarkeit · Aus der Prüfung LK (2022)

Aufgabenstellung

WHILE-Programme

WHILE-Programme sind ein Berechnungsformalismus, der an traditionelle Programmiersprachen angelehnt ist.

WHILE-Programme bestehen aus:

Variablen (x0,x1,x2,…x0, x1, x2, \dots), Konstanten (0,1,2,…0, 1, 2, \dots), Trennsymbolen (;,:=;,:=),

Operationszeichen (+,−,≠+, -, \neq) und Schlüsselwörtern ( WHILE, DO, END).

WHILE-Programme sind wie folgt definiert:

Jede Wertzuweisung mit den Variablen xixi und xjxj und der Konstanten c∈N0c \in \mathbb{N}_0 der Form xi:=xj+cxi:= xj + c bzw. xi:=xj−cxi:= xj - c ist ein WHILE-Programm.

Falls P1P_1 und P2P_2 WHILE-Programme sind, dann ist auch P1;P2P_1; P_2 ein WHILE-Programm.

Falls PP ein WHILE-Programm ist und xixi eine Variable, dann ist auch WHILE xi≠0xi \neq 0 DO PP END ein WHILE-Programm.

Bei der Wertzuweisung xi:=xj+cxi:= xj + c wird der Variablen xixi die Summe der Werte von xjxj und cc zugewiesen. Bei der Wertzuweisung xi:=xj−cxi:= xj - c ist dies entsprechend die Differenz, wenn der Wert nicht negativ ist. Ist xj−c<0xj - c < 0, wird der Variablen xixi der Wert 00 zugewiesen.

Die Komposition P1;P2P_1; P_2 wird so interpretiert, dass zuerst P1P_1 und anschließend P2P_2 ausgeführt wird.

Innerhalb einer WHILE-Schleife WHILE xi≠0xi \neq 0 DO PP END ist das Programm PP solange wiederholt auszuführen, wie der Wert von xixi ungleich Null ist.

Material 1

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=a∗bf(a, b) = a * b

01 x3:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 WHILE x1 ≠ 0 DO

04 x0:= x0 + 1;

05 x1:= x1 - 1

06 END;

07 x1:= x3 + 0;

08 x2:= x2 - 1

09 END Hinweis: In den Variablen x1x1 und x2x2 stehen anfangs die Werte aa und bb. Die restlichen Variablen sind mit dem Wert 00 vorbelegt.

Material 2

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=abf(a, b) = a^b

01 x0:= x0 + 1;

02 WHILE x2 ≠ 0 DO

03 x0:= x0 * x1;

04 x2:= x2 - 1

05 END Hinweis: Zur Abkürzung wurde hier x0:= x0 * x1; verwendet, da dieser Ausdruck WHILE-berechenbar ist (siehe Material 1). Die Vorbelegung der Variablen x0x0, x1x1 und x2x2 entspricht der in Material 1 beschriebenen.

Material 3

Beispiel eines WHILE-Programms

01 x2:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 x3:= x3 + 1;

04 x2:= x2 - 2

05 END;

06 WHILE x3 ≠ 0 DO

07 x2:= x2 + 2;

08 x3:= x3 - 1

09 END;

10 WHILE x1 ≠ 0 DO

11 x2:= x2 - 1;

12 x1:= x1 - 1

13 END;

14 WHILE x2 ≠ 0 DO

15 x1:= x1 + 1;

16 END Hinweis: x3x3 ist mit dem Wert 00 vorbelegt.

Eine Funktion ff ist genau dann WHILE-berechenbar, wenn sie Registermaschinen-berechenbar ist.

6.1

In Material 2 ist ein WHILE-Programm gegeben, das eine Funktion ff berechnet.

Implementieren Sie ein kommentiertes Registermaschinenprogramm, das ebenfalls ff berechnet.

[5 BE]

6.2

Bestätigen Sie die Aussage, dass jede WHILE-berechenbare Funktion Registermaschinen-berechenbar ist.

[4 BE]

Aufgabenstellung: Aufgabe Vorschlag C1 - Aufgabe 6 · Abitur Hessen Informatik LK 2022

Lösung

Nach den offiziellen Korrekturhinweisen

6.1 In Material 2 ist ein WHILE-Programm gegeben, das eine Funktion ff berechnet. Implementieren Sie ein kommentiertes Registermaschinenprogramm, das ebenfalls ff berechnet.

Lösung: ```pseudocode // R1: Wert a // R2: Wert b LOAD #1 // Speichere Wert 1 in R3 STORE 3 Schleife: LOAD 2 JZERO Ende // Überprüfe Abbruchbedingung LOAD 1 // multipliziere Wert a mit R3 MUL 3 // und speichere Zwischenergebnis STORE 3 // in R3 LOAD 2 SUB #1 STORE 2 // dekrementiere Wert in R2 GOTO Schleife // Sprung zur Marke Schleife Ende: LOAD 3 // Lade Ergebnis in Akkumulator END ```

6.2 Bestätigen Sie die Aussage, dass jede WHILE-berechenbare Funktion Registermaschinen-berechenbar ist.

Lösung: Die Variablen des WHILE-Programms entsprechen den Registern der Registermaschine. In beiden Darstellungsformen werden als Eingabe nur natürliche Zahlen zugelassen und dementsprechend wird in beiden Darstellungsformen bei der Subtraktion im Falle einer negativen Differenz das Ergebnis auf 0 gesetzt. Wertzuweisungen (xi:=xj±cxi := xj \pm c) können in der Registermaschine mittels LOAD jLOAD\ j, ADD #cADD\ \#c bzw. SUB #cSUB\ \#c und STORE iSTORE\ i dargestellt werden, eine Sequenz besteht bei einer Registermaschine aus mehreren Zeilen des Programmcodes und die WHILE-Schleife kann man mit einer Sprungmarke und dem bedingten Sprungbefehl JZEROJZERO bzw. JNZEROJNZERO darstellen. Man kann daher jedes WHILE-Programm schematisch in ein Registermaschinenprogramm übersetzen. Jede WHILE-berechenbare Funktion ist damit Registermaschinen-berechenbar.

Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium

Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.

‹ Aufgabe Vorschlag C1 - Aufgabe 5 · LK 2022 · Aufgabe Vorschlag C1 - Aufgabe 7 · LK 2022 ›

Mehr Aufgaben zu Registermaschine und Berechenbarkeit