Frage zur if Anweisung



  • Hallo zusammen,

    folgende Aufgabe: if soll jeweils ergänzt werden und ich komme einfach nicht drauf:

    if (                                                                  ) 
    
     }   
            cout<<"Entweder ist 3 gleich 3 oder 3 ist gleich 4 oder beides ist wahr"<<endl; 
     {      
         if (                                                               ) 
    
     }  
            cout<<"3 ist gleich 2 ist nicht wahr. "<<endl; 
     {
    

    Meine Lösung wäre:

    if ( 3 == 3 || 3 == 4 || == true )
    
        if( 3 == 2 != true)
    

    sieht aber irgendwie komisch aus? Stimmt das so?


  • Mod

    Der Übersichtlichkeit wegen ein paar mehr Klammern als eigentlich nötig:

    (3 == 3 || 3 == 4 || ((3==3) && (3==4)))
    

    Der andere ist prinzipiell richtig, aber dem Verständnis ist die Schreibweise nicht dienlich. Vielleicht besser so:

    ((3 == 2) != true)
    

    Oder Einfacher:

    (!(3==2))
    

    Man darf die Logikoperatoren in C++ übrigens auch ausschreiben, also and statt && , or statt || , usw. Falls dir das mehr zusagt.



  • Hmm...

    || ist bereits non-exklusiv (a || b <=> a == true oder b == true oder a && b == true), d.h. if(3==3 || 3==4)

    Explizit (aber sinnlos) wäre auf jeden Fall nicht "==true" sondern am Schluss "|| ( 3==3 && 3==4 )".

    Zweiteres würde ich explizit eher als if (!(3==2)) schreiben...

    Jedenfalls: Komische Aufgabe 🙄

    MfG SideWinder



  • Sepp, schön langsam nervt das mit deinem "Kurz davor poste ich eine sehr ähnliche Antwort"-Postings :p

    MfG SideWinder


  • Mod

    SideWinder schrieb:

    Sepp, schön langsam nervt das mit deinem "Kurz davor poste ich eine sehr ähnliche Antwort"-Postings :p

    MfG SideWinder

    Ach, das machst du mindestens genauso oft bei mir 🙂 .



  • Danke, Leute!



  • SeppJ schrieb:

    (3 == 3 || 3 == 4 || ((3==3) && (3==4)))
    

    Da reicht doch die Prüfung

    (3 == 3 || 3 == 4)
    

    Der dritte Oder-Teil ist sinnlos, weil die ersten beiden Bedingungen das sowieso schon abdecken.



  • Ich gehe mal davon aus, daß 2, 3 und 4 für Variablen stehen, sonst könnte man die Bedingungen auch einfach durch true und false ersetzen.

    Aber auch wenn es sich um Variablen handelt, wird die erste Bedingung doch immer zu true ausgewertet oder habe ich etwas falsch verstanden?



  • Ja diese Abfrage ist immer true. Abfragen mit gleich festen Werten sind sinnfrei (nutzlos). Es ging wohl nur um das Verständnis von logischen Operatoren.


  • Mod

    Rüdiga schrieb:

    Da reicht doch die Prüfung

    (3 == 3 || 3 == 4)
    

    Der dritte Oder-Teil ist sinnlos, weil die ersten beiden Bedingungen das sowieso schon abdecken.

    Ja, das ist sinnlos, sofern die Logik- und Vergleichsoperatoren nicht absichtlich mit diesem Ziel überladen wurden. Aber ich glaube es geht hier eher darum die menschliche Sprache nach C++ zu übersetzen als sich über den Sinn Gedanken zu machen.

    Constantin Noll schrieb:

    Aber auch wenn es sich um Variablen handelt, wird die erste Bedingung doch immer zu true ausgewertet oder habe ich etwas falsch verstanden?

    Es könnte wie gesagt ein sehr ungewöhnlicher Vergleichsoperator definiert werden. Aber jede sinnvolle Definition würde den Ausdruck immer zu true auswerten.



  • Was habt ihr denn dagegen, bei der 2. if-Bedingung if(3 != 2) zu schreiben?



  • Constantin Noll schrieb:

    Ich gehe mal davon aus, daß 2, 3 und 4 für Variablen stehen, sonst könnte man die Bedingungen auch einfach durch true und false ersetzen.

    Aber auch wenn es sich um Variablen handelt, wird die erste Bedingung doch immer zu true ausgewertet oder habe ich etwas falsch verstanden?

    #include <limits>
    #include <iostream>
    
    int main()
    {
    	double b = std::numeric_limits<double>::quiet_NaN();
    	std::cout << (b == b) << std::endl;
    }
    


  • netter Spezialfall ->, ich weiß zwar das NaN!=NaN aber auf das Beispiel wäre ich andersrum gerade nicht gekommen



  • @Michael E.:

    Sehr schön! 🙂


Anmelden zum Antworten