Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Integer Variablen sortieren (https://www.delphipraxis.net/215171-integer-variablen-sortieren.html)

DelphiUser123 21. Mai 2024 14:17

Integer Variablen sortieren
 
Hallo liebes Forum,
ich habe eine Frage die zunächst trivial klingt: Ich möchte 16 Integer- Variablen der Größe nach sortieren. L1 bis L16 erhalten zufällig die Zahlen von 1 bis 16. Jetzt benötige ich L1 bis L16 in der korrekten Reihenfolge der Größe nach.
Mit den gemeinhin bekannten Algorithmen werden nur die Zahlen sortiert (z.B. Elemente des Integer Arrays), so dass ich ein aufgeräumtes Integer Array bekomme, mir geht es jedoch um Variablen.
Gibt es hier nicht eine bequeme Möglichkeit ohne sich übermäßig anzustrengen?

Vielen Dank für Antworten.

himitsu 21. Mai 2024 14:54

AW: Integer Variablen sortieren
 
aus den vielen Variablen EINE Array-Variable machen

oder Variablen in ein Array/Liste kopieren, dort sortieren und dann das Ergebnis zurück in die Variablen schreiben.

TigerLilly 22. Mai 2024 09:34

AW: Integer Variablen sortieren
 
Variablen haben eigentlich keine Reihenfolge. Außer man nimmt die physische Anordnung im Speicher als Reihenfolge. Und insofern kann man diese Reihenfolge auch nicht ändern.
Mir erschließt sich die Aufgabenstellung nicht so recht.

Samorion 22. Mai 2024 09:38

AW: Integer Variablen sortieren
 
Was ist das konkrete Ziel der Aufgabe?

Vielleicht verstehe ich es falsch, aber es liest sich so, als wolle man eine xAnzahl Variabeln wie folgt sortieren wollen:

x1 = 12; x2 = 3; x3 = 17; x4 = 23; x5 = 1; ...

zu:

x5, x2, x1, x3, x4, ...

Die "Variabeln sortieren" klingt halt irgendwie... komisch. Vorallem wofür ist das konkret gut?

TigerLilly 22. Mai 2024 09:45

AW: Integer Variablen sortieren
 
Mach ein array of record name+wert + sortiere die records im array nach dem wert. Dann kannst du die Variablennamen in der sortierten Reihenfolge ausgeben.

Aber da vermischen sich Bedeutungen: Variable ist nicht das gleiche wie Variablennamen ist nicht das gleiche wie Variableninhalt.

Hobbycoder 22. Mai 2024 09:55

AW: Integer Variablen sortieren
 
Ich vermute er benötigt nur die Sortierung nur für die Darstellung in der GUI.
Ansonsten macht das Sortieren von unabhängigen Variablen für mich keinen Sinn,
wenn die Werte zu den Variablen nicht verändern sollen.

Blup 22. Mai 2024 12:00

AW: Integer Variablen sortieren
 
Um Variablen-Namen sortiert nach deren Inhalt und mit dem Inhalt als Liste auszugeben, muss man so eine Liste erst einmal erzeugen.
Delphi-Quellcode:
uses
  System.Classes, Generics.Collections, Generics.Defaults;

type
  TMyValue = Integer;
  PMyValue = ^TMyValue;

  TMyVariable = class(TObject)
  private
    P: PMyValue;
    function GetValue: TMyValue;
    procedure SetValue(const AValue: TMyValue);
  public
    Name: string;
    constructor Create(const AName: string; var AValue: TMyValue);
    property Value: TMyValue read GetValue write SetValue;
  end;

  TMyVariableComparer = class(TComparer<TMyVariable>)
    function Compare(const Left, Right: TMyVariable): Integer; override;
  end;

  TMyVariableList = TObjectList<TMyVariable>;

procedure InitMyVariableList;
procedure RandomizeMyVariableList;
procedure SortMyVariableList;
procedure WriteMyVariableList;

var
  L1, L2, L3, L4: TMyValue;

implementation

var
  MyVariableList: TMyVariableList;

procedure InitMyVariableList;
begin
  FreeAndNil(MyVariableList);
  MyVariableList := TMyVariableList.Create;
  MyVariableList.Add(TMyVariable.Create('L1', L1));
  MyVariableList.Add(TMyVariable.Create('L2', L2));
  MyVariableList.Add(TMyVariable.Create('L3', L3));
  MyVariableList.Add(TMyVariable.Create('L4', L4));
end;

procedure RandomizeMyVariableList;
begin
  Randomize;
  for var lItem in MyVariableList do
    lItem.Value := Random(MaxInt);
end;

procedure SortMyVariableList;
begin
  MyVariableList.Sort(TMyVariableComparer.Create);
end;

procedure WriteMyVariableList;
begin
   { TODO : }
end;

{ TMyVariable }

constructor TMyVariable.Create(const AName: string; var AValue: TMyValue);
begin
  Name := AName;
  P := @AValue;
end;

function TMyVariable.GetValue: TMyValue;
begin
  Result := P^;
end;

procedure TMyVariable.SetValue(const AValue: TMyValue);
begin
  P^ := AValue;
end;

{ TMyVariableComparer }

function TMyVariableComparer.Compare(const Left, Right: TMyVariable): Integer;
begin
  Result := Left.Value - Right.Value;
end;

finalization
  MyVariableList.Free;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.

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