Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#1

Integer-Array mit unterschiedlichen zufälligen Werten füllen

  Alt 20. Jun 2005, 19: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:
Code:
4
0
8
10
6
2
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
  Mit Zitat antworten Zitat