![]() |
Liste sortieren
Hallo,
ich komme nicht mehr weiter :( Ich soll eine Liste, die vorher mit Vokabeln gefüttert wurde nach den Anfangsbuchstaben sortiert werden. Meine Idee:
Delphi-Quellcode:
Abeer leider habe ich das mit den Listen noch nicht so ganz raus. Es kommt immer wieder zu Fehlern beim Ablauf :(
procedure TForm1.Button7Click(Sender: TObject);
var zactually,zcache: pointer; s,t:string; sot,finished,fine:boolean; begin edit2.Text:=''; new(zcache); zcache:=nil; finished:=false; if data_list = nil then edit2.Text:='Die Liste ist leer.' else begin zactually:=data_list; while zactually <> nil do begin fine:=true; while zcache <> nil do begin if ord(zcache.content[1]) <= ord(zactually.content[1]) then begin s:=zcache.content; zcache.content:=zactually.content; sot:=true; while zcache <> nil do begin if(sot) then begin t:=zcache.next.content; zcache.next.content:=s; sot:=false; end else begin s:=zcache.next.content; zcache.next.content:=t; sot:=true; end; zcache:=zcache^.next; end; finished:=true; fine:=false; break; end; if finished then begin finished:=false; break; end; zcache:=zcache^.next; end; if fine then begin zcache.content:=zactually.content; zcache^.next:=nil; end; zactually:=zactually^.next; end; while zcache <> nil do begin edit2.Text:=edit2.Text+' ++ '+zcache.content; zcache:=zcache^.next; end; edit2.Text:=edit2.Text+' ++'; end; end; Wo liegen meine Fehler? |
Re: Liste sortieren
ich guck mir den quelltext jetzt mal nicht genauer an, weil ich mich schon beim überfliegen frage:
warum nimmst du keine TSTringList? Die hat schon eine Methode Sort. |
Re: Liste sortieren
Das ist eine Schulaufgabe -.-
|
Re: Liste sortieren
diesen algo funktionsfähig zu machen?
|
Re: Liste sortieren
Zitat:
HAbe es nochmal probiert:
Delphi-Quellcode:
Aber es gibt immer nur das "höchste" Element der Liste aus :(
procedure TForm1.Button7Click(Sender: TObject);
Var zcache:pointer; i: integer; s:string; begin zcache:=nil; for i:=1 to 1 do begin zcache := data_list; while zcache^.next <> nil do begin if ord(zcache^.content[1]) > ord(zcache^.next^.content[1]) then begin s:= zcache^.content; zcache^.content:= zcache^.next.content; zcache^.next.content:=s; end; zcache := zcache^.next; end; end; edit2.Text:=show_list(zcache); //Hier wird die Liste ausgegeben end; |
Re: Liste sortieren
Zitat:
Du hast ja sicherlich die Forenregeln gelesen und weißt dass es hier (wie in fast allen Foren) keine direkten Lösungen der Schulaufgaben gibt. Da dir die Leute hier aber sicherlich gerne helfen werden, dass du eine Lösung (selbst) findest, solltest du auch den Leuten etwas helfen. Das kannst du immer am besten, wenn du möglichst viele Informationen lieferst. Das wichtigste sollte dabei immer die Frage sein, was du eigentlich genau machen willst und wo genau dein Problem liegt. Im ersten Beitrag sagst du nur, dass der von dir gepostete Code nicht funktioniert, was genau funktioniert nicht? Was für eine Fehlermeldung kommt? Wo kommt sie (soweit du das schon weißt)? Was ist die Idee hinter dem Code? Das gleiche fehlt jetzt wieder. Natürlich kann jeder einfach deinen Code durchgehen und dir dann was sagen, aber schöner ist es einfach, wenn du einfach sagst was du hast (in welcher Form liegt die Liste vor? Wie sehen die Elemente aus?) und warum du was wie machen willst. Du kannst dich da ja auch kurz fassen, aber zwei drei Sätze mehr kosten dich sicherlich < 1 Minute und helfen immens weiter. An sich frag ich einfach mal, ob du schon einen Algorithmus zum sortieren kennst? Schon was von Bubblesort, Insertionsort, Mergesort oder Quicksort gehört? Natürlich auch von irgendeinem anderen Sortieralgorithmus? Die machen alle das gleiche (auf unterschiedliche Weise). Wenn du einen davon schon kennst, dann sag das einfach kurz und vielleicht auch gleich wie gut du den verstanden hast. Gruß Der Unwissende |
Re: Liste sortieren
ich werd aus deinem quellcode ned ganz schlau muss ich sagen ^^
![]() quasi so: ( ned getestet )
Delphi-Quellcode:
[edit] kleinen fehler entdeckt.. [/edit]
procedure bubblesort(var f: Array of String);
var i,j : Integer; temp : string; begin for i:=High(f) downto Low(f)+1 do begin for j:=Low(f)+1 to i do begin if Ord( f[j-1][1] ) > Ord( f[j][1] ) then begin temp := f[j-1]; f[j-1] := f[j]; f[j] := temp; end; end; end; end; |
Re: Liste sortieren
hi,
sorry, bin nur so in Eile :( Also, beim ersten weiß ich nciht genau was falsch ist, darum habe ich einen kompletten Neustart versucht. Der greift Bubblesort auf (kenne die verschiedenen Sortierverfahren), aber er gibt nicht alle Elemente er Liste sondern nur das Höchste aus. Irgendwo muss da ein Denkfehler liegen, oder? Will jedes einzelne Durchgehen und halt prüfen ob das daneben größer ist und wenn nicht, dann tauschen. @relicted: Ich versuche ja genau das (beim zweiten!) :) |
Re: Liste sortieren
hmmm und wieso pointerst du wild durch die gegend? wir sind doch hier ned beim zeh'n ( c unso :-) )
in welcher form liegen denn deine strings vor ? woher bekommst du den input? gruß reli |
Re: Liste sortieren
:lol: Na das trifft sich ja gut... Habe momentan in Bezug auf ein Semesterprojekt genau dasselbe Problem, dass ich mit Hilfe von Bubble - Sort Strings sortieren möchte... Bei Zahlen (Integern) ist das überhaupt kein Problem, nur mit dem Sortieren von Strings hapert es etwas... :(
Sei's drum... Reli - Ich habe eine Frage zu deinem Quelltext... Und zwar vergleicht er jeweils nur den Anfangsbuchstaben miteinander, richtig?! :gruebel: Dandy, wenn du also auch noch den Fall betrachten möchte, dass zum Beispiel 'Apfel' und 'Affe' richtig sortiert werden, dann müsstest du noch eine Schleife einbauen, die besagt, dass solange ord(wert1) = ord(wert2), man eine Stelle weitergehen soll, also die jeweils zweiten bzw. dritten usw. Buchstaben miteinander vergleicht... ;) Viel Erfolg mit deiner Schulaufgabe! So long, words |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz