Beispiel Angabe

Kürzel:ExtendCalc Runde:7
Name:Erweiterbarer UPN-Rechner Evaluieren als:Java
Kette:Upn-Rechner Eingabe:Double,String
Kategorie:Rechner Ausgabe:Double

Mitgelieferte Datei(en): InvalidParameterException.java, UPNOperation.java, operations.jar, UPNRechner.java
Abzugebende Datei(en): InvalidOperationException.java, Rechner.java, Main.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:

Implementieren eines erweiterbaren UPN Rechners.

Allgemeine Hinweise:

Spezifikationsspezifische Hinweise:

Um Ihr Programm auszuführen, können Sie die mitgelieferten Operationen-Klassen in operations.jar verwenden. Entpacken Sie dazu alle enthaltenen *.class-Dateien in Ihr Arbeitsverzeichnis, oder führen Sie das Programm mittels java -classpath $CLASSPATH:operations.jar Main bzw. unter Windows mittels java -classpath %CLASSPATH%;operations.jar Main aus.

Aufgabenstellung:

Schreiben Sie die Klasse Rechner, die das Interface UPNRechner implementiert. Weiters soll eine ausführbare Klasse Main, die die Klasse Rechner benutzt, programmiert werden.

Die Klasse Main soll folgendes tun:

  1. Ein Objekt der Klasse Rechner instanzieren.
  2. Das Rechner-Objekt mit allen vordefinierten Operationen "befüllen". Verwenden Sie hier die Methode addOperation des Rechners. Übergeben werden dieser Methode Objekte der vordefinierten Klassen (siehe Tabelle unten), die UPNOperation implementieren. Die Klassen, die Sie selbst in Runde 4 implementiert haben, werden im Archiv operations.jar mitgeliefert, und sind daher nicht zu programmieren.

  3. Danach soll die Klasse Main den mit Operationen befüllten Rechner für Berechnungen benutzen. Dazu sollen Daten (Operanden und Operatoren in UPN-Notation) wie üblich eingelesen werden, eine entsprechende Fehlerbehandlung durchgeführt werden. Dann werden die Operanden und Operatoren an den Rechner weitergegeben (wie beim Bedienen eines UPN-Taschenrechners). Dazu verwenden Sie die Methoden des Rechners:
  4. Dann soll vor Beenden des Programms die verlangte Ausgabe (Ergebnis) ausgegeben werden. Dazu muss eine entsprechende Methode des Rechners programmiert werden. Beachten Sie wie immer die Fehlerfälle bei der Eingabe.

Operationen, die Ihr Rechner beherrschen soll (die Klassen werden bereits mitgeliefert):
SymbolOperationKlassenname
+AdditionAddOperation
-SubtraktionSubOperation
*MultiplikationMulOperation
/DivisionDivOperation
^Potenz (a^b)PowOperation
invInvers (1/x)InvOperation
sinSinusSinOperation
cosCosinusCosOperation

Die Rechner-Klasse selbst soll die übergebenen Operationen-Objekte verwalten (z.B. Array o. Collection o. HashMap). Weiters müssen die eingegebenen Operanden verwaltet werden (Stack). Bei Eingabe einer Operation wird diese unter Verwendung des entsprechenden Objektes ausgeführt.

Eingabedaten:

Die Eingabe besteht aus Zahlen und Operationen. Lesen Sie eine Eingabe nach der anderen ein. Wenn eine Zahl gelesen wurde, wird diese als Double auf den Stack gelegt. Wenn die Eingabe eine Operation ist, soll diese Operation sofort ausgeführt werden.

Ausgabedaten:

Am Ende der Eingabe geben Sie den Inhalt des Stacks aus. Die Werte sollen als Double 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.

Fehlerbehandlung:

Enthält der Eingabedatensatz einen ungültigen Datentyp oder einen falschen Operator, so "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgegeben werden. Falls während der Abarbeitung ein Fehler auftritt (Division durch 0, Stack leer, ...) geben Sie "?", gefolgt von einem Zeilenvorschub aus.

Testen:


In
10 0.0 /
Out
?
Beschreibung Division durch 0


In
1.0 4.2 plus 3
Out
FALSCHE EINGABE
Beschreibung plus ist kein Operator


In
1 2 3 -4.4 5 6 - + * /
Out
1.0
-0.12345679012345677
Beschreibung


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 -cp ".;operations.jar" Main < ExtendCalc.i1 > ExtendCalc.out1
(Unter Linux und Mac OS müssen Sie alle Strichpunkte im Classpath durch Doppelpunkte ersetzen)

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