Einzelnen Beitrag anzeigen

DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#10

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!

  Alt 26. Okt 2006, 20:18
N'Abend!

So wie es aussieht, liegt das daran, dass Du die Strings in "Namen" einliest:

Delphi-Quellcode:
procedure TForm1.btEinlesenClick(Sender: TObject);
begin
  inc(n); namen[n]:=edEingabe.text;
  edEingabe.Text:= '
end;
aber später die leere (?) Listbox sortieren lässt:

BubbleSort(listAusgabe.Items); und anschließend das letzte item von "Namen" in die Listbox schreibst:

listAusgabe.items.add(namen[n]);
Das ganze kann also gar nicht funktionieren. Es ist verwunderlich, dass überhaupt alle Namen wieder ausgegeben werden. Klickst Du nach jedem Einlesen auf den "Ausgabe-Button"? Oder hast Du uns einen wichtigen Teil des Quelltextes vorenthalten?


Da Dein BubbleSort ein TStrings erwartet, kannst Du aber auch nicht "Namen" übergeben. Eine Möglichkeit wäre:

Delphi-Quellcode:
procedure TForm1.btAusgabeClick(Sender: TObject);
var i: integer;
begin

  listAusgabe.Items.Clear;

  // wir müssen bei 1 beginnen, da Du das erste Element in 1 schreibst
  for i:=1 to High(Namen) do
    listAusgabe.Items.Add(Namen[i]);

  BubbleSort(listAusgabe.Items);

end;

- UNGETESTET -



Allerdings wäre dann die bessere Lösung, die eingegebenen Namen gleich in die Listbox zu schreiben (ohne Array "dazwischen"), also:

Delphi-Quellcode:
procedure TForm1.btEinlesenClick(Sender: TObject);
begin
  
  listAusgabe.Items.Add(edEingabe.Text);

end;

und bei der Ausgabe dann nur noch:

Delphi-Quellcode:
procedure TForm1.btAusgabeClick(Sender: TObject);
begin

  BubbleSort(listAusgabe.Items);

end;

- Letzte Variante inzwischen ERFOLGREICH GETESTET -

Das var beim BubbleSort noch entfernen und gut. Einziges Problem ist noch der > (Größer als)-Operator. Der vergleicht auch Groß- und Kleinschreibung usw. Bessere Lösung wäre evtl. StrComp und/oder die Strings beim Vergleich AnsiUpperCase-en, also z.B.:

if AnsiUpperCase(Items[i]) > AnsiUpperCase(Items[i + 1]) then
Grüsse
...Doc
  Mit Zitat antworten Zitat