Beispiel Angabe

Kürzel:Operations Runde:6
Name:Rechner Operationen implementieren Evaluieren als:Java
Kette:Upn-Rechner Eingabe:Double,String
Kategorie:Rechner Ausgabe:Double

Mitgelieferte Datei(en): InvalidParameterException.java, javadoc-UPNOperation.html, UPNOperation.java, main.jar
Abzugebende Datei(en): DivOperation.java, FacOperation.java, InvOperation.java, MulOperation.java, AddOperation.java, CosOperation.java, PowOperation.java, SinOperation.java, SubOperation.java
Optional abzugebende Datei(en):
Ausführbar: Main

Die ausführbare Klasse Main wird bereits vollständig in einem Jar Archiv mitgeliefert und soll nicht abgegeben werden. Vergessen Sie nicht, das Jar Archiv bei der Ausführung in den Classpath hinzuzufügen (siehe unten)

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

Kurzbeschreibung:

Implementierung des UPNOperation Interfaces, um die Funktionalität des UPN Rechners zu erweitern.

Allgemeine Hinweise:

Spezifikationsspezifische Hinweise:

Um die Klassen zu testen, können Sie die Main Klasse im mitgelieferten main.jar ausführen. Entpacken Sie dazu alle enthaltenen *.class-Dateien in Ihr Arbeitsverzeichnis, oder führen Sie das Programm mittels java -classpath $CLASSPATH:main.jar Main bzw. unter Windows mittels java -classpath %CLASSPATH%;main.jar Main aus. Das Interface UPNOperation und die benötigten Exceptions sind im main.jar enthalten. Die Quellcode-Dateien InvalidParameterException.java und UPNOperation.java werden in der Spezifikation mitgeliefert, sollen aber nicht geändert und nicht abgegeben werden.

Aufgabenstellung:

Schreiben Sie für jede der aufgelisteten Operationen eine eigene Klasse, die jeweils das Interface UPNOperation implementiert.

SymbolOperationKlassenname
+AdditionAddOperation
-SubtraktionSubOperation
*MultiplikationMulOperation
/DivisionDivOperation
^Potenz (a^b)PowOperation
invInvers (1/x)InvOperation
sinSinusSinOperation
cosCosinusCosOperation
!Fakultät (Faktorielle)FacOperation

Das Interface hat diese Form:

public interface UPNOperation
{
    public static final double EPSILON = 0.000000001;
    public void execute (Stack<Double> op) throws InvalidParameterException;
    public String getOperationSymbol ();
}

Implementieren Sie die angegebenen Operationen. Eine genauere Beschreibung des Interface UPNOperation und der zu implementierenden Funktionen befindet sich in der mitgelieferten Datei: javadoc-UPNOperation.html

Zur allgemeinen Funktionsweise: Operanden vom Typ Double werden vom Stack genommen, das Ergebnis berechnet und dieses wiederum auf den Stack gelegt. Achten Sie darauf, dass Sie die Zahlen in der korrekten Reihenfolge (den letzten Parameter als erstes) vom Stack holen - die Eingabe "4 2 /" bedeutet "4/2", "2 3 ^" soll "2^3" ergeben.
Zahlen deren Absolutwert kleiner EPSILON ist, sollen Sie als 0.0 behandeln. Das gilt sowohl für Zahlen, die Sie vom Stack nehmen, als auch für Zahlen, die Sie nach erfolgter Operation wieder auf den Stack legen.

Eingabedaten:

Zahlen vom Typ Double und Operationen. Das mitgelieferte Programm kümmert sich um die Eingabe und die Verarbeitung der Eingabedaten und stellt Ihnen einen Stack zur Verfügung, der diese Zahlen in der richtigen Reihenfolge als Double enthält.

Ausgabedaten:

Das mitgelieferte Programm kümmert sich um die Ausgabe, indem es die Zahlen des von Ihnen verwendeten Stacks ausgibt. Das mitgelieferte Programm benutzt das Interface UPNOperation um die Operationen des Rechners aufzurufen.

Fehlerbehandlung:

Falls während der Abarbeitung ein Fehler auftritt (Division durch 0, Fakultät eines nicht ganzzahligen Wertes, Stack leer, ...) wird eine Fehlermeldung ausgegeben. Werfen Sie dazu eine InvalidParameterException, die vom mitgelieferten Programm abgefangen wird. Auf diese Weise wird die Fehlerbehandlung automatisch vom mitgelieferten Hauptprogramm ausgeführt.

Die Ausgabe "FEHLER" erfolgt, wenn bei der Eingabe keine gültige Zahl oder Operation eingelesen wird.
Die Ausgabe "?" erfolgt wenn eine InvalidParameterException geworfen wird.

Testen:


In
10 +
Out
?
Beschreibung Fehlender Operator


In
1.2 3 5 * + 1.2 cos 0.6 sin + inv
Out
16.2 
1.0787483863902498
Beschreibung 2 Rechnungen


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

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