Wieso funktioniert das Programm? //Anfänger



  • Ich habe probiert und anscheinend die korrekte Lösung gefunden. Mir ist jedoch nicht ganz klar, wie sie funktioniert. Könnte mir jemand bitte den Grund nennen, weshalb das Programm läuft?

    Fragestellung: Schreiben Sie einen '''Ausdruck''' (also keine ''if''-Anweisung oder ähnliches), der eine positive Zahl x kaufmännisch korrekt rundet (also aufrunden ab 0.5 und abrunden darunter).

    #include <iostream>
    using namespace std;
    
    int main ()
    {
        cout << "Zahl? ";
        double x;
        cin >> x;
    
        cout << "Zahl gerundet = ";
        double y;
        y = x+0.5;
        cout << int(y) || int(x);
        cout << "\n";
    
        return 0;
    }
    
    // Warum funktioniert das?^^
    


  • Meinst Du

    (cout << int(y)) || int(x);
    

    ?

    Hab gerade die Rangfolge der Operatoren http://www.cpp-tutor.de/cpp/le03/rangfolge_op.html nicht im Kopf. Wird schon sowas sein. Das ist es meistens, wenn was mit << nicht klappt.



  • ceko94 schrieb:

    cout << int(y) || int(x);
    

    Wer ist denn auf den Schwachsinn gekommen? Da kannst genausogut

    cout << int(y) || 42;
    

    schreiben.



  • Den Operator verstehe ich, dass || die bedeutung eines logischen ODER von L-->R hat.

    Müsste die Ausgabe dann nicht willkürlich geschehen?
    Wieso spuckt der immer den richtigen Wert raus?



  • Denkfehler eingesehen.



  • mach mal folgendes:

    #include <iostream> 
    using namespace std; 
    
    int main () 
    { 
        double x = 2.2;
        double y = 4.7;
    
        y = x+0.5; 
        cout << int(y) << ", " << int(x); 
        cout << "\n"; 
    
        return 0; 
    }
    


  • hackglobal schrieb:

    mach mal folgendes:

    #include <iostream> 
    using namespace std; 
      
    int main () 
    { 
        double x = 2.2;
        double y = 4.7;
        
        y = x+0.5; 
        cout << int(y) << ", " << int(x); 
        cout << "\n"; 
        
        return 0; 
    }
    

    Wieso? Dein Programm ergibt keinen Sinn^^ Das Problem wurde wie folgt gelöst:

    #include <iostream>
    using namespace std;
    
    int main ()
    {
        cout << "Zahl? ";
        double x;
        cin >> x;
        cout << "Zahl gerundet = ";
        cout << int(x+0.5) << "\n";
    
        return 0;
    }
    


  • Zumindest gehe ich davon aus, das ich auf eine ganze Zahl runden soll, da nichts spezifisches erwartet wird.



  • Die zugewiesene Zahl wird zu einer ganzen Zahl abgerundet. Wenn man daher 5.4 einer ganzzahligen Variablen zuweist, erhält diese Variable den Wert 5. Es gehen also Informationen verloren, und wenn man später den Wert der Integer- Variablen einer Variablen vom Typ float zuweist, erhält die float-Variable ebenfalls nur den Wert 5.Aus dem Buch von Jesse Liberty "c++ 21 days" 😉



  • Eine Alternative zur Konvertierung in einen Integer wäre die Funktion floor() .
    Hätte den Vorteil dass die auch mit Zahlen grösser INT_MAX funktioniert.
    Ist oft wurst, aber manchmal nicht, und dann ists praktisch wenn man sie kennt.


Anmelden zum Antworten