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.