Zufallsarray erzeugen |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Wer hatte nicht schon einmal die Idee, einen Lottozahlengenerator zu schreiben, hing aber an der Überlegung fest, wie er Zufallszahlen erzeugen kann, die nur einmal vorkommen.Ein Möglichkeit wäre sicherlich einen zufälligen Wert zu bilden und nachzusehen, ob er schon im Array vorkommt. Dies kann aber besonders bei riesigen Arrays sehr viel Zeit kosten (kann sogar zum Aufhänger führen). Deshalb hier eine Prozedur, die um einiges schneller ist.
procedure Random_Number_Generator(var Random_Numbers_Array : array of Integer);
const max_Value = 49;
var
Dummy_Array : array [1..max_Value] of Integer;
SwapValue : Integer;
Location : Integer;
Dummy_Index : Integer;
i : Integer;
begin
for i := 1 to max_Value do
Dummy_Array[i] := i;
Location := max_Value;
while (Location > 0) do
begin
Dummy_Index := Random(Location) + 1;
SwapValue := Dummy_Array[Location];
Dummy_Array[Location] := Dummy_Array[Dummy_Index];
Dummy_Array[Dummy_Index] := SwapValue;
Dec(Location);
end;
for i := 0 to High(Random_Numbers_Array) do
Random_Numbers_Array[i] := Dummy_Array[i + 1];
end;
Mit max_Value legt man die obere Grenze der Zahlenreihe fest (Lottozahlen gehen ja nur bis 49).Hier ein Aufruf, den man gleichzeitig als Lottozahlengenerator nehmen kann.
procedure TForm1.Button1Click(Sender: TObject);
var
Random_Number_Array : array [1..6] of integer;
Numerical_Series : string;
i : integer;
begin
Random_Number_Generator(Random_Number_Array);
for i := 1 to 6 do
Numerical_Series := Numerical_Series + IntToStr(Random_Number_Array[i]) + ' ';
ListBox1.Items.Add(Numerical_Series);
end;