Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Zufalls zahlen! (https://www.delphipraxis.net/41575-problem-mit-zufalls-zahlen.html)

Skyrunner2 5. Mär 2005 12:59


Problem mit Zufalls zahlen!
 
Liste der Anhänge anzeigen (Anzahl: 1)
also in einer funktion wird ein zufälliges element aus einer TQueue ausgelesen.

doch irgentwir ist die zufalls zahl immer die selebe:

(ICH RATE ZUM ZUSAMMENFALTEN!)

Code:
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:2
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:3
Tmaze.RandomTQueueItem: Zufälliges element:1 aus:4
hier mal die funktion mit der ich die elemente zufällig auswähle:
Delphi-Quellcode:
function Tmaze.RandomTQueueItem(Q:TQueue):Pointer; //Zufälliges Element aus der liste suchen
var i:integer;
begin
LogForm.APPEND('Tmaze.RandomTQueueItem: Hello',3);
   randomize;
   for i:=0 to random(Q.Count) do
        Q.Push(Q.Pop);
   LogForm.APPEND('Tmaze.RandomTQueueItem: Zufälliges element:'+inttostr(i)+' aus:'+inttostr(Q.Count),0);
   RandomTQueueItem:=Q.Pop;
LogForm.APPEND('Tmaze.RandomTQueueItem: Goodbye',3);
end;
es ist nicht IMMER 1. die funktion wird in einer for schleife mit ~ 10 anderen zeilen code aufgerufen, also sehr sehr häufig.
is sind immer "blöcke" an selben zaheln...

all dies passiert in rahmen einer Labyrinth erstellungs prozedure, und zu schluss sieht das labyrinth dann nicht soo labyrinthig aus(siehe attachment)

Luckie 5. Mär 2005 13:01

Re: Problem mit Zufalls zahlen!
 
Hast du auch irgendwo mal Delphi-Referenz durchsuchenRandomize aufgerufen? Edit hast du. Aber du darfst es nur einmal aufrufen, am besten in OnCreate Ereignis der Form.

sniper_w 5. Mär 2005 13:03

Re: Problem mit Zufalls zahlen!
 
Delphi-Quellcode:
for i:=0 to random(Q.Count) do
        Q.Push(Q.Pop);
   LogForm.APPEND('Tmaze.RandomTQueueItem: Zufälliges element:'+inttostr(i)+' aus:'+inttostr(Q.Count),0);
Variable i ist nach der Schleife undeffiniert. (Delphi ist nicht halt C :))

[EDIT]
Und warscheinlich wegen Compiler - Optimierung läuft i von Random(Q.Count) DOWNTO 0 .

Binärbaum 5. Mär 2005 13:08

Re: Problem mit Zufalls zahlen!
 
Zitat:

Zitat von sniper_w
Delphi-Quellcode:
for i:=0 to random(Q.Count) do
        Q.Push(Q.Pop);
   LogForm.APPEND('Tmaze.RandomTQueueItem: Zufälliges element:'+inttostr(i)+' aus:'+inttostr(Q.Count),0);
Variable i ist nach der Schleife undeffiniert. (Delphi ist nicht halt C :))

Also i ist nach der Schleife nicht undefiniert, sondern hat (hier im Beispiel) den Wert random(Q.Count)+1. Eine Schleifenvariable ist nach Ende der Schleife um eins größer als die Obergrenze der Laufvariable (bzw. bei DOWNTO um eins kleiner).

MfG
Binärbaum

Skyrunner2 5. Mär 2005 13:11

Re: Problem mit Zufalls zahlen!
 
Liste der Anhänge anzeigen (Anzahl: 1)
also ich hab getz mal randomize; aus der funktion rausgenomen und rufe es nur ein mal auf (danke Luckie) und das get besser...

(siehe visueller bewiess)


die optimierung hab ich auch mal durchführt.. dank!

Luckie 5. Mär 2005 13:19

Re: Problem mit Zufalls zahlen!
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von sniper_w
Delphi-Quellcode:
for i:=0 to random(Q.Count) do
        Q.Push(Q.Pop);
   LogForm.APPEND('Tmaze.RandomTQueueItem: Zufälliges element:'+inttostr(i)+' aus:'+inttostr(Q.Count),0);
Variable i ist nach der Schleife undeffiniert. (Delphi ist nicht halt C :))

Also i ist nach der Schleife nicht undefiniert, sondern hat (hier im Beispiel) den Wert random(Q.Count)+1. Eine Schleifenvariable ist nach Ende der Schleife um eins größer als die Obergrenze der Laufvariable (bzw. bei DOWNTO um eins kleiner).

Das ist aber reiner Zufall. Oder warum sagt mir mein Compiler bei diesem Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to 9 do
  begin
    Listbox1.Items.Add(IntToStr(i));
  end;
  ShowMessage(IntToStr(i));
end;
Zitat:

[Warning] Unit1.pas(35): FOR-Loop variable 'i' may be undefined after loop
Warnung gibt der Compiler nicht nur zur Unterhaltung des Programmierers aus.


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