[Allegro] Trick 55: Schnelle Rechenhilfe

Bernhard Eversberg ev at biblio.tu-bs.de
Di Aug 21 14:10:24 CEST 2007


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.








Mehr Informationen über die Mailingliste Allegro