Einzelnen Beitrag anzeigen

Marcel1990

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

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