summaryrefslogtreecommitdiff
path: root/doc/eudas/eudas.hdb.15
diff options
context:
space:
mode:
Diffstat (limited to 'doc/eudas/eudas.hdb.15')
-rw-r--r--doc/eudas/eudas.hdb.15286
1 files changed, 0 insertions, 286 deletions
diff --git a/doc/eudas/eudas.hdb.15 b/doc/eudas/eudas.hdb.15
deleted file mode 100644
index c0a22cf..0000000
--- a/doc/eudas/eudas.hdb.15
+++ /dev/null
@@ -1,286 +0,0 @@
-#limit (11.0)##pagelength (16.5)##block#
-#start (2.0,0.0)#
-#page (165)#
-#headodd#
-#center#EUDAS#right#%
-
-#end#
-#headeven#
-%#center#EUDAS
-
-#end#
-#center#1
-
-15 Anweisungen in ELAN
-
-
-
-15.1 Variablen und Zuweisungen
-
-Im vorigen Kapitel haben wir Ausdrücke in ELAN kennengelernt. Der
-Wert eines Ausdrucks wird bei jeder Verwendung erneut berechnet.
-Wenn wir den Wert eines Ausdrucks aufbewahren wollen, müssen wir
-ihn schon in eine EUDAS-Datei schreiben.
- Oft tritt jedoch die Notwendigkeit auf, Werte zu merken, ohne
-sie in einer Datei zu speichern. Beispiel dafür ist ein Zählvorgang im
-Druckmuster. In jedem Wiederholungsteil muß der dazukommende
-Wert zum bisherigen, aufsummierten und aufbewahrten Wert addiert
-werden. Das Zwischenergebnis der Zählung muß also irgendwo ge­
-speichert werden.
-
-#on("b")#Variablen#off("b")# Zu diesem Zweck gibt es Variablen. Sie sind
-ähnlich wie
-Felder in einer Datei. Ihre Existenz ist jedoch unabhängig von einer
-Datei. Außerdem sind sie zu Anfang nicht einfach leer, sondern
-haben einen undefinierten Wert.
- Variablen müssen im Programm definiert werden. Sie existieren
-dann während der Ausführung dieses Programms und gehen an­
-schließend verloren. Zu Beginn des Programms sind sie, wie schon
-gesagt, undefiniert.
- Eine Variable muß immer einen Typ haben. Dieser Typ ist für
-die Lebensdauer der Variable unveränderlich. Die Variable kann
-natürlich nur Werte dieses Typs annehmen.
- Eine Variablendefinition (oder auch -deklaration) besteht aus
-der Angabe eines Typs, dem Schlüsselwort VAR und einem freige­
-wählten Namen. Wie schon bei den Refinements darf ein solcher
-Name nur aus Kleinbuchstaben (keine Umlaute) und eventuell Zif­
-fern bestehen. Dagegen darf der Name Leerzeichen enthalten.
-Beispiel:
-
-
- INT VAR zaehler;
- TEXT VAR feldname;
- REAL VAR mein ergebnis 1;
-
-
-Das Semikolon am Ende beschließt die Definition.
- Die Lebensdauer einer Variablen hängt davon ab, an welcher
-Stelle sie definiert ist. Eine Variable, die im Druckmuster im Initia­
-lisierungsteil definiert ist, behält ihren Wert für die gesamte Dauer
-des Druckvorgangs. Eine Variable in einem Abschnitt lebt dagegen
-nur für eine Abarbeitung dieses Abschnitts. Bei der nächsten Abar­
-beitung ist sie wieder undefiniert.
- Das gleiche gilt für Kopier- und Änderungsmuster. Auch hier
-sind Variablen nur für die Dauer der Bearbeitung eines Satzes
-gültig.
-
-#on("b")#Zuweisung#off("b")# Um einer Variablen einen Wert zu geben, führt
-man eine
-#on ("i")#Zuweisung#off("i")# aus. Die Zuweisung wird durch Doppelpunkt und Gleich­
-heitszeichen aneinandergeschrieben gekennzeichnet. Auf der linken
-Seite steht die Variable, auf der rechten Seite eine Ausdruck:
-
-
- zaehler := 1;
-
-
-Wie oben schließt das Semikolon die Anweisung ab. Nach der Aus­
-führung hat die Variable den Wert 1. Der Wert vorher ist für die
-Zuweisung egal, er kann definiert oder undefiniert sein.
- Eine Variable kann in einem Ausdruck verwendet werden, indem
-man einfach den Namen hinschreibt. Der Ausdruck
-
-
- zaehler + 1
-
-
-hat nach der obigen Zuweisung den Wert 2. Eine Variable muß bei
-der Verwendung definiert sein, sonst können beliebige Fehler ent­
-stehen. Es muß also vor der ersten Verwendung ausdrücklich eine
-Zuweisung erfolgt sein.
- Da Variablen in Ausdrücken verwendet werden können und
-Ausdrücke auf der rechten Seite einer Zuweisung stehen, ist folgen­
-de Konstruktion möglich:
-
-
- zaehler := zaehler + 1;
-
-
-Diese Zeile bewirkt, daß der Wert der Variable um 1 erhöht wird.
-Zuerst wird bei der Zuweisung der Wert des Ausdrucks auf der rech­
-ten Seite bestimmt. Zu diesem Zeitpunkt habe die Variable bei­
-spielsweise den Wert 1. Der Ausdruck hat dann den Wert 2 (1+1).
-Dieser Wert wird der neue Wert der Variablen.
- Bei der nächsten Ausführung würde sich der gleiche Vorgang
-wiederholen, so daß die Variable anschließend den Wert 3 hat.
- Auch bei der Zuweisung gilt natürlich, daß die Variable auf der
-linken Seite den gleichen Datentyp haben muß wie der Ausdruck auf
-der rechten Seite.
-
-#on("b")#Initialisierung#off("b")# Sie können Variablendeklaration und
-Zuweisung
-auch miteinander verknüpfen, so daß die Variable gleich zu Anfang
-einen Wert erhält:
-
-
- INT VAR zaehler := 0;
-
-
-Dieses Verfahren ist eine gute Vorsichtsmaßregel, damit Sie keine
-undefinierten Variablen verwenden.
-
-#on("b")#Inkrement#off("b")# Da der Fall so häufig auftritt, daß der Wert
-einer Vari­
-ablen um einen bestimmten Wert erhöht wird (bei allen Zählvorgän­
-gen), gibt es auch dafür eine Abkürzung, und zwar die beiden Ope­
-ratoren INCR und DECR.
-
-
- zaehler INCR 1;
- mein ergebnis 1 DECR 24.4;
-
-
-Die Operatoren sind für REALs und INTs definiert. INCR erhöht um
-einen Betrag, DECR erniedrigt. Auf der rechten Seite darf wieder ein
-beliebiger Ausdruck stehen.
- Für TEXTe gibt es eine ähnliche Abkürzung, allerdings nur für
-die Addition (Verkettung). Hier heißt der Operator CAT. Die beiden
-folgenden Zeilen haben die gleiche Bedeutung:
-
-
- feldname := feldname + ".";
- feldname CAT ".";
-
-
-
-15.2 Weitere Konstruktionen
-
-#on("b")#IF#off("b")# Die Ihnen bereits bekannte IF-Konstruktion dient nicht
-nur
-dazu, Werte zu liefern, sondern steuert auch die Abarbeitung von
-beliebigen Anweisungen. Diese Anweisungen können Kopier- und
-Änderungsanweisungen sein (s. Kapitel 11), oder die oben beschrie­
-benen Zuweisungen.
- In einem Teil der IF-Konstruktion können auch mehrere Anwei­
-sungen stehen. Diese müssen dann jedoch unbedingt durch Semiko­
-lon getrennt sein. Mehrere Anweisungen hintereinander haben ein­
-fach die Bedeutung der Ausführung in der notierten Reihenfolge.
- Als drittes kann auch der ELSE-Teil weggelassen, da nicht in
-jedem Fall ein Ergebnis erwartet wird. Falls die Bedingung nicht
-zutrifft, muß nicht unbedingt etwas ausgeführt werden.
-
-
- IF zaehler > 0 THEN
- zaehler DECR 1;
- mein ergebnis 1 INCR wert ("zaehlfeld")
- END IF;
-
-
-Auch diese IF-Konstruktion kann wieder geschachtelt werden. Für
-viele Fälle gibt es jedoch einen ELIF-Teil, der die Verschachtelung
-erspart:
-
-
- IF f ("m/w") = "m" THEN
- maenner INCR 1
- ELIF f ("m/w") = "w" THEN
- frauen INCR 1
- ELSE
- zweifelhaft INCR 1
- END IF;
-
-
-Der ELIF-Teil beinhaltet noch einmal einen Test. Dieser Test wird
-jedoch nur dann durchgeführt, wenn die erste Bedingung falsch war.
-Gibt es noch mehr Wahlmöglichkeiten, können Sie beliebig viele
-ELIF-Teile benutzen.
- Beachten Sie, daß die letzte Anweisung in einem Teil der IF-
-Konstruktion nicht unbedingt ein folgendes Semikolon haben muß
-(das Semikolon soll nur trennen). Ein Semikolon an dieser Stelle
-kann aber auch nicht schaden.
-
-#on("b")#Werteliefernde Programme#off("b")# Nicht nur Ausdrücke können Werte
-lie­
-fern, sondern auch ganze Anweisungsfolgen. Dies ist eine Erweite­
-rung der werteliefernden IF-Konstruktion. Sie können dies für Ab­
-kürzungen oder Refinements ausnutzen.
-
-
- endergebnis :
- gesammelte zeichen CAT ".";
- gesammelte zeichen .
-
-
-In diesem Beispiel werden in einer Textvariable bestimmte Zeichen
-gesammelt. Zum Schluß soll ein Punkt angefügt werden und dieser
-Text dann als Ergebnis des Refinements geliefert werden.
- Damit eine Anweisungsfolge einen Wert liefert, muß am Ende
-der Anweisungsfolge ein Ausdruck stehen. Der Wert des Ausdrucks
-nach Abarbeitung der Anweisungen ist dann der Wert der Anwei­
-sungsfolge.
- Allerdings kann man den gleichen Wert oft verschieden aus­
-drücken. Folgendes Refinement hat die gleiche Wirkung wie oben:
-
-
- endergebnis :
- gesammelte zeichen + "." .
-
-
-In manchen Fällen ist eine Formulierung als werteliefernde Anwei­
-sungsfolge jedoch übersichtlicher.
-
-#on("b")#Beispiel#off("b")# Zum Abschluß dieses Kapitels wollen wir als
-Beispiel eine
-statistische Auswertung einer Zahlenreihe als Druckmuster formu­
-lieren.
- Gegeben sei eine Datei mit folgenden Feldern:
-
-
- "Meßwert 1"
- "Meßwert 2"
-
-
-Wir wollen als Ergebnis Mittelwert und Standardabweichung der
-beiden Meßwerte ausdrucken. Dazu dient das Druckmuster auf der
-folgenden Seite.
- Im Initialisierungsteil des Druckmusters werden die notwendi­
-gen Variablen definiert und initialisiert. Beachten Sie hier, daß in
-einer Definition mehrere Variablen durch Komma getrennt aufgeführt
-werden können, wenn sie den gleichen Typ haben.
- Im Wiederholungsteil müssen dann jeweils die Zwischensummen
-aktualisiert werden. Da mit der Funktion 'wert' eine relativ auf­
-wendige Umwandlung verbunden ist, wird der Wert des jeweiligen
-Feldes erst einmal in einer Variable zwischengespeichert, da er
-mehrmals benötigt wird. Diese Zwischenspeicherungsvariable muß
-nicht initialisiert werden
- Im Nachspann werden dann die Ergebnisse gedruckt. Die Formeln
-sind jeweils als Abkürzungen definiert. Die Funktion 'zahltext' sorgt
-dafür, daß die Werte mit drei Nachkommastellen (gerundet) aufge­
-führt werden.
- Da die Formeln relativ komplex sind, werden sie auf mehrere
-Zeilen verteilt (in ELAN hat das Zeilenende keine Bedeutung).
-
-
- %% REAL VAR
- %% messwert,
- %% summe 1 := 0.0, quadratsumme 1 := 0.0,
- %% summe 2 := 0.0, quadratsumme 2 := 0.0;
- %% INT VAR anzahl := 0;
- % WIEDERHOLUNG
- %% anzahl INCR 1;
- %% messwert := wert ("Meßwert 1");
- %% summe 1 INCR messwert;
- %% quadratsumme 1 INCR messwert * messwert;
- %% messwert := wert ("Meßwert 2");
- %% summe 2 INCR messwert;
- %% quadratsumme 2 INCR messwert * messwert;
- % NACHSPANN
- &anz Meßwerte.
- Meßwert 1 Meßwert 2
- Mittelwert &&mw1&&&& &&mw2&&&&
- Standardabweichung &&st1&&&& &&st2&&&&
- % ABKUERZUNGEN
- &mw1 : zahltext (summe 1 / real (anzahl), 3) .
- &mw2 : zahltext (summe 2 / real (anzahl), 3) .
- &st1 : zahltext
- (sqrt ((quadratsumme 1 - summe 1 * summe 1 /
- real (anzahl)) / real (anzahl - 1)), 3) .
- &st2 : zahltext
- (sqrt ((quadratsumme 2 - summe 2 * summe 2 /
- real (anzahl)) / real (anzahl - 1)), 3) .
-
-
-Mit entsprechenden Formeln können Sie dieses Beispiel für Ihre
-eigenen Statistiken erweitern. Die Beispiele der letzten beiden Ka­
-pitel sollten Ihnen genügend Anregungen dafür gegeben haben.
-