Rundene einer Dezimalzahlq



  • Folgendes Programm enthält mehere switch-Anweisungen.
    Unter Punkt 'r' soll eine Dezimalzahl gerundet werden.
    Das Programm gibt aber nicht die gerundete Zahl aus.
    Bei 3.3 kommt 3 raus bei 3.8 kommt wieder 3
    raus. Das selbe gilt auch für negative Zahlen.
    Könnte mir mal jemand bitte weiterhelfen.
    Vielen Dank!

    #include <iostream>
    using namespace std;
    
    int main ()
    {
        sprungpunkt:
    
        char befehl;
    
        cout << endl;
        cout << " Ausgabe des vollstaendigen Zeichensatzes   < a, A> " << endl;
        cout << " Runden einer Dezimalzahl                   < r >   " << endl;
        cout << " Umwandlung von Buchstaben (klein<->gross)  < u >   " << endl;
        cout << " Beenden des Programmes                     < b, x> " << endl;
    
        cout << " Ihre Eingabe : ";
        cin  >> befehl;
    
        switch ( befehl )
        {
               case 'a':
               case 'A':
                    {
                        cout << " Der vollständige Zeichensatz wird ausgegeben " << endl;
                        for ( int i =-128; i<=127; i++)
                        {
                            putchar(i);
                            cout << endl;
                        }
                    break;
                    }
               case 'r':
                    {
                        int zahl;
                        cout << " Runden einer Dezimalzahl " << endl;
                        cout << " Bitte geben Sie eine Zahl ein: " << endl;
                        cin >> zahl;
    
                        if (zahl<0)
                           zahl= zahl-0.5;
                        else 
                             zahl=zahl+0.5;
                        cout << int (zahl) << endl;
                    break;
                    }
               case 'u':
                    {
                        cout << " Umwandlung von Gross- in Kleinbuchstaben " << endl;
                        char abc;
                        cout << " Bitte geben Sie einen Buchstaben ein " << endl;
                        cin >> abc;
    
                        if (abc < 'A' && abc > 'a'  )
                        {
                           cout << " Ungültige Eingabe " << endl;
                        }
                        if (abc >='A' && abc <= 'Z')
                           {
                           abc= abc + 32;
                           cout << abc << endl;
                           }
                         else if (abc >='a' &&  abc <= 'z')
                           {
                          abc= abc -32;
                          cout << abc << endl;
                           }
                        break;
                        }
                 case 'b':
                 case 'x':
                      {
                          cout << " Ende " << endl;
                       break;
                      }
                goto sprungpunkt;
                }
                return 0;
    }
    


  • zahl ist ein int, sollte wohl eher float/double sein.



  • Und noch ein paar Hinweise:
    - deine Bedingung "if (abc < 'A' && abc > 'a' )" wird bei dem üblichen ASCII-Zeichensatz immer 'false' sein
    - benutze zum Umwandeln besser tolower() und toupper() (aus <cctype>)
    - goto wird (hier im Forum) auch nicht so gern gesehen - nimm besser eine while-Schleife



  • Th69 schrieb:

    - goto wird (hier im Forum) auch nicht so gern gesehen - nimm besser eine while-Schleife

    while(true)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine for(;; ) -Schleife.



  • forever schrieb:

    Th69 schrieb:

    - goto wird (hier im Forum) auch nicht so gern gesehen - nimm besser eine while-Schleife

    while(true)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine for(;; ) -Schleife.

    for(;;)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine Schleife mit sinnvoller Abbruchbedingung.



  • Ethon schrieb:

    forever schrieb:

    Th69 schrieb:

    - goto wird (hier im Forum) auch nicht so gern gesehen - nimm besser eine while-Schleife

    while(true)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine for(;; ) -Schleife.

    for(;;)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine Schleife mit sinnvoller Abbruchbedingung.

    Schleifen mit sinnvoller Abbruchbedingung sind (hier im Forum) auch nicht gern gesehen - nimm besser garkeine Schleifen.



  • Schleifenmaster schrieb:

    Ethon schrieb:

    forever schrieb:

    Th69 schrieb:

    - goto wird (hier im Forum) auch nicht so gern gesehen - nimm besser eine while-Schleife

    while(true)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine for(;; ) -Schleife.

    for(;;)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine Schleife mit sinnvoller Abbruchbedingung.

    Schleifen mit sinnvoller Abbruchbedingung sind (hier im Forum) auch nicht gern gesehen - nimm besser garkeine Schleifen.

    Fehlerhafte Programme sind (hier im Forum) auch nicht gern gesehen - nimm besser Rekursion.



  • Recurrentmaster schrieb:

    Schleifenmaster schrieb:

    Ethon schrieb:

    forever schrieb:

    Th69 schrieb:

    - goto wird (hier im Forum) auch nicht so gern gesehen - nimm besser eine while-Schleife

    while(true)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine for(;; ) -Schleife.

    for(;;)-Schleifen sind (hier im Forum) auch nicht gern gesehen - nimm besser eine Schleife mit sinnvoller Abbruchbedingung.

    Schleifen mit sinnvoller Abbruchbedingung sind (hier im Forum) auch nicht gern gesehen - nimm besser garkeine Schleifen.

    Fehlerhafte Programme sind (hier im Forum) auch nicht gern gesehen - nimm besser Rekursion.

    Unsinnige Beiträge sind (hier im Forum) auch nicht gerne gesehen - schreib lieber was konstruktives.

    Oder anders: spätestens sein "Schleifenmaster" wurde das Spiel absurd, also bleibt bitte in der Nähe des Themas.



  • Um Zahlen auf/abzurunden gibt es zwei nützliche Funktionen:

    aufrunden: floor()
    abrunden: ceil()

    Enthalten in <cmath.h>

    ...



  • Golfi1812 schrieb:

    Enthalten in <cmath.h>

    Äh, nö. Fast richtig. <cmath>


Anmelden zum Antworten