Ergebnis 1 bis 3 von 3

C++ if Bedingung wird ignoriert

  1. #1 Zitieren
    Ritter Avatar von Feuerstern
    Registriert seit
    Sep 2007
    Beiträge
    1.821
    Hallo Leute,
    Ich lerne zurzeit in der Schule C++ und habe jetzt Zuhause ein wenig weiter gemacht.
    Ich habe ein Programm geschrieben das mir die Funktionsgleichung anzeigt nachdem man Punkte der Geraden angegeben hat.
    Dabei soll die Funktionsgleichung jenach Gleichung unterschiedlich ausgegeben werden.
    Also statt f(x)=1x+-2 dan z.b. : f(x)=x-2
    das klappt aber nicht in allen Fällen.

    [Bild: DG0U28UJyePFEHLER1.jpg]

    [Bild: FEHLER2.jpg]

    Der Code
    Code:
    if (STEIGUNG==1 && B==0) {
    	  std::cout <<"Die Funktionsgleichung ist:\n";
    	  std::cout <<"f(x)=x" <<std::endl;	
    	}
    	
    	else if (STEIGUNG==1 && B>0) {
    	   std::cout <<"Die Funktionsgleichung ist:\n" ;
    	   std::cout <<"f(x)=x+" << B <<std::endl;
    	}
    	
    	else if (STEIGUNG==1 && B<0) {
    	   std::cout <<"Die Funktionsgleichung ist:\n" ;
    	   std::cout <<"f(x)=x" << B <<std::endl;
    	}
    	
    		
    	else if (STEIGUNG>1 || STEIGUNG<1 && B>0) {
    	   std::cout <<"Die Funktionsgleichung ist:\n";
    	   std::cout <<"f(x)=" << STEIGUNG <<"x+" << B <<std::endl;
    	}
    
    	else if (STEIGUNG>1 || STEIGUNG<1 && B<0) {
    	   std::cout <<"Die Funktionsgleichung ist:\n";
    	   std::cout <<"f(x)=" << STEIGUNG <<"x" << B <<std::endl;
    	}
    
    	else if (STEIGUNG>1 || STEIGUNG<1 && B==0 ){
    	   std::cout <<"Die funktionsgleichung ist:\n";
    	   std::cout <<"f(x)=" << STEIGUNG <<"x" <<std::endl ;
    	
    	
    	
    	}
    Ich freue mich über Antworten
    mfg Feuerstern
    Feuerstern ist offline

  2. #2 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.429
    Quizfrage:
    Wann ist eine Bedingung wie (STEIGUNG>1 || STEIGUNG<1 && B>0) wahr?
    Nein, nicht nur wenn die Steigung ungleich 1 und B>0 gleichzeitig erfüllt sind. Es reicht auch schon, wenn nur die Steigung größer als 1 ist.

    Warum ist das so?
    Weil jeder Operator (z.B. && oder ||) eine gewisse Priorität hat und sich daraus eine Rangfolge ergibt. Das logische Und (&&) wird in einem Ausdruck immer vor dem logischen Oder (||) ausgewertet. Damit reicht es im obigen Beispiel schon, dass die Steigung größer als 1 ist, um die gesamte Bedingung zu erfüllen. B muss dann gar nicht mehr größer als 0 sein. Somit trifft die Bedingung z.B. auch für Steigung=3 und B=0 zu, obwohl das so vermutlich nicht von dir beabsichtigt war. Umgehen kannst du das, indem du Ausdrücke entsprechend klammerst. Das kann man z.B. mit
    ((STEIGUNG>1 || STEIGUNG<1) && B>0)
    erreichen. Ich nehme an, dass du dies auch meintest.
    Alternativ kann man das auch abkürzen und dieses Problem damit umgehen, denn "größer 1 oder kleiner 1" ist äquivalent zu "ungleich 1".

    Kurz: (STEIGUNG!=1 && B>0).
    Thoronador ist offline

  3. #3 Zitieren
    Ritter Avatar von Feuerstern
    Registriert seit
    Sep 2007
    Beiträge
    1.821
    Danke für deine schnelle Antwort und die gute Erklärung.
    Hat jetzt alles super geklappt.

    mfg Feuerstern
    Feuerstern ist offline

Berechtigungen

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