Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem bei einem Sortierverfahren (https://www.delphipraxis.net/3900-problem-bei-einem-sortierverfahren.html)

Helios 4. Apr 2003 17:24


Problem bei einem Sortierverfahren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich programmiere gerade mit Delphi ein paar unterschiedliche Sortierverfahren. Ich bin zur Zeit noch beim ausprobieren, aber bei einem Verfahren komme ich einfach nicht weiter. Eigentlich ist es fertig, aber wenn ich es benutze, stürzt das programm immer ab. Hier der Quellcode:

Delphi-Quellcode:
procedure TForm1.Sortierverfahren4Click(Sender: TObject);
var
 n: integer;
 procedure Quicksort(links,rechts:integer);
 var
  el,er,grenze: integer;
  hilfe:string;
 begin
   el := links; er:=rechts; grenze := strtoint(ListeSortiert.Items.Strings[links]);

   repeat
      while strtoint(ListeSortiert.Items.Strings[el])<grenze do el:=el+1;
      while strtoint(ListeSortiert.Items.Strings[er])<grenze do er:=er-1;
      if(el <> er) then begin
        hilfe := ListeSortiert.Items.Strings[el];
        ListeSortiert.Items.Strings[el] := ListeSortiert.Items.Strings[er];
        ListeSortiert.Items.Strings[er] := hilfe;
      end;
   until el>er;
   if (er > links) then QuickSort(links,er);
   if (el < rechts) then QuickSort(el,rechts);
 end;
Vielleicht kann mir jemand helfen. Die Dateien sind in einer Zip-Datei als Attachment hinzugefügt, falls jemand Interesse haben sollte den Fehler zu beheben.
Gruß
Helios

Luckie 4. Apr 2003 17:29

In der Tutorial-Sparte hat Daniel ein paar Sortierverfahren besprochen. Da schon mal gekuckt?

Daniel B 4. Apr 2003 17:55

Hallo und herzlich Willkommen im Forum!

Das problem ist folgende zeile:
Delphi-Quellcode:
until el>er;
el wird nie höher und somit hast Du da eine Endlosschleife. Dein el wird nie erhöht. er ist ja 4 und el ist ja immer 1, kann also nicht gehen.

Grüsse, Daniel :hi:

Helios 4. Apr 2003 18:02

Danke für den Tipp. Aber ich weiß jetzt noch nicht, was ich ändern muss, damit "el" so erhöht wird, dass es funktioniert. Wäre gut wenn du vielleicht einen Lösungsvorschlag hast. :coder:

Luckie 4. Apr 2003 18:05

Ich zitiere mich ungern selber:
Zitat:

In der Tutorial-Sparte hat Daniel ein paar Sortierverfahren besprochen. Da schon mal gekuckt?

Daniel B 4. Apr 2003 18:05

Hallo,

nun, das einfachste wäre:
Delphi-Quellcode:
      Inc(el);
    until el>er;
So bleibt man wenisgtens nicht mehr hängen. ;)

Grüsse, Daniel :hi:

Helios 4. Apr 2003 18:24

@Luckie: Da hab ich eben mal geguckt. Nur sieht der Quellcode von dem Verfahren, an dem ich arbeite dort ganz anders aus. Ich kann zumindest nichts damit anfangen, weil ich noch nicht lange mit Delphi programmiere. Und diesen Quellcode, den ich hier habe, ist von meinem Informatiklehrer. Eigentlich sollte es funktionieren, aber mein Lehrer hat sich auch gewundert als es nicht ging. Und nun sollen wir zuhause versuchen das Problem zu lösen...

Helios 4. Apr 2003 18:49

Dein Tipp mit:
Delphi-Quellcode:
Inc(el);
until el>er;
hilft mir auch nicht weiter.
ich bin aber auf eine andere Idee gekommen. Es müsste doch eigentlich wie folgt sein:
Delphi-Quellcode:
el:=el+1;
er:=er-1;
until el>er;
Es funktioniert auch, fast zumindest. Wenn ich z.B. eine Liste mit 12 Zahlen nehme sind fast alle richtig sortiert. Meistens sind so ca. 10 von 12 Zahlen richtig sortiert. Aber warum werden nicht alle sortiert? :?: :?: :?: :!: :(

Daniel B 4. Apr 2003 18:52

Zitat:

Zitat von Helios
Dein Tipp mit:
Delphi-Quellcode:
Inc(el);
until el>er;
hilft mir auch nicht weiter.

Und was meinst Du was
Delphi-Quellcode:
Inc(el)
und
Delphi-Quellcode:
Dec(er)
macht??
Inc zählt die Varibale hoch, ist also das gleiche wie i := i +1; und Dec macht genau das Gegenteil, es zählt runter!

Grüsse, Daniel :hi:

Helios 4. Apr 2003 19:24

Ok, aber was kann ich nun mache, damit die Liste komplett sortiert wird. Damit die Liste komplett richtig sortiert wird muss ich das Verfahren mehrmals hintereinander anwenden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz