Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Random (https://www.delphipraxis.net/2361-random.html)

Luckie 20. Jan 2003 01:59

In einem Array die schon gezogenen speichern und bei jeder neuen Ziehung vergleichen. Wurde die zahl schon mal gezogen, noch mal ziehen. So lange bis man eine zieht, die es noch nicht gab.

MrSpock 20. Jan 2003 06:32

Hallo Privateer3000,

Luckies Vorschlag funktioniert zwar, ist aber nicht so ganz effektiv :mrgreen: . Bei der letzten Zahl musst du solange neue Zufallszahlen generieren bis genau die Zahl rauskommt, die noch fehlt. Etwas besser ist es da (insbesondere bei noch größeren Bereichen) die gezogene Zufallszahl als Zähler in der Menge der noch nicht gefundenen Zahlen zu benutzen.

Sharky 20. Jan 2003 09:03

Zitat:

Zitat von Privateer3000
da möchte ich doch gleich mal einhaken...
und zwar wie kann man verhindern das (legen wir eine Range bis 100 fest)
jede Zahl nur 1mal gezeigt wird?!Und zwar so lange bis alle aufgebraucht sind.Wäre interessant für eine Auslosungsgeschichte.

Ähm...

wenn Du das so machst hast Du keine Zufahlszahlen (Du hast ja einfach alle Zahlen aus einer Gegebenen Menge "erzeugt").

Was Du hast ist eine zufällige Reihenfolge der Zahlen.

Aber das kann man sicher auch anders lösen?

Privateer3000 20. Jan 2003 11:17

[quote="Sharky"]
Zitat:

Zitat von Privateer3000
da möchte ich doch gleich mal

wenn Du das so machst hast Du keine Zufahlszahlen

stimmt...ich kam halt nur beim lesen auf die Idee
da ich dies mal in kürze benötige.
Aber im gewissen Sinne ist es schon eine Zufallszahl.
Denn aus der gegebenen Menge will ich ja keine bestimmte,sondern eben eine zufällige.
Kann man eine aus dem array erzeugte Zahl löschen(oder markieren)
das sie beim nächsten Zugriff "nicht beachtet" wird?

nailor 20. Jan 2003 13:00

Zufallszahl zwischen 0 und 100 ist aber Random(101) :!:

Sebastian Nintemann 20. Jan 2003 15:26

Hi, ich hab das mal so gemacht (alle dürfen nur einmal vorkommen):
1. Array von 1 bis 100 mit den Zahlen 1 bis 100 belegen
2. Die Zahlen mit random vertauschen, mindestens jede Zahl einmal mit einer anderen tauschen, je öfter desto "durchgemischter". Durch das tauschen verhinderst du, dass Zahlen doppelt vorkommen, da keine neuen Zahlen erzeugt werden, sondern nur die von 1 bis 100 ihre Position wechseln, es muss nicht mehr geprüft werden ob eine grad erzeugte Zahl eventuell schonmal da war.
3. Jetzt kannst du mit Array[1] bis Array[100] die zufällige Zahlenfolge abfragen.

Gruß, Sebastian

Privateer3000 20. Jan 2003 15:48

hhmmm
wie meinst du das mit dem "vermischen"?
Das verstehe ich nicht ganz.
Aber das andere leuchtet schon ein :wink:

nailor 20. Jan 2003 16:06

Du erzeugst dein Array erst mal mit den Zahlen 1-100 der Reihe nach.
Du erzeugst zwei zufällige Indices I1 und I2. Die Zahl in dem Array mit dem Index kopierst du in eine temporäre Variable, die Zahl in dem Array mit dem Index I2 kopierst du in den Array auf den Index I1 und dann die temporäre Variable in den Array kopieren an Stelle I2.
Das ganze solange du Lust hast wiederholen. Ist zwar nicht ganz so schön, aber leicht umzusetzen und funzt.

BrunoT 23. Jan 2003 23:05

Array
 
Kann man eine aus dem array erzeugte Zahl löschen(oder markieren)
das sie beim nächsten Zugriff "nicht beachtet" wird?

Na klar

Type
z=record
Zahl:integer;
Flag:boolean;
end;

Var
a:Array[1.100] of z;

For i:=1 to 100 do
Begin
a[i].Zahl:=random(100)+1; { Berücksichtigt nur Zahlen von 1-100}
a[i].Flag:=False;
end;

Nun lässt sich jede Zahl als berücksichtigt markieren.

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.
Seite 2 von 2     12   

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