3164 Elektro Rechnung mit Widerstaenden
Kategorie:Elektrotechnik
Klasse:mittel
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Elektro.txt, Elektro.java, *.java , 46.txt, 97.txt

Kurzbeschreibung:

Eine Rechnung, in der Widerstände, Spannungen, Stromstärken oder Leistungen 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.5W+(20V*50mA)
Umrechnen in Grundeinheiten: 3.5W+(20V*0.05A)
Multiplikation durchführen: 3.5W+1W
Addition durchführen: 4.5W (Ausgabe: "4.500 W")

Bei der Berechnung sind selbstverständlich Klammerregeln und die Rangfolge der Operatoren (Punktrechung vor Strichrechnung, | gilt als Strichrechnung) zu beachten.

Ihr Programm soll folgende Maßeinheiten kennen:

Widerstand(R) : Ohm
Spannung(U) : V (Volt)
Stromstärke(I) : A (Ampere)
Leistung(P) : W (Leistung)

Vor jeder Einheit kann noch eines der Zeichen "K" oder "m" stehen, das einen Umrechungsfaktor angibt (Kilo~ bzw. milli~ für 1000 bzw. 1/1000, z.B. 3 KV = 3000 V, 1000 mA = 1A).

Es ist empfehlenswert, die Eingabewerte in Ohm, V, A bzw. W umzurechnen, da auch die Ausgabe in diesen Grundeinheiten erfolgen muß.

Erläuterung der Operatoren:

Bei + und - Werte gleicher Einheit addiert bzw. subtrahiert. Werte mit verschiedenen Einheiten sind bei diesen Operationen nicht erlaubt.

Die Operation * multipliziert Werte, wobei folgende Gesetze zur Anwendung kommen sollen:

I*R=U
U*I=P

Andere Kombinationen von Einheiten (z.B. auch gleiche Einheiten) sind nicht zulässig.

Mit / werden zwei Werte dividiert, wobei wieder die genannten Gesetze angewendet werden sollen: U/I=R U/R=I P/U=I P/I=U Andere Kombinationen sind wiederum unzulässig.

Die Operation | darf NUR auf zwei Widerstandswerte angewendet werden und liefert den Gesamtwiderstand der Parallelschaltung der beiden Widerstände.
Verwenden Sie folgende Formel: R1|R2 = (R1*R2)/(R1+R2)

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 Einheiten (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 Ohm, V, A bzw. W) als Float-Zahl mit 3 Nachkommastellen liefern. Weiters ist die Maßeinheit des Resultates (Ohm, V, A bzw. W) auszugeben.

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
2V+2A

3.5W+(20V*50mA)

Ausgabedaten
FALSCHE EINGABE

4.500 W


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

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