Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi random (https://www.delphipraxis.net/48852-random.html)

glitterangel87 1. Jul 2005 09:12


random
 
hi! ich möchte eine Lottoziehung simulieren. deshalb habe ich randomize (bzw. random) verwendet. aber wie bekannt ist, gehen die zahlen bei lotto erst ab 1 los. jetzt hatte ich mir eigentlich gedacht, wenn ich eingebe

v:=random(49)+1;

dass keine 0 kommen sollte. denkste. wie mach ich das? kann mir BITTE wer helfen?

lg ~glitterangel

Matze 1. Jul 2005 09:15

Re: random
 
Das stimmt aber schon so :gruebel:

Kompon Ente 1. Jul 2005 09:16

Hi,

also ich hab mal ein Würfel programmiert und da hab ich's exakt so gemacht.

Bei mir funktioniert's! :|

Deshalb -> kA!

alcaeus 1. Jul 2005 09:17

Re: random
 
Hallo GlitterAngel87,

hast du auch einen Randomize()-Aufruf im OnCreate des Forms? Evtl. ist das das Problem ;)

Greetz
alcaeus

Treffnix 1. Jul 2005 09:19

Re: random
 
Auch ohne Randomize dürfte keine 0 kommen. Poste doch mal die ganze Funktion.

Matze 1. Jul 2005 09:20

Re: random
 
Zitat:

Zitat von alcaeus
hast du auch einen Randomize()-Aufruf im OnCreate des Forms? Evtl. ist das das Problem ;)

Das bewirkt doch nur, dass bei jedem Programmstart nicht die gleichen "Zufallszahlen" erzeugt werden. Das obige Beispiel sollte ohne Randomize doch genauso funktionieren. :?

ste_ett 1. Jul 2005 09:51

Re: random
 
Exakt.

Zitat:

In Delphi gibt Random eine Zufallszahl im Bereich 0 <= X < Range zurück. Wird der Parameter Range nicht angegeben, liefert Random einen Real-Wert im Bereich 0 <= X < 1.
"random(49)+1" liefert (0-48 ) + 1, also 1 - 49.

glitterangel87 1. Jul 2005 10:54

Re: random
 
das ist das ganze! und ich schwör euch: gestern sind mir sooo oft 0 gekommen, da hab ich mir gedacht, ich dreh gleich durch!

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   for i:= 1 to 6 do
    begin
      randomize;
      a[i]:=random(49)+1;
    end;
   repeat
     c:=true;
     for i:= 1 to 5 do
      begin
        if a[i]>a[i+1] then
         begin
           h:=a[i];
           a[i]:=a[i+1];
           a[i+1]:=h;
           c:=false;
         end;
      end;
   until c;
   Label1.Caption:= IntToStr(a[1]);
   Label2.Caption:= IntToStr(a[2]);
   Label3.Caption:= IntToStr(a[3]);
   Label4.Caption:= IntToStr(a[4]);
   Label5.Caption:= IntToStr(a[5]);
   Label6.Caption:= IntToStr(a[6]);

end;
wo kann der fehler liegen?

[edit=alcaeus]Delphi-Tags eingefuegt. In Zukunft bitte selbst machen. Danke Mfg, alcaeus[/edit]

marabu 1. Jul 2005 11:10

Re: random
 
Hallo Adela,

die Funktion Random() ist zwar ganz nützlich für das Ziehen der Lottozahlen, aber alleine schafft sie das dann doch nicht. Die Funktion Random() garantiert dir über einen ausgeklügelten mathematischen Ansatz eine ausreichend gute Gleichverteilung der Funktionswerte bei entsprechend großen Stichproben, aber sie garantiert dir keine Duplikatfreiheit bei den ersten 6 Werten.

Du wirst dir etwas überlegen müssen, damit bei der Ziehung der zweiten Zahl die erste nicht wieder Teil der Ziehungsmenge ist.

Grüße vom marabu


Ein Beispiel:

Delphi-Quellcode:
type
  TOddSet = set of byte;

var
  Ziehung: TOddset;

procedure Draw(count, total: byte; var oddSet: TOddSet);
begin
  oddSet := [];
  while SizeOf(oddSet) < count do
    oddSet := oddSet + [Succ(Random(total))];
end;

Treffnix 1. Jul 2005 11:12

Re: random
 
Also ich habs gerade mal getestet und ich hatte nicht einmal ne 0. Selbst wenn ich die Range auf 1 geändert habe. Zum Lottospielen solltest du aber noch überprüfen, ob eine Zahl bereits vorkam.

Wie hast du denn die Variablen deklariert?

Habs jetzt mal so angenommen:
Delphi-Quellcode:
var i, h: Integer;
    c: Boolean;
    a: array[1..6] of Integer;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz