EPROG-LU - Aufgabe 3171 (Rechnen mit Vektoren)
3171 |
Vektoren |
Rechnen mit Vektoren |
Kategorie: | Geometrie |
Klasse: | schwer |
Eingabe: | siehe Spezifikation |
Ausgabe: | siehe Spezifikation |
|
Abzugebende Files: Vektoren.txt, Vektoren.java, *.java , 10180.txt, 10551.txt |
Kurzbeschreibung:
Ein String, der eine Rechnung (für Mathematiker: einen Term) mit Vektoren enthält,
soll eingelesen und das Ergebnis der Berechnung ermittelt werden.
Allgemeine Hinweise:
-
Sie haben Lösungen (und Spezifikationen) aus der 1. Runde von anderen Studenten erhalten,
die Ihnen Ihre Aufgabe erleichtern sollen. Wählen Sie eine Lösung aus, die Ihnen hinsichtlich Lesbarkeit, Programmierstil,
Korrektheit und Verwendbarkeit am besten erscheint. Verwenden Sie
diese Lösung in Ihrem Programm. Sie können auch die anderen Lösungen einsetzen.
- Merken Sie sich die Lösungsnummer des ausgewählten Beispieles für die Abgabe. Diese Nummer müssen Sie bei der Abgabe angeben. Geben Sie nur jene Lösungsnummer an, die Sie auch wirklich ausgewählt haben.
-
Erstellen Sie für alle Lösungen zu diesem Beispiel (siehe: "Abzugebende Files") ein File mit dem Namen <number>.txt. und schreiben in dieses File ein Review (=Kritik) zu der Lösung. Diese Reviews erhalten dann die TeilnehmerIn von dem/der die Lösung stammt. Beachten Sie das bitte bei der Form Ihrer Kritik.
-
Sie können für die Lösung der gewählten Aufgabe eine oder mehrere Klassen programmieren. Die Klasse Vektoren.java muß aber die Methode main enthalten. Weiters müssen alle abgegebenen Klassenfiles in demselben Verzeichnis vorliegen, Pfadangaben sind nicht gestattet.
-
Achten Sie auf die korrekten Konventionen der Groß/Kleinschreibung bei
Klassen und Methoden!
[Wir tun das jetzt auch :-)]
-
Falls Ihre Lösung einen Exit Code zurueckliefert, so
achten Sie darauf, dass dieser den Wert 0 hat.
Bei allen anderen Werten können Probleme bei der Bewertung und in weiterer
Folge unbeabsichtigte Punkteabzüge auftreten.
- Ihre Lösung darf nur genau jene Ausgabedaten liefern, die in der
Spezifikation verlangt werden. Die Ausgaben Ihrer Lösung werden automatisch mit Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
- Testen Sie Ihre Lösung vor der Abgabe mit der mitgelieferten Eingabedatei. Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihrer Lösung mit der ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihre Lösung auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Klassen, die Packages oder Klassen ausserhalb der verwendeten Übungsumgebung (Java2, Standard Edition, Version 1.5.0) verwenden, können von uns
nicht getestet werden und werden daher mit 0 Punkten bewertet!
- Schreiben Sie Ihre Klasse(n) möglichst allgemein und kommentieren
Sie diese gut. Erstellen Sie weiters eine übersichtliche und
verständliche Dokumentation. Damit erhöhen Sie Ihre Chancen,
daß andere Studenten in der nächsten Runde Ihre Lösung
wählen und Ihnen damit zu Zusatzpunkten verhelfen!
Aufgabenstellung:
Lesen Sie einen String ein, der aus folgenden Zeichen bestehen darf: Ziffern,
Operatoren "+-*", Klammern "()[]", weiters die Zeichen ",.". Dieser enthält
einen mathematischen Ausdruck. Führen Sie die Berechnung durch und geben Sie
das Ergebnis aus.
Die Vektoren sind aus R^3; Details entnehmen Sie dem
Kapitel "EINGABEDATEN";
Bei der Berechnung sind selbstverständlich Klammerregeln und die Rangfolge der
Operatoren (Punktrechnung vor Strichrechnung) zu beachten.
Hier nun die Rechenregeln für Vektoren:
Sei
Für die Berechnung des vektoriellen Produktes dient folgende Formel:
TIP: Die Auswertung derartiger Ausdrücke ist rekursiv am einfachsten zu
programmieren.
Eingabedaten:
Lesen Sie den String ein, der die Rechnung enthält. Dieser darf nur aus den
oben genannten Zeichen bestehen und muß einen gültigen mathematischen Term
enthalten (z.B. keine zwei Operatoren hintereinander, Klammersetzung).
Die Vektoren werden in der Form [x,y,z] eingegeben, wobei die einzelnen Werte
auch Nachkommastellen und ein Vorzeichen haben können. Zulässige Eingaben
sind z.B. [1,2,3] [2,-3,4] [-4.5,2,1] [1,12.333,5].
Man beachte: -[1,2,3]= [-1.000,-2.000,-3.000]
Es können auch Zahlen mit Nachkommateil (durch "." getrennt) eingegeben
werden.
Die eingelesenen Zahlenwerte müssen im Bereich [-100,100] (inkl.) liegen.
Ein Skalar muß in runden Klammern "()" stehen.
Von negativen Vorzeichen abgesehen, dürfen maximal 4 Operatoren vorkommen. Es
darf nur eine Klammerebene auftreten (die Klammern bei einem Skalar zählen
hierbei nicht).
Wenn eine Rechenoperation für die angegebenen Daten nicht definiert ist, sind die Eingabedaten ungültig (z.B. [1.000, 1.000, 1.000] + Skalar oder Skalar + Skalar ist hier undefiniert).
Ausgabedaten:
Bei korrekten Eingabedaten soll Ihr Programm das Resultat der Berechnung in
der Form "[ x , y , z ]" ausgeben, wobei folgendes zu beachten ist:
x, y und z sind als Float-Zahlen mit 3 Nachkommastellen auszugeben.
Trennen Sie die Zahlen, den symbolischen Operator "," sowie die Klammern "[]"
durch Leerzeichen und geben Sie am Ende einen Zeilenvorschub aus.
Fehlerbehandlung:
Wenn der String nicht den Bedingungen genügt, so soll Ihr Programm die Fehlermeldung "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.
Beispiele:
Eingabedaten
|
(2.3)*[3.2,-12,5]+[0.64,7.6,-1.5]
|
Ausgabedaten
|
[ 8.000 , -20.000 , 10.000 ]
|
Testen:
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 Vektoren < Vektoren.i1 > Vektoren.out1
Das erzeugte File Vektoren.out1 können Sie dann mit dem mitgelieferten Outputfile Vektoren.o1 vergleichen.