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 Liste sortieren (https://www.delphipraxis.net/81396-liste-sortieren.html)

mr.dandy 26. Nov 2006 14:57


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:
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;
Abeer leider habe ich das mit den Listen noch nicht so ganz raus. Es kommt immer wieder zu Fehlern beim Ablauf :(

Wo liegen meine Fehler?

bttb930 26. Nov 2006 16:17

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.

mr.dandy 26. Nov 2006 16:46

Re: Liste sortieren
 
Das ist eine Schulaufgabe -.-

Relicted 26. Nov 2006 16:57

Re: Liste sortieren
 
diesen algo funktionsfähig zu machen?

mr.dandy 26. Nov 2006 17:16

Re: Liste sortieren
 
Zitat:

Zitat von Relicted
diesen algo funktionsfähig zu machen?

Nein, eine Funktion zu programmieren, die Listen sortiert.
HAbe es nochmal probiert:
Delphi-Quellcode:
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;
Aber es gibt immer nur das "höchste" Element der Liste aus :(

Der_Unwissende 26. Nov 2006 17:37

Re: Liste sortieren
 
Zitat:

Zitat von mr.dandy
Nein, eine Funktion zu programmieren, die Listen sortiert.
HAbe es nochmal probiert:

HI und willkommen in der DP :dp:

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

Relicted 26. Nov 2006 17:41

Re: Liste sortieren
 
ich werd aus deinem quellcode ned ganz schlau muss ich sagen ^^

http://de.wikipedia.org/wiki/Bubblesort <-- könnte dir vielleit weiter helfen. da du keine zahlen hast versuchs mit den ordinalwerten der ersten n buchstaben...

quasi so: ( ned getestet )

Delphi-Quellcode:
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;
[edit] kleinen fehler entdeckt.. [/edit]

mr.dandy 26. Nov 2006 17:43

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!) :)

Relicted 26. Nov 2006 17:46

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

words_of_silence 13. Dez 2006 14:22

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 03:42 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