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;