Aufgabenblatt 10 - www2.inf.h

Transcrição

Aufgabenblatt 10 - www2.inf.h
Programmiersprache Java
Objektorientierte Programmierung II
Sommersemester 2009
21. Juni 2009
Fachbereich Informatik
Prof. Dr. Peter Becker
Aufgabenblatt 10
Aufgabe 1 (Stapelmaschine: Definition und Auslösen von Exceptions)
Entwerfen und Implementieren Sie eine Java-Klasse für eine Stapelmaschine. Ihre Stapelmaschine soll
zur Auswertung von arithmetische Ausdrücken, die in umgekehrter polnischer Notation (UPN, PostfixNotation) angegeben sind, eingesetzt werden.
Bei der UPN stehen die Operatoren hinter den Operanden anstatt dazwischen. So entspricht der UPNAusdruck 5 3 + dem üblichen Ausdruck 5+3 und 5 3 + 2 * entspricht (5+3)*2.
Ihre Klasse für die Stapelmaschine sollte mindestens die folgenden Methoden aufweisen:
• push(zahl): Ablegen der angegebenen Zahl auf dem Stapel;
• pop(operator): Auswertung des angegebenen Operators mit den beiden obersten Zahlen des
Stapels;
Die beiden obersten Zahlen des Stapels werden entfernt und das Ergebnis der Operation wird auf
dem Stapel abgelegt.
Vorbedingung: Auf dem Stapel befinden sich mindestens zwei Zahlen.
• getResult():
Vorbedingung: Der Stapel enthält genau eine Zahl.
Lösen Sie geprüfte Excpetions aus, wenn die Methoden pop oder getResult aufgerufen werden, ohne
daß die Vorbedingung erfüllt ist. Deklarieren Sie hierzu eine eigene Exception-Klasse.
Bemerkung: Die umgekehrte polnische Notation hat den Vorteil, daß keine Klammern benötigt werden. Eingeführt wurde diese Notation von der Firma Hewlett-Packard als damals einzige Möglichkeit,
komplexe Formeln einfach in Taschenrechner einzugeben. In einigen Modellen lebt diese Notation bis
heute. Man findet sie darüberhinaus in vielen anderen Bereichen der Informatik, beispielsweise bei der
Seitenbeschreibungssprache PostScript.
Aufgabe 2 (Programm zur Stapelmaschine: Behandlung von Exceptions)
Schreiben Sie ein Java-Programm zur Auswertung von UPN-Ausdrücken, das auf Ihrer Stapelmaschine
von Aufgabe 1 basiert.
Beispiel für einen Programmaufruf:
> java Upn 5 3 +
8
Führen Sie in Ihrem Programm eine Behandlung der Exception NumberFormatException durch,
die von den Methoden Integer.parseInt bzw. Double.parseDouble ausgelöst werden kann.
Führen Sie weiterhin eine Behandlung der Exceptions durch, die von der Stapelmaschine ausgelöst werden können.
Hinweis: Achten Sie beim Testen Ihres Programms darauf, daß das Zeichen * in der Unix-Shell ein
Metazeichen ist. Es steht für die Dateinamen des aktuellen Verzeichnisses. Ein Aufruf der Art
> java Upn 5 3 *
wird daher mit Sicherheit zu einem Fehler führen. Verwenden Sie stattdessen
> java Upn 5 3 ’*’
um die Interpretation von * als Metazeichen zu unterdrücken.
Bearbeitung der Aufgaben vom 22. bis 26. Juni 2009 in den Übungen.