3166 | Varcalc | Variablen belegen | ||||||||
| ||||||||||
Abzugebende Files: Varcalc.txt, Varcalc.java, *.java , 217.txt, 396.txt |
Der WERT ist eine Berechnung, die aus folgenden Zeichen bestehen darf;
Operatoren + - * /
Klammern ( )
Zahlen
Variablennamen
Die Operatoren +, -, * und / stehen wie üblich für Addition, Subtraktion, Multiplikation und Division. Das Zeichen "-" kann auch als negatives Vorzeichen eingesetzt werden. Mit Klammern kann die Bearbeitungsreihenfolge beeinflußt werden; ansonsten gilt "Punktrechnung vor Strichrechnung".
Zahlen bestehen aus Ziffern, wobei auch Dezimalzahlen mit dem Zeichen "." eingegeben werden können (z.B. 3.141).
Variablennamen bezeichnen Variablen, die schon zuvor einen Wert erhalten haben. Dieser Wert wird dann in die Berechnung eingesetzt.
Der Datensatz wird durch eine Abfrage in der Form ?WERT abgeschlossen. WERT steht dabei wiederum eine Berechnung in der oben genannten Form.
Betrachten wir diese Überlegungen an einem Beispiel: Unser Datensatz lautet AA=3.5*2 B=(AA+3)/2 ?B+1
Im ersten Schritt wird der Variable AA der Wert 7 zugewiesen. Dann wird der Variable B der Wert von (AA+3)/2 zugewiesen; B hat also den Wert 5. Zuletzt wird der Wert von B+1 abgefragt; das Ergebnis lautet also 6.000 .
Wenn einer Variablen mehrmals ein Wert zugewiesen ist, so ist der letzte Wert zu speichern (A=3 A=4 ?A liefert 4.000). Der Wert von Variablen, die noch nicht existieren, darf nicht abgefragt oder in einer Zuweisung verwendet werden. (B=C C=1 ?B => "FALSCHE EINGABE").
Programmiertip: Die Auswertung der Berechnungen ist rekursiv am einfachsten und elegantesten zu programmieren.
Werte bestehen aus Berechnungen, wie sie oben beschrieben sind.
Der Datensatz wird durch eine Abfrage der Form ?Wert abgeschlossen, wobei für den Wert dieselben Bedingungen gelten wie bei den Zuweisungen.
Es dürfen maximal 10 Variablen angelegt werden.
Eingaben, die zu mathematischen Fehlern führen, sind als unzulässig zu
betrachten.
In unseren Testdatensätzen bestehen die Berechnungen aus maximal 4 Operatoren; es kommt nur eine Klammerebene vor. Wir wollen Sie aber nicht davon abhalten, Ihr Programm so zu gestalten, daß es auch komplexere Datensätze verarbeiten kann.
Lesen Sie auf jeden Fall solange Strings ein, bis die Abfrage (beginnt mit ?) eingegeben wird.
Eingabedaten |
A=3 B=A+A*A ?B
A=7 ?a |
Ausgabedaten |
12.000
FALSCHE EINGABE |
java Varcalc < Varcalc.i1 > Varcalc.out1
Das erzeugte File Varcalc.out1 können Sie dann mit dem mitgelieferten Outputfile Varcalc.o1 vergleichen.