![]() |
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.) |
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. |
AW: Array sortieren
Moin...:P
Zitat:
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: ![]() ![]() Sortieren: ![]() 8-) |
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 |
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. |
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. |
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. |
AW: Array sortieren
|
AW: Array sortieren
Zitat:
|
AW: Array sortieren
Delphi-Quellcode:
Falls Du mit dem Inhalt von
private
Feld : array of TPerson; Groesse : array of real; Hilfe : array of TPerson;
Delphi-Quellcode:
Groesse
Delphi-Quellcode:
oder
Feld
Delphi-Quellcode:
sortieren willst, vergiss es!
Hilfe
Delphi-Quellcode:
sollte die Eigenschaft enthalten, die Du zum sortieren benutzen willst.
TPerson
Wie sieht denn
Delphi-Quellcode:
aus?
TPerson
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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 by Thomas Breitkreuz