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

Ergebnis 1 bis 10 von 10

Thema: Programmierlösung gesucht

  1. #1
    Registriert seit
    06.01.2005
    Ort
    im schönen Lipperland
    Beiträge
    4.472
    Danke
    498
    Erhielt 1.143 Danke für 736 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo SPS-Cracks.

    Ich stehe vor folgenden Problem :

    Ich habe in einem DB 4 verändererbare Werte (als Bsp. : DW1:1000, DW2:1200, DW3:1450, DW4:1800) Jetzt muss ich wissen welcher von diesen Werten am besten zu einem 5. Wert (DW5 :1250) passt. Dabei muss der kleinstmögliche Wert rausgesucht werden der noch grösser ist als Wert 5. In diesem Fall wäre das DW3 (1450). Das eigentlich Problem dabei ist das die Werte 1-4 nicht unbedingt in auf- und absteigender Reihenfolge vorliegen sondern "wild" durcheinander sein können. Irgendwie fällt mir da kein richtiger Lösungsansatz ein. Vielleicht hat ja von Euch jemand ne gute Idee.

    Schönen Abend noch.

    Axel
    Zitieren Zitieren Programmierlösung gesucht  

  2. #2
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    1. Einen Index bilden, der die Adressen der Werte enthält.
    2. Den Index nach der Größe der Werte sortieren
    3. Die Werte in der Reihenfolge (aufsteigend) des Index mit Wert 5 vergleichen. Der 1., der größer ist, ist der richtige.
    Für die Punkte 1 und 2 findest du eine Lösung mit Code unter:
    http://www.sps-forum.de/phpBB2/viewtopic.php?t=1960

  3. #3
    Avatar von Lipperlandstern
    Lipperlandstern ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.01.2005
    Ort
    im schönen Lipperland
    Beiträge
    4.472
    Danke
    498
    Erhielt 1.143 Danke für 736 Beiträge

    Standard

    Upsss.... na das ist ja nen Hammer.... da muss ich mich erstmal mit auseinanderssetzen
    Ich hoffe das überfordert so einen Maschinenprogrammierer wie mich nicht .... schaun wir mal

  4. #4
    Registriert seit
    11.06.2004
    Beiträge
    100
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hallo

    ich hatte vor einiger zeit die gleiche aufgabe ich musste in einer siloanlage auslesen in welcher zelle sich der kleinste füllstand befindet, den baustein habe ich in scl geschriben, den könnte ich dir per mail zusenden.
    dann muss man nur noch die differenz der einzelnen werte berechnen und danach die kleinste zahl rausfiltern.

    gruss
    uz

  5. #5
    Avatar von Lipperlandstern
    Lipperlandstern ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.01.2005
    Ort
    im schönen Lipperland
    Beiträge
    4.472
    Danke
    498
    Erhielt 1.143 Danke für 736 Beiträge

    Standard

    @zottel
    Deine Projekt habe ich mal runtergeladen und es funktioniert wie verrückt ... Leider hab ich die Funktion und Vorgehensweise noch nicht ganz verstanden aber da werde ich mich morgen mit auseinandersetzen.

    @uz
    Danke für Deine Hilfe. Aber SCL hab ich mich noch nicht beschäftigt. Werde ich aber wohl bald müssen wenn die Aufgabenstellungen weiterhin immer komplexer werden.

    Bis hinhin erstmal vielen Dank. Alles weitere morgen

  6. #6
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Hallo Leute,

    das mit dem Sortieren ist ja gut und schön, aber eigentlich garnicht notwendig. Zumal man danach trotzdem noch in einer Schleife nach dem richtigen Wert suchen muss.

    Man könnte es auch so machen:

    - Initialisieren: ERGEBNIS:=32767 (Integer?)
    - Schleife zum Abklappern der Werte 1 bis n
    - WENN (Wert x > VERGLEICHSWERT) UND (Wert x < ERGEBNIS) DANN ERGEBNIS := Wert x
    - Schleife bis zum Wert n fortsetzen

    oder so ähnlich.


    Gruss, Onkel

  7. #7
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert
    Hallo Leute,

    das mit dem Sortieren ist ja gut und schön, aber eigentlich garnicht notwendig. Zumal man danach trotzdem noch in einer Schleife nach dem richtigen Wert suchen muss.

    Man könnte es auch so machen:

    - Initialisieren: ERGEBNIS:=32767 (Integer?)
    - Schleife zum Abklappern der Werte 1 bis n
    - WENN (Wert x > VERGLEICHSWERT) UND (Wert x < ERGEBNIS) DANN ERGEBNIS := Wert x
    - Schleife bis zum Wert n fortsetzen

    oder so ähnlich.
    Da hast du absolut recht und ich habe einen Moment lang nachdenken müssen, wo die Unterschiede sind:
    1. Der Frager in dem anderen Thread brauchte mehrere Betriebsmittel. Bräuchte er nur eins, so würde ein Durchlauf der äußeren Schleife von Bubblesort reichen.
    2. Deine Schleife unterbindet das weitere "Absinken" oder "Aufsteigen" eines Wertes in der Liste, sobald Wert nicht mehr > Vergleichswert.
    3. Demjenigen, der in dem anderen Thread z.B. 5 Betriebsmittel brauchte, hätten auch 5 Durchläufe der äußeren Schleife gereicht. Ob der Rest sortiert ist, wäre ja egal.
    4.
    ..Zumal man danach trotzdem noch in einer Schleife nach dem richtigen Wert
    suchen muss.
    . Fast hätte ich in der 1.Antwort noch geschrieben, daß man das in einer sortierten Liste mit binärer Suche tun kann; aber bei 4 Elementen ist das "Overkill" hoch 3.

  8. #8
    yetibrain Gast

    Standard

    Lipperlandstern,

    vielleicht kannst du ja auch zur Erzeugungszeit der Werte den Index speichern der zum gesuchten Wert führt (oder den Wert selbst) und nicht zur Abfragezeit. Also ich meine eine Art "early-calculation".

    yb

  9. #9
    Registriert seit
    06.01.2012
    Ort
    Papenburg
    Beiträge
    114
    Danke
    25
    Erhielt 27 Danke für 13 Beiträge

    Standard

    Hallo,

    ich habe ein ähnliches Problem. Ich möchte aus 8 Zahlen immer wieder die nächstgrößere ausgeben. Als Beisp. z1=1; Z1=2;....z8=8; Wird die Schleife beim ersten mal durchlaufen soll er mir die 1 ausgeben. Bezugspunkt beim ersten Durchlauf ist die 0. Beim zweiten mal die 2, Bezugspunkt hier ist die letzte ausgegebene Zahl. Und immer soweiter...

    Hier mal mein bisheriger Code... So wird er nicht funktionieren, weil er mir so immer die größte Zahl ausgibt. Für einen Tipp bin ich sehr dankbar. Sind meine ersten Versuche mit SCL.

    Code:
    FOR "Positionen"."Anzahl der Positionen" := 0 TO 7 DO
                     IF (("Positionen".Positionen["Positionen"."Anzahl der Positionen"] > "Positionen"."letzte angefahrene Position"))  THEN  
                           #Pos := "Positionen".Positionen["Positionen"."Anzahl der Positionen"];    
                      END_IF;
                    END_FOR;
              "Positionen"."anzufahrende Position" := #Pos;
              "Positionen"."letzte angefahrene Position" := #Pos;
    Gruß
    Sascha
    Theorie ist, wenn man alles weiß aber nichts funktioniert. Praxis ist, wenn alles funktioniert aber keiner weiß warum.
    Bei mir ist Theorie und Praxis vereint. Nichts funktioniert und keiner weiß warum.



  10. #10
    Registriert seit
    05.09.2011
    Beiträge
    176
    Danke
    43
    Erhielt 28 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi.
    Wenn ich dich richtig verstanden habe ...
    Versuche es doch mal mit der Exit-Anweisung in SCL! Allerdings hast du dann nach 8 Zyklen wieder den höchsten Wert in #Pos stehen. Wird die Schleife unbedingt ausgeführt oder wird hier vorher noch eine Bedingung abgefragt, die die Schleife ausführt ???

    Auszug aus der Online-Hilfe:
    Eine EXIT-Anweisung dient zum Verlassen einer Schleife (FOR, WHILE oder REPEAT) an beliebiger Stelle und unabhängig vom Erfülltsein der Abbruchbedingung.

    Die EXIT-Anweisung wird nach folgenden Regeln bearbeitet:

    Diese Anweisung bewirkt das sofortige Verlassen derjenigen Wiederholungsanweisung, die die EXIT-Anweisung unmittelbar umgibt.

    Die Ausführung des Programms wird nach dem Ende der Wiederholungsschleife (z.B. nach END_FOR) fortgesetzt.
    Code:
    Annahmen:
    
    "Positionen"."letze angefahrene Position" = 0
    "Positionen".Positionen[0] = 1
    "Positionen".Positionen[1] = 2
    ...
    "Positionen".Positionen[6] = 7
    "Positionen".Positionen[7] = 8
    Dann wäre nach dem ersten Schleifendurchlauf #Pos = 1, nach dem zweiten Durchlauf #Pos = 2, usw.
    Bleibt halt nur die Frage, ob die Position im gleichen Zyklus noch erreicht wird??? Nach 8 Zyklen bleibt dann die 8 in Pos stehen (auf deinen hier geposteten Code bezogen)

Ähnliche Themen

  1. AKF 13 gesucht
    Von dben im Forum PC- und Netzwerktechnik
    Antworten: 1
    Letzter Beitrag: 16.07.2012, 08:03
  2. Antworten: 3
    Letzter Beitrag: 17.09.2011, 16:11
  3. s7 200 gesucht
    Von Praktikus im Forum Suche - Biete
    Antworten: 2
    Letzter Beitrag: 17.12.2007, 10:05
  4. SPS gesucht
    Von CIDO im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 03.05.2006, 20:13
  5. S7 - 212 gesucht ...
    Von smartie im Forum Suche - Biete
    Antworten: 2
    Letzter Beitrag: 31.03.2006, 14:29

Lesezeichen

Berechtigungen

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