• Keine Ergebnisse gefunden

Programmier-Klausur Programmieren 2 – PZR 1 (5.7.2019)

N/A
N/A
Protected

Academic year: 2022

Aktie "Programmier-Klausur Programmieren 2 – PZR 1 (5.7.2019)"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Programmier-Klausur

Programmieren 2 – PZR 1 (5.7.2019)

Erlaubte Hilfsmittel:

Rechner (auch der eigene)

IDE (IntelliJ, Netbeans, Eclipse)

Dokumentationen Java (auch die Online-Javadoc von Oracle)

Nur bei der Abgabe: Webbrowser um die Lösungen in Moodle einzustellen Ablauf:

Dauer: 90 Minuten

1. Lesen Sie die Aufgabe aufmerksam!

2. Implementieren Sie die Aufgabe!

3. Laden Sie die Lösung auf Moodle hoch.

Fragen? Fragen Sie so, dass alle die Frage und die Antwort hören können.

Aufgabe:

Sie sollen einen deterministischen endlichen Automaten implementieren, der eine reguläre Sprache erkennt. Der Automat soll eine remote shell simulieren.

Bei einer solchen Shell muss man sich zunächst einloggen. Danach kann man Kommandos ausführen. Am Ende loggt man sich aus. Danach sind keine weiteren Eingaben möglich – der Automat befindet sich im Endzustand.

Es möge folgende Kommandos geben: ls und cd <verzeichnisname>

Die Grammatik für die Sprache ist diese:

S „login“ CMD „logout“→ „login“ CMD „logout“

CMD CMD CMD→ „login“ CMD „logout“

CMD „ls“ | „cd“ STRING→ „login“ CMD „logout“

STRING [A..Z,a..z,0..9]*→ „login“ CMD „logout“

Die Terminalsymbole sind demnach „login“, „logout“, „ls“, „cd“ und ein alphanumerischer String, jeweils gefolgt von einem \n (newline). Ja, das login benötigt keine Parameter – die Sprache soll einfach sein.

Gültiger Satz ist z.B.

login ls cd xy logout

login ls cd xy ls ls cd ab logout Ungültige Sätze sind z.B.

login ls cd xy (logout fehlt)

ls cd xy logout (login fehlt)

(2)

login ls cd logout (cd hat keinen Parameter)

Deklarieren Sie ein Interface für diesen Automaten. Der Automat soll von einem InputStream lesen.

Der Automat soll nach dem Lesen der gesamten Eingabe ein Symbol für Ja / Nein zurück geben – es bietet sich ein boolean-Wert an. Er teilt so mit, ob die gelesenen Zeichen einen Satz der Sprache bilden oder nicht. Offensichtlich muss der Automat also über eine

Methode verfügen, die etwa so anfangen könnte:

boolean readInput(InputStream is...

Der Automat muss ansonsten keine Ausgaben erzeugen. Es steht Ihnen aber frei, Ausgaben zu Debugging-Zwecken zu produzieren.

Schreiben Sie Tests. Testen Sie mit gültigen und ungültigen Sätzen der Sprache, ob der Automat korrekt reagiert. Prüfen Sie auch Randfälle (z.B a) lediglich ein Zeichen von logout fehlt – logou. b) Nach dem Ende eines korrekten Satzes folgt ein weiteres

Zeichen ...logout . Dieser Satz ist dann nicht mehr Teil der Sprache.)

Nutzen Sie in den Tests möglichst ByteArrayStreams für die Übergabe der Testsätze.

Implementieren Sie danach den endlichen Automaten. Nutzen Sie sich die Regeln guten Codes für Java-Programme, die Prinzipien dont-repeat-yourself, make-it-explicit und alles, was wir über gutes Programmieren im Kurs diskutierten.

Sollten Sie bei der Aufgabe geschockt sein – es besteht kein Grund. Erinnern Sie sich an das Schiffe-Versenken-Programm. Dort haben Sie tatsächlich zweimal einen endlichen Automaten implementiert – bei der Eingabe und bei der Protokollmaschine. Diese Aufgabe ist tatsächlich einfacher. Viel Erfolg!

Referenzen

ÄHNLICHE DOKUMENTE

(Beschreibe die Ausgangslage, d.h. wie die Welt an sich aufgebaut ist, welche Aufgabe Kara darin in diesem Programm hat und welche Bedingung dazu führt, dass Kara stehen bleibt und

Geben Sie dieser Klasse einen geeigneten Namen und überlegen Sie sich geeignete Methoden.. Beachten Sie die diskutierten Regeln

getSum(int index): Diese Methode soll die Summe aller Werte des Array liefern, auf das mit a2[index] verwiesen wird.. Vervollständigen Sie die Signatur der Methode wenigstens mit

Implementieren Sie einen endlichen deterministischen Automaten. Ein solcher Automat startet in einem Startzustand. Dann kann man ihm Zeichen übergeben. Wir nehmen einen String

Er soll über einen Speicher verfügen, in dem das Ergebnis der letzten Operation gespeichert wird.. Dieser Speicher wird mit 0

• Man kann eine Zahl zum aktuellen Speicher addieren (unäre Operation).. • Der Speicher kann in einem File persistent gemacht

Diese Klassen soll außerdem in der Lage sein, Werte aus einem File zu lesen und und anhand der Werte Asset-Objekte zu erzeugen.. Überlegen Sie, ob sich auch bei der

Die Methode getGood(int index) soll eine Referenz auf das gespeicherte Objekt zurück geben.. Beachten Sie den Umgang