Am effizientesten dürfte das sein:
Delphi-Quellcode:
type
TZahlen =
array of Integer;
procedure Lotto(
var Sortiert,Gezogene: TZahlen; Ziehungen: Integer = 6; Elemente: Integer = 49);
var
I,J,K,N: Integer;
begin
Sortiert :=
nil;
// stellt sicher das Sortiert <> Gezogene ist
Gezogene :=
nil;
if Ziehungen > Elemente
then
raise Exception.Create('
Man kann nicht mehr Kugeln ziehen als in der Urne sind');
SetLength(Sortiert, Ziehungen);
SetLength(Gezogene, Ziehungen);
for I := 0
to Ziehungen -1
do
begin
K := 0;
N := Random(Elemente - I) + 1;
for J := 0
to I -1
do
if N >= Sortiert[J]
then
begin
Inc(N);
Inc(K);
end else Break;
for J := I
downto K +1
do
Sortiert[J] := Sortiert[J -1];
Sortiert[K] := N;
Gezogene[I] := N;
end;
end;
procedure Test;
procedure Print(
const Title:
String;
const Zahlen: TZahlen);
var
I: Integer;
begin
Write(Title);
for I := 0
to High(Zahlen)
do Write(Zahlen[I]:4);
WriteLn;
end;
var
Sortiert,Gezogene: TZahlen;
begin
Lotto(Sortiert, Gezogene, 10, 10);
Print('
gezogene : ', Gezogene);
Print('
sortiert : ', Sortiert);
WriteLn;
end;
In deinem Falle also:
Lotto(Sortiert, Gezogene, 60, 60);
Gruß Hagen