Übungsaufgabe grade/ungrade



  • Hallo,
    ich habe vor kurzem angefangen mich ein bisschen in cpp einzuarbeiten.
    Ich habe nun eine Aufgabe in der es darum geht eine Zahl zu prüfen, ob Sie grade oder ungrade ist.
    Ich habe es selbst auf dem Weg versucht:

    int main (void)

    {

    int zahl_1;
    int schalter;
    schalter = zahl_1 % 2;
    
    cout << "Bitte Zahl 1 eingeben\n";
    cin >> zahl_1;
    
    if (schalter == 0)
    { 
      cout << "Und weiter gehts." ;
    } else 
    { 
      cout << "Auszeit!";
    }
    
    cin.sync ();
    cin.get ();
    return 0;
    

    }

    Hierbei wird aber die Bedingung immer erfüllt, egal was ich eingebe.
    In der Lösung steht Folgendes:

    if (zahl_1 % 2 == 0)

    ich habe das getestet und es funktioniert auch. Ich wollte nun fragen, warum sich das Ergebnis unterscheidet.



  • Prüfe noch einmal die Reihenfolge, du weist erst zu und liest anschließend die Zahl ein. Ich würde den Umweg überschalterauch gar nicht gehen, ein Integer ist dann ungerade, wenn das LSB (least significant bit) gesetzt ist:

    if(zahl_1 & 1) // ungerade
    


  • Danke, dass kannte ich noch nicht

    if(zahl_1 & 1) // ungerade
    


  • @macadamia sagte in Übungsaufgabe grade/ungrade:

    schalter = zahl_1 % 2;

    Diese Zeile wird ausgeführt, bevor du zahl_1 eingelesen hast.
    Wenn du schalter einen neuen Wert zuweisen möchtest, musst du das explizit angeben.

    (in einer funktionalen Programmiersprache geht das so, wie su möchtest, aber das ist C++ nicht)



  • Hast du dich schonmal in den Debugger eingearbeitet?


Log in to reply