Rechenkunststuecke
Wuerzl, Robert
WUE at novsrv.ub.tuwien.ac.at
Fr Mär 21 16:44:13 CET 1997
Liebe allegro-ExpertInnen,
Wer kann das folgende Zahlenraetsel loesen?
Vorgeschichte: wir stellen zu Ostern von aLF 93.x auf Version 94.12A um.
Mit den fuer uns zu unuebersichtlichen Gebuehrenquittungen nicht ganz
zufrieden, wollen wir in der Exportparameterdatei (E-ALF.APR) eine
alternative (kuerzere und einfachere) Gebuehrenquittung einbauen.
Bezueglich der Rechenfunktionen, die im Handbuch nur sehr knapp beschrieben
sind, hielten wir uns an das Muster der (original Braunschweiger) R-0.APR.
Ergebnis: es konnten nie zwei Betraege zusammengezaehlt werden.
Schluss: lange gruebelten wir und probierten wir, da kam das "Aha-Erlebnis"
PRESTO.EXE kann rechnen, ALFWB.EXE kann - so scheint es uns - NICHT
rechnen. Wir haben in der R-0.APR nur zusaetzlich die Anzeige von einem
Kategorieinhalt und zwei Zwischenergebnissen eingebaut (die Datei steht im
Anhang, die neuen Zeilen sind mit "!!!" kommentiert)
Und hier die Ergebnisse (beide Male die gleichen 9 Datensaetze aus der
selben Datenbank, mit der selben CFG-Datei):
Mit PRESTO.EXE (201590 17.07.96 14:039:
----------------------------------------
Kat.76= 1985 uej=1985.000000000 unj=1.000000000
Kat.76= 1960 uej=3945.000000000 unj=2.000000000
Kat.76= 1978 uej=5923.000000000 unj=3.000000000
Kat.76= [1962?] uej=7885.000000000 unj=4.000000000
Kat.76= 1970 uej=9855.000000000 unj=5.000000000
Kat.76= 1974 uej=11829.000000000 unj=6.000000000
Kat.76= 1990 uej=13819.000000000 unj=7.000000000
Kat.76= 1990 uej=15809.000000000 unj=8.000000000
Kat.76= 1984 uej=17793.000000000 unj=9.000000000
Ergebnisse:
Summe: 750
Anzahl: 5
größte: 240
kleinste: 62
unter 10: 4
Durchschnitt: 150.00
Kommentar: "uej" ist die Summe aus den Inhalten der Kat.76 (Jahr)
Der "Fussteil" duerfte auch hier falsch sein!
Der Speicherzustand:
-------------------
Datei: ALF_231.ALD
freier Arbeitsspeicher : 123784
Aufnahmespeicher: 44251 (max. 48000)
Hintergrundsp. : 4860 (max. 5000)
Phrasenspeicher : 4415 (max. 5000)
belegter Parametersp. : 21652 (max. 45000)
Anzahl Kategorien: .... 10 (max. 1500) Hintergrund: 7
Anzahl Aufnahmen: ..... 1 Hauptaufnahmen: ... 1
Datum: Fr., 21. Mrz 1997
Zeit: 16:03:23
V14b
max result set: 500
Mit ALFWB.EXE (374368 8.01.97 15:44):
---------------------------------------
Kat.76= 1985 uej=1985.000000000 unj=1.000000000
Kat.76= 1960 uej=1960.000000000 unj=1.000000000
Kat.76= 1978 uej=1978.000000000 unj=1.000000000
Kat.76= [1962?] uej=1962.000000000 unj=1.000000000
Kat.76= 1970 uej=1970.000000000 unj=1.000000000
Kat.76= 1974 uej=1974.000000000 unj=1.000000000
Kat.76= 1990 uej=1990.000000000 unj=1.000000000
Kat.76= 1990 uej=1990.000000000 unj=1.000000000
Kat.76= 1984 uej=1984.000000000 unj=1.000000000
Ergebnisse:
Summe: 208
Anzahl: 5
größte: 208
kleinste: 99999
unter 10: 4
divide error
Der Speicherzustand:
-------------------
Datei: ALF_231.ALD
freier Arbeitsspeicher : 90496
Aufnahmespeicher: 44251 (max. 48000)
Hintergrundsp. : 4790 (max. 5000)
Phrasenspeicher : 3897 (max. 5000)
belegter Parametersp. : 35230 (max. 45000)
Anzahl Kategorien: .... 10 (max. 1500)
Anzahl Aufnahmen: ..... 1 Hauptaufnahmen: ... 1
Datum: Fri, 21. Mar 1997
Zeit: 16:00:43
V14a
max result set: 500
Mit den besten Gruessen Robert Wuerzl
-----------------------------------------------------------------------
A N H A N G :
------------
***** geaendert WUE 20.03.97 ****************************
Summierung und Durchschnittsbildung von Kategorieinhalten
Prototyp für den Exporttyp RESULT
R-0.APR 940602
pn="Seitensumme, Prototyp RESULT"
Gibt nichts aus, sondern addiert nur. Erst der Fußabschnitt
führt eine Ausgabe durch, siehe unten
--------- Konstanten --------------------------------------------
ff=2 um Kopf- und Fußabschnitt zu aktivieren !!! WUE 20.03.97
zm=0 damit am Ende der Fußabschnitt auch ausgeführt wird
----------------------------------------------------------
Es sollen die Seitenzahlen addiert werden, wobei Fälle mit weniger
als 10 Seiten nicht mitgerechnet, sondern getrennt gezählt werden.
(z.B. kann dabei sowas wie #77 Vol.1-5 vorkommen, was also keine
Seitenzahl ist! Unteraufnahmen werden mit verarbeitet!)
Ferner soll die kleinste und die grösste Seitenzahl ermittelt
und der Durchschnitt berechnet werden.
Die Erscheinungsjahre sollen ebenfalls addiert und ihr Durchschnitt
ausgegeben werden.
!!!!!!!!!!!!!!!!!!!!! Anpassungen für andere Zwecke :
!!!!!!!!!!!!!!!!!!!
! Setzen Sie für #76 und #77 die Kategorien ein, die Sie addieren
wollen.!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ak-Befehle: keine
************* Kategorieliste ************************************
#76 p"Kat.76= " !!! WUE 20.03.97
#76 x">1449" x"+ej" =ej
#uej p" uej=" !!! WUE 20.03.97
#76 x">1449" x"=1" x"+nj" =nj
#unj p" unj=" !!! WUE 20.03.97
wenn >1449, dann Ersch.Jahr addieren, #uej = #uej + #76
und #unj um 1 erhöhen #unj = #unj + 1
(nur dann, wenn #76 existiert!)
Der Befehl Z bewirkt, daß die Zeilen jeweils nur ausgeführt
werden, aber keine Ausgabe bewirken. D.h. es werden nur die
Anwendervariablen bedient, die Zwischenergebnisse aber nicht
ausgedruckt.
(Z macht dasselbe wie e0)
#77 +M x"<10" Z keine Aktion, wenn #77 < 10
#77 x"+su" =su Seitenzahl addieren #usu = #usu + #76 ,
#unr x"+1" =nr #unr um 1 erhöhen
#77 x">gw" =gw wenn größer als bisheriger größter Wert: #ugw=#77
#77 x"<kw" =kw wenn kleiner als bisheriger kleinster Wert: #ukw=#77
#+#
#-M
#uk1 x"+1" =k1 #uk1 um 1 erhöhen
#+#
*********** Kopf- und Fußabschnitte *********************************
Kopfteil: Initialisierung der Variablen
--------- #dt wird als nur Hilfskategorie benutzt, weil sie immer
existiert
K
#dt x"=0" =su #usu für Summe der Seitenzahlen
das bedeutet: nimm den Inhalt vom #dt als Variable,
weise ihr den Wert 0 zu
und speichere diesen in #usu
(etwas indirekt, aber nur so geht es)
Variablen:
#dt x"=0" =nr #unr für Zähler der tatsächlich addierten Fälle
#dt x"=0" =ej #uej für Summe der Ersch.jahre
#dt x"=0" =nj #unj für Anzahl der addierten Erscheinungsjahre
#dt x"=0" =gw #ugw für größten Wert
#dt x"=99999" =kw #ukw für kleinsten Wert
#dt x"=0" =k1 #uk1 für Anzahl der Fälle kleiner als 10
#t{ "Werte auf Null gesetzt" C } Kontrollmeldung
*************************************************************************
Fußteil: Ausgabe der Ergebnisse
-------- (Kontrolle mit Befehl #a im Editor möglich!)
F
#t{ "Ergebnisse: " }
#usu C e"." r7 p"Summe: " e"." schneidet den Dezimalteil ab
#unr C e"." r7 p"Anzahl: " r7 füllt links mit Blanks auf 7
Stellen
#ugw C C x"*1" e"." r6 p"größte: " x"*1" wird gemacht, weil die Werte
#ukw C x"*1" e"." r6 p"kleinste:" noch Buchstaben enthalten könnten,
die werden dadurch beseitigt
#uk1 C e"." r6 p"unter 10:"
#usu C C x"/nr" x"r2" r9 p"Durchschnitt: "
nimm Inhalt von #usu, teile durch #unr, runde auf 2 Stellen
#uej C C x"/nj" e"." r6 "durchschn. Ersch.Jahr: "
+------------------------+---------------------------------------+
| Robert Wuerzl | Tel: ++43 1 58801-5995 (5978) |
| Bibliothek der TU Wien | Fax: ++43 1 586 83 87 |
| Resselgasse 4 | Email: wue at novsrv.ub.tuwien.ac.at |
| A-1040 Wien | |
+------------------------+---------------------------------------+
Mehr Informationen über die Mailingliste Allegro