3156 Einhexpr Rechnung mit versch. Masseinheiten
Kategorie:Mathematik
Klasse:mittel
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Einhexpr.txt, Einhexpr.java, *.java , 372.txt, 725.txt

Kurzbeschreibung:

Eine Rechnung, in der Längen, Flächen und Volumina verknüpft werden, wird eingelesen; das Ergebnis der Operation wird ermittelt.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie einen String ein, der aus folgenden Teilen bestehen kann:

Dieser String soll eine Rechnung beinhalten, in der mehrere Größen miteinander verknüpft werden.
Betrachten wir das an einem Beispiel:

Eingabe: 3.5m3+(2m*50dm2)
Umrechnen in Grundeinheiten: 3.5m3+(2m*0.5m2)
Multiplikation durchführen: 3.5m3+1m3
Addition durchführen: 4.5m3 (Ausgabe: "4.500 m3")

Bei der Berechnung sind selbstverständlich Klammerregeln und die Rangfolge der Operatoren zu beachten.

Ihr Programm soll folgende Maßeinheiten kennen:

Längenmaße (Dimension 1): cm dm m
Flächenmaße (Dimension 2): cm2 dm2 m2
Raummaße (Dimension 3): cm3 dm3 m3

Sicherheitshalber die Umrechnungsfaktoren:

1 m = 10 dm = 100 cm
1 m2 = 100 dm2 = 10000 cm2
1 m3 = 1000 dm3 = 1000000 cm3

Erläuterung der Operatoren:

Bei werden bei + und - Werte gleicher Dimension addiert bzw. subtrahiert.
Werte mit verschiedenen Dimensionen sind bei diesen Operationen nicht erlaubt.
Beispiel: 1m2+50dm2 liefert 1.500 m2

Die Operation * multipliziert Werte, die auch verschiedene Dimension haben können, wobei die Dimensionen addiert werden. Diese neue Dimension darf nicht höher als 3 sein.
Beispiel: 1m2*5dm liefert 0.500 m3

Mit / werden zwei Werte dividiert, wobei der erste Wert eine höhere Dimension haben muß als der zweite. Die Dimensionen werden in diesem Fall subtrahiert.
Beispiel: 10m3/2m liefert 5.000 m2

Tip: Die Auswertung derartiger Ausdrücke ist rekursiv am einfachsten zu programmieren.

Eingabedaten:

Lesen Sie einen String ein, der eine Berechnung gemäß der oben angegebenen Beschreibung enthalten soll. Im String vorkommende Zahlen können einen Nachkommateil haben, der durch einen Punkt "." abgetrennt ist. Vor und nach einem Punkt muß eine Ziffer stehen (falsch: .4 5.). Negative Vorzeichen sind nicht erlaubt. Die oben genannten Bedingungen für die Dimensionen (abhängig von der Operation) müssen (auch für jeden Zwischenschritt) erfüllt sein.

In unseren Testdaten kommen maximal 4 Operatoren und eine Klammerebene vor.
Wir wollen Sie aber nicht davon abhalten, Ihr Programm so zu gestalten, daß es auch komplexere Ausdrücke auswerten kann.

Ausgabedaten:

Bei korrekten Eingabedaten soll Ihr Programm das Ergebnis der Berechnungen (umgerechnet in m, m2 bzw. m3) als Float-Zahl mit 3 Nachkommastellen liefern. Weiters ist die Maßeinheit des Resultates (m, m2 bzw. m3) auszugeben (m als Kleinbuchstabe!).

Trennen Sie die beiden Teile der Ausgabe durch ein Leerzeichen und geben Sie am Ende einen Zeilenvorschub aus.

Fehlerbehandlung:

Wenn ungültigen Daten eingegeben werden, so soll Ihr Programm die Meldung "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
1.5m+50cm

4m3+3m3+1dm2

Ausgabedaten
2.000 m

FALSCHE EINGABE


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 Einhexpr < Einhexpr.i1 > Einhexpr.out1

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