4033 Wider Gesamtwiderstand eines Widerstandsnetzwerkes
Kategorie:Elektrotechnik
Klasse:schwer
Eingabe:siehe Spez.
Ausgabe:siehe Spez.
Abzugebende Files: Wider.txt, Main.java, Wider/*.java , 1568.txt, 1715.txt

Kurzbeschreibung:

Es soll der Gesamtwiderstand eines Widerstandsnetzwerkes berechnet werden.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie einen String ein, der ein Widerstandsnetzwerk beschreibt.

Es können grundsätzlich nur zwei Arten von Widerstandsschaltungen auftreten.

a) Serienschaltung:


z.B.: R1 = 220, R2 = 470 => R = 220 + 470 = 690

b) Parallelschaltung:


z.B.: R1 = 220, R2 = 470 => R = 1/(1/220+1/470) = 149,855

Um die Ein- und Ausgabe zu vereinfachen, sind die Einheiten wegzulassen.

Der Widerstand soll eine Integer-Zahl größer Null sein.

Für den Eingabe-String der Schaltung wird für eine Serienschaltung der Operator "+" und für eine Parallelschaltung der Operator "/" verwendet. Die einzelnen Ebenen des Widerstandsnetzwerkes werden durch Klammern "(", ")" getrennt.

Berechnen Sie den Gesamtwiderstand der Widerstandsschaltug mit Hilfe einer rekursiven Prozedur.

Eine mögliche Eingabe könnte so aussehen:

820+(470/(120+(560/680)))

Zugehörige Schaltung:


Zugehöriger Parse-Baum:

Der Gesamtwiderstand dieses Widerstandsnetzwerkes beträgt: 1043.761

Eingabedaten:

Lesen Sie einen String ein, der das Widerstandsnetzwerk beschreibt.

Der eingelesene String darf nur Ziffern "0" bis "9" und die Zeichen "+", "/", "(", ")" enthalten. Die einzelnen Werte der Widerstände müssen im Bereich der INTEGER-Zahlen liegen und positiv sein.

Das Widerstandsnetzwerk darf aus nicht mehr als 15 Widerständen bestehen.

Eine Parallelschaltung von Widerständen wird durch das Zeichen "/" ("240/245" bedeutet 240 parallel 245) und eine Serienschaltung durch das Zeichen "+" ("680+120" bedeutet 680 in Serie mit 120) gekennzeichnet. Enthält ein Widerstandsnetzwerk mehrere Ebenen (d. h. enthaltet eine Serienschaltung ein Parallelschaltung oder umgekehrt), so müssen diese durch Klammern ("(", ")") gekennzeichnet werden.

Ausgabedaten:

Bei korrekten Eingabedaten soll Ihr Programm den Gesamtwiderstand des eingegebenen Widerstandsnetzwerkes ausgeben. Der Gesamtwiderstand soll als Integerzahl gerundet ausgegeben werden (die programminterne Berechnung soll aber mit Floatzahlen durchgeführt werden).

Zum Schluß soll ein Zeilenvorschub ausgegeben werden.

Fehlerbehandlung:

Wenn bei der Eingabe die oben genannten Anforderungen nicht erfüllt werden, oder der eingelesene String kein gültiges Widerstandsnetzwerk beschreibt, dann ist die Meldung "FALSCHE EINGABE" gefolgt von einem Zeilenvorschub auszugeben.

Beispiele:

Eingabedaten
((200+490)/130)+910

((340/690)/30)+(885/220)

Ausgabedaten
1019

203


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 Main < Wider.i1 > Wider.out1

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