If-Schleife funktioniert nicht!(Taschenrechner) Help



  • Hi Leute ....

    Ich brauche eure hilfe bei meiner if-Schleife.
    Bei der Wurzelberechnung soll bei der Eingabe von 0 eine Fehlermeldung ausgegeben werden. Dies habe ich mit einer if-Schleife gelöst.
    Doch bei der Ausgabe kommt leider die Meldung nicht ...
    Und ich finde irgendwie den Fehler nicht 😑 und mein Compiler gibt auch keine
    Fehlermeldung aus ! ich benutze den Visual C++ Compiler von Microsoft.

    -----------------------------------------

    if(wzahl < 0)
    		std::cout << "\nFalsche Eingabe,aus einer negativen Zahl kann keine Wurzel gezogen werden!";
    
       else if(wzahl>0){ 
    
        dErgebnis = sqrt( wzahl ); 
        std::cout << "Die Wurzel aus " << wzahl; 
        std::cout << " ist " << dErgebnis;
    
    }
    

    ------------------------------------------

    THX für alle antworten !
    ciao



  • Vieleicht vergleichst du mal auf == oder <= 0

    es ist eine if Anweisung und keine if-schleife



  • if(wzahl <= 0)
    		std::cout << "\nFalsche Eingabe,aus einer negativen Zahl kann keine Wurzel gezogen werden!";
    
       else if(wzahl>0){ 
    
        dErgebnis = sqrt( wzahl ); 
        std::cout << "Die Wurzel aus " << wzahl; 
        std::cout << " ist " << dErgebnis << std::flush; // ausgabebuffer leeren
    }
    

    mfg



  • .. uuuups ! Stimmt ja ...
    Anweisung und keine Schleife...
    jo jetzt gehts ! Vielen Dank.

    Hab da aber noch eine Frage. Wie kann ich das anstellen das er wieder
    zur if-Anweisung zurück springt. sagen wir als beispiel ....
    der Benutzer gibt eine null ein bekommt die Fehlermeldung zu sehen. Jetzt
    soll er die möglichkeit bekommen zur Eingabe zurückzukehren, damit er noch einmal eine Eingabe machen kann. Sonst wird
    ja die if-Anweisung abgebrochen und es geht im quelltext weiter ...
    z.b: std::cout << "\nWollen sie zur Wurzelberechnung zurückkehren ? (Y/N)";
    Jetzt soll er z.b Y eingeben können und er kann die Eingabe zur Wurzelb.
    nochmals wiederholen. Könnte man dies nicht irgendwie mit einer Char-Variable
    lösen ? ... ich hab keine ahnung wie man sowas realisieren kann.
    Könnte mir einer helfen ?

    THX für alle antworten!



  • Wie wärs mit.

    do {
      cout ...
      cin>>wzahl;
      if(wie gahbt
    } while (wzahl <= 0);
    


  • Sorry .... irgendwie kann ich damit nix anfangen ... wo muss ich das denn
    einfügen .... ands ende der if-Anweisung ?
    Könntest du mir das vielleicht genauer erklähren ?
    Würde mir wirklich helfen denn ich komm irgenwie nich weiter 😞

    THX für alle antworten!

    ciao



  • ähm... das is die antwort auf deine frage. mit dem konstrukt kann der benutzer immer wieder zur einagbe zurückkehren, um endlich einen gültigen wert einzugeben.

    bei

    do{ BLA} while ( BLUBB )
    

    wird BLA auf jeden fall einmal ausgeführt. (in deinem fall die eingabe) dann wird sie nur wiederholt, solange BLUBB wahr ist. (in deinem fall immer dann, wenn ein ungültiger wert eingegeben wurde)

    alles klärchen? 🕶



  • Dabei wird zwar keine Abfrage gemacht ob der Benutzer noch eine Zahl eingeben will, es wird einfach solange wieder eine Zahl eingelesen bis die Zahl größer als null ist.

    do {
      std::cout << "Bitte Zahl eingeben\n";
      std::cin >> wzahl;
      if(wzahl <= 0)
        std::cout << "\nFalsche Eingabe,aus einer negativen Zahl kann keine Wurzel gezogen werden!";
    } while (wzahl <= 0);
    
    dErgebnis = sqrt( wzahl );
    std::cout << "Die Wurzel aus " << wzahl;
    std::cout << " ist " << dErgebnis << std::flush;
    


  • achso ist das ! Jetzt hab ich es verstanden 🙂
    vielen dank an euch ! ihr habt mir sehr geholfen ...
    aber müsste es nicht

    } while (wzahl > 0);
    

    sein ?

    ciao



  • hmm habs mal selber ausprobiert aber das

    } while (wzahl > 0);
    

    geht nicht. Aber das zeichen > bedeutet doch größer als... und
    die While Schleife ist doch dann für die ausführung verantwortlich, wenn
    die eigegebene Zahl größer ist als null. 0der etwa nicht ?
    Kann mir das einer mal genauer erklähren warum es (wzahl <= 0) heißen muss !?
    Das Zeichen <= bedeutet doch kleiner oder gleich oder täusche ich mich da ?

    THX für alle antworten !



  • Mit der Bedeutung der Operatoren hast du schon recht, aber die Eingabe soll doch wiederholt werden (sprich die Schleife erneut durchlaufen) wenn die eingegebene Zahl kleiner oder gleich null ist.



  • oh man ich hatte einen Denkfehler 😑
    hab jetzt endlich verstanden wie die While und die Do Schleifen funktionieren.
    danke!

    ciao



  • btw. wurzeln aus negativen Zahlen zu ziehen ist möglich:

    -1^0.5 = i



  • cof schrieb:

    btw. wurzeln aus negativen Zahlen zu ziehen ist möglich:

    -1^0.5 = i

    😕 😕



  • Hallo,

    cof schrieb:

    btw. wurzeln aus negativen Zahlen zu ziehen ist möglich:

    nein, solange es nicht um komplexe Zahlen geht

    MfG



  • Probe-Nutzer schrieb:

    nein, solange es nicht um komplexe Zahlen geht

    das Ergebnis wird einfach komplex. na und?



  • cof schrieb:

    das Ergebnis wird einfach komplex. na und?

    darum geht es nicht, man kann aus negativen Zahlen keine Wurzel ziehen. Und angenommen, es handelt sich um das Wurzel-Ziehen im komplexen Zahlenbereich, dann gibt es keine negativen Zahlen. Das es hier nicht um komplexe Zahlen geht, ist offensichtlich...

    MfG



  • Wenn man «negative Zahlen» als komplexe Zahlen, deren Realteil < 0 und deren Imaginärteil = 0 ist, definiert, wo ist dann das Problem?



  • Bashar schrieb:

    Wenn man «negative Zahlen» als komplexe Zahlen, deren Realteil < 0 und deren Imaginärteil = 0 ist, definiert, wo ist dann das Problem?

    dann gibt es natürlich kein "Problem", aber entscheidend ist, daß es letztlich um das Wurzel-Ziehen aus komplexen Zahlen geht (nur wenn die negative Zahl als "komplexe Zahl" betrachtet wird, ist das Wurzel-Ziehen definiert, mir ging es hier nicht darum, daß eine negative Zahl auch eine komplexe Zahl ist, sondern daß man nicht ohne den Zusatz, daß man komplexe Zahlen betrachtet, sagen kann, man kann aus negativen Zahlen die Wurzel ziehen (es müßte, unter Berücksichtigung der obigen Definition, heißen, man kann aus negativen komplexen Zahlen eine (komplexe) Wurzel ziehen), weil das Ergebnis eine komplexe Zahl wäre, (dies würde auch einen Fragenden verwirren, der davon noch nichts gehört hat)), und auf den komplexen Zahlen ist keine Ordnungs-Relation definiert (natürlich existiert eine solche auf Teilmengen wie den reellen Zahlen), "negativ" und "positiv" gibt es eben nur für diese Teilmenge.

    Mir hat also nur der Hinweis gefehlt, daß nur, wenn man den komplexen Zahlenbereich betrachtet, eine Wurzel aus einer negativen Zahl definiert ist.

    Pauschal zu sagen, aus negativen Zahlen kann die Wurzel gezogen werden, ohne Hinweis darauf, daß man im komplexen Zahlenbereich rechnen will, erschien mir zu undeutlich (auch wenn cof dieses durch sein Beispiel mit dem Ergebnis i implizit klar gemacht hat), wie auch die folgende Antwort von "DasDingdaskeinerkennt" beweist...

    Um nicht ganz off-topic zu bleiben, und falls es den Fragenden noch interessiert: Dies hätte auch zur Folge, daß die sqrt-Funktion aus <complex> hätte eingesetzt werden müssen (aus der Eingangsfrage war überhaupt nicht abzulesen, daß komplexe Zahlen betrachtet werden sollen)

    MfG


Log in to reply