Ein Ausrufezeichen (
Steuerzeichen (ASCII-Kode<32, z.B. TAB, ESC, CR, LF, FF, ... ) werden außerhalb von Zeichenketten durch Leerzeichen ersetzt. Mehrfache Leerzeichen werden außerhalb von Zeichenketten (siehe unten) durch ein einzelnes Leerzeichen ersetzt. Leerzeichen oder Tabulatoren am Zeilenanfang oder Zeilenende und auch ganze Leerzeilen werden ignoriert.
Ein Backslash (
Zeilen, die mit dem Nummer-Symbol (
Nicht-Kommandozeilen werden in die Ausgabedatei kopiert. Genaure Details werden im nächsten Abschnitt beschrieben.
DEBUG-INFO: Text unvollständig/fehlerhaft |
--- ??? --- |
Die Steuerdatei wird im Initialisierungsmodus abgearbeitet: - Es werden Einstellungen zum Einlesen der Dateien vorgenommen. - Die Kommandozeilenparameter können verarbeitet. - Eigene Kommandozeilen können zugefügt werden. - Durch das Kommando 'SCANFILES' werden die angegebenen Eingabe- dateien ausgewertet. (-> Schritt 4) Die Eingabedateien werden ausgewertet. Die Steuerdatei wird im Auswertungsmodus abgearbeitet: - Definition von selections, transformations, playercalculations, gamecalculations, printings - Eingabetabellen werden selektiert. - Auswertungsmodi werden definiert. - Statistische Auswertungen werden durchgeführt. - Ergebnisse werden auf Dateien ausgegeben.
--- ??? --- |
DEFINE <objekt> <name> Es wird ein Object definiert, welches später mit dem angegebenen Namen referenziert werden kann. Durch die wiederholte Definition eines Objektes kann dieses geändert oder ergänzt werden. DEFINE OPTIONS Es können weitere Optionen definiert werden, die alle mit '-', '+' oder '/' eingeleitet werden können. Dabei werden fünf Arten von Optionen unterstützt, die verschiedene Arten von Parametern erwarten: VOID <options>... Definition von Optionen ohne Parameter. CHARACTER <options>... Definition von Optionen, die genau ein Zeichen als Parameter erwarten. TEXT <options>... Definition von Optionen, die eine beliebig langen Text als Parameter erwarten. INTEGER <options>... Definition von Optionen, die eine Ganzzahl als Parameter erwarten. FLOATINGPOINT <options>... Definition von Optionen, die eine Fließkommazahl als Parameter erwarten. Als Optionen dürfen Groß- und Kleinbuchstaben sowie Ziffern verwendet werden. Für jede Option, vordefiniert oder durch DEFINE OPTIONS definiert, werden zwei Symbole definiert: OPT$* und PARM$*. Anstatt '*' wird der Buchstabe oder die Ziffer verwendet, wobei bei Großbuchstaben der Buchstabe doppelt verwendet wird. Näheres ist im Abschnitt `Symboldefinitionen' beschrieben. DEFINE SCANMODE <name> [ <dateinamen>... ] Es wird ein Modus zum Lesen einer Datei mit den Spieldaten festgelegt. Hinter dem Namen kann eine Liste mit Dateinamen und Dateimasken mit haltern angegeben werden, auf die dieser Eingabemodus angewendet wird. Näheres ist im Abschnitt `Dateiformate für Datendateien' beschrieben. Die Definition von Eingabemodi wird durch END beendet, wobei die folgenden Kommandos möglich sind: MODE 18XX MODE RANGLIST Die Eingabedateien können grundsätzlich im 18XX-Format oder im RANGLIST-Format vorliegen. Dieses wird im Abschnitt `Dateiformate für Datendateien' näher beschrieben. PREOFF Mit diesem Befehl wird die Preprozessorbearbeitung (#if,#include, Kommentare,...) für diesen ScanMode abgeschaltet. PRECHAR <char> Es wird ein Zeichen für die Einleitung von Preprozessorbefehlen (#if,#include,...) festgelegt. (Standard='#') PRECOMMENT <string1> <string2> <string3> Es werden die Zeichen für Erkennung von Kommentaren durch den Prepro- zessor festgelegt. Dabei werden maximal die ersten beiden Zeichen eines jeden Strings verwendet. String-1 gibt das Zeichen oder die Zeichenkombination für den Beginn eines Kommentares an, String-2 für das Ende eines Kommentares und String-3 für einen Kommentares bis zum Zeilenende. Als Standard wird '{', '}' und '!' verwendet. PRETIE <string> Hiermit wird das Zeichen oder die Zeichenkombination aus zwei Zeichen festgelegt, mit welchen mehrere Zeilen zu einer logischen Zeile zusammengefaßt werden können. Dazu muß es nach dem Entfernen von Kommentaren als letztes in einer Zeile stehen. Als Standard wird '\' verwendet. READPOINTS <formel> Es wird eine Formel zur Auswahl der zu verwendenen Punktezahl festgelegt. Ohne Angabe wird 'P.1' als Formel verwendet. (siehe auch Abschnitte `Dateiformate für Datendateien' und `Formeln') TRANSFORMATION <formel> Es wird eine Formel zur Eingangstransformation der Spielpunkte festgelegt. Ohne Angabe wird 'P' als Formel verwendet. (siehe auch Abschnitte `Dateiformate für Datendateien' und `Formeln') SIGN <Zeichen> Mit dem Zeichen wird ein Scanmodus erkannt. Dazu wird aus der Quelldatei das erste Zeichen verglichen, das kein Kommentar und kein Leerzeichen ist. END Die Definition von SCANMODE wird beendet. DEFINE SELECTION <name> Es wird eine Formel für die Auswahl von Ergebnistabellen festgelegt. Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung' und die Details dieser Formel im Abschnitt `Formeln' beschrieben. SELECT <formel> Es wird eine Formel zur Auswahl der Ergebnistabellen festgelegt. Ohne Angabe wird '1.0' als Formel verwendet. END Die Definition von SELECTION wird beendet. DEFINE TRANSFORMATION <name> Es wird eine Formel zur Transformation der Spielerpunkte festgelegt. Mehrere solcher Transformationen können vor der eigentlichen Ausweertung durchgeführt werden. Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung' und die Details dieser Formel im Abschnitt `Formeln' beschrieben. VARIABLE <variablendefinition> Es können belibieg viele Variablendefinitionen eingefügt werden, die alle unmittelbar vor der Berechnung der Formel ausgeführt werden. Details hierzu sind im Abschnitt `Variablen' beschrieben. TRANSFORM <formel> Definition der Formel; ohne Angabe wird 'P/MEAN' verwendet. END Die Definition von TRANSFORMATION wird beendet. DEFINE PLAYERLEVEL <name> Es wird eine Formel zur Berechnung der Spielerstärke festgelegt. Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung' und die Details dieser Formel im Abschnitt `Formeln' beschrieben. CALCULATE <formel> Definition der Formel; ohne Angabe wird 'SUM/WSUM' verwendet. END Die Definition von PLAYERLEVEL wird beendet. DEFINE GAMELEVEL <name> Es wird eine Formel zur Berechnung der subjektiven Partienstärke festge- legt. Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung' und die Details dieser Formel im Abschnitt `Formeln' beschrieben. CALCULATE <formel> Definition der Formel; ohne Angabe wird 'WEIGHT * P * (SUMLEVEL-LEVEL) / (N-1)' verwendet. END Die Definition von GAMELEVEL wird beendet. DEFINE ITERATION <name> Hiermit werden die Parameter für das itterarive Verfahren festgelegt. Bei Ablauf der Iteraton kann diese durch das Drücken des Leerzeichens jederzeit vorzeitig beendet werden. MINIMUM <numerischer_Ausdruck> Minimale Anzahl von Iterationsschritten, die auf jedenfall durchgeführt werden müssen. Bereich: 1 .. 1000000 MAXIMUM <numerischer_Ausdruck> Maximale Anzahl von Iterationsschritten, nach dem die Iteration beendet wird. Bereich: MINIMUM .. 1000000 EPSILON <numerischer_Ausdruck> Bei jedem Iterationsschritt wird das Quadrat der maximalen Änderung eines Stärkewertes berechnet. Ist dieser Wert kleiner als EPSILON, dann wird die Iteration vorzeitig beendet. Wegen der Genauigkeit der Fließkommazahlen sind nur Zahlen aus dem Bereich 1 bis 1e-30 sinnvoll. Der Wert '0' schaltet diese Funktionalität ab. END Die Definition von ITERATION wird beendet. DEFINE SORTMODE <name> Es wird eine Formel für die Berechnung der Reihenfolge der Spieler bei der Ausgabe festgelgt. Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung'und die Details dieser Formel im Abschnitt `Formeln' beschrieben. SORT <formel> Definition der Formel; ohne Angabe wird 'LEVEL' verwendet. REVERS REVERS <Boolscher_Ausdruck> Die Sortierung erfolgt normalerweise von großen nach kleinen Werten. Nach Angabe von Revers ohne Paramter oder mit einem Wert >0 erfolgt die Sortierung von kleinen nach großen Werten, was z.B. für die alphabetische Sortierrrung der Spieler nötig ist. END Die Definition von SORTMODE wird beendet. DEFINE PRINTGAME <name> DEFINE PRINTPLAYER <name> Es werden Formeln für die Ausgabe von Partienlisten (PRINTGAME) und Spielerlisten (PRINTPLAYER) festgelegt. Die Formeln liefern als Ergebnis eine zeichenkette, die dann in die Ausgabedatei geschrieben wird. Die Verwendung der Formeln ist im Abschnitt `Schritte der Berechnung' und die Details dieser Formeln im Abschnitt `Formeln' beschrieben. FILENAME <dateiname> Es wird ein Datei festgelegt, in die die Ausgabe geschrieben werden soll. Dieser Befehl impliziert den Befehl OVERWRITE. Ohne Angabe einer Zieldatei wird die Ausgabe in die durch das Kommando PRINTFILE spezifizierte Datei geschrieben. OVERWRITE APPEND Die beiden Varianten unterscheiden sich nur, wenn die Zieldatei, die durch FILENAME spezifiziert worden ist, bereits existiert. Durch OVERWRITE wird diese Datei überschrieben, durch APPEND wird das Ergebnis am Dateiende angahängt. Bei mehrfacher Verwendung dieser beiden Kommandos ist nur die letzte gültig. Bei der zweiten Verwendung des gleichen Printmodusses wird automatisch APPEND verwendet. SORT UNSORT Die Sortierung der Ausgabeliste wird ein- bzw. ausgeschaltet. Bei mehrfacher Verwendung dieser beiden Kommandos ist nur die letzte gültig. Voreingestellt ist SORT. HEADER <formel> Definition der Formel für den Tabellenkopf; ohne Angabe wird '' verwendet. PLAYER <formel> Definition der Formel, die für jeden Spieler angewendet wird; ohne Angabe wird 'print('%4d. %-25s %8.3f',I,NAME,LEVEL)' verwendet. TRAILOR <formel> Definition der Formel für den Tabellenfuß; ohne Angabe wird '' verwendet. END Die Definition von PRINTGAME bzw. PRINTPLAYER wird beendet. DEFINE JOB <name> Es wird ein MACRO definiert: Der Text zwischen 'DEFINE JOB <name>' und 'ENDJOB' bzw. 'JOBEND' innerhalb einer Datei wird markiert. Durch einen Aufruf von 'JOB <name>' wird der Text wie eine Include-Datei in die in die gerade bearbeitete Steuerdatei eingefügt. Bei der Definition eines Jobs werden alle Preprozessor-Anweisungen ignoriert -- sie werden aber bei der Ausführung beachtet. Jobs können auch über die Preprozessoranweisung '#MACRO' definiert werden. JOB [?] <name> JOB [?] <name> () JOB [?] <name> (P1) JOB [?] <name> (P1,P2,...) Ein zuvor mittels 'DEFINE JOB <name>' definierter Job wird ausgeführt. Einem Job können auch Parameter übergeben werden. Der x-te Parameter wird in die Variable '$x' übertragen. Die Variable ist auf jeden Fall definiert und '$N' enthält die Anzahl der Parameter. Die Parameter '$x' mit x aus $N..20 werden auf den Wert NONE gesetzt. Jobs bzw. Macros können auch über die Preprozessoranweisung '#CALL' bzw. '#:' aufgerufen werden. PSET <Symbole...> PSET <Symbol> = <numerischer_Ausdruck> [; ...] ..... ??? ..... PSET und #PDEFINE sind identisch. SET <Symbole...> SET <Symbol> = <numerischer_Ausdruck> [; ...] Es können Symbole definiert werden. Symbole sind Zeichenketten, die aus Buchstaben, Ziffern und den Sonderzeichen '$', '_', '-' und '+' bestehen, wobei Großschreibung keine Rolle spielt. Die einzelnen Symbole können durch Kommata oder Semikola getrennt sein. Die Symbole erhalten den Wert '0'. Um ihnen andere Werte zuzuweisen, kann nach einem '=', ':' oder ':=' ein numerischer Ausdruck folgen. Die Definition und die Zuweisung eines Wertes erfolgt erst nach der Berechnung des folgenden Ausdruckes. Sollen nach einem solchen Ausdruck weitere Definitionen folgen, so ist das ';' als Trennzeichen zwingend. Bereits definierte Symbole erhalten einen neuen Wert. SET und #DEFINE sind identisch. GSET <Symbole...> GSET <Symbol> = <numerischer_Ausdruck> [; ...] GSET arbeitet wie SET, es werden jedoch globale Variablen gesetzt. GSET und #GDEFINE sind identisch. (Vergleiche #DEFINE ind #GDEFINE) COMMANDLINE Die Parameterzeile bei Aufruf des Programmes wird ausgewertet. Dieser Befehl ist nur im Initialisierungsmodus möglich. PARAMETER <text> Der folgende Text wird wie eine Parameterzeile bei Aufruf des Programmes behandelt und entsprechend ausgewertet. Damit können weitere Optionen und weitere Dateinamen von Quelldateien spezifiziert werden. Dieser Befehl ist nur im Initialisierungsmodus möglich. SCANFILES Der Initialisierungsmodus wird beendet, alle Quelldateien werden nach Ergebnistabellen durchsucht. Anschließend wird der Bearbeitungsmodus aktiviert. Dieser Befehl ist daher nur im Initialisierungsmodus möglich. OUTPUT [+] <Zieldatei> Es wird eine Datei für die allgemeine Ausgabe definiert. Durch die Verwendung von '+' vor dem Dateinamen wird eine bereits existierende Datei nicht überschrieben, sondern am Dateiende ergänzt. Genaueres über die Ausgabedateien ist im Abschnitt `Ausgabedateien' beschrieben. ERRORLOG [+] <Dateiname> Es wird eine Datei für Fehlermeldungen und Logging definiert. Durch die Verwendung von '+' vor dem Dateinamen wird eine bereits existierende Datei nicht überschrieben, sondern am Dateiende ergänzt. Genaueres über die Ausgabedateien ist im Abschnitt `Ausgabedateien' beschrieben. PRINTFILE [/] [+] <Dateiname> Es wird eine Datei für die Ausgabe gemäß PRINTGAME und PRINTPLAYER definiert. Durch die Verwendung von '+' vor dem Dateinamen wird eine bereits existierende Datei nicht überschrieben, sondern am Dateiende ergänzt. Normmalerweise wird als erstes der Programmtitel in die Datei geschrieben. Durch die Verwendung von '/' wird der Programmtitel nicht geschrieben. Genaueres über die Ausgabedateien ist im Abschnitt `Ausgabedateien' beschrieben. ECHO <String_Ausdruck> Das Ergebnis des Stringausdruckes wird in die gerade aktuelle Druckdatei (siehe PRINTFILE) geschrieben. Ist keine solche definiert, dann wird das Ergebnis in die Standardausgabedatei (siehe OUTPUT) geschrieben. MESSAGE <String_Ausdruck> Dieses Nachricht erscheint auf dem Bildschirm und in der Datei für Fehlermeldungen (siehe ERRORLOG). TIMESTAMP Sowohl im Ausgabekanal (->OUTPUT) als auch auf dem Fehlerkanal (->ERRORLOG) wird das aktuelle Datum mit der aktuellen Uhrzeit abgelegt. LOGGING Es wird festgelegt, welche Kontrollausgaben vorgenommen werden sollen. Dieses kann einzeln oder auch in Ebenen erfolgen. In die Fehlerdatei (-->ERRORLOG) werden immer alle Ausgaben gemäß Modus ALL geschrieben, auf den Bildschirm nur die spezifizierten. Über die Kommandozeilenoption -l# kann eine Log-Level eingestellt werden. Es existieren die folgenden Einstellungen: NONE := LEVEL0 LEVEL0 := % LEVEL1 := ERRORS LEVEL2 := LEVEL1 + INFORMATIONS LEVEL3 := LEVEL2 + TITLE + SUMMARY LEVEL4 := LEVEL3 + INPUTS + OUTPUTS LEVEL5 := LEVEL4 + PRINTINGS LEVEL6 := LEVEL5 + CALCULATIONS LEVEL7 := LEVEL6 + ITERATIONS LEVEL8 := LEVEL7 + DEFINITIONS LEVEL9 := LEVEL8 + GAMES ALL := LEVEL9 Die Einstellungen ermöglichen die folgenden Ausgaben: ERRORS Ausgabe von Fehlermeldungen INFORMATIONS Ausgabe von Informationen über den Befehl MESSAGE TITLE Ausgabe des Programmtitels SUMMARY Ausgabe von Speicherbedarf und anderen statistischen Angaben INPUTS Ausgabe von Informationen über einzulesende Dateien OUTPUTS Ausgabe von Informationen über Ausgabedateien PRINTINGS Ausgabe von Informationen über die Tabellenausgabe CALCULATIONS Ausgabe von Informationen über die Berechnungen ITERATIONS Ausgabe von Infos über das Fortschreiten der Iteration DEFINITIONS Ausgabe über Definitionen von Objekten GAMES Ausgabe beim Enlesen einer jeden Partie ROUNDING [ NEAREST | ZERO | UP | DOWN ] Bei der Wandlung von Fließkommazahlen in Ganzzahlen müssen diese gerundet werden. Es stehen nun vier Rundungsmöglichkeiten zur Verfügung: NEAREST Es wird immer zur nächsten ganzen Zahl gerundet (Voreinstellung) ZERO Es wird immer in Richtung Wert 0 gerundet. UP Es wird immer aufgerundet. DOWN Es wird immer abgerundet. LIST <Objekt-Typ>... Es werden alle Objekte des angegebenen Objekttypes in die Ausgabedatei als Liste geschrieben. Damit sind Kontrollen möglich: ALL Es wird alles ausgegeben. JOBS Liste der Jobs LOCALS Liste der lokalen Variablen GLOBALS Liste der globlen Variablen SCANMODES Liste der Objekte vom Typ SCANMODE FILEMASKS Liste der Dateimasken (-->SCANMODE) PLAYER, PLAYERS Liste aller Spieler ATTRIBUTES Liste der Attribute SELECTIONS Liste der Objekte vom Typ SELECTION TRANSFORMATIONS Liste der Objekte vom Typ TRANSFORMATION PLAYERLEVELS Liste der Objekte vom Typ PLAYERLEVEL GAMELEVELS Liste der Objekte vom Typ GAMELEVEL ITERATIONS Liste der Objekte vom Typ ITERATION PRINTGAMES Liste der Objekte vom Typ PRINTGAMES PRINTPLAYERS Liste der Objekte vom Typ PRINTPLAYER SORTMODES Liste der Objekte vom Typ SORTMODES GAME, GAMES Liste aller Partien SELECT <name> Auswahl von Partien vornehmen. PLAYERLEVEL, GAMELEVEL und ITERATION werden auf 'DEFAULT' gesetzt. RESELECT Vorherige SELECT wiederholen. TRANSFORMATION <name> Transformation <name> vornehemen. Es können 0 bis beliebig viele Transformationen hintereinander verwendet werden. PLAYERLEVEL <name> PLAYERLEVEL <name> <name2> Berechnungsmodus für die Spielerstärke bestimmen. Bei der Angabe von zwei Modi wird der zweite Modus zur Berechnung der Spielerstärken nach der letzten Iteration verwendet. GAMELEVEL <name> Berechnungsmodus für die subjektive Spielerstärke der Gegner innerhalb einer Partie bestimmen. ITERATE <name> ITERATION <name> Iterationsmodus bestimmen. CALCULATE Berechnungen gemäß PLAYERLEVEL, GAMELEVEL und ITERATION durchführen. PRINTGAMES <name> Liste aller ausgewählten Partien gemäß Modus <name> ausgeben. PRINT <name> PRINTPLAYERS <name> Rangliste aller ausgewählten Partien gemäß Modus <name> ausgeben. SORT <name> Sortiermodus für Spielerrangliste auswählen. CLEARVARS Alle spielerabhängigen Variablen löschen. (-->SAVEPLAYERS) SAVEPLAYERS <name> ( vormals TRANSFER <name> ) Für jeden Spieler werden die Variablen <name>.N, <name>.SUM, <name>.WSUM, <name>.BEST, <name>.WBEST, <name>.WORST und <name>.WWORST gespeichert. Diese Werte entsprechen den Werten bei der Berechnung von PLAYERLEVEL. Es können so aus mehreren Auswertungen Ergebnisse festgehalten werden. Diese Variablen können dann bei der Tabellenausgabe gemeinsam verwendet werden. SAVEGAMES <name> Für jede Partie werden die Variablen <name>.FIRST, <name>.MEAN, <name>.MEDIAN, <name>.BINOM, <name>.WEIGHT, <name>.GAMELEVEL und <name>.GROUP gespeichert. Diese Werte entsprechen den Werten bei der Berechnung von GAMELEVEL. Es können so aus mehreren Auswertungen Ergebnisse festgehalten werden. Diese Variablen können dann bei der Tabellenausgabe gemeinsam verwendet werden. TABSIZE <nummerischer_Ausdruck> Bei der Textausgabe werden Tabulatoren für große Leerräume verwendet. Der Tabulatorabstand wird durch TABSIZE bestimmt. Ein Wert von '0' bedeutet, daß keine Tabulatoren verwendet werden sollen. DATE, REFDATE Es wird ein Referenzdatum eingestellt. (-->SELECTIION,TRANSFORMATION) Voreingestellt ist das aktuelle Datum (Heute, 0 Uhr). SYSTEM <programm + parameter> Es wird ein externes Programm mit Parametern aufgerufen, als ob es im Befehlsinterpreter -- normalerweise COMMAND.COM -- direkt eingegeben würde. Es wird ein Zeichenketten Ausdruck erwartet.
--- ??? --- |
--- ??? --- |
--- ??? --- |
Syntax: VARIABLE <name> := <formel> VARIABLE <name> [] := <formel> VARIABLE <name> [a] := <formel> VARIABLE <name> [a:] := <formel> VARIABLE <name> [:b] := <formel> VARIABLE <name> [a:b] := <formel> Bei einigen Formeln können vorher Variablen definiert werden. Dazu wird ein Variablenname gefolgt von einer Formel angegeben. Zwischen Name und Formel kann ':=', ':', '=' oder nichts hiervon stehen. So definierte Variablen stehen zusätzlich zu den vordefinierten Variablen zur Verfügung. Diese können bei weiteren Variablendefinitionen oder bei der eigentlichen Formel verwendet werden. Die Daten in den eckigen Klammern geben die Art und Weise der Berechnung an. Dabei sind grundsätzlich alle Parameter verfügbar, die auch bei der eigentlichen Formel verfügbar sind. - Die Berechnung erfolgt spielerunabhängig. Alle spielerabhängigen Variablen sind daher undefiniert. [] Die Berechnung erfolgt hintereinander für alle Teilnehmer. [a] Die Berechnung erfolgt nur für Teilnehmer `a'. [a:] Die Berechnung erfolgt hintereinander für alle Teilnehmer ab einschließlich Teilnehmer `a'. Anstatt '[a:]' kann auch '[a:*]' oder '[a:y]' mit hinreichend großem 'y' geschrieben werden. [:b] Die Berechnung erfolgt hintereinander für alle Teilnehmer bis einschließlich Teilnehmer `b'. Anstatt '[:b]' kann auch '[x:b]' mit x<=1 geschrieben werden. [a:b] Die Berechnung erfolgt hintereinander für alle Teilnehmer von einschließlich Teilnehmer `a' bis einschließlich Teilnehmer `b'. Für 'a' und 'b' können beliebige numerische Ausdrücke verwendet werden. Die Indizes werden automatisch auf die Grenzwerte angepaßt. Beispiel Es soll eine Transformation definiert werden, die das geometrische Mittel als Referenzwert verwendet. Ein mögliche Lösung ist folgendes, wobei anstatt Multiplizieren und Wurzelziehen das arithmetische Mittel aus den Logarithmen berechnet wird: define transformation gmean variable gmean := 0.0 ! 1. Formel variable gmean[] := gmean + log(p) ! 2. Formel variable gmean := exp(gmean/n) ! 3. Formel transform p / gmean ! 4. Formel end Es wurden vier Formeln definiert: 1. Die Variable GMEAN wird definiert und der Wert 0.0 zugeordnet. 2. Über alle Spieler wird die Summe des Logarithmusses ihrer Punktewertung gebildet. 3. In einer Abschlußberechnung wird das geometrische Mittel berechnet. 4. In der eigentlichen Transformation wird das geometrische Mittel als Referenzwert verwendet.
--- ??? --- |
Im folgenden werden die im Programm ANALYSE verwendet Formeln beschrieben. Die genaue Syntax der Formeln ist in der Datei 'STREAM.HTM' beschrieben. =============================== READPOINTS (-->define scanmode) Standardformel: 'P.1' Variablen: N Anzahl der Punkteangaben P.1 erste Punkteangabe : : P.n letzte Punkteangabe PN Kürzel für 'P.n' Sobald eine Datenzeile (Information eines Spielers) eingelesen worden ist, wird diese Formel angewendet. Damit kann aus mehrspaltigen Tabellen der richtige Punktewert, ggf. transformiert, ausgewählt werden. =============================== TRANSFORMATION (-->define scanmode) Standardformel: 'P' Variablen: DATE Datum der Tabelle als Zahl im Format `yyyymmdd' YEAR Jahreszahl des Datums der Tabelle MONTH Monatszahl des Datums der Tabelle DAY Tageszahl des Datums der Tabelle AGE Alter der Tabelle in Tagen relativ zum Referenzdatum REFDATE Referenzdatum als Zahl im Format `yyyymmdd' REFYEAR Jahreszahl des Referenzdatums REFMONTH Monatszahl des Referenzdatums REFDAY Tageszahl des Referenzdatums FACTOR Gewichtungsfaktor, der bei der Partie angegeben wurde ('*nnn') FIRST Punkte des besten Spielers MEAN arithmetisches Mittel der Spielerpunkte MEDIAN Median der Spielerpunkte MIDDLE spezieller gewichteter Mittelpunkt der Spielerpunkte BINOMIAL Mittelwert mit Binomialgewichtung der Spielerpunkte TITLE Titelzeile des Spieles TEXT Textueller Kommentar innerhalb der Titelzeile N Anzahl der Spieler innerhalb einer Partie I Index des aktuellen Spielers, 1..N R Rang des aktuellen Spielers Spieler mit der gleichen Punktezahl erhalten den gleichen niedrigen Rang, z.B. 1,2,2,2,5,6,6,8 RN Anzahl der Spieler, die den gleichen Rang 'R' haben P Punkte des aktuellen Spielers P.1 Punkte des Spielers mit der größten Punktezahl : : P.n Punkte des Spielers mit der geringsten Punktezahl PN Kürzel für 'P.n' A$* Für jedes Attribut <attrib> ist ein Symbol 'A$<attrib>' definiert. SM$* Für den ScanMode, mit dem diese Tabelle eingelesen worden ist, ist das Symbol 'SM$<name>' definiert. Nach dem Einlesen aller Spieldateien werden die Spielpunkte der Spieler aller Eingabetabellen transformiert. Die Formel wird dabei nacheinander für alle Spieler einer Partie angewendet. Anschließend werden die Spieler neu sortiert. Die neu errechnete Punktezahl ersetzt den Wert 'P' und wird für alle weiteren Berechnungen verwendet. Die Ursprungswerte sind hiernach nicht mehr verfügbar. Nach der Transformation sollten die folgenden Eigenschaften erfüllt sein: - Die Punktzahl eines jeden Spielers ist >0.0 - Der beste Spieler hat die meisten Punkte Diese Formel wird normalerweise nur dann verwendet, wenn die Daten nicht die beiden oben genannten Eigenschaften besitzen. =============================== SELECT (-->define selection) Standardformel: '1' Variablen: DATE Datum der Tabelle als Zahl im Format `yyyymmdd' YEAR Jahreszahl des Datums der Tabelle MONTH Monatszahl des Datums der Tabelle DAY Tageszahl des Datums der Tabelle AGE Alter der Tabelle in Tagen relativ zum Referenzdatum REFDATE Referenzdatum als Zahl im Format `yyyymmdd' REFYEAR Jahreszahl des Referenzdatums REFMONTH Monatszahl des Referenzdatums REFDAY Tageszahl des Referenzdatums FACTOR Gewichtungsfaktor, der bei der Partie angegeben wurde ('*nnn') FIRST Punkte des besten Spielers MEAN arithmetisches Mittel der Spielerpunkte MEDIAN Median der Spielerpunkte MIDDLE spezieller gewichteter Mittelpunkt der Spielerpunkte BINOMIAL Mittelwert mit Binomialgewichtung der Spielerpunkte TITLE Titelzeile des Spieles TEXT Textueller Kommentar innerhalb der Titelzeile N Anzahl der Spieler innerhalb einer Partie P.1 Punkte des Spielers mit der größten Punktezahl : : P.n Punkte des Spielers mit der geringsten Punktezahl PN Kürzel für 'P.n' A$* Für jedes Attribut <attrib> ist ein Symbol 'A$<attrib>' definiert. SM$* Für den ScanMode, mit dem diese Tabelle eingelesen worden ist, ist das Symbol 'SM$<name>' definiert. Mit dieser Formel werden Tabellen für eine Auswertung ausgewählt. Ist der Rückgabewert >0.0, dann wird die Tabelle mit dem Rückgabewert als Gewichtung (-->WEIGHT) für die folgenden Auswertungen verwendet. Andernfalls wird die Tabelle nicht verwendet. =============================== TRANSFORM (-->define transformation) Variablendefinition mittels `VARIABLE' möglich (siehe vorheriges Kapitel) Standardformel: 'P/MEAN' Variablen: WEIGHT Gewichtung der Partie := Ergebnis von SELECT FIRST Punkte des besten Spielers MEAN arithmetisches Mittel der Spielerpunkte MEDIAN Median der Spielerpunkte MIDDLE spezieller gewichteter Mittelpunkt der Spielerpunkte BINOMIAL Mittelwert mit Binomialgewichtung der Spielerpunkte N Anzahl der Spieler innerhalb einer Partie I Index des aktuellen Spielers, [1..N] J Index von `hinten', J := N+1 - I, [N..1] M M := (N+3)/2 - min(I,J) --> z.B. 1,2,3,4,5,4,3,2,1 V Ergebnis der vorherigen Berechnung R Rang des aktuellen Spielers. Spieler mit der gleichen Punktezahl erhalten den gleichen niedrigen Rang, z.B. 1,2,2,2,5,6,6,8 RN Anzahl der Spieler, die den gleichen Rang 'R' haben P Punkte des aktuellen Spielers P.1 Punkte des Spielers mit der größten Punktezahl : : P.n Punkte des Spielers mit der geringsten Punktezahl PN Kürzel für 'P.n' B Binomialkoeffizient des aktuellen Spielers B.1 Binomialkoeffizient des ersten Spielers : : B.n Binomialkoeffizient des letzten Spielers Als Vorbereitung für die aktuelle Berechnung der Spielerstärken werden die Spielerdaten transformiert. =============================== CALCULATE (-->define playerlevel) Standardformel: 'SUM/WSUM' Variablen: SUM Summe der gewichteten Einzelbewertungen WSUM Summe der Gewichtungen BEST Bestes Einzelergebnis des Spielers WBEST Gewichtungsfaktor des besten Einzelergebnisses WORST Schlechtestes Einzelergebnis des Spielers WWORST Gewichtungsfaktor des schlechtesten Einzelergebnisses N Anzahl der Ergebnisse in den Summen Innerhalb des iterativen Verfahrens, welches mindestens einmal durchlaufen wird, werden die gewichteten (-->WEIGHT) Bewertungen der Spieler in den einzelnen Partien (-->CALCULATE/gamelevel) in der Variable SUM aufsum- miert. WSUM enthält dann die Summe der Gewichtungen. Sind alle diese Gewichtungen '1.0', dann ist WSUM == N. Nach der Berechnung für alle Spieler erfolgt eine Normierung der Spieler- stärken. Dabei wird jeder Spielerwert mit demselben Faktor multipliziert, so daß die Summe der Spielerstärken gleich der Anzahl der Spieler ist. =============================== CALCULATE (-->define gamelevel) Standardformel: 'WEIGHT * P * (SUMLEVEL-LEVEL) / (N-1)' Variablen: WEIGHT Gewichtung der Partie := Ergebnis von SELECT LEVEL Stärke des aktuellen Spielers := Ergebnis von CALCULATE/playerlevel SUMLEVEL Summe der Stärken alle Spieler dieser Partie GAMELEVEL Partiestärke := SUMLEVEL/N N Anzahl der Spieler P Punkte des aktuellen Spielers Innerhalb des iterativen Verfahrens, welches mindestens einmal durchlaufen wird, wird die Stärke jeder Partie aus dem arithmetichen Mittel der Spielerstärken berechnet. Mit Hilfe dieser Formel wird die subjektive Partienstärke eines jeden Spielers berechnet. So werden z.B. in der Standardformel nur die Stärken der Gegner verwendet, indem die eigene Stärke wieder herausgerechnet wird. Verzichtet man auf den Faktor WEIGHT, so sollte bei CALCULATE/playerlevel die Formel 'SUM/N' anstatt 'SUM/WSUM' verwendet werden. =============================== SORT (-->define sortmode) Standardformel: 'LEVEL' Variablen: LEVEL Spielerstärke des Spielers nach der letzten Berechnung von CALCULATE/playerlevel nach der Normierung. LEVEL0 Spielerstärke des Spielers nach der letzten Berechnung von CALCULATE/playerlevel vor der Normierung. GROUP Gruppennummer des Spielers N Anzahl der Partien des Spielers * Variablen, die spielerbezogen durch den Befehl TRANSFER definiert worden sind. Mit dieser Formel wird die Sortierung der Spieler inklusive Rangberechnung bestimmt. Spieler mit dem höchsten Wert werden als erstes ausgegeben. Spieler mit gleichem Ergebnis erhalten die gleiche Rangnummer. =============================== HEADER, TRAILOR (-->define printplayer) Standardformel: '' Variablen: NP Anzahl der Spieler innerhalb einer Partie Das Ergebnis dieser beiden Formeln wie unmittelbar vor (HEADER) und nach (TRAILOR) der folgenden Formel (PLAYER) ausgegeben. Damit kann der Kopf und der Fußbereich einer Spielertabelle festgelegt werden. PLAYER (-->define printplayer) Standardformel: 'print('%4d. %-25s %8.3f',I,NAME,LEVEL)' Variablen: I Index des aktuellen Spielers, [1..N] R Rang des aktuellen Spielers. Spieler mit der gleichen Sortierwert erhalten den gleichen niedrigen Rang, z.B. 1,2,2,2,5,6,6,8 RN Anzahl der Spieler, die den gleichen Rang 'R' haben NAME Name des aktuellen Spielers ID ID des aktuellen Spielers LEVEL Stärke des Spielers nach der letzten Berechnung von CALCULATE/playerlevel nach der Normierung. LEVEL0 Stärke des Spielers nach der letzten Berechnung von CALCULATE/playerlevel vor der Normierung. GROUP Gruppennummer des Spielers N Anzahl der Partien des Spielers * Variablen, die spielerbezogen durch den Befehl SAVEPLAYER definiert worden sind. Bei der Ausgabe einer kompletten Spielerliste mittels des Kommandos PRINTPLAYER wird zuerst HEADER, danach für jeden Spieler das Ergebnis dieser Formel und danach TRAILOR ausgegeben. =============================== HEADER, TRAILOR (-->define printgame) Standardformel: '' Variablen: FACTOR Gewichtungsfaktor, der bei der Partie angegeben wurde ('*nnn') WEIGHT Gewichtung der Partie := Ergebnis von SELECT FIRST Punkte des besten Spielers MEAN Arithmetisches Mittel der Spielerpunkte MEDIAN Median der Spielerpunkte MIDDLE spezieller gewichteter Mittelpunkt der Spielerpunkte BINOMIAL Mittelwert mit Binomialgewichtung der Spielerpunkte GAMELEVEL Stärke dieser Partie, entsprich der Variable GAMELEVEL aus der Formel CALCULATE/gamelevel GAMEGROUP Gruppennummer der Partie SRCFILE Dateiname der Quelldatei SRCLINE Zeilenummer innerhalb der Quelldatei SRCDATE Zeit der Quelldatei im BinTime-Format (->STREAM.HTM) GAMEDATE Zeit der Partie im DateTime-Format (->STREAM.HTM) GAMEID ID der Partie TITLE Titelzeile des Spieles TEXT Textueller Kommentar innerhalb der Titelzeile NP Anzahl der Spieler innerhalb einer Partie * Variablen, die partienbezogen durch den Befehl SAVEGAME definiert worden sind. Das Ergebnis dieser beiden Formeln wird unmittelbar vor (HEADER) und nach (TRAILOR) der folgenden Formel (PLAYER) ausgegeben. Damit kann der Kopf und der Fußbereich jedes Partienberichts festgelegt werden. PLAYER (-->define printgame) Standardformel: 'print('%4d. %-25s %8.3f',I,NAME,LEVEL)' Variablen: I Index des aktuellen Spielers, [1..N] NAME Name des aktuellen Spielers ID ID des aktuellen Spielers POS Position des Spielers beim Einlesen der Tabelle LEVEL Stärke des Spielers nach der letzten Berechnung von CALCULATE/playerlevel nach der Normierung. LEVEL0 Stärke des Spielers nach der letzten Berechnung von CALCULATE/playerlevel vor der Normierung. GLEVEL Subjektive Stärke des Spielers in dieser Partie, Ergebnis von CALCULATE/gamelevel GROUP Gruppennummer des Spielers N Anzahl der Partien des Spielers P0 Punkte des Spielers vor der ersten Transformation P Punktezahl des Spielers nach allen Transformationen FACTOR Gewichtungsfaktor, der bei der Partie angegeben wurde ('*nnn') WEIGHT Gewichtung der Partie := Ergebnis von SELECT FIRST Punkte des besten Spielers MEAN Arithmetisches Mittel der Spielerpunkte MEDIAN Median der Spielerpunkte MIDDLE spezieller gewichteter Mittelpunkt der Spielerpunkte BINOMIAL Mittelwert mit Binomialgewichtung der Spielerpunkte GAMELEVEL Stärke dieser Partie, entsprich der Variable GAMELEVEL aus der Formel CALCULATE/gamelevel SRCFILE Dateiname der Quelldatei SRCLINE Zeilenummer innerhalb der Quelldatei SRCDATE Zeit der Quelldatei im BinTime-Format (->STREAM.HTM) GAMEDATE Zeit der Partie im DateTime-Format (->STREAM.HTM) GAMEID ID der Partie NP Anzahl der Spieler innerhalb einer Partie * Variablen, die spielerbezogen durch den Befehl TRANSFER definiert worden sind. Bei der Ausgabe einer kompletten Partienliste mittels des Kommandos PRINTGAMES wird für jede Partie zuerst HEADER, danach für jeden Spieler das Ergebnis dieser Formel und danach TRAILOR ausgegeben.
--- ??? --- |
Es existieren vier Ausgabekanäle: - stderr - Ausgabedatei via OUTPUT - Fehlerdatei via ERRORLOG - Druckdatei via PRINTFILE Über `stderr' werden Ausgaben gemäß LOG-Mode vorgenommen. Die Ausgabedatei enthält alle vom Programm erzeugten Ausgaben. In die Fehlerdatei werden alle Informationen gemäß LOG-Mode ALL sowie alle Fehler ausgegeben. Ist keine Fehlerdatei angegeben, so werden die Fehlermeldungen in die Ausgabedatei geschrieben. In die Ausgabedatei werden alle Listen durch LIST und zusätzliche Informationen geschrieben. In die Druckdateien werden alle Ausgaben durch PRINTGAME und PRINTPLAYER geschrieben.