bool



    • Verwende [cpp]- und nicht [code]-Tags.
    • Hör endlich mit diesen Makros auf und verwende C++-Alternativen (Funktionen, const -Variablen). Das gilt natürlich nicht für diejenigen, die für bedingte Kompilierung zuständig sind.
    • Sobald du mehrere logische Bedingungen hast, brauchst du grundsätzlich mehrere Abfragen. Du kannst vielleicht mit AND, OR und NOT etwas zusammenfassen, aber oft wird der Code dadurch schlechter.
    • Es gibt auch noch operator?: - das wäre dann wohl die Cheaterlösung. 😉


  • Du könntest dann das hier auch noch abkürzen:

    if ( Bedingung )
     return true;
    else
     return false;
    

    Ist ersetzbar mit:

    return ( Bedingung )
    

    Die Bedinung ist schlussentlich auch ein boolscher Ausdruck.



  • Nexus schrieb:

    ...

    Ich möchte noch

    • Verwende aussagekräftige Titel für deine Threads

    hinzufügen.



  • whaaatz schrieb:

    bool

    int



  • whaaatz schrieb:

    prototyp:
    bool isInRange(int zahl, int untereGrenze, int obereGrenze);

    inline bool isInRange(int zahl, int untereGrenze, int obereGrenze)
    {
      const unsigned u = untereGrenze;
      return (zahl-u) <= (obereGrenze-u);
    }
    

    So?

    Gruß,
    SP



  • Sebastian Pizer schrieb:

    whaaatz schrieb:

    prototyp:
    bool isInRange(int zahl, int untereGrenze, int obereGrenze);

    inline bool isInRange(int zahl, int untereGrenze, int obereGrenze)
    {
      const unsigned u = untereGrenze;
      return (zahl-u) <= (obereGrenze-u);
    }
    

    So?

    Gruß,
    SP

    Mein Mathe-Verständnis sagt dazu
    zahl-u <= oberGrenze-u | auf beiden Seiten +u
    zahl <= obergrenze
    Das verwirtrt mich.



  • volkard schrieb:

    Mein Mathe-Verständnis sagt dazu

    zahl-u  <=  oberGrenze-u  | auf beiden Seiten +u
    <=>   zahl    <=  obergrenze
    

    Das verwirtrt mich.

    Es ist wegen der Modulo-Arithmetik nicht ganz korrekt. u ist ein unsigned int. => zahl-u und obereGrenze-u sind auch unsigned ints (nie negativ) => Die Äquivalenz (<=>) ist an der Stelle falsch. Es muss heißen

    untergrenze <= zahl   <= obergrenze     | überall u abziehen
          ~~~~~~~~~~~    ~~~~      ~~~~~~~~~~
              int        int           int
    
    <=>             0 <= zahl-u <= obergrenze-u
                         ~~~~~~    ~~~~~~~~~~~~
                        unsigned     unsigned
    

    ...und da 0<=zahl-u immer gilt (ist ja unsigned), kann man sich diesen Test sparen.

    Gruß,
    SP



  • Netter Trick. 👍



  • Ist trotzdem nicht ganz richtig. So würde die Funktion nämlich bei z.B. isInRange(2, 1, 0) true zurückgeben..



  • Du hast recht. Ich habe stillschweigend untereGrenze <= obereGrenze vorausgesetzt.


Anmelden zum Antworten