Ich verstehe den Zweck, der Funktion abs( ) nicht...



  • #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    float a,b,c,d,e,m;
    float dr; //Durchschnitt
    

    Im Programm muss ich die näheste Zahl zum Durchschnitt aus 5 Zahlen finden

    int main()
    {
     cout << "gebe 5 Zahlen ein: " << endl;
     
     cin >>a>>b>>c>>d>>e;
    
      dr = (a+b+c+d+e)/5;
    

    Version mit abs(), die funktioniert

    m=a;
    if (abs(dr-b)<abs(dr-a))  
        m=b;
    if (abs(dr-c)<abs(dr-b)) 
        m=c;
    

    Ohne abs(), funktioniert es nicht

    m=a;
    if ((dr-b)<(dr-a))  
        m=b;
    if ((dr-c)<(dr-b)) 
        m=c;
    
    cout <<"am naehesten zum Durchschnitt ist: "<<m<<endl ;
    
    return 0;
    }
    

    Was ändert diese Funktion in meinem Code?



  • @Kajiiii sagte in Ich verstehe den Zweck, der Funktion abs( ) nicht...:

    if ((dr-b)<(dr-a))

    Wenn jetzt dr=1 ist und b=99999999999 und a=1.0001, dann ist dr-b = -99999999998 und somit kleiner als dr-a=-0.000001.
    Also wird fälschlich m=b gesetzt.



  • @Jockelx Danke für die Antwort! Ja, das verstehe ich, aber der Code (ohne abs( )) funktioniert auch nicht wenn ich nur ganze und positive Zahlen eingebe. Mit dieser Funktion geht es. Ich verstehe nicht was sie ändert, da abs ja normalerweise nur den absoluten Wert der eingegebenen Zahl zurückgeben soll (z.B. |3| = 3). Ich bin noch nicht so gut in C++, also könnte es sein, dass ich etwas falsch verstehe. Danke für die Hilfe!



  • @Kajiiii Auch bei nur positiven Zahlen kann die Differenz negativ sein.

    Du möchtest aber den Abstand der Zahlen betrachten und da ist dann die Eigenschaft |-3| = 3 wichtiger.
    Denn jede negative Zahl ist kleiner als jede positive Zahl.



  • @Kajiiii sagte in Ich verstehe den Zweck, der Funktion abs( ) nicht...:

    nicht wenn ich nur ganze und positive Zahlen eingebe.

    Wenn ich zwei Zahlen subtrahiere und die hintere größer ist, dann kommt da was negatives raus.
    Beispiel: 310=73-10 = -7

    Wenn du einen Durchschnitt aus 5 Zahlen hast (und die nicht alle gleich sind), dann gibt es mindestens eine Zahl, die größer als der Durchschnitt ist, und eine Zahl, die kleiner als der Durchschnitt ist. Das Vorzeichen von dr - b ist also unbekannt, weil b kleiner oder größer sein könnte. Analoges gilt für die anderen Differenzen wie dr - a usw



  • @Kajiiii sagte in Ich verstehe den Zweck, der Funktion abs( ) nicht...:

    @Jockelx Danke für die Antwort! Ja, das verstehe ich, aber der Code (ohne abs( )) funktioniert auch nicht wenn ich nur ganze und positive Zahlen eingebe. Mit dieser Funktion geht es. Ich verstehe nicht was sie ändert

    Auch wenn Du nur positive Zahlen eingibst, ist irgendeine Zahl dabei größer als der Durchschnitt, so dass die Rechnung Durchschnitt - Zahl ein negatives Ergebnis hat. Dieses wird durch abs wieder positiv.

    Mal was anderes ... ist Dein Programm oben vollständig?
    Dann kann ja immer nur a, b oder c an m zugewiesen werden ... Könnte nicht auch mal d oder e der gesuchte Wert sein?



  • Danke an alle für die Hilfe. Jetzt verstehe ich es sehr gut 😃