Code: Select all
MODULE Lotto;
(*
Doel: Een lottotrekking simuleren
Auteur: Nick De Frangh
Datum: 29-11-05
Versie: 1.1
*)
IMPORT
OutExt, RandomNumbers, In, Oberon;
TYPE
FORMULIEREN = POINTER TO Formulier;
Formulier =
RECORD
getallen: SET;
next: FORMULIEREN;
END;
VAR
Form: FORMULIEREN;
PROCEDURE Add*(aantal: LONGREAL);
(*
Omschrijving : Een aantal lottoformulieren met 5 randomgetallen invullen
Parameters :
aantal : Het aantal lottofomulieren er toegevoegd zullen worden
Returntype : -
Algoritme : -
*)
VAR
CurrNode: FORMULIEREN;
TempNode: FORMULIEREN;
Test: BOOLEAN;
i: INTEGER;
getal: LONGINT;
Trekking: Formulier;
BEGIN
IF aantal = 0 THEN HALT(60) END;
NEW(Form);
CurrNode := Form;
FOR i := 0 TO 4 DO
REPEAT
Test := TRUE;
getal := ENTIER(RandomNumbers.Uniform() * 32);
IF (getal IN Trekking.getallen) THEN
Test := FALSE;
END;
UNTIL Test;
INCL(CurrNode^.getallen, getal);
END;
REPEAT
NEW(TempNode);
FOR i := 0 TO 4 DO
REPEAT
Test := TRUE;
getal := ENTIER(RandomNumbers.Uniform() * 32);
IF (getal IN Trekking.getallen) THEN
Test := FALSE;
END;
UNTIL Test;
INCL(TempNode^.getallen, getal)
END;
CurrNode^.next := TempNode;
CurrNode := CurrNode^.next;
aantal := aantal - 1;
UNTIL (ENTIER(aantal) = 0);
END Add;
PROCEDURE Simulate*;
(*
Omschrijving : De ingevulde formulieren vergelijken met een rqndomtrekking van getallen
Parameters : -
Returntype : -
Algoritme : -
*)
VAR
Trekking: Formulier;
i, n, j: INTEGER;
getal: LONGINT;
Test: BOOLEAN;
aantal: ARRAY 6 OF LONGINT;
TempNode: FORMULIEREN;
BEGIN
FOR i := 0 TO 4 DO
REPEAT
Test := TRUE;
getal := ENTIER(RandomNumbers.Uniform() * 32);
IF (getal IN Trekking.getallen) THEN
Test := FALSE;
END;
UNTIL Test;
INCL(Trekking.getallen, getal);
END;
OutExt.String("De winnende getallen zijn!");
OutExt.Ln;
j := 0;
FOR i := 0 TO 31 DO
IF i IN Trekking.getallen THEN
OutExt.Int(i, 0);
OutExt.String(" ");
IF (i > j) THEN
j := i;
END;
END;
END;
OutExt.Ln;
OutExt.Ln;
Test := FALSE;
TempNode := Form;
REPEAT
n := 0;
FOR i := 0 TO j DO
IF (i IN Trekking.getallen) & (i IN TempNode^.getallen) THEN
INC(n);
END;
END;
TempNode := TempNode^.next;
INC(aantal[n]);
UNTIL TempNode = NIL;
FOR i := 1 TO 5 DO
OutExt.String("Er zijn ");
OutExt.Int(aantal[i], 0);
OutExt.String(" personen met ");
OutExt.Int(i, 0);
IF i = 1 THEN
OutExt.String(" juist cijfer");
ELSE
OutExt.String(" juiste cijfers");
END;
OutExt.Ln;
END;
END Simulate;
PROCEDURE Run*;
(*
Omschrijving : De trekking laten lopen
Parameters : -
Returntype : -
Algoritme : -
*)
VAR
Temp: LONGREAL;
Time1, Time2: LONGINT;
Time3: REAL;
BEGIN
Time1 := Oberon.Time();
In.Open();
In.LongReal(Temp);
Add(Temp);
Simulate();
Time2 := Oberon.Time();
Time3 := ((Time2 - Time1) / 1000);
OutExt.Ln;
OutExt.String("De simulatie heeft ");
OutExt.Color(1);
OutExt.RealFix(Time3, 0, 5);
OutExt.Color(15);
OutExt.String(" seconden geduurd.");
END Run;
BEGIN
OutExt.Open();
OutExt.Clear;
END Lotto.
Code: Select all
(*
Auteur: Nick De Frangh
Date: 29-11-05
*)
Builder.Compile \ws
OutExt.Mod
Lotto.Mod
~
Builder.Compile \f*
System.Free
Lotto.Mod
OutExt.Mod
~
Lotto.Run 10000000~ (kan effe duren, dus best getal verminder om gewoon te testen :D)

greetz

-------------------------
Dit is mijn tijd voor 10.000.000 formulieren:
De winnende getallen zijn!
0 16 17 22 25
Er zijn 4261481 personen met 1 juiste cijfers
Er zijn 1309525 personen met 2 juiste cijfers
Er zijn 144961 personen met 3 juiste cijfers
Er zijn 5284 personen met 4 juiste cijfers
Er zijn 34 personen met 5 juiste cijfers
De simulatie heeft 439.31299 seconden geduurd.