Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi randomize result ??? (https://www.delphipraxis.net/2174-randomize-result.html)

czapie 10. Jan 2003 18:28


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.

Sharky 10. Jan 2003 18:34

Re: randomize result ???
 
Zitat:

Zitat von czapie
Hi,
... ganz einfach über randomize und random. ...

Rufst Du randomize auch immer wieder neu auf? Das wäre IMHO falsch.

Poste doch mal die entscheidende Funktion.

Hansa 10. Jan 2003 18:56

Re: randomize result ???
 
Hi,

Zitat:

Zitat von "Sharky
Rufst Du randomize auch immer wieder neu auf? Das wäre IMHO falsch.

NEIN. Wäre nicht falsch, sondern richtig, da er das nicht macht, kommt immer dieselbe Zahl, die mit dem randomize am Anfang erzeugt wurde !!

Code:
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;
Quelle : OH.

Merke : vor jeder Zufallszahl randomize aufrufen :!: Sonst ist der Zufall ein gespeicherter.

Gruß
Hansa

sakura 10. Jan 2003 19:00

Re: randomize result ???
 
Zitat:

Zitat von Hansa
Hi,

Zitat:

Zitat von Sharky
Rufst Du randomize auch immer wieder neu auf? Das wäre IMHO falsch.

NEIN. Wäre nicht falsch, sondern richtig, da er das nicht macht, kommt immer dieselbe Zahl, die mit dem randomize am Anfang erzeugt wurde !!

Hi Hansa, ich glaube Du hast Sharky falsch verstanden, lass mal das auch aus seinem Satz ;)
...:cat:...

d3g 10. Jan 2003 19:07

Re: randomize result ???
 
Zitat:

Zitat von Hansa
Merke : vor jeder Zufallszahl randomize aufrufen :!: Sonst ist der Zufall ein gespeicherter.

Irgendwie wiedersprichst du dich selber. Erst postest du was aus der OH, in der randomize() nur einmal aufgerufen wird, dann sagst du genau das Gegenteil.

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

Hansa 10. Jan 2003 19:09

hier kriege ich immer unterschiedliche Zahlen, Maximal-Wert 100 !

Code:
procedure TForm1.Label1Click(Sender: TObject);
begin
  randomize;
  Label1.Caption := IntToStr (random (100));
end;
Gruß
Hansa

sakura 10. Jan 2003 19:13

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;

Hansa 10. Jan 2003 19:21

Re: randomize result ???
 
Hi,

Zitat:

Zitat von d3g
...Also: randomize() nur einmal aufrufen... Jetzt kommt der Knackpunkt: randomize() ermittelt den Startwert anhand der aktuellen Uhrzeit.

Gebe zu, das da könnte so sein ! Zu schnell gelesen. :chat: Obwohl man annehmen sollte, daß die Uhrzeit in Millisekunden mitläuft. Anscheinend ist das "randomize" bei Dir nur an der falschen Stelle. Das random bezieht sich auf das randomize, das ist der Ursprungswert. Aber wenn Du das aufruft, ists auch egal, dann wird eben nur der Startwert geändert. Das reicht doch jetzt ?

Gruß
Hansa

sakura 10. Jan 2003 19:25

Der letzte Beitrag erklärt das Randomize-Problem

http://www.delphipraxis.net/viewtopi...hlight=sekunde

Hansa 10. Jan 2003 19:48

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.
Seite 1 von 3  1 23      

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