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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: aus 6 Real Zahlen die höchste und die niedrigste ermitteln

  1. #11
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier noch einmal die Änderung von Zotos an meinem Programmcode:

    Code:
          L     DBD [AR1,P#6.0]             // Wert 2
          L     DBD [AR1,P#0.0]             // Wert 1
          >R    
          SPB   M03
          SPA   M04
    Code:
          L     DBD [AR1,P#6.0]             // Wert 2
          L     DBD [AR1,P#0.0]             // Wert 1
          >R    
          SPBN  M04
    Gruß Kai

  2. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    spunky (19.07.2007)

  3. #12
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Zottel Beitrag anzeigen
    Bubblesort funktioniert natürlich, ist aber etwas aufwendig ((6-1)*6=30 Vergleiche) für so eine "kleine" Aufgabe.
    Das ist so nicht ganz richtig.

    Bubblesort benötigt zum Sortieren einer Datenfolge der Länge n folgende Anzahl von Vergleichen:

    Code:
                                  n * (n - 1)
    (n - 1) + (n - 2) + ... + 1 = -----------
                                       2
    Bei einer Datenfolge von 6 Zahlen (n) benötigt Bubblesort also 5 Durchläufe (n - 1) mit insgesamt 15 Vergleichen (n * (n - 1) / 2).

    Durchlauf 1 = 6 - 1 = 5 Vergleiche

    Durchlauf 2 = 6 - 2 = 4 Vergleiche

    Durchlauf 3 = 6 - 3 = 3 Vergleiche

    Durchlauf 4 = 6 - 4 = 2 Vergleiche

    Durchlauf 5 = 6 - 5 = 1 Vergleich

    Summe = 15 Vergleiche

    Gruß Kai

  4. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    spunky (19.07.2007)

  5. #13
    spunky ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.07.2007
    Beiträge
    7
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Daumen hoch

    Hallo,

    hier mal an alle ein DICKES DANKE !!!

    man oh man, geniale sache, genau das was ich gebraucht habe.

  6. #14
    Registriert seit
    29.08.2006
    Beiträge
    195
    Danke
    0
    Erhielt 35 Danke für 21 Beiträge

    Standard

    schau mal in die open source library von oscat rein dort ist bubble sort und auch array min und array max im source code vorhanden
    wenn du forlaufend aus einem array min und max werte benötigst solltest du nicht unbedingt bubble sort anwenden, das ist viel zu aufwendig weil zuviele tauschvorgänge.
    um min und max zu ermitteln must du nur einmnal das array durchlaufen und hast das ergebnis.
    siehe hierzu die fumktionen array_min und array_max
    den source code findest du unter www.oscat.de

  7. #15
    Registriert seit
    15.08.2008
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    moin,
    von mir auch schon mal ein dickes danke, der algorithmus hat mir auch schon sehr geholfen und stehe grad auch noch in den anfängen, und versuche mich in awl einzuarbeiten, und hab auch bislang nur grob mit pointern zu tun gehabt, aber stimmt es, wenn ich jetzt 7 statt 6 zahlen miteinander vergleichen will, ich nur überall wo 36.0 steht, 40.0 schreiben muss, oder müsste noch mehr geändert werden?

  8. #16
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    669
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    Hallo,

    folgendes sollte einfacher sein (AWL-Quelle):

    Code:
    FUNCTION "SORT_MAX_REAL" : VOID
    TITLE =Sortieralgorithmus nach größtem Wert [REAL]
    AUTHOR : Micha
    FAMILY : SORT
    NAME : MAX_REAL
    VERSION : 1.2
     
    VAR_INPUT
      DB_NR : BLOCK_DB ; 
      ANZ : INT ; 
    END_VAR
    VAR_TEMP
      tiLC : INT ; //Loopcounter
      tbFertig : BOOL ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Algorithmus
    //
    //
          AUF   #DB_NR; 
    NEU:  LAR1  P#DBX 0.0; 
          S     #tbFertig; 
          L     #ANZ; 
          DEC   1; 
    L1:   T     #tiLC; 
          L     D [AR1,P#0.0]; 
          L     D [AR1,P#4.0]; 
          >=R   ; 
          SPB   KSOR; 
          L     D [AR1,P#0.0]; 
          L     D [AR1,P#4.0]; 
          T     D [AR1,P#0.0]; 
          TAK;
          T     D [AR1,P#4.0]; 
          SET   ; 
          R     #tbFertig; 
    KSOR: +AR1  P#4.0; 
          L     #tiLC; 
          LOOP  L1; 
          UN    #tbFertig; 
          SPB   NEU; 
    END_FUNCTION
    Es muss noch ein DB, der mindestens die Anzahl der am INT-Eingang angegebenen Real-Werte enthält, verschaltet werden.
    Nach Bearbeitung des FCs stehen die 6 Werte sortiert im angegebenen DB.

    Ich habe keine Auswertung der Parametrierung reinprogrammiert!
    Bei Parametrierfehler (z.B. 8 am INT-Eingang, aber nur 6 Real Werte im DB, oder falscher DB) gibts Bereichslängenfehler, und ggf. CPU-Stopp!

    Gruß Micha
    Geändert von SPSKILLER (21.08.2008 um 09:57 Uhr) Grund: Codeoptimierung

  9. #17
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von cosmo Beitrag anzeigen
    stimmt es, wenn ich jetzt 7 statt 6 zahlen miteinander vergleichen will, ich nur überall wo 36.0 steht, 40.0 schreiben muss, oder müsste noch mehr geändert werden?
    Hier noch mal ein kurzes Programmbeispiel für die Sortierung von 7 REAL-Zahlen mit Bubblesort:

    Code:
    // FC100 : Bubblesort
     
    // Datensatz kopieren
     
          CALL  SFC   20
           SRCBLK :=P#DB100.DBX0.0 BYTE 42
           RET_VAL:=#BLKMOV_RET_VAR
           DSTBLK :=P#DB100.DBX42.0 BYTE 42
     
    // Bubblesort
     
          AUF   DB   100                    // Datenbaustein öffnen
     
          L     6
    M01:  T     #ZAEHLER_01
     
          L     P#42.0                      // Zeiger Wert 1
          LAR1  
     
          L     #ZAEHLER_01
    M02:  T     #ZAEHLER_02
     
          L     DBD [AR1,P#6.0]             // Wert 2
          L     DBD [AR1,P#0.0]             // Wert 1
          >R    
          SPBN  M03
          L     DBD [AR1,P#0.0]             // Wert 1 
          L     DBD [AR1,P#6.0]             // Wert 2  
          T     DBD [AR1,P#0.0]             // Wert 2 => Wert 1
          TAK   
          T     DBD [AR1,P#6.0]             // Wert 1 => Wert 2
     
          L     DBW [AR1,P#4.0]             // Kennung 1
          L     DBW [AR1,P#10.0]            // Kennung 2
          T     DBW [AR1,P#4.0]             // Kennung 2 => Kennung 1
          TAK   
          T     DBW [AR1,P#10.0]            // Kennung 1 => Kennung 2
     
    M03:  L     P#6.0                       // Zeiger Wert 1 + 1
          +AR1  
     
          L     #ZAEHLER_02
          LOOP  M02
     
          L     #ZAEHLER_01
          LOOP  M01
    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg VAT.jpg (490,6 KB, 20x aufgerufen)
    Angehängte Dateien Angehängte Dateien

  10. #18
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    ohne jetzt mal auf den sinn einer vorigen sortierung einzugehen nur um min/max zu bestimmen, guckst du mal hier

    http://lischis-home.dyndns.org/files...e/dirindex.php
    dort db_auswerten.zip
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  11. Folgender Benutzer sagt Danke zu volker für den nützlichen Beitrag:

    SPS_S5_S7 (07.11.2009)

  12. #19
    Registriert seit
    15.08.2008
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ja danke schön, ich denk mal damit sollte ich es hinbekommen.
    aber der sinn des ganzen ist, beispielsweise 6 pumpen entsprechend nach ihrer laufzeit zu sortieren, um die pumpen mit der geringsten laufzeit als erstes freizugeben, um den verschleiß möglichst konstant zu halten

  13. #20
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    also doch sortieren. hast du anfangs aber nicht erwähnt.

    die andere sachen ist die. wenn du deine pumpen immer so einschaltest, das alle in etwa die gleiche laufzeit haben, werden auch alle ungefähr gleichzeitig kaputt gehen.
    ich würde die pumpen normal laufen lassen. hat nun eine pumpe wartungszeit überschritten, kann diese getauscht/gewartet werden und du hast trotzdem noch pumpen die sicher laufen.
    wieviele pumpen wann laufen weiss ich ja in deinem fall nicht.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

Ähnliche Themen

  1. Höchste Zahl auswerten
    Von Glitsch Master im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.09.2009, 08:24
  2. Antworten: 3
    Letzter Beitrag: 28.03.2009, 09:47
  3. Antworten: 3
    Letzter Beitrag: 28.11.2007, 13:11
  4. Mittelwertbildung aus REAL Zahlen
    Von Waelder im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 09.01.2006, 00:46
  5. OP-15 REAL Zahlen darstellen
    Von klauserl im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.10.2005, 18:04

Lesezeichen

Berechtigungen

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