Home » Tipps & Tricks » Object Pascal » Arrays » Zufallsarray erzeugen

Zufallsarray erzeugen

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;