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:
-
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 Elektro.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.3.1_1) 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 Teilen bestehen kann:
- Längen, Flächen oder Volumina in der Form Zahl-Maßeinheit (z.B. "3V")
- Operatoren + - * / |
- Klammern ( )
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.