Entwickler-Ecke
Sonstiges (Delphi) - Zufallstexte nur 1 mal benutzen [Random]
teamrocket0 - Fr 26.01.07 17:58
Titel: Zufallstexte nur 1 mal benutzen [Random]
Moin.
Meine Übung vom letzen mal:
http://www.delphi-forum.de/viewtopic.php?t=69095&highlight=random
hat einen kleinen Bug. Ich habe ein MaskEdit eingebaut mit dem man die Anzahl der Durchläufe einstellen kann. Maximal 99 sind möglich.
Es kann ja vorkommen das aus dem "Random-Bereich" ein Eintrag zwei mal oder öfter aufgelistet wird.
Nur das kann ich leider nicht gebrauchen.
Wie kann ich dafür sorgen das jede Zeile bei einem Arbeitsgang (Also 1- max. 99 Durchlaufe) nur einmal auftritt. Wir gehen mal davon aus das der "Random-Bereich" groß genug ist.
Vielen Dank für einen Hinweiß!
Robinator - Fr 26.01.07 18:02
Du könntest dir nen Array of integer erstellen, in das du eine zahlenfolge von 0..X einträgst. Nun könntest du Per Random(Length(MyArr)) darauf zugreifen und den entsprechenden eintrag danach löschen. So kann jeder Wert nur einmal vorkommen.
Gruss, rob
teamrocket0 - Fr 26.01.07 18:06
Bohr.
Kling Hammer komplieziert.
Ich hätte mir jetzt einfach mal 99 Variablen erstellt und mit einer Zählschleife immer eine Variable nach der anderen mit dem Randomwert beschrieben und danach abgefrag ob der neue Randomwert irgendwo einaml in einer Variable auftaucht!
Robinator - Fr 26.01.07 18:16
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| Procedure CreateRandomBla; var MyArr : Array of Integer; RandArr : Array[0..X] of Integer; i, ind : integer; Procedure Delete(Index : integer); var i : integer; begin for i := index to Length(MyArr) - 2 do MyArr[i] := MyArr[i + 1]; SetLength(MyArr, Length(MyArr) - 1); end; begin SetLength(MyArr, X + 1); for i := 0 to X do MyArr[i] := i; for i := 0 to X do begin ind := Random(Length(MyArr)); RandArr[i] := MyArr[ind]; Delete(ind); end; end; |
So, das is doch garnicht alzu kompliziert - hab das jetzt mal eben hier reingetippselt, ist also nicht getestet. Sollte aber so, oder mit kleinen modifikationen laufen. (X musst du natürlich mit der Gewünschten Anzahl ersetzen.)
gruss, rob
Narses - Sa 27.01.07 00:58
Moin!
Der Vollständigkeit halber: Zufallszahlen im Bereich von x..y erzeugen geht am besten so: ;)
- Die Zahlen in ein Array eintragen:
Delphi-Quelltext
1: 2:
| for i := x to y do Feld[i] := i; |
- Das Feld nach
MILLER YATES "durchschütteln". ;)
cu
Narses
alzaimar - Sa 27.01.07 09:55
Narses, ich glaube, er möchte N eindeutige Zufallszahlen aus dem Bereich 0..M, wobei M>=N. Insofern ist der Code Robinator im Prinzip zu gebrauchen.
Narses - Sa 27.01.07 17:15
Moin!
Hmm... :? nach erneutem Drübersehen scheint mir das auch so... :| Also, bischen schnell mit meinem Vorschlag gewesen... ;)
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!