#include<wuerfel.h> typedef enum { Unbk,Uniform,Det,Exponential,Erlang,Normal,Emp} Verttyp; class Verteilung { public: Verteilung(); Verteilung(long seedval) ; virtual double zufall()=0; int typ() ; virtual int scan(char *str)=0; }; class Uniformvert : public Verteilung { public: Uniformvert(); Uniformvert(double A,double B); Uniformvert(double A,double B,long seedval); void init(double A,double B) ; double zufall(); int scan(char *str); }; class Detvert : public Verteilung { public: Detvert(); Detvert(double W); void init(double W); double zufall(); int scan(char *str); }; class Exponentialvert : public Verteilung { public: Exponentialvert() ; Exponentialvert(double Lambda) ; Exponentialvert(double Lambda,long seedval); void init(double Lambda); double zufall(); int scan(char *str); }; class Erlangvert : public Verteilung { public: Erlangvert() ; Erlangvert(int K,double Lambda) ; Erlangvert(int K,double Lambda,long seedval); void init(int K,double Lambda); double zufall(); int scan(char *str); }; class Normalvert : public Verteilung { public: Normalvert() ; Normalvert(double Mue,double Sigma) ; Normalvert(double Mue,double Sigma,long seedval); void init(double Mue,double Sigma); double zufall(); int scan(char *str); }; class Empvert : public Verteilung { public: Empvert(); Empvert(char *datname); ~Empvert(); void init(char *datname); int scan(char *datname); double zufall(); }; Verteilung *lesevert(char *str); Verttyp testvert(char *str,char **ptr);
Alle Verteilungen haben eine Operation zufall die eine Zufallszahl erzeugt sowie eine Operation scan die eine Verteilungsklasse mit dem Namensstring (z.B U(0.5,2.7) fuer die Uniforme Verteilung im Intervall [a,b) ) initialisert. Diese Operation liefert 0 falls streine gueltige Verteilungsbeschreibung ist, andernfalls einen Wert ungleich 0.
Die Operation typ liefert den Typ der Verteilung, die mit dem Aufzaehltyp Verttyp beschrieben wird.
Die konkreten Verteilungen koennen entweder mit ihrem Konstruktor,der Operation init oder der Operation scan initialisiert werden.
Bei der empirischen Verteilung Empvert wird als Parameter bei den Konstruktoren und Operationen init und scan ein Name einer empirischen Dichtefunktionsdatei (vgl. emp(5)) uebergeben. Die Datei wird eingelesen und intern aufintegriert. Ist das Integral > 1.0 so liegt keine Dichte vor, und eine Fehlermeldung wird ausgegeben. Im Fall, das das Integral <= 1 ist, dann wird das korrigiert.