home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / Chip_2004-07_cd1.bin / tema / aos / files / Oberon.exe / Oberon / Docu.exe / Docu / Simulator.Mod (.txt) < prev    next >
Oberon Text  |  2000-02-29  |  1KB  |  34 lines

  1. Oberon10.Scn.Fnt
  2. (* ETH Oberon, Copyright 2000 ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich.
  3. Refer to the "General ETH Oberon System Source License" contract available at: http://www.oberon.ethz.ch/ *)
  4. MODULE Simulator; (** portable *)    (*JG 10.10.93*)
  5.     IMPORT Display, Gadgets, Attributes, Diagrams;
  6.     VAR seed: LONGINT;
  7.     PROCEDURE Random (): REAL;
  8.         CONST a = 16807; m = 2147483647; q = m DIV a; r = m MOD a;
  9.     BEGIN
  10.         seed := a*(seed MOD q) - r*(seed DIV q);
  11.         IF seed <= 0 THEN seed := seed + m END;
  12.         RETURN seed * (1.0/m)
  13.     END Random;
  14.     PROCEDURE Start*;
  15.         VAR
  16.             a, b, r, x: LONGREAL; t, T: LONGINT; limited: BOOLEAN;
  17.             N: Diagrams.UpdateMsg;
  18.     BEGIN
  19.         Attributes.GetBool(Gadgets.FindObj(Gadgets.context, "Loss"), "Value", limited);
  20.         Attributes.GetLongReal(Gadgets.FindObj(Gadgets.context, "Mean"), "Value", x); b := 1/x;
  21.         Attributes.GetInt(Gadgets.FindObj(Gadgets.context, "Period"), "Value", T);
  22.         Attributes.GetLongReal(Gadgets.FindObj(Gadgets.context, "Load"), "Value", x); a := x/100 * b;
  23.         N.F := NIL; N.n := 0; t := 0;
  24.         REPEAT INC(t); r := Random ();
  25.             IF r < a THEN INC(N.n)
  26.             ELSIF (N.n > 0) & (r > 1-b) THEN DEC(N.n)
  27.             END;
  28.             Display.Broadcast(N);
  29.             IF limited & (N.res > 0) THEN DEC(N.n) END
  30.         UNTIL t >= T
  31.     END Start;
  32. BEGIN seed := 1235
  33. END Simulator.
  34.