Eingegebene Zahl vergleichen? (Schaltjahre)



  • Hallo, ich habe Folgendes Problem.

    Es soll eine Jahreszahl eingegeben werden und ich möchte dann testen, ob die eingegebene Zahl erstens vom Typ XX00 ist (also z.B. 1900, 2000 usw.) und ob sie durch 400 teilbar ist.

    Gibt es da etwas in C++ wie

    if( (zahl==??00) && (zahl % 400 == 0) ) {
    
    ...
    }
    

    ?

    Ich weiß nicht, wie ich das mit der Prüfung nach der Form XX100 machen kann (möglichst elementar), kann jmd bitte helfen?



  • Schau dir mal die "modulo" Operation an: http://de.wikipedia.org/wiki/Division_mit_Rest

    Edit: Haha, seh gerad, hast du ja in deinem Code schon stehen. Also teste doch einfach ob deine Jahreszahl durch hundert teilbar ist.



  • Ah, kann man sagen:

    if( (zahl & 100 == 0) && (zahl & 400 == 0) ) {
    ...
    }
    

    ?


  • Mod

    Warum machst du denn jetzt ein bitweises Oder? Du hattest es doch schon fast richtig ganz am Anfang.



  • Wenn eine Zahl durch 400 teilbar ist, ist sie auch durch 100 teilbar. Den ersten Teil der Bedingung kannst du also weglassen. Ansonsten: Was SeppJ sagt.



  • Sorry, ich habe mich vertippt, ich meinte:

    if( (zahl % 100 == 0) && (zahl % 400 == 0) ) {
    ...
    }
    

    Edit: Stimmt, die erste Bedingung könnte ich mir getrost sparen...


  • Mod

    LinuxC_newbie schrieb:

    Edit: Stimmt, die erste Bedingung könnte ich mir getrost sparen...

    So wie du es schreibst schon, jedoch wird die 100 schon noch mal wichtig (ich nehme mal an, das sollen Schaltjahre werden). Guck dir nochmal genau die Bedingungen für Schaltjahre an. Auf Wikipedia steht sogar Pseudocode.



  • Ja, es geht um ein Programm, das einem sagt, ob eine eingegebene Jahreszahl zu einem Schaltjahr gehört.

    Hab's so geschrieben:

    #include <iostream>
    using namespace std;
    
    int main() {
    
    int jahr;
    
    cout << "Bitte geben Sie eine Jahreszahl ein." << endl;
    cin >> jahr;
    
    if( ((jahr % 4 == 0) && (jahr % 100 != 0)) || ((jahr % 100 == 0) && (jahr % 400 == 0)) ) {
    
      cout << "Das Jahr " << jahr << " war/ ist ein Schaltjahr." << endl;
    }
    
    else {
      cout << "Das Jahr " << jahr << " war/ ist kein Schaltjahr." << endl;
    }
    
    }
    

    Es handelt sich also um ein Schaltjahr

    1.) wenn die Jahreszahl nicht mit 00 endet und durch 4 teilbar ist
    2.) wenn die Jahreszahl mit 00 endet und durch 400 teilbar ist.

    Deswegen habe ich das mit dem modulo 100 stehen lassen.

    Ansonsten handelt es sich um kein Schaltjahr.

    Ich hoffe, dass das so durchgeht.
    Also bei mir tut es seinen Zweck. 😃


Log in to reply