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:
-
Die Groß- und Kleinschreibung ist relevant! Beachten Sie ganz genau die Angaben zu den
Funktions- und Dateinamen.
-
Die abzugebende Datei(en) müssen für die Abgabe ausnahmslos archiviert werden.
Das Format der Archiv muss Zip sein, Programme wie WinZip, WinRar, jar (kommt mit der Java JDK Distribution)
können Sie für die Archivierung verwenden. Dateiendung des Archivs muss .zip oder .jar sein.
jar syntax:
-
Archivierung: jar Mcvf archiv_name.jar * (oder einzelne Dateien statt *)
-
Inhalte anzeigen: jar tf archiv_name.jar
-
Extrahieren: jar xvf archiv_name.jar
-
Ihr Programm darf nur genau jene Ausgabedaten liefern, die in der Spezifikation
verlangt werden. Die Ausgaben Ihres Programms werden automatisch mit
Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
-
Testen Sie Ihr Programm vor der Abgabe mit den mitgelieferten Eingabedateien.
Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihres Programms mit der
ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihr
Programm auch mit anderen Eingabedaten.
-
Ihr Programm muss immer den Prozess Return Code 0 liefern. Verwenden Sie daher
keine
System.exit(1)
-artige Unterbrechungen in Ihrem Programm.
Am besten verzichten Sie völlig auf System.exit() Aufrufe da dadurch der
laufende JVM gewaltsam terminiert wird.
-
Verwenden Sie die Klasse
Scanner
zum Einlesen von Daten.
Für die Ausgabe können Sie die Methoden System.out.print
und
System.out.println
benutzen. Zum Erzeugen formatierter Ausgaben können
Sie auch System.out.printf
benutzen (wird im Allgemeinen aber nicht benötigt).
Beachten Sie, dass wir bei der Beurteilung einen US-amerikanischen Region- und
Spracheinstellungssatz (locale) f¨r die Beurteilung benutzen.
Das bedeutet, dass wir für die Darstellung von double
-Werten auch bei
der Ein-/Ausgabe immer den Dezimalpunkt (und nicht Beistrich) benutzen
(z.B. 3.14159 und nicht 3,14159). Falls Sie auf Ihrem Rechner eine andere Einstellung haben,
können Sie zum Testen zuhause auch die Darstellung mit Beistrich benutzen (ist aber nicht
konsistent mit den mitgelieferten Ein-/Ausgabe-Paaren) oder beim Aufruf von Java auch folgenden Befehl
benutzen:
java -Duser.language=en -Duser.country=US Main
Sie werden sehen, dass dann während des Ablaufs des Programmes bei der Eingabe
von double
-Werten eine Darstellung mit Dezimalpunkt erwartet wird.
Wenden Sie sich bei Problemen mit den Ein-/Ausgabefunktionen bitte an die Tutoren im Labor.
-
Programme, die Packages oder Klassen außerhalb der verwendeten Übungsumgebung
(J2SE Development Kit (JDK) 5.0)
verwenden, können von uns nicht getestet und beurteilt werden!
-
Schreiben Sie Ihr Programm möglichst allgemein und kommentieren Sie es
gut. Die Kommentare im Programm gelten als Dokumentation.
Die Dokumentation Ihrer Programme wird ebenfalls beurteilt. Es ist
erlaubt/erwünscht die Kommentare javadoc-konform zu erstellen.
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.
Symbol | Operation | Klassenname |
+ | Addition | AddOperation |
- | Subtraktion | SubOperation |
* | Multiplikation | MulOperation |
/ | Division | DivOperation |
^ | Potenz (a^b) | PowOperation |
inv | Invers (1/x) | InvOperation |
sin | Sinus | SinOperation |
cos | Cosinus | CosOperation |
! | 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.