Schalttjahr



  • Mahlzeit, kurze Frage...

    ich möchte eine Jahreszahl überprüfen, ob sie zu einem Schaltjahr gehört. Hab mir http://de.wikipedia.org/wiki/Schaltjahr kurz gelesen.

    Bin etwas durchn Wind, deshalb kurz nochmal zur Sicherheit ^^
    Ich muss lediglich prüfen, ob die Jahreszahl durch 400 o. 4 teilbar ist, oder?



  • Nein, Du musst nacheinander prüfen, ob die Zahl durch 4, 100, 400 teilbar ist.



  • Das stimmt.



  • besten dank



  • ähmm ...

    bool wbase::is_leap_year( const long year ) {
    
    	if ( integer_division( year, 4 ).second ) {
    	    if ( integer_division( year, 100 ).second ) {
    	        if ( integer_division( year, 400 ).second ) {
    	            return true;
    	        }
    	    }
    	}
    	return false;
    }
    

    wobei integer_division einen std::pair zurückgibt und second der rest ist.

    Auf http://kalender-365.de/schaltjahre.php hab ich mal die erste Zahl zum Test genommen:

    1804/4 = 451
    1804/100 = 18,04

    also doch kein Schaltjahr? Gut, untendrunter steht "Schaltjahreskalender 1800 - 2400. Alle Angaben ohne Gewähr." Jetzt bin ich nochmehr verwirrt oO ... bitte eine kurze idiotensichere Aufklärung ^^


  • Mod

    schaltjahr schrieb:

    ähmm ...

    bool wbase::is_leap_year( const long year ) {
    
    	if ( integer_division( year, 4 ).second ) {
    	    if ( integer_division( year, 100 ).second ) {
    	        if ( integer_division( year, 400 ).second ) {
    	            return true;
    	        }
    	    }
    	}
    	return false;
    }
    

    Das hast du wohl ein bisschen falsch verstanden, wann ein Schaltjahr ist. Korrekt wäre:

    bool wbase::is_leap_year( const long year ) {
    
    	if ( integer_division( year, 4 ).second ) {
    	    if ( integer_division( year, 100 ).second ) { 
    	        if ( integer_division( year, 400 ).second ) {
    	            return true;  // Durch 4, 100 und 400 teilbar
    	        }
                else {
                    return false;   // Durch 4, 100, aber nicht 400 teilbar
                    }
    	    }
               else {
                  return true;   // Durch 4 aber nicht durch 100 teilbar
                }
    	}
    	return false;    // Nicht durch 4 teilbar
    }
    

Anmelden zum Antworten