AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Denkfehler in simplem Program...

Ein Thema von El Cattivo · begonnen am 30. Apr 2005 · letzter Beitrag vom 30. Apr 2005
Antwort Antwort
El Cattivo

Registriert seit: 17. Apr 2004
Ort: Nieste bei Kassel
19 Beiträge
 
Delphi 5 Standard
 
#1

Denkfehler in simplem Program...

  Alt 30. Apr 2005, 11:20
edit
Es hat sich erledigt. Das Program geht jetzt. Das hier kann geschlossen / gelöscht werden...





Ich hoffe, ich bin hier im Richtigen Bereich. Wenn nicht, dann bitte verschieben.
Also ich schreibe gerade ein Program und ich hänge an einem Problem, was ich einfach nicht lösen kann. Ich habe eine Liste von Einträgen, die ich von klein nach groß sortieren möchte. Das ist ja eigentlich nicht schwer, weshalb es mich um so mehr aufregt, das ich es nicht schaffe.
Die Einträge der Liste stehen in einer Pointerkette. Neue Einträge werden "hinten angehängt". Sie sieht also etwa so aus:
[Wuzel(Zeiger)] = [lauf(Zeiger)] -> [Eintrag1 / lauf.rechts] -> [Eintrag2 / lauf.rechts.rechts] -> [...] -> [Eintrag.n / lauf.rechts. ... . rechts]:=NIL;
Nun will ich wie gesagt diese Einträg sortieren. Dafür habe ich folgende Procedur geschrieben:

Delphi-Quellcode:
procedure TForm1.Button9Click(Sender: TObject);
begin
lauf:=wurzel; {wurzel ist der Zeiger, der immer auf den ersten Eintrag zeigt}
if lauf.rechts.rechts=NIL then {der Fall, dass nur zwei Einträge existieren}
    begin
      if lauf.NC>lauf.rechts.NC then {Wenn sortiert werden muss dann...:}
        begin
          help:=lauf;
          wurzel:=lauf.rechts;
          lauf:=lauf.rechts;
          lauf.rechts:=help;
          lauf.rechts.rechts:=NIL;
        end;
    end;
repeat
  if lauf.NC>lauf.rechts.NC then {wenn es mehr als zwei Einträge sind...:}
    begin
      if lauf=wurzel then {Wenn die ersten beiden sortiert werden müssen. (Das ist ein Sonderfall, da Wuzel dann verändert werden muss.)}
        begin
          help:=lauf;
          help.rechts:=lauf.rechts.rechts;
          wurzel:=lauf.rechts;
          lauf:=lauf.rechts;
          lauf.rechts:=help;
          lauf.rechts.rechts:=help.rechts;
          lauf:=lauf.rechts;
        end
      else {Wenn es nicht die ersten beiden Einträge sind...:}
        begin
          help:=lauf;
          lauf:=wurzel;
          while lauf.rechts<>help do {lauf wird eine Position zurückgestellt um sortieren zu können}
            lauf:=lauf.rechts;
          help.rechts:=lauf.rechts.rechts;
          help.rechts.rechts:=lauf.rechts.rechts.rechts;
          lauf.rechts:=help.rechts;
          lauf.rechts.rechts:=help;
          lauf.rechts.rechts.rechts:=help.rechts.rechts;
          lauf:=lauf.rechts;
        end;
    end
  else
    lauf:=lauf.rechts; {Wenn nicht sortiert werden muss, dann lauft er ein Eintrag weiter.}
until lauf.rechts.rechts=NIL; {Ende der Sortierprocedure}
memo1.clear; {die 4 Einträge (Vorname, Nachname, Alter und NC) werden in 4 memos ausgegeben}
memo2.clear;
memo3.clear;
memo4.clear;
lauf:=wurzel;
while lauf^.rechts<>NIL do
  begin
    memo1.lines.add(lauf^.Vorname);
    memo2.lines.add(lauf^.Nachname);
    memo3.lines.add(inttostr(lauf^.Alter));
    memo4.lines.add(floattostr(lauf^.NC));
    lauf:=lauf^.rechts;
  end;
memo1.lines.add(lauf^.Vorname);
memo2.lines.add(lauf^.Nachname);
memo3.lines.add(inttostr(lauf^.Alter));
memo4.lines.add(floattostr(lauf^.NC));
end;
Für den Fall, das nur zwei Einträge existieren, funktioniert das Program. Auch die Ausgabe funktioniert. Nur beim restlichen Sortieren muss es Fehler geben! Ich bin das alles schon etliche Male durchgegangen und habe skizzen gemacht und konnte den Fehler nicht finden. Ich habe den EInduck, dass es eine endlosschleife ist. Ich wüsste allerdings nicht wieso das der Fall sein sollte.
Über Hilfe wäre ich sehr dankbar! Ich kann bei Bedarf auch weitere Quelltextauszüge geben bzw. das ganze Projekt online stellen.
  Mit Zitat antworten Zitat
30. Apr 2005, 19:00
Dieses Thema wurde von "Christian Seehase" von "Projekte" nach "Sonstige Fragen zu Delphi" verschoben.
Es handelt sich nicht um ein Projekt
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.
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