![]() |
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.
|
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. |
Zitat:
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? |
[quote="Sharky"]
Zitat:
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? |
Zufallszahl zwischen 0 und 100 ist aber Random(101) :!:
|
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 |
hhmmm
wie meinst du das mit dem "vermischen"? Das verstehe ich nicht ganz. Aber das andere leuchtet schon ein :wink: |
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. |
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 21:57 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