Aufgabe Vorschlag C2 - Aufgabe 2 · Abitur Hessen Informatik LK 2022
Thema: Registermaschine und Berechenbarkeit · Aus der Prüfung LK (2022)
Aufgabenstellung
Auszeichnungssprache YAML
YAML ist eine Auszeichnungssprache zur Darstellung strukturierter Daten in einfach lesbarer Textform. Die Sprache zeichnet sich dadurch aus, dass sie jede Datenstruktur allein durch Verwendung von Konstanten, Listen und assoziativen Listen darstellen kann. Elemente von Listen und assoziativen Listen werden durch Zeilenumbrüche (<CR> <LF>) getrennt dargestellt. Dabei besitzen diese Elemente in aufeinanderfolgenden Zeilen die gleiche Einrückung. Elemente einer Liste beginnen mit dem Zeichen „-“ und Elemente einer assoziativen Liste bestehen aus einem Schlüssel:Wert-Paar. Listen und assoziative Listen enthalten jeweils nur gleichartige Listenelemente (Material 1).
Alle Elemente einer Liste und alle Werte einer assoziativen Liste können entweder Konstanten oder auch wieder Listen oder assoziative Listen sein. In den beiden letztgenannten Fällen spricht man dann von geschachtelten Listen. Die Schachtelung wird durch einen Zeilenumbruch und eine Einrückung mit Leerzeichen (<SP>) dargestellt (Material 1).
Material 1
Beispiel von Listen und assoziativen Listen in YAML
Liste
assoziative Liste
- Apfel
- Banane
- Karotte
Name: Frank
Alter: 19
Sport: Fußball
geschachtelte Liste
geschachtelte assoziative Liste
assoziative Liste mit einer Liste als Wert
- HTML
-
- Überschrift H1
- Absatz p
- CSS
- JavaScript
Datum: 2021 05 17
Name: Lisa
Adresse:
Straße: Allee 17
PLZ: 64646
Ort: Heppenheim
Datum: 2021 05 17
Name: Frank
Interessen:
- Sport
- Politik
Alter: 19
Material 2
YAML-Texte
a
b
Datum: 2021 04 05
RechnungNr: 7266
Produkt:
-
Beschreibung: Basketball
Preis: 86
Menge: 4
-
Beschreibung: Hantel
Preis: 48
Menge: 2
-
Name: Martin Schmidt
Anstellung: Entwickler
Fachkompetenz:
- Python
- Java
- Pascal
-
Name: Tabitha Bitumen
Anstellung: Entwicklerin
Fachkompetenzen:
- Lisp
- Fortran
- Erlang
Material 3
Text in einer Konfigurationsdatei
packages:
yum:
mod_ssl: false
files:
servercrt:
mod: 000400
owner: admin
- group root
script:
- cd tools
- tox ecover
Material 4
Unvollständige Grammatik G zur Sprache YAML
$\begin{aligned}
P = \{ & \text{YAML} & \to & \ \text{Liste} \mid \text{AssoziativeListe}, \\
& \text{Liste} & \to & \ \text{Element } <\text{CR}> <\text{LF}> \mid \text{Element } <\text{CR}> <\text{LF}> \text{Liste}, \\
& \text{AssoziativeListe} & \to & \ \text{Schlüssel}: <\text{SP}> \text{Wert } <\text{CR}> <\text{LF}> \mid \\
& & & \ \text{Schlüssel}: <\text{SP}> \text{Wert } <\text{CR}> <\text{LF}> \text{AssoziativeListe}, \\
& \text{Element} & \to & \ \text{- } <\text{SP}> \text{Wert}, \\
& \text{Schlüssel} & \to & \ \text{Zeichenkette}, \\
& \text{Wert} & \to & \ \text{Konstante} \mid <\text{CR}> <\text{LF}> <\text{INDENT}> \text{Liste } <\text{DEDENT}> \mid \\
& & & \ <\text{CR}> <\text{LF}> <\text{INDENT}> \text{AssoziativeListe } <\text{DEDENT}>, \\
& \text{Konstante} & \to & \ \text{Zeichenketten} \mid \text{Zahl} \mid \text{true} \mid \text{false} \mid \text{null}, \\
& \text{Zeichenketten} & \to & \ \text{Zeichenkette} \mid \text{Zeichenkette } <\text{SP}> \text{Zeichenketten}, \\
& \dots \\
\} & & &
\end{aligned}$
Hinweis: Die Terminale <INDENT> und <DEDENT> stehen für eine Ein- bzw. Ausrückung.
Aufgabe 2
Eine Registermaschine soll die maximale Einrücktiefe in einem YAML-Text ermitteln. Die einzelnen Zeichen des Textes werden mit dem ASCII-Zeichensatz kodiert (Zahlenwerte von 0 bis 127) und in aufeinanderfolgenden Registern ab Register R10 gespeichert. Das Leerzeichen <SP> wird in diesem Zeichensatz mit der Dezimalzahl 32 kodiert, das Steuerzeichen <LF> (LineFeed) mit der Dezimalzahl 10. Das Ende des YAML-Textes wird durch den Wert 128 markiert.
2.1
Implementieren Sie ein kommentiertes Registermaschinenprogramm, das die maximale Einrücktiefe eines YAML-Textes bestimmt und in den Akkumulator schreibt. [10 BE]
2.2
Bestimmen Sie die asymptotische Laufzeit Ihres Registermaschinenprogramms in Abhängigkeit von der Länge der Eingabe. [4 BE]

Lösung
Nach den offiziellen Korrekturhinweisen
2.1 Implementieren Sie ein kommentiertes Registermaschinenprogramm, das die maximale Einrücktiefe eines YAML-Textes bestimmt und in den Akkumulator schreibt.
Lösung: ```pseudocode // R1: Index des aktuellen Zeichens // R2: Aktuelle Anzahl aufeinander folgender Leerzeichen // R3: Aktuelle Maximalzahl aufeinander folgender Leerzeichen Init: LOAD #10 STORE 1 // Index initialisieren Start: LOAD #128 SUB *1 JZERO Ende // Ende der Eingabe LOAD *1 SUB #10 JNZERO Nächster // kein Zeilenumbruch LOAD #10 SUB *1 JZERO Zähle32 // Zeilenumbruch Nächster: LOAD 1 // Index inkrementieren ADD #1 // und speichern STORE 1 GOTO Start Zähle32: LOAD 1 // Index inkrementieren ADD #1 // und speichern STORE 1 LOAD *1 // Leerzeichen? SUB #32 JNZERO Max // kein Leerzeichen LOAD #32 SUB *1 JNZERO Max // kein Leerzeichen Merke32: LOAD 2 // merke aufeinanderfolgende ADD #1 // Leerzeichen STORE 2 GOTO Zähle32 Max: LOAD 3 // ist maximaler Wert größer als SUB 2 // aktueller Wert JNZERO Löschen LOAD 2 // überschreibe maximalen Wert STORE 3 Löschen: LOAD #0 // setze aktuellen Wert auf 0 STORE 2 GOTO Start Ende: LOAD 3 // lade maximalen Wert END // in den Akkumulator ```
2.2 Bestimmen Sie die asymptotische Laufzeit Ihres Registermaschinenprogramms in Abhängigkeit von der Länge der Eingabe.
Lösung: Die asymptotische Laufzeit beträgt (lineare Laufzeit in Abhängigkeit von der Länge der Eingabe).
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 7 · LK 2022 · Aufgabe Vorschlag C1 - Aufgabe 3 · LK 2021 ›