Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
|
Integer-Array mit unterschiedlichen zufälligen Werten füllen
20. Jun 2005, 20:29
Delphi-Quellcode:
// Weist den Elementen von AArray zufällige, unterschiedliche Werte zu.
// Der niedrigste Wert ist AStart, die weiteren Werte sind jeweils um AStep größer
// Nicht vergessen, Randomize einmal im Projekt aufzurufen!
procedure RandomArray(var AArray: array of Integer; const AStart, AStep: Integer);
var
List: TList;
i, Index: Integer;
begin
List := TList.Create;
i := AStart;
repeat // erst alle Werte in die Liste packen, ...
List.Add(Pointer(i));
Inc(i, AStep);
until i = AStart + AStep * Length(AArray);
for i := Low(AArray) to High(AArray) do // ...dann zufällig einen rauspicken
begin
Index := Random(List.Count);
AArray[i] := Integer(List.Items[Index]);
List.Delete(Index);
end;
List.Free;
end;
Beispielaufruf:
Delphi-Quellcode:
var
a: Array[5..10] of Integer;
i: Integer;
begin
ListBox1.Clear;
RandomArray(a, 0, 2);
for i := Low(a) to High(a) do
ListBox1.Items.Add(Inttostr(a));
end;
Beispielausgabe: Tipps und Optimierungen erwünscht !
alzaimar hat die Verwendung der VCL entfernt und den Algorithmus somit beschleunigt:
Delphi-Quellcode:
procedure RandomArray(var AArray: array of Integer; const AStart, AStep: Integer);
Var
A : Array[0..Count-1] of Integer;
N, I, J, T : Integer;
begin
N := High (aArray);
// Array mit den Werten belegen
For I := Low (aArray) To N do
A[I] := AStart + i*AStep;
// Zufallspermutation erzeugen
For I := Low (aArray) To N do
J := I + random(N - I);
T := A[J];
A[J] := A[I];
A[I] := T;
end;
end;
[edit=Chakotay1308]Zusätzlichen Code eingefügt. Mfg, Chakotay1308[/edit]
Sebastian Moderator in der EE
|
|
Zitat
|