IF-Schleife

  • Guten Morgen Roboterfreunde


    Ich habe mehrere Variable, die ich mit Hilfe einer IF-Schleife abfrage.


    IF (MESSWERT_1_Y > 0.7) OR (MESSWERT_1_Y <-0.7) THEN
    ABLEGEN_RE ()
    RECHNEN ()
    GOTO STA
    ENDIF


    IF (MESSWERT_2_Y > 0.7) OR (MESSWERT_2_Y <-0.7) THEN
    ABLEGEN_RE ()
    RECHNEN ()
    GOTO STA
    ENDIF


    Nun möchte ich aber, dass ich alles mit einer IF-Schleife Abfragen kann.
    Habe schon einige varianten ausprobiert aber irgendwie versteht mich der Robi nicht :???:
    Wie müsste diese dann aussehen? :denk:

  • Schritt für Schritt zum Roboterprofi!
  • Code
    IF (MESSWERT_1_Y > 0.7) OR (MESSWERT_1_Y < -0.7) OR (MESSWERT_2_Y > 0.7) OR (MESSWERT_2_Y < -0.7) THEN
    ABLEGEN_RE ()
    RECHNEN ()
    GOTO STA
    ENDIF


    Ganz nebenbei: Anstaendige Programmierer vermeiden GOTO. ;)


    Gruss, Dirk.

  • Hallo Apollo,


    so geht das:

    Code
    IF (MESSWERT_1_Y > 0.7) OR (MESSWERT_1_Y < -0.7) OR (MESSWERT_2_Y > 0.7) OR (MESSWERT_2_Y < -0.7) THEN
    ABLEGEN_RE ()
    RECHNEN ()
    GOTO STA
    ENDIF


    Gruß ... gooselk


    Edit(h) sagt: Uups, Dirk war schneller :D Und hat natürlich auch mit GOTO Recht. Wenn der Code bei der Sprungmarke STA wirklich nur ausgeführt werden soll, wenn die Bedingung True ist, könnte das so gehen:

    Code
    IF .....
    .....
    STA()
    ENDIF
    ;--------------------------------------------------
    
    
    DEFFCT STA()
    .....
    ENDFCT


    Soll der Code zwischen STA und der IF-Schleife im Falle von FALSE übersprungen werden, dann z.B. so:

    Code
    IF .....
    .....
    ELSE
    ..... (Code der übersprungen wird bei Bedingung = FALSE)
    ENDIF
    
    
    ..... (Code fortsetzen)
  • Hallo,


    was mir noch dazu einfaellt:


    Die Zeilenlaenge ist begrenzt, was im Beispiel aber noch nicht zutreffen duerfte.
    Den IF-Ausdruck ueber mehrere Zeilen zu verteilen, ist nicht erlaubt. (Der Interpreter ist wohl zeilen-orientiert, und Zeilenumbrueche scheint's keine zu geben.)
    Man kann aber die Einzelausdruecke vorher in einer Hilfsvariablen berechnen, und dann diese testen.
    Z.B. so:

    Code
    DECL BOOL Ueberlauf = FALSE
    ...
    Ueberlauf = (MESSWERT_1_Y > 0.7) OR (MESSWERT_1_Y < -0.7)
    Ueberlauf = Ueberlauf OR (MESSWERT_2_Y > 0.7) OR (MESSWERT_2_Y < -0.7)
    IF Ueberlauf THEN
      ABLEGEN_RE ()
      RECHNEN ()
      GOTO STA
    ENDIF


    Gruss, Dirk.

  • Scheffs Lösung ist korrekt. Du kannst Bedingungen in zusätzliche Klammern setzen, wenn z.B.:


    z.B:
    Bedingung 1: A>B und C<=D
    ODER
    Bedingung 2: A=D

    Code
    IF ((A>B) und (C<=D)) OR (A=D) THEN
    ;mach was...
    ENDIF


    Und zum Thema GOTO: Bitte keine Diskussionen darüber. Hatte wir schon mal.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Ich bedanke mich für die vielen Antworten,
    aber was mich nur wunder das ich es so schon versucht habe


    IF (MESSWERT_1_Y > 0.7) OR (MESSWERT_1_Y < -0.7) OR (MESSWERT_2_Y > 0.7) OR (MESSWERT_2_Y < -0.7) THEN
    ABLEGEN_RE ()
    RECHNEN ()
    GOTO STA
    ENDIF

    und es so nicht funktioniert hat.
    Dann werde ich es so noch mal programmieren ;)

  • Hallo,



    aber was mich nur wunder das ich es so schon versucht habe
    ...
    und es so nicht funktioniert hat.


    Es sollte funktionieren.


    Wenn es vorher nicht ging, lag's wahrscheinlich nicht an der OR-Verknuepfung der IF-Ausdruecke.
    Vielleicht hast Du irgendeine andere Kleinigkeit uebersehen, die Du dann beim weiteren Probieren womoeglich korrigiert hast, ohne es zu merken. Solche Situationen habe ich schon oefter erlebt, und am Anfang fand ich das ganz schoen angsteinfloessend seltsam. Wenn's jetzt funktioniert, vergiss die Sache einfach.


    Gruss, Dirk.


    P.S.: Ein Kumpel von mir hat mal gesagt: "Der Computer macht immer genau, was man ihm sagt. Das Problem dabei ist, das wir dem Computer nicht immer genau das sagen, was wir eigentlich meinten."


    P.S.2: Woanders habe ich das sogar noch kuerzer gelesen: "Das (Software-)Problem sitzt vor dem Bildschirm." ;)

  • P.S.2: Woanders habe ich das sogar noch kuerzer gelesen: "Das (Software-)Problem sitzt vor dem Bildschirm." ;)


    So geschehen auf einer Hotline:


    Supporter: Ich weiss es noch nicht genau, aber ich habe das Problem eingekreist.
    Kunde: Und? Wo liegt das Problem?
    Supporter: Irgendwo zwischen Bildschirm und Stuhllehne....


    :mrgreen:


    @Topic: Keine Angst Apollo, Fehler macht man schneller, als man es richtig macht. Irgendwo ein Leerzeichen falsch, eine Klammer nicht geschlossen oder dergleichen und dein Programm funktioniert nicht mehr richtig. Damit lernt man umzugehen ;)


    Gruß ... gooselk

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden