Page 1 of 1

[Prog] Broncode Reeks 5

Posted: Tue Nov 29, 2005 4:42 pm
by Nickman
Lotto.Mod

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.
Lotto.Tool

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)
Voor degene die willen kunnen we is een PC speedtestje doen met 10.000.000 in te geven voor het aantal formulieren en je aantal seconden hier te posten :).

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.

Posted: Tue Nov 29, 2005 4:47 pm
by EagleEye812
Nice job. Leuk timerke :D da zal ik er bij mij ook eens inzette ;)

Alleen denk ik dat "ze" liever hebben dat ge uw testprocedure in een andere module LottoTest.Mod zetten. Niet belangrijk voor deze reeksen natuurlijk maar wel als je iets van deze soort moet afgeven.

Posted: Tue Nov 29, 2005 5:07 pm
by Nickman
Ja, die test is eigenlijk gewoon het uitvoeren he, niet echt specifiek een test... :)
Maar je hebt wel gelijk ;)

Posted: Tue Nov 29, 2005 5:16 pm
by EagleEye812
Idd, omdat bij u het toch allemaal random gegenereerd is maakt het weinig uit he ,

Posted: Tue Nov 29, 2005 5:43 pm
by EagleEye812
magk effe vragen waar dit in godsnaam op slaat? :D

Code: Select all

IF i = 0 THEN
            OutExt.String(" juiste cijfer");
         ELSE
            OutExt.String(" juiste cijfers");
         END; 
doe dan 1 en juist cijfer
met 0 is het wel cijfers e (en why moet gij 0 juiste cijfers weergeve:p)

ik heb ni heel uw code doornomen maar moet het dan niet dit zijn:

Code: Select all

IF i = 1 THEN
            OutExt.String(" juist cijfer");
         ELSE
            OutExt.String(" juiste cijfers");
         END; 

Posted: Tue Nov 29, 2005 6:32 pm
by Nickman
Oeps, ja ik had daar een denkfoutje gemaakt door 0 niet mee te rekenen als mogelijheid van aantal juiste cijfers, en ik ben vergeten dat aan te passen :D
En ja, die juiste is ook dom :D

thx ;)

Posted: Tue Nov 29, 2005 6:51 pm
by EagleEye812
denkstapje :D

Posted: Tue Nov 29, 2005 7:45 pm
by Norfolk
bij mij heb ik die 5 minuten laten lopen en bleef maar gaan voor 10 miljoen :D uiteindelijk maar gestopt

Posted: Wed Nov 30, 2005 5:05 pm
by EagleEye812
Mijn programma met 10.000.000 formulieren:

Code: Select all

Bezig met toevoegen random formulieren...

30  <= 11  <= 16  <= 21  <= 6  <= De winnende nummers zijn: 6 11 16 21 30 

 WHILE LOOP BEGINT 
683117 is een winnaar.
780203 is een winnaar.
972054 is een winnaar.
1036098 is een winnaar.
1191766 is een winnaar.
1259069 is een winnaar.
1373337 is een winnaar.
1379080 is een winnaar.
1494423 is een winnaar.
(...)
8585182 is een winnaar.
9708500 is een winnaar.
Er zijn 55 winnaars!
De simulatie heeft   21.46900 seconden geduurd.
Deze code checkt ENKEL op winnaars met 5 cijfers moet ik er wel bijzeggen ;) hehe

EDIT: Is da trouwens normaal dat ik altijd tussen de 50 en 60 winnaars heb op 10 miljoen?

Posted: Wed Nov 30, 2005 6:24 pm
by Norfolk
maak nu een programma dat de verwachtingswaarde berekent :D zie wiskunde lol

Posted: Thu Dec 01, 2005 10:58 am
by EagleEye812
Hmm, mijn code een beetje getweaked :D

Code: Select all

Bezig met toevoegen random formulieren...

31 -> 3 -> 19 -> 8 -> 26 -> De winnende nummers zijn: 3 8 19 26 31 

100294, 121410, 264469, 395218, 1106275, 1220543, 1234238, 2460480, 2560032, 2575547, 3041972, 3232923, 3615312, 3767520, 4322836, 4438650, 4579406, 4812030, 5167827, 5666250, 5819624, 5926703, 6297236, 6750222, 6771064, 6902650, 6984287, 7024824, 7876691, 7928521, 7976279, 8592551, 8795869, 9073321, 9118081, 9278917, 9675397, 9762420, 9846905, 9903923, zijn winnaars met 5 cijfers.

Er zijn 40 winnaars!
Er zijn 10000000 formulieren aangemaakt en vergeleken.
De simulatie heeft  8.00 seconden geduurd.
:P

Posted: Thu Dec 01, 2005 12:37 pm
by Nickman
Heb nog eens getest met Drik zijn code en met de neiuwste versie van oberon (2.5 te intaleren):

Code: Select all

Bezig met toevoegen random formulieren...

29 -> 31 -> 14 -> 31 -> 20 -> 15 -> De winnende nummers zijn: 14 15 20 29 31 

249992, 268743, 566500, 686047, 858634, zijn winnaars met 5 cijfers.

Er zijn 5 winnaars!
Er zijn 1000000 formulieren aangemaakt en vergeleken.
De simulatie heeft  1.03 seconden geduurd.

Bezig met toevoegen random formulieren...

31 -> 11 -> 12 -> 0 -> 21 -> De winnende nummers zijn: 0 11 12 21 31 

811491, 1135337, 1346122, 1741929, 1755499, 1784066, 2080486, 2188198, 2811999, 2848131, 2885313, 3301242, 3436102, 3552311, 3715332, 3792358, 3976126, 4056063, 4264560, 4763315, 4763974, 4819669, 4841424, 4903541, 5174553, 5973995, 6048762, 6115385, 6149555, 6314336, 6613770, 6972539, 7100952, 7239372, 7241433, 7358020, 7386653, 7555044, 7907525, 8012533, 8971109, 9115589, zijn winnaars met 5 cijfers.

Er zijn 42 winnaars!
Er zijn 10000000 formulieren aangemaakt en vergeleken.
De simulatie heeft  26.88 seconden geduurd.
Geeft wel effe een verschilleke :D tegenover bijna 500 seconden.
Het verschil da er nu nog is is gewoon AMD VS INTEL :D
(binnekort nog is teste met win xp x64 ;))

Posted: Thu Dec 01, 2005 1:47 pm
by EagleEye812
Jup Intel is duidelijk beter daarin ze

Zelfde code, zelfde bewerkingen:
8,00 seconden op ne Pentium M Centrino 750 1.86 Ghz
27,08 seconden op AMD Athlon XP 3000+ (32bit)

zou toch ni zoveel moge schelen he :p

zie ook deze website...

Posted: Sun Nov 12, 2006 8:31 pm
by Pfrancing
Wat je kunt winnen bij de (Nederlandse en de Belgische) lotto kun je nu ook online zien.

Op de website www.lottotest.nl kun je 6 getallen aanklikken en gelijk duizend trekkingen (of een veelvoud daarvan) uitvoeren. Je ziet dan wat de hoogste prijs is die je hebt binnengesleept en wat je per ingelegde Euro hebt 'terugverdiend'.

Niet erg hoopgevend, wel erg leuk om te zien! :o

Posted: Sun Jan 07, 2007 2:23 pm
by Nickman
En het nut van deze reply is? :D