Entwickler-Ecke
Sonstiges (Delphi) - Pointer - Elemente alphabetisch sortieren
kuschelfreddy - Fr 27.02.09 19:46
Titel: Pointer - Elemente alphabetisch sortieren
Hallo ihr alle!
Ich habe mal wieder ein Problem und bin mir sicher, dass ich hier einige Spezialisten finde, die mir gerne weiterhelfen!
Wir haben in der Schule die Aufgabe bekommen, ein Programm mit Pointern zu schreiben, dem Inhalte übergeben werden und das sie in der richtigen alphabetischen Reihenfolge ausgibt. Ich habe mir natürlich meine Gedanken dazu gemacht und auch etwas programmiert, was mir durchaus logisch erschien. Allerdings bekam ich jedes Mal, wenn ich auf einlesen drückte nur eine Fehlermeldung zu sehen und finde leider das Problem nicht.
Deshalb im Anhang besagte Fehlermeldung und das Programm mit relativ ausführlichen Anmerkungen, was ich mir dabei so gedacht habe, die euch hoffentlich nicht verwirren.
Hoffe, ihr könnt mir bei der Lösung des Problems helfen, sodass ich ein gescheites Programm erstellen kann. Schon mal ein dickes Dankeschön im Voraus!
LG und schönes WE!
Nathalie
Moderiert von
Narses: BMP -> PNG
jaenicke - Fr 27.02.09 20:16
Delphi-Quelltext
1:
| until memo2.lines[a]=''; |
Das ist keine so gute Idee, prüfe das besser so:
Delphi-Quelltext
1:
| until a >= Memo2.Lines.Count; |
So prüfst du tatsächlich die Anzahl und nicht den Inhalt. Wenn du auch bei der ersten Leerzeile abbrechen willst, dann mach es so:
Delphi-Quelltext
1:
| until (a >= Memo2.Lines.Count) or (Trim(Memo2.Lines[a]) = ''); |
Zum Fehler kann ich schon einmal sagen, dass er hier liegt:
Delphi-Quelltext
1: 2: 3:
| repeat hilfe:=hilfe^.richtung; until hilfe^.richtung=lauf^.richtung; |
An der Stelle wird hilfe nil, du versuchst aber trotzdem weiter darauf zuzugreifen.
Das findet man aber eigentlich mit dem Debugger relativ schnell heraus... Einfach mit F8 zeilenweise schnell durchgehen bis man die Stelle hat, an der der Fehler auftritt, dann dort einen Haltepunkt setzen, neu starten, immer mit F9 fortsetzen und zählen beim wievielten Mal der Fehler auftritt.
Und schon kannst du gezielt bis genau dort gehen bevor der Fehler auftritt. ;-)
kuschelfreddy - Fr 27.02.09 20:42
Hallo!
Danke schon mal für die schnellen Antworten, aber wenn ich ehrlich bin, habe ich das Problem immer noch nicht richtig erkannt! Vllt. bin ich auch einfach zu blöd, aber wieso setze ich denn hilfe auf nil in besagter Schleife??? Ich will es doch nur so lange weiterlaufen lassen, bis ich das Element gefunden habe, hinter das ich das neue einfügen muss, nachdem ich das, was dahinter kommt schon gefunden habe...
LG Nathalie
jaenicke - Fr 27.02.09 23:29
Dein Problem sind deine repeat Schleifen. Der Schleifeninhalt wird einmal ausgeführt, auch wenn die Bedingung nicht erfüllt ist. Du überspringst hier einfach das gesuchte Element:
Delphi-Quelltext
1: 2: 3:
| repeat hilfe:=hilfe^.richtung; until hilfe^.richtung=lauf^.richtung; |
Denn in Hilfe steht da ja Start, also Katze --> Hund --> Haus. Dann kommt das "hilfe:=hilfe^.richtung", jetzt ist da drin Hund --> Haus, lauf^.richtung wäre aber Hund, das ist aber jetzt das aktuelle Element und kann nicht mehr gefunden werden.
Das ist ein Debugscreenshot genau an der Stelle, links siehst du die aktuellen Werte (im Anhang liegt das selbe Bild):
Das gesuchte lauf^.richtung ist dort markiert, dadrunter siehst du den Inhalt von hilfe. In dem Moment, in dem du an der Zeile ankommt, wäre in richtung das gesuchte Element. Nach der Zeile ist aber hilfe selbst das gesuchte Element.
// EDIT:
Ach ja:
Überleg mal was passiert, wenn gar keine zweite Zeile existiert an dieser Stelle (zur Erinnerung: a ist 1):
Delphi-Quelltext
1: 2: 3:
| repeat new(lauf); lauf^.inhalt:=memo2.lines[a]; |
Das ist das selbe Problem.
kuschelfreddy - So 01.03.09 18:56
OK, ich hab das Problem verstanden, die Erklärung war echt gut! Vielen Dank!
Jetzt muss ich nur noch eine Lösung suchen, wenn ich da nicht weiter komme, melde ich mich wieder! =)
LG Nathalie
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!