AGB  ·  Datenschutz  ·  Impressum  







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

Liste sortieren

Offene Frage von "mr.dandy"
Ein Thema von mr.dandy · begonnen am 26. Nov 2006 · letzter Beitrag vom 14. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
mr.dandy

Registriert seit: 26. Nov 2006
4 Beiträge
 
#1

Liste sortieren

  Alt 26. Nov 2006, 15:57
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?
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: Liste sortieren

  Alt 26. Nov 2006, 17:17
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.
  Mit Zitat antworten Zitat
mr.dandy

Registriert seit: 26. Nov 2006
4 Beiträge
 
#3

Re: Liste sortieren

  Alt 26. Nov 2006, 17:46
Das ist eine Schulaufgabe -.-
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Liste sortieren

  Alt 26. Nov 2006, 17:57
diesen algo funktionsfähig zu machen?
  Mit Zitat antworten Zitat
mr.dandy

Registriert seit: 26. Nov 2006
4 Beiträge
 
#5

Re: Liste sortieren

  Alt 26. Nov 2006, 18:16
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
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Liste sortieren

  Alt 26. Nov 2006, 18:37
Zitat von mr.dandy:
Nein, eine Funktion zu programmieren, die Listen sortiert.
HAbe es nochmal probiert:
HI und willkommen in der 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
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Liste sortieren

  Alt 26. Nov 2006, 18:41
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]
  Mit Zitat antworten Zitat
mr.dandy

Registriert seit: 26. Nov 2006
4 Beiträge
 
#8

Re: Liste sortieren

  Alt 26. Nov 2006, 18:43
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!)
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Liste sortieren

  Alt 26. Nov 2006, 18:46
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
  Mit Zitat antworten Zitat
words_of_silence

Registriert seit: 13. Dez 2006
1 Beiträge
 
#10

Re: Liste sortieren

  Alt 13. Dez 2006, 15:22
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?!
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
~* Shit happenz coz nobody's perfect. *~
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:33 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