Trick 55: Schnelle
Rechenhilfe
Aufgabe: Schnell mal eben eine FLEX-Prozedur machen, die immer dieselbe
Rechnung
ausführt, nur mit einem jeweils anderen Eingabewert
Warum: Zuweilen muß man routinemäßig eine Reihe von
Zahlen abarbeiten,
z.B. jede Zahl mit einem
bestimmten Faktor multiplizieren.
Man wünscht sich dann,
daß man nur die Zahlen eingeben muß und
sonst nichts, damit es
schnellstmöglich geht.
Lösung: Mit den Rechenfunktionen gibt es eine Vielzahl von
Lösungen.
Hier wird nur ein
Grundkonzept gezeigt, das sich bei Bedarf
leicht ganz beliebig
ausbauen läßt.
Es folgt das
kleinstmögliche Skript, um vom eingebebenen Betrag
jeweils die Mehrwertsteuer
zu errechnen, also 19%.
:begin
Z=0,19
ask Betrag
if "" end
Z*
var Z
show iv
jump begin
Der Trick ist der Befehl show iv, der das Ergebnis (in dem Moment
in der iV befindlich) im Schreibfeld anzeigt. Dadurch kann der
Nutzer, ohne erst noch ein OK zu bestätigen oder dergl., sofort die
nächste Eingabe tätigen. Leereingabe beendet die Schleife.
Etwas genauer:
Der Befehl Z* nimmt den gerade eingegebenen Betrag, der
sich in
dem Moment in der iV befindet, und multipliziert ihn mit dem Wert
von Z, der vorher auf 0,19 gesetzt wurde. Das Ergebnis landet wieder
in der iV und kann mit show iV angezeigt werden.
1. Verbesserung
---------------
Wenn man es ausprobiert, kommt ganz sicher die Situation: Autsch,
hatte ich den Betrag richtig eingegeben? Oder: Hatte ich diesen
Betrag nicht vorhin schon berechnet? Dann wär's gut, man
könnte
nochmal sehen, was gerade oder vorher eingegeben und schon berechnet
worden war.
Das Basis-Skript für diesen Zweck sieht so aus:
var ""
sho IV
:begin
Z=0,19
ask Betrag
if "" end
ins #ubt
Z*
var
#ubt(0,10) Z n
sho iv
sho +IV
jump begin
Hier ist der Trick das Anhängen (mit show +IV)
der jeweiligen Zeile mit
Eingabe und Ergebnis an den Text im Anzeigefeld, der zu Anfang
leergemacht wird.
NebenbeiTrick: Die Angabe #ubt(0,10) bewirkt ein Auffüllen des
eingegebenen Betrags mit Leerzeichen auf 10 Stellen, wodurch das
Ergebnis immer schön auf derselben Spalte anfängt.
2. Verbesserung für Fortgeschrittene
------------------------------------
Wenn es eine kompliziertere Berechnung statt einer simplen Grundrechen-
aufgabe ist, nutzt man seit V27 komfortabel die Funktion "eval"
(siehe h xeval)
Man modifiziert dann so:
ask Betrag
ins #ubt
... eval-Funktion mit Verwendung von #ubt
...
Rest wie gehabt.
SonderTip
Der FLEX evt.flx zeigt, wie man eval-Funktionen sogar so
einbinden
kann, daß der Nutzer statt einer einzelnen Zahl eine richtige
Rechenaufgabe mit Zahlen, Operatoren und Variablen eingeben kann.