![]() |
randomize result ???
Hi,
ich hab in einem Programm eine Funktion die Zufallszahlen im Integer-Format erzeugt, ganz einfach über randomize und random. Diese Funktion wird aus einer anderen mehrmals aufgerufen, aber gibt immer das gleiche result aus :-( . Ich denke die Zufallsfunktion wird nur einmal ausgeführt und gibt dann immer ihr result zurück, ich brauch es aber unbedingt, dass sie mehrmals ausgeführt wird! Eben für verschiedene Zahlen. danke, Czapie. |
Re: randomize result ???
Zitat:
Poste doch mal die entscheidende Funktion. |
Re: randomize result ???
Hi,
Zitat:
Code:
Quelle : OH.
procedure Zufall;
var I: Integer; begin Randomize; for I := 1 to 50 do begin { Ausgabe an zufälligen Positionen im Fenster } Canvas.TextOut(Random(Width), Random(Height), 'Fang mich!'); end; end; Merke : vor jeder Zufallszahl randomize aufrufen :!: Sonst ist der Zufall ein gespeicherter. Gruß Hansa |
Re: randomize result ???
Zitat:
...:cat:... |
Re: randomize result ???
Zitat:
Also: randomize() nur einmal aufrufen. Das hat folgenden Grund: randomize() ermittelt einen Startwert für eine Zufallszahlenfolge. Mit diesem Startwert wird etwas getan, sodass sich eine möglichst nicht vorhersehbare Zahl daraus ergibt, jedoch ist die Operation, die mit dem Startwert getätigt wird, immer die gleiche. Jetzt kommt der Knackpunkt: randomize() ermittelt den Startwert anhand der aktuellen Uhrzeit. Ruft man randomize() schnell mehrmals hintereinander auf, ändert sich die Zeit nur so geringfügig, dass randomize() dies nicht registriert. Das bedeutet, dass man jedes Mal denselben Startwert bekommt, also auch dieselbe "Zufallszahl". Das ist definitiv nicht das, was man will. MfG, d3g |
hier kriege ich immer unterschiedliche Zahlen, Maximal-Wert 100 !
Code:
Gruß
procedure TForm1.Label1Click(Sender: TObject);
begin randomize; Label1.Caption := IntToStr (random (100)); end; Hansa |
Weil sich in der Zwischenzeit die Uhrzeit "grundlegend" ändert. Randomize wird über den internen Zeitgeber initialisiert. Wenn Du jedoch Randomize 100 Mal direkt nacheinander aufrufst und je eine Zufallszahl aus dem gleichen Bereich holst, dann ist der Zufall weg.
Delphi-Quellcode:
// ein form mit memo und button
procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin for I := 0 to 99 do begin Randomize; Memo1.Line.Add(IntToStr(Random(100))); end; end; |
Re: randomize result ???
Hi,
Zitat:
Gruß Hansa |
Der letzte Beitrag erklärt das Randomize-Problem
![]() |
Hi,
auf die Idee zu suchen bin ich noch gar nicht gekommen. :mrgreen: Daß es dazu etwas gibt, liegt fast auf der Hand. Aber das mit den 18tel Sekunden ? Ist das tatsächlich noch so ? Das habe ich noch in Erinnerung aus Urzeiten, 386er oder so. :shock: Sagenhaft! Trotzdem : das randomize steht wahrscheinlich nur an falscher Stelle. Gruß Hansa |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr. |
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