Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Array sortieren (https://www.delphipraxis.net/191252-array-sortieren.html)

Marcel1990 25. Dez 2016 18:31

Array sortieren
 
Hallo,
ich bin neu in der Programmierung und hab eine höchstwahrscheinlich leicht zu beantwortbare Frage, zu der ich keine Antwort im Internet finden konnte. Ich habe eine Klasse (TPerson) durch ein Array sagen wir mal 100-mal erstellt, in ihr kann der Nutzer Merkmale wie Name, Vorname, Alter usw. eingeben, nun möchte ich diese Personen in einer Liste nach einem Merkmal sortiert ausgeben. Wie mache ich das :? ? (Ein Sortierverfahren hab ich schon im Kopf, ich weiß nur nicht wie ich auf eines der Merkmale zugreife.)

Delphi-Laie 25. Dez 2016 20:17

AW: Array sortieren
 
Bei hundert Leutchens reicht ein einfacher, elementarer Sortieralgorithmus. Welcher schwebt Dir denn vor?

Die Instanzen von TPerson sind die Sortierelemente. Deren Merkmale, die zum Sortieren relevant sind (auf die wird zwecks Vergleichens lesend zugegriffen), sind die Sortierschlüssel.

Und dann benötigst Du noch eine weitere Instanz von TPerson für die Tauschvorgänge als Puffer.

Zeig doch mal ein bißchen Quellcode, wieweit Du schon kamst.

haentschman 26. Dez 2016 05:11

AW: Array sortieren
 
Moin...:P
Zitat:

durch ein Array sagen wir mal 100-mal erstellt
[Provokation On]...ein Array ist das was heute eine generische Liste ist. :thumb:

Auch wenn man in der Programmierung neu ist, darf man auch die modernen Sprachkonstrukte benutzen. Da du nicht deine Delphi Version hinterlegt hast (ich tippe auf Berlin Starter 8-)), gebe ich dir trotzdem mal die Links zu der Doku.
Liste:
http://docwiki.embarcadero.com/Libra...ectList.Create
http://docwiki.embarcadero.com/Libra...ults.IComparer
Sortieren:
http://docwiki.embarcadero.com/Libra...ons.TList.Sort

8-)

p80286 26. Dez 2016 09:00

AW: Array sortieren
 
Der TE versucht wohl gerade an Hand eines Lehrbuches, das Sortieren zu lernen. Auch wenn eine (generische) Liste, die bessere Wahl wäre, beziehen seine Beispiele sich wohl auf ein Array. Darum kann er zunächst einmal nichts für die etwas krude Fragestellung.

@Marcel1990
Was hast du denn bisher?

Gruß
K-H

HolgerX 26. Dez 2016 09:27

AW: Array sortieren
 
Hmm..

Und außerdem ist das Sortieren eines Array 'bildlich' besser zu erkennen/verstehen, wie bei bei einer generischen Liste, welche durch .Sort viele Dinge versteckt, wie z.B. das Verschieben/Tauschen von Positionen.

Gerade, wenn es ums lernen geht, sollte mehr 'back to the roots' gemacht werden, da vieles in aktuellen Konstrukten versteckt wird.
Spätestens, wenn es mehr in Richtung Windows API geht, muss mann wissen, was Arrays sind (inl. Speichermanagment)! Da gibt es keine Generischen Listen.

Viele Lehrbücher und Tutorials arbeiten mit Delphi 6/7, teilweise, weil sie aus der Zeit stammen!
Dazu sind Delphi 6/7 'Lightwigth' und laufen auch auf älterer 'Schulhardware'.

Ich arbeite viel mit TList (ohne generisch), wohl auch weil ich Delphi 6 verwenden muss..

Und, bitte nicht 'Wieso noch Delphi 6, Wieso nicht 10.x'! Das würde nicht in diesen Thread gehören und wurde schon zu oft breitgetreten.

Delphi-Laie 26. Dez 2016 16:06

AW: Array sortieren
 
Sollte der Diskussioneröffner (warum meldet er sich nicht mehr?) tatsächlich Programmieranfänger sein, so ist es letztlich eine didaktisch-methodische Frage, ihn mit dem "Urschleim" (also Records und Arrays) sanft einzuführen oder gleich mit objektorientierten Dingen zu "erschlagen". Sicher steckt ersteres in letzterem mehr oder weniger drin, aber auch ersteres hat auch heutzutage noch seine Berechtigung.

Mathematik erlernt man ja auch nicht mit einer Einführung in die Differentialgeometrie und Topologie.

Marcel1990 28. Dez 2016 16:26

AW: Array sortieren
 
Sorry erstmal, dass ich mich in den letzten zwei Tagen nicht gemeldet habe, hatte viel um die Ohren.
Also ich nutze Delphi 7 und mein Problem sieht wie folgt aus, ich möchte ein Array einer Klasse TPerson nach einem Kriterium sortieren, z.B der Größe der Personen und das dann anhand eines Memos ausgeben.


Delphi-Quellcode:
private
    Feld : array of TPerson;
    Groesse : array of real;
    Hilfe : array of TPerson;
Delphi-Quellcode:
procedure TListe.CreateArray;
var
  i : Integer;
begin
  SetLength(Feld, AnzahlPatienten-1);
  SetLength(Groesse, AnzahlPatienten-1);
  SetLength(Hilfe, AnzahlPatienten-1);
  for i := 0 to AnzahlPatienten-1 do begin
    Feld[i] := TPerson.Create;
    Hilfe[i] := TPerson.Create;
  end;
end;
Delphi-Quellcode:
function TListe.GetPerson(A : Integer) : TPerson;
begin
  Result := Feld[A];
end;

function TListe.GetArrayGroesse(A : Integer) : Real;
begin
  Result := Feld[A].GetGroesse;
end;
Delphi-Quellcode:
procedure TListe.SortGroesse;
var
  i, j : Integer;
  Hilf : Real;
  begin
    for i := High(Feld) downto Low(Feld) do
      for j := 0 to i-1 do
        if Groesse[j] > Groesse[j+1] then begin
          Hilf := Groesse[j];
          Groesse[j] := Groesse[j+1];
          Groesse[j+1] := Hilf;
          Hilfe[j] := Feld[j];
          Feld[j] := Feld[j+1];
          Feld[j+1] := Hilfe[j];
        end;
  end;
Delphi-Quellcode:
procedure TFensterFrm.BtnEinlesenClick(Sender: TObject);
begin
  if (EdtAnzahl.Text = '') or (AlterEdt.Text = '') or (GroesseEdt.Text = '') or (NameEdt.Text = '') or (EdtAnzahlPersonen.Text = '')
    then ShowMessage('Bitte Fehlende Daten eingeben')
      else begin
  Anzahl := StrtoInt(EdtAnzahl.Text)-1;
  Liste.GetPerson(Anzahl).SetName(NameEdt.Text);
  Liste.GetPerson(Anzahl).SetGroesse(StrToFloat(GroesseEdt.Text));
  Liste.GetPerson(Anzahl).SetAlter(StrToFloat(AlterEdt.Text));
  Liste.GetArrayGroesse(Anzahl);
  Inc(Anzahl);
  EdtAnzahl.Text := InttoStr(Anzahl+1);
 end;

end;
Delphi-Quellcode:
procedure TFensterFrm.BtnSortGroesseClick(Sender: TObject);
var
  i : Integer;
begin
  Liste.SortGroesse;
  MemListe.Clear;
  for i := 0 to AnzahlPersonen-1 do begin
    MemListe.Lines.Add('Name: '+ Liste.GetPerson(i).GetName +' Größe:'+ FloatToStrF(Liste.GetArrayGroesse(i),ffFixed,8,2) +'  Alter:'+ FloatToStrF(Liste.GetPerson(i).GetAlter)
end;

Irgendwo hier müsste sich ein logischer Fehler befinden, denn das Programm läuft, aber es liefert nicht das gewünschte Ergebnis.

himitsu 28. Dez 2016 17:08

AW: Array sortieren
 
Delphi-Referenz durchsuchenSystem.Generics.Collections.TArray.Sort :stupid:

HolgerX 28. Dez 2016 18:18

AW: Array sortieren
 
Zitat:

Zitat von himitsu (Beitrag 1357362)

Nicht gelesen: Delphi 7 ;)

p80286 28. Dez 2016 21:19

AW: Array sortieren
 
Delphi-Quellcode:
private
     Feld : array of TPerson;
     Groesse : array of real;
     Hilfe : array of TPerson;
Falls Du mit dem Inhalt von
Delphi-Quellcode:
Groesse
Delphi-Quellcode:
Feld
oder
Delphi-Quellcode:
Hilfe
sortieren willst, vergiss es!

Delphi-Quellcode:
TPerson
sollte die Eigenschaft enthalten, die Du zum sortieren benutzen willst.

Wie sieht denn
Delphi-Quellcode:
TPerson
aus?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.
Seite 1 von 3  1 23      

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