Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufall wiederholt sich?? (https://www.delphipraxis.net/72104-zufall-wiederholt-sich.html)

daredd 25. Jun 2006 19:40


Zufall wiederholt sich??
 
:wall: Mal ne frage ich habe jetz endlich ein Programm das Zufallszahlen auswirft.

Nun habe ich das Problem das sich die Zufalls zahlen wiederholen,
vor allem wenn ich das programm aus mache und wider neu starte kommen
jedesmal beim ersten Zufallsrechnen die selben zahlen raus. (doch nicht alles so zufällig???)

Was kann ich da machen, wie mach ich es so das wirklich immer neue zahlen bzw. zahlen kombinationen rauskommen??

[edit=Jelly]Bei deinem Code handelt es sich nicht um .NET Code, daher hab ich mal das Ganze wieder unter Delphi Wind32 umgestellt. Mfg, Jelly[/edit]

Nikolas 25. Jun 2006 19:42

Re: Zufall wiederholt sich??
 
Hast du an randomize gedacht? Diesen Befehl, der den Startwert der Zufallsfunktion zufällig setzt und einmal zu Programmbeginn aufgerufen werden soll?

zebrafalke 25. Jun 2006 19:43

Re: Zufall wiederholt sich??
 
Wie der Zufall so spielt, kann es durchaus sein, das er oft beim Start des Progs die selbe Zahl angibt...ist mir auch schon passiert... :)

MisterNiceGuy 25. Jun 2006 19:45

Re: Zufall wiederholt sich??
 
...was allerdings die Ausnahme sein sollte wenn man beim Programmstart
Delphi-Quellcode:
randomize;
aufruft ;)

daredd 25. Jun 2006 19:46

Re: Zufall wiederholt sich??
 
Zitat:

Zitat von Toxman
Hast du an randomize gedacht? Diesen Befehl, der den Startwert der Zufallsfunktion zufällig setzt und einmal zu Programmbeginn aufgerufen werden soll?


Ja klar habe ich das gemach, aber dennoch ist bei jedem start der programms immer die selbe zahlen folge.
immer ich habe es jetzt schon 50 mal probiert,
die zahlen werden immer gleich berechnet

TheAn00bis 25. Jun 2006 19:47

Re: Zufall wiederholt sich??
 
Zitat:

Zitat von zebrafalke
Wie der Zufall so spielt, kann es durchaus sein, das er oft beim Start des Progs die selbe Zahl angibt...ist mir auch schon passiert... :)

Das wird aber nur bei kleinen Bereichen vorkommen.

Rufst du

Delphi-Quellcode:
Randomize;
auch nur einmal auf?


Ansonsten zeig doch mal etwas Code.

daredd 25. Jun 2006 19:55

Re: Zufall wiederholt sich??
 
Zitat:

Zitat von TheAn00bis
Zitat:

Zitat von zebrafalke
Wie der Zufall so spielt, kann es durchaus sein, das er oft beim Start des Progs die selbe Zahl angibt...ist mir auch schon passiert... :)

Das wird aber nur bei kleinen Bereichen vorkommen.

Rufst du

Delphi-Quellcode:
Randomize;
auch nur einmal auf?


Ansonsten zeig doch mal etwas Code.





So klappt das jetz ich habe 2 mal randomize benutzt!!!!
ein mal:
Delphi-Quellcode:
var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.CreateForm(Sender: TObject);
begin
  Randomize;
end;
......
und dann noch direkt in der Prozedur wo dann die zahlen notiert werden:

Delphi-Quellcode:
procedure TForm1.Zufall(Sender: TObject);
const
  nZ181  = 7;
  nz182  = 9;
  nz183  = 9;
  sZ181  = 7;
  sz182  = 9;
  sz183  = 9;
  nZ261  = 7;
  nz262  = 9;
  nz263  = 9;
  sZ261  = 7;
  sz262  = 9;
  sz263  = 9;
  nZ341  = 7;
  nz342  = 9;
  nz343  = 9;
  sZ341  = 7;
  sz342  = 9;
  sz343  = 9;
  nZ421  = 7;
  nz422  = 9;
  nz423  = 9;
  sZ421  = 7;
  sz422  = 9;
  sz423  = 9;
  nZ491  = 7;
  nz492  = 9;
  nz493  = 9;
  sZ491  = 7;
  sz492  = 9;
  sz493  = 9;
  nZ581  = 7;
  nz582  = 9;
  nz583  = 9;
  sZ581  = 7;
  sz582  = 9;
  sz583  = 9;
  nZ661  = 7;
  nz662  = 9;
  nz663  = 9;
  sZ661  = 7;
  sz662  = 9;
  sz663  = 9;
  nZ741  = 7;
  nz742  = 9;
  nz743  = 9;
  sZ741  = 7;
  sz742  = 9;
  sz743  = 9;
  nZ821  = 7;
  nz822  = 9;
  nz823  = 9;
  sZ821  = 7;
  sz822  = 9;
  sz823  = 9;
begin
Randomize;
NSpin18.Text:=IntToStr(Random(nz181))+','+IntToStr(Random(nz182))+IntToStr(Random(nz183));
SSpin18.Text:=IntToStr(Random(sz181))+','+IntToStr(Random(sz182))+IntToStr(Random(sz183));
NSpin26.Text:=IntToStr(Random(nz261))+','+IntToStr(Random(nz262))+IntToStr(Random(nz263));
SSpin26.Text:=IntToStr(Random(sz261))+','+IntToStr(Random(sz262))+IntToStr(Random(sz263));
NSpin34.Text:=IntToStr(Random(nz341))+','+IntToStr(Random(nz342))+IntToStr(Random(nz343));
SSpin34.Text:=IntToStr(Random(sz341))+','+IntToStr(Random(sz342))+IntToStr(Random(sz343));
NSpin42.Text:=IntToStr(Random(nz421))+','+IntToStr(Random(nz422))+IntToStr(Random(nz423));
SSpin42.Text:=IntToStr(Random(sz421))+','+IntToStr(Random(sz422))+IntToStr(Random(sz423));
NSpin49.Text:=IntToStr(Random(nz491))+','+IntToStr(Random(nz492))+IntToStr(Random(nz493));
SSpin49.Text:=IntToStr(Random(sz491))+','+IntToStr(Random(sz492))+IntToStr(Random(sz493));
NSpin58.Text:=IntToStr(Random(nz581))+','+IntToStr(Random(nz582))+IntToStr(Random(nz583));
SSpin58.Text:=IntToStr(Random(sz581))+','+IntToStr(Random(sz582))+IntToStr(Random(sz583));
NSpin66.Text:=IntToStr(Random(nz661))+','+IntToStr(Random(nz662))+IntToStr(Random(nz663));
SSpin66.Text:=IntToStr(Random(sz661))+','+IntToStr(Random(sz662))+IntToStr(Random(sz663));
NSpin74.Text:=IntToStr(Random(nz741))+','+IntToStr(Random(nz742))+IntToStr(Random(nz743));
SSpin74.Text:=IntToStr(Random(sz741))+','+IntToStr(Random(sz742))+IntToStr(Random(sz743));
NSpin82.Text:=IntToStr(Random(nz821))+','+IntToStr(Random(nz822))+IntToStr(Random(nz823));
SSpin82.Text:=IntToStr(Random(sz821))+','+IntToStr(Random(sz822))+IntToStr(Random(sz823));
end;
Das klappt jetz so!!

Mystic 25. Jun 2006 20:31

Re: Zufall wiederholt sich??
 
Randomize sollte nur ein einziges Mal beim Programmstart aufgerufen werden!

Cyberbob 25. Jun 2006 22:14

Re: Zufall wiederholt sich??
 
Er hat aber geschrieben, das es erst ging, nachdem er es ein zweites mal geschriebne hat.

simlei 25. Jun 2006 22:41

Re: Zufall wiederholt sich??
 
Es ist aber trotzdem Schwachsinn, es kann sogar das Ergebnis verfälschen...
Als ich das vergleichsweise in Basic (ja schlagt mich) geschrieben hab hab ich ne 40%-ige Häufung auf 5-en bei ner Würfelsim...

ferby 26. Jun 2006 07:29

Re: Zufall wiederholt sich??
 
Hallo,

bei mir war das aber auch schon oft,
das ich randomize direkt in eine Schleife rein geschrieben habe,
weil die Zahlen nicht mehr zufällig waren.
Ich weiß auch nicht warum das so ist,
aer wenn man randomize nur 1x im Create Teil schreibt und dann
in einer Schleife Zufallszahlen erzeugt,
dann sind die bei mir auch nicht mehr Zufällig...
Bei mir war es so das eine Zahl erzeugt wurde und
immmer wieder die selbe Zahl "zufällig" ermittelt wurde.

morri 26. Jun 2006 08:02

Re: Zufall wiederholt sich??
 
Zitat:

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.CreateForm(Sender: TObject);
begin
Randomize;
end;
......

Sag mal kann es sein, dass du formcreate meinst, und nicht createform?

Denn das Randomize wird so gar nicht aufgerufen und du hast defacto nur eins!

ferby 8. Jul 2006 01:23

Re: Zufall wiederholt sich??
 
Hi,

Zitat:

Sag mal kann es sein, dass du formcreate meinst, und nicht createform?
Wer ist mit "du" gemeint?


Falls ich es bin:
Ich verwende

Delphi-Quellcode:
procedure TForm1.CreateForm(Sender: TObject);



Gruß,
Ferby

Alexander Roth 8. Jul 2006 06:08

Re: Zufall wiederholt sich??
 
@daredd:
So viele Constanten/Variablen sind schlecht. Und dazu machen sie noch viel arbeit.

So wie ich den Code sehe habe ich die Frage:
Wieso überhaupt Constanten, denn sie sind ja lokal und werden anscheinend nur hier gebraucht.

Delphi-Quellcode:
procedure TForm1.Zufall(Sender: TObject);
begin
NSpin18.Text:=IntToStr(Random(7))+','+IntToStr(Random(7))+IntToStr(Random(7));
SSpin18.Text:=IntToStr(Random(9))+','+IntToStr(Random(9))+IntToStr(Random(9));
.......
.......
.......
end;
Das ganze könnte man dann noch verkürzen, allerdings müsste man die Namensgebung der Einzelnen Komponenten überdenken. Man könnte diese Komponenten auch mit FindComponent ansprechen. Dann könnte man das alles in 2 Schleifen packen. Eine für die 7er Komponenten und eine für die 9er Komponenten.

Go2EITS 8. Jul 2006 07:46

Re: Zufall wiederholt sich??
 
procedure TForm1.FormCreate(Sender: TObject);

Ich denke da ist Randomize gut aufgehoben. Da liegt Dein erster Fehler!

Randomize erzeugt, so weit ich weiss, aus Uhrzeit und Datum neue Zufallszahlen.

Füge mal ein Showmessage('Hier ist Randomize'); direkt bei Randomize und Showmessage('Hier ist die Verarbeitung' ein.) bei Deiner Procedur, die die Zufallszahlen verarbeitet. Dann siehst Du was passiert und Randomze überhaupt aufgerufen wird.

Randomize darf nur einmal aufgerufen werden.

Deine Procedure zur Verarbeitung muss nach Randomize aufgerufen werden. Sonst bingt es nichts, außer immer gleicher Zufallszahlen.

Falls Du immer noch gleich Zufallswerte hast, muss Du Randomize einfach mal woanders hinpacken und vor einem Random aufrufen.

Falls es immer noch nicht klappt, bitte ganzen Code hier zeigen.

CU
Go2EITS


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 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