Beispiel Angabe

Kürzel:simpleUPN2 Runde:5
Name:Simpler UPN Rechner 2 Evaluieren als:Java
Kette:Upn-Rechner Eingabe:Integer
Kategorie:Rechner Ausgabe:Integer

Mitgelieferte Datei(en):
Abzugebende Datei(en): Upn.java, Main.java, UpnException.java
Optional abzugebende Datei(en):
Ausführbar: Main

Die Klasse Main ist zu erstellen und soll eine ausführbare Klasse sein und muss daher die public static void main(String args[]) Methode beinhalten.

Ihr Programm wird automatisch auf Korrektheit überprüft. Die Überprüfung erfolgt durch die Ausführung der als ausführbar bezeichneten Klasse (Main).

Kurzbeschreibung:

UPN Rechner mit Grundrechenarten.

Allgemeine Hinweise:

Spezifikationsspezifische Hinweise:

Themen: Benutzung von Collection-Klassen (Listentyp Stack). Collection-Klassen werden in Lektion 7+ behandelt. Exceptions (werden in Lektion 7+ behandelt).

In diesem Beispiel werden Sie einen Stack brauchen. Ein Stack ist ein Listentyp, bei dem das zuletzt eingefügte Element, das Erste ist, das gelesen wird. Java stellt dafür die Klasse java.util.Stack zur Verfügung.

Für weitere Informationen lesen Sie bitte: Wikipedia: Stacks und Wikipedia: UPN

Aufgabenstellung:

Lesen Sie die Eingabefolge ein und werten Sie die Befehle aus. Ein UPN Rechner verwaltet einen Stack, auf den die eingegebenen Operanden (Zahlen) gelegt werden. Sobald eine Operator eingegeben wird, werden zwei Elemente vom Stack genommen (Operanden), das Ergebnis berechnet und dieses Ergebnis wieder auf den Stack gelegt. Damit steht das Ergebnis als Operand für weiter Operationen zur Verfügung.

Am Ende der Eingabe geben Sie den Inhalt des Stacks aus. Die Werte sollen als Integer ausgegeben werden, jeweils getrennt durch ein Leerzeichen. Befinden sich noch mehrere Elemente am Stack, so sollen diese in korrekter Reihenfolge (das unterste Element des Stacks als Erstes) ausgegeben werden.

Wir empfehlen folgenden Entwurf: Eine Klasse Main, die Daten einliest, ausgibt und die Fehlerbehandlung durchführt und eine Klasse Upn, die die Funktionalität des Rechners implementiert.
Die Fehlerbehandlung sollte mit Exceptions gelöst werden. Wenn in Upn ein Fehler bei der Verarbeitung der Befehle auftritt, soll eine UpnException geworfen und von Main gefangen werden.

Eingabedaten:

Die Eingabe besteht aus Integer-Zahlen und Operationen. Lesen Sie eine Eingabe nach der anderen ein. Wenn eine Zahl gelesen wurde, wird diese auf den Stack gelegt. Wenn die Eingabe eine Operation ist, werden die Operanden vom Stack gelesen und das Ergebnis der Operation auf den Stack gelegt. Danach fahren Sie mit der Verarbeitung fort. Achten Sie darauf, dass bei mehrstelligen Operationen die Operanden in der falschen Reihenfolge auf dem Stack liegen (z.B.: 5 6 - bedeutet 5 - 6). Der UPN Rechner soll die Operationen +,-,* und / beherrschen. Zusätzlich soll noch eine Operation 's' implementiert werden, die die zwei obersten Elemente im Stack tauscht (swap). Implementieren Sie die dazu benötigte Methode.

Ausgabedaten:

Bei korrekter Eingabe geben Sie den resultierenden Stack aus. Die erste Zahl auf dem Stack soll dabei als letztes ausgegeben werden. Die Zahlen werden als int ausgegeben!

Fehlerbehandlung:

Enthält der Eingabedatensatz einen ungültigen Datentyp oder einen falschen Operator, so soll "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgegeben werden. Falls während der Abarbeitung ein Fehler auftritt (Undefiniertes Ergebnis, zuwenig Operanden, ...) geben Sie "?", gefolgt von einem Zeilenvorschub aus.

Testen:


In
1 3 4 4 5 6 - + *  s /
Out
1
4
Beschreibung (5-6+4)*4 / 3 = 12/3 = 4 1 4 bleibt auf dem Stack


In
10 0 /
Out
?
Beschreibung Division durch 0 undefiniert


Bemerkung: Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:
java Main < simpleUPN2.i1 > simpleUPN2.out1

Das erzeugte File simpleUPN2.out1 können Sie dann mit dem mitgelieferten Outputfile simpleUPN2.o1 vergleichen.