Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: Bubblesort in ST TwinCat 2

  1. #1
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin Formumgemeinschaft,

    ich muss eine eingelesenes String Array Sortieren. Im Array diesem Array befinden sich Orndernamen immer mit dem gleichem Format yyyy_mm_dd.
    Diese Informationen möchte ich mit BubbleSort nach Datum absteigend sortieren.

    Ich bin soweit das ich das ich den Ablauf von BubbleSort verstanden habe. Ich wandle erst die String informationen in einen UINT-Wert um.
    Die UINT-Werte möchte ich dann vergleichen.

    Jetzt fehlt mir irgendwie die Idee wie ich das am Besten umsetzte.
    Mein Ansatz ist folgender:
    Code:
        FOR i := 0 TO 50 BY 1 DO
            IF DayUint [i] > DayUint[i+1] THEN
                DaySave :=DayUint [i];
                DayUint [i] := DayUint[i+1];
                DayUint[i+1] := DaySave;
            END_IF
            IF MonthUINT [i] > MonthUINT[i+1] THEN
                MonthSave :=MonthUINT [i];
                MonthUINT [i] := MonthUINT[i+1];
                MonthUINT[i+1] := MonthSave;
            END_IF
            IF YearUINT [i] > YearUINT[i+1] THEN
                YearSave :=YearUINT [i];
                YearUINT [i] := YearUINT[i+1];
                YearUINT[i+1] := YearSave;
            END_IF
        END_FOR
    Jetzt soll das ganz durchgeführt werdern bis alle Werte absteigend sortiert werden und ich habe natürlich im moment auch das problem mit dem letztem Wert.


    Hat jemand eine passende Lösung oder kann mir eine Idee liefern auf die ich heute (Montag morgen halt) noch nicht komme :P

    Danke euch schoneinmal für jede Idee!

    Mfg Hendrik
    Zitieren Zitieren Bubblesort in ST TwinCat 2  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo,
    also erstmal solltest du die Schleife nur bis Anzahl_Elemente -1 laufen lassen - in deinem Fall also bis 49.
    Dann :
    Du sortierst im Augenblick deine Elemente einzeln - das ist doch sicher nicht so gewollt. Meiner Meinung nach müßte es eher so aussehen :
    Code:
     FOR i := 0 TO 49 BY 1 DO
            doSort := false ;
    
            IF YearUINT [i] > YearUINT[i+1] THEN
                doSort := true ;
            elsif YearUINT [i] = YearUINT[i+1] THEN
                IF MonthUINT [i] > MonthUINT[i+1] THEN
                   doSort := true ;
                elsIF MonthUINT [i] = MonthUINT[i+1] THEN
                   IF DayUint [i] > DayUint[i+1] THEN
                      doSort := true ;
                  END_IF ;
               END_IF ;       
            END_IF ;
      
            if doSort then
                YearSave :=YearUINT [i];
                YearUINT [i] := YearUINT[i+1];
                YearUINT[i+1] := YearSave;
                MonthSave :=MonthUINT [i];
                MonthUINT [i] := MonthUINT[i+1];
                MonthUINT[i+1] := MonthSave;
                DaySave :=DayUint [i];
                DayUint [i] := DayUint[i+1];
                DayUint[i+1] := DaySave;
            end_if ;
        END_FOR ;
    Du hast sehr viele Semikolons vergessen ...!

    Naja ... und jetzt macht das Ganze natürlich nur einen Durchlauf.
    Du müßtest jetzt noch etwas da drum herum programmieren, dass das Ganze so oft wiederholt bis keine Umsortierungen mehr erfolgt sind ...

    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Hendrik (27.04.2015)

  4. #3
    Hendrik ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Hallo Larry das mit n -1 habe ich auch schon rausgefunden mein BubbleSort schaut jetzt so aus und funktioniert auch.
    Code:
            
    FOR n := 0 TO 50 BY 1 DO
                FOR i := 0 TO 49 BY 1 DO
                    IF DayUint [i] > DayUint[i+1] THEN
                        DaySave :=DayUint [i];
                        DayUint [i] := DayUint[i+1];
                        DayUint[i+1] := DaySave;
                    END_IF;
    
                    IF MonthUINT [i] > MonthUINT[i+1] THEN
                        MonthSave :=MonthUINT [i];
                        MonthUINT [i] := MonthUINT[i+1];
                        MonthUINT[i+1] := MonthSave;
                    END_IF;
    
                    IF YearUINT [i] > YearUINT[i+1] THEN
                        YearSave :=YearUINT [i];
                        YearUINT [i] := YearUINT[i+1];
                        YearUINT[i+1] := YearSave;
                    END_IF;
                END_FOR;
            END_FOR;
    Eine abfrage ist garnicht notwenidig wenn ich das einfach Anhand der Array größe durchlaufen lasse.

    Andere Frage gibt es einen Trick Arraygrößen mehr oder Wenig dynamisch zuhalten oder Zentral die Größe ändern? im moment muss ich 10 mal die Arraygrenzen ändern wenn ich ein anderes Array vergleichen möchte.

    MFG Hendrik

  5. #4
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Nein Arraygrößen kannst du nicht dynamisch ändern. Wenn du deinen Sortieralgorithmus auf Arrays verschiedener Länge anwenden möchtest, kannst du aber mit Pointern Arbeiten. Du musst dann deinem FB die Adresse und Größe des Arrays und die Größe eines Feld-Elementes übergeben.
    Sänd from mei Kombjudder mitse Dastadurr.

  6. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    @Hendrik:
    Ich glaube nicht, dass dein Sortierer korrekt funktioniert - es sei denn das Tag, Monat und Jahr nichts miteinander zu tun haben und einfach nur unzusammenhängend jeder für sich sortiert werden sollen. Vielleicht überprüfst du deinen Code doch noch mal mit verschiedenen Werten ...
    Und schau dich doch mal meinen Codeschnipsel an ...

    Ansonsten : eine Schleife um die Schleife legen macht man eigentlich nicht. Da gehört eigentlich ein "Do ... Repeat until keineÄnderung" hin.
    Das wäre dann "etwas" professioneller ...

    Gruß
    Larry

  7. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Hendrik (27.04.2015)

  8. #6
    Hendrik ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Hey ja das ist mir kurz nach meiner antwort auch aufgefallen
    Danke!

  9. #7
    Registriert seit
    13.10.2013
    Ort
    shertogenbosch niederlande
    Beiträge
    120
    Danke
    0
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    dein bubble sort geht nicht gut, es sortiert schon aber holt die daten ganz durch einander.
    es soll nur wechseln wen alle daten hoher oder gleich sind.

    wenn die datei ein string ist wie beschrieben dan geht es auch in einen gang also wen die string[i] < string[i+1]ist dan umdrehen.
    paul deelen
    shooter@home.nl
    +31736139136

Ähnliche Themen

  1. TIA Variant Bubblesort
    Von Ingo dV im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 16.10.2014, 19:46
  2. Step 7 Bubblesort von 2000 Produkte
    Von Vokal12 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 25.11.2013, 12:47
  3. Sortieren von DINT Werten mit Bubblesort Methode
    Von hermann67 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 20.11.2012, 10:38
  4. Bubblesort in ST
    Von timod79 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 05.02.2009, 09:07
  5. Bubblesort
    Von Milo_M im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 05.02.2008, 06:28

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •