Einzelnen Beitrag anzeigen

Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#1

Fehler im Sortier-Algorythmus

  Alt 7. Okt 2004, 10:58
Hi Leute,
ich hab mir nach dem Bubblesort-Verfahren 'nen Algorythmus geschrieben, der Daten sortiert. Die Daten sind in der Form dd-mm-jj in einer Listbox gespeichert. Nun werden sie übernommen. Es wird zuerst das Jahr verglichen, dann der Monat und dann der Tag. Das früheste Datum soll als erstes in der sortierten Listbox erscheinen. Allerdings kommt immer der Fehler:

EStringListError: Das Maximum (7) wird überschritten

Kann mir einer sagen, wieso?

tia, gordon

Hier der Code:
Delphi-Quellcode:
////////////////////////////////////////////////////////////
//Die Einträge aus dem Übergebenen TString werden sortiert//
//und in die Form10.Listbox2 eingefügt //
////////////////////////////////////////////////////////////
procedure TForm10.BubbleSort(tStr:TStrings);
var tag1,monat1,jahr1,n,Zaehler1,Zaehler2:integer;
    tag2,monat2,jahr2:integer;
    tausch,s:string;
begin
n:=tstr.Count;
for Zaehler1 := n downto 2 do
    for Zaehler2 := 1 to Zaehler1-1 do
        begin
        {Das Jahr wird aus 1 herausgeschnitten}
        s:=tstr[Zaehler2];
        delete(s,1,pos('-',s));
        delete(s,1,pos('-',s));
        jahr1:=strtoint(s);

        {Der Monat wird aus 1 herausgeschnitten}
        s:=tstr[Zaehler2];
        delete(s,1,pos('-',s));
        delete(s,pos('-',s),length(s));
        monat1:=strtoint(s);

        {Der Tag wird aus 1 herausgeschnitten}
        s:=tstr[Zaehler2];
        delete(s,pos('-',s),length(s));
        tag1:=strtoint(s);

        {Das Jahr wird aus 2 herausgeschnitten}
        s:=tstr[Zaehler2+1];
        delete(s,1,pos('-',s));
        delete(s,1,pos('-',s));
        jahr2:=strtoint(s);

        {Der Monat wird aus 2 herausgeschnitten}
        s:=tstr[Zaehler2+1];
        delete(s,1,pos('-',s));
        delete(s,pos('-',s),length(s));
        monat2:=strtoint(s);

        {Der Tag wird aus 2 herausgeschnitten}
        s:=tstr[Zaehler2+1];
        delete(s,pos('-',s),length(s));
        tag2:=strtoint(s);

        if jahr1 > jahr2 then //Ist Jahr 1 Später als 2
           begin //Ja, sie werden getauscht
           tausch:=tStr[Zaehler2];
           tStr[Zaehler2]:=tStr[Zaehler2+1];
           tStr[Zaehler2+1]:=tausch;
           end
        else //Nein, Jahr 2 ist Später oder gleich 1
            begin
            if jahr1 = jahr2 then //Sind die Jahre gleich
               begin //Ja
               if monat1 > monat2 then //Ist Monat 1 größer als 2
                  begin //Ja, sie werden getauscht
                  tausch:=tStr[Zaehler2];
                  tStr[Zaehler2]:=tStr[Zaehler2+1];
                  tStr[Zaehler2+1]:=tausch;
                  end
               else //Nein, Monat 2 ist später oder gleich 1
                   begin
                   if monat1 = monat2 then //Sind die Monate gleich
                      begin //Ja
                      if tag1 > tag2 then //Ist Tag 1 später als 2
                         begin //Ja, siw werden getauscht
                         tausch:=tStr[Zaehler2];
                         tStr[Zaehler2]:=tStr[Zaehler2+1];
                         tStr[Zaehler2+1]:=tausch;
                         end;
                      end;
                   end;
               end;
            end;
        end;
Form10.ListBox2.Items:=tstr;
end;
/edit: @alcaeus Hab doch glatt vergessen, den Code zu posten Soll nich wieder vorkommen!
  Mit Zitat antworten Zitat