AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

randomize result ???

Ein Thema von czapie · begonnen am 10. Jan 2003 · letzter Beitrag vom 11. Jan 2003
Antwort Antwort
Seite 1 von 3  1 23      
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#1

randomize result ???

  Alt 10. Jan 2003, 18:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: randomize result ???

  Alt 10. Jan 2003, 18:34
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: randomize result ???

  Alt 10. Jan 2003, 18:56
Hi,

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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: randomize result ???

  Alt 10. Jan 2003, 19:00
Zitat von Hansa:
Hi,

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
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#5

Re: randomize result ???

  Alt 10. Jan 2003, 19:07
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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 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;
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: randomize result ???

  Alt 10. Jan 2003, 19:21
Hi,

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. 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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 10. Jan 2003, 19:25
Der letzte Beitrag erklärt das Randomize-Problem

http://www.delphipraxis.net/viewtopi...hlight=sekunde
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10
  Alt 10. Jan 2003, 19:48
Hi,

auf die Idee zu suchen bin ich noch gar nicht gekommen. 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. Sagenhaft! Trotzdem : das randomize steht wahrscheinlich nur an falscher Stelle.

Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz