AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array sortieren

Ein Thema von Marcel1990 · begonnen am 25. Dez 2016 · letzter Beitrag vom 30. Dez 2016
Antwort Antwort
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

AW: Array sortieren

  Alt 26. Dez 2016, 16:06
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.
  Mit Zitat antworten Zitat
Marcel1990

Registriert seit: 25. Dez 2016
3 Beiträge
 
#2

AW: Array sortieren

  Alt 28. Dez 2016, 16:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.361 Beiträge
 
Delphi 12 Athens
 
#3

AW: Array sortieren

  Alt 28. Dez 2016, 17:08
Delphi-Referenz durchsuchenSystem.Generics.Collections.TArray.Sort
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
982 Beiträge
 
Delphi 6 Professional
 
#4

AW: Array sortieren

  Alt 28. Dez 2016, 18:18
Nicht gelesen: Delphi 7
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Array sortieren

  Alt 28. Dez 2016, 21:19
Delphi-Quellcode:
private
     Feld : array of TPerson;
     Groesse : array of real;
     Hilfe : array of TPerson;
Falls Du mit dem Inhalt von Groesse Feld oder Hilfe sortieren willst, vergiss es!

TPerson sollte die Eigenschaft enthalten, die Du zum sortieren benutzen willst.

Wie sieht denn TPerson aus?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Marcel1990

Registriert seit: 25. Dez 2016
3 Beiträge
 
#6

AW: Array sortieren

  Alt 28. Dez 2016, 22:51
Also TPerson bekommt anhand von Set-Prozeduren Werte zugeschrieben und durch Get-Funktionen werden sie abgerufen.

Delphi-Quellcode:
type
  TPerson = class(TObject)
    private
      Name      : string;
    Groesse : real;
    Alter : Integer;
   public
    constructor Create;
    procedure SetName (n : string);
    function GetName : string;
    procedure SetGroesse (gr : real);
    function GetGroesse : real;
    procedure SetAlter (alt : Integer);
    function GetAlter : Integer;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Array sortieren

  Alt 28. Dez 2016, 22:59
Name ist eine etwas unglückliche Bezeichnung. Wie du siehst markiert die IDE ihn fett, wie Schlüsselwürter.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
982 Beiträge
 
Delphi 6 Professional
 
#8

AW: Array sortieren

  Alt 29. Dez 2016, 07:11
Also TPerson bekommt anhand von Set-Prozeduren Werte zugeschrieben und durch Get-Funktionen werden sie abgerufen.

Delphi-Quellcode:
type
  TPerson = class(TObject)
    private
      Name      : string;
    Groesse : real;
    Alter : Integer;
   public
    constructor Create;
    procedure SetName (n : string);
    function GetName : string;
    procedure SetGroesse (gr : real);
    function GetGroesse : real;
    procedure SetAlter (alt : Integer);
    function GetAlter : Integer;

Hmm..

ich würde deine Class wohl eher so deklarieren:

Delphi-Quellcode:
type
  TPerson = class(TObject)
  private
    FNachName : string;
    FGroesse : double;
    FAlter : Integer;
  protected
    procedure SetName(Value : string);
    function GetName : string;
    procedure SetGroesse (Value : double);
    function GetGroesse : double;
    procedure SetAlter (Value : Integer);
    function GetAlter : Integer;
  public
    constructor Create;
    property NachName : string read GetName write SetName;
    property Groesse : double read GetGroesse write SetGroesse;
    property Alter : Integer read GetAlter write SetAlter;
  end;

Oder (vereinfacht):


Delphi-Quellcode:
type
  TPerson = class(TObject)
  private
    FNachName : string;
    FGroesse : double;
    FAlter : Integer;
  protected
    procedure SetName(Value : string);
    procedure SetGroesse (Value : double);
    procedure SetAlter (Value : Integer);
  public
    constructor Create;
    property NachName : string read FNachName write SetName;
    property Groesse : double read FGroesse write SetGroesse;
    property Alter : Integer read FAlter write SetAlter;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.361 Beiträge
 
Delphi 12 Athens
 
#9

AW: Array sortieren

  Alt 28. Dez 2016, 21:49
Nicht gelesen: Delphi 7
Hmmmmmmmm, neee?
Ach, da unten, heimlich in dem überlangen Beitrag versteckt? (musste oft F3 drücken, um es zu finden)

Aber das Problem läßt sich ja inzwischen notfalls leicht lösen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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