Entwickler-Ecke
Sonstiges (Delphi) - 10 Zufallszahlen ohne Wiederholung aus einer Menge von 1-30
katmai - Fr 03.03.06 19:04
Titel: 10 Zufallszahlen ohne Wiederholung aus einer Menge von 1-30
Hallöle, ertsmal ne Vorwarnung ich bin neu hier also bitte bitte seit freundlich zu mir *g* :wink: .
Ich hab folgendes Problem:
Ich brauch 10 Zufallszahlen aus einer Menge von 1-30 bei denen keine Wiederholung auftritt.
Wenn ich den Zufallsgenerator Randomize aktiviert habe und dann über eine For i:=1 to 10 do Schleife einem arry[1..10]of integer die 10 Random Werte zuweise habe ich Doppelungen und 0 Werte dabei.
Die 0 Werte wollte ich mit RandomRange(1,30) beseitigen aber das geht auch nicht. habt ihr ne Idee die Doppelungen und 0 Werte zu verhindern ?
Martin1966 - Fr 03.03.06 19:11
Hallo und :welcome: hier im Delph-Forum! :wink2:
Du musst bevor du eine Zufallszahl in das Array schreibst prüfen ob bereits diese Zahl in dem Array vorhaden ist. Wenn ja suchst du weiter und prüfst erneut.
Eine andere Möglichkeit wäre vorher ein Array von 1..30 mit Zahlen zu füllen:
Quelltext
1: 2: 3: 4: 5:
| Array[1] = 1; Array[2] = 2; Array[3] = 3; ... Array[30] = 30; |
Dann läßt du das Array mischen und anschl. kannst du dir die ersten drei Array Elemente nehmen.
Lg Martin
katmai - Fr 03.03.06 19:17
Titel: Re: 10 Zufallszahlen ohne Wiederholung aus einer Menge von 1-30
mh das mit dem mischen hört sich gut an wie ein Kochrezept. Und wie mischt ich ein Array ?
Martin1966 - Fr 03.03.06 19:23
In dem Du Dir zwei Zufallszahlen erzeugst und dann die beiden Werte im Array vertauscht.
Hier hab ich heute eine Funktion gepostet die die Buchstaben in einem Wort zufällig vertauscht. Vom Prinzip genau das gleiche:
>>
http://www.delphi-forum.de/viewtopic.php?p=340289#340289
katmai - Fr 03.03.06 19:28
ich check das mal aus det sieht irgendwie sehr logisch aus
Danke dir für die Hilfe! see you later
katmai has left the game...
delfiphan - Sa 04.03.06 00:36
Ist jetzt halt mit einem Array 0..9 gelöst.
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: 25:
| Const MinV = 1; MaxV = 30; Count = 10;
Aux_Count = MaxV-MinV+1; Var A : array of Integer; I, J, T : Integer; begin Randomize; Assert(Aux_Count>=Count); SetLength(A, Aux_Count); for I := 0 to Aux_Count-1 do A[I] := I+MinV; for I := 0 to Count-1 do begin J := I+random(Aux_Count-I); T := A[J]; A[J] := A[I]; A[I] := T; ShowMessage(Format('Die %d. Zahl Lautet %d.',[i+1,A[I]])); end; SetLength(A, Count); end; |
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!