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.