Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Sonstiges (https://www.delphipraxis.net/45-library-sonstiges/)
-   -   Delphi Integer-Array mit unterschiedlichen zufälligen Werten füllen (https://www.delphipraxis.net/48101-integer-array-mit-unterschiedlichen-zufaelligen-werten-fuellen.html)

Khabarakh 20. Jun 2005 19:29


Integer-Array mit unterschiedlichen zufälligen Werten füllen
 
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]


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz