Schaltjahr oder nicht



  • volkard schrieb:

    Caipi schrieb:

    Nein. Korrekt ist so:

    bool is_leap_year(size_t year)
    {
       if( ( !(year % 4) && year % 100 ) || !(year % 400) )
          return true;
       return false;
    }
    

    Bei deiner Funktion wird das Jahr 2004 z.B. nicht als Schaltjahr erkannt...
    Caipi

    da hab ich aber den nicht so korrekten code lieber. den kann ich wenigstens verstehen und gegebenefalls reparieren. deinen versteh ich nicht.

    Sorry, aber ich verstehe nicht worauf du hinaus willst 😞 (Falls es Ironie ist, diese zu erkennen ist nicht unbedingt meine Stärke).

    Klär mich auf. Bitte 🙂

    Caipi



  • Caipi schrieb:

    Klär mich auf. Bitte 🙂

    ich kann einfach

    bool isSchaltjahr(int jahr) 
    { 
        if( jahr % 400 == 0 ) return true; 
        if( jahr % 100 > 0 ) return false; 
        if( jahr % 4 == 0 ) return true; 
        return false; 
    }
    

    viel besser lesen als deinen code.
    den les ich da so von oben nach unten.
    wenn das jahr durch 400 teilbar ist, dann ist es ein schaltjahr.
    ansonsten, wenn das jahr durch 100 teilbar ist, dann ist es kein schaltjahr.
    ansonsten, wenn das jahr durch 4 teilbar ist, dann ist es ein schaltjahr.
    ansonsten ist es kein schaltjar.
    das kann ich irgendwie ganz leicht nachvolziehen. das direkte rausreturnen (bin ja eh fan von singe-entry/multiple-exit) erlaubt mir, gedankengänge früb abzuschließen und unabhängig vom rest zu beurteilen.
    aber ich muss heut zu müde sein für sowas. ich seh grad den 2004-fehler nicht, den du gezeigt hast.



  • naja ich denk mal er will drauf hinaus das man Fireflows Code nach 3 Sekunden verstanden hat, während man über deinen um einiges länger nachdenken muss(ich würd mal sagen zwischen 6 und 9 Sekunden, also immerhin das doppelte oder dreifache)^^

    //edit zu langsam 🙄

    theduke



  • volkard schrieb:

    ich seh grad den 2004-fehler nicht, den du gezeigt hast.

    Die Bedingung für ein Schaltjahr (nach dem Gregorianischen) Kalender heißt: Ein Jahr ist dann ein Schaltjahr (und nur dann) wenn es durch 4 teilbar ist aber dann *nicht* durch 100. Außerdem ist es ein Schaltjahr wenn es durch 400 teilbar ist.

    Caipi



  • Dast ist reine Gewohnheit. Ich kann den Einzeiler da schneller lesen als die vielen Zeilen die du benötigst, die noch dazu nicht korrekt sind:

    Das jahr 2004:

    Da greift dann dein 2. if: 2004 % 100 = 4 > 0 --> return false.

    // edit ebenfalls zu langsam 😕



  • Ich habs bereits lange korrigiert... ⚠



  • muhzilla schrieb:

    Dast ist reine Gewohnheit. Ich kann den Einzeiler da schneller lesen als die vielen Zeilen die du benötigst, die noch dazu nicht korrekt sind:

    ah, klar. da muß natürlich auch == stehen. sonst wär der code auch nicht so hübsch, wie er jetzt ist.

    dann vermute ich, du würdest diesen wust dadurch heilen, daß du ein paar leerzeichen einfügst?

    bool datumIstGueltig(int tag,int monat,int jahr){
       return monat>0&&monat<13&&tag>0&&tag<32&&(tag<31¦¦(monat>7!=monat%2==1))
       &&(monat!=2¦¦(tag<30&&(((jahr%4==0&&jahr%100!=0)¦¦jahr%400==0)¦¦tag<29)));
    }
    


  • Da sollte man wohl abwiegen, wie weit man damit gehen kann etwas scheinbar cryptisch auszudrücken. Der von dir gezeigte Ausdruck ist wirklich recht unübersichtlich, allerding würden Leerzeichen tatsächlich zur Lesbarkeit beitragen 😛



  • naja, kryptischer code ist bekanntlich schneller als viele zeilen. ich muß wohl mehr üben, lange ausdrücke zu schreiben, wenn ich den zahn der zeit noch erwischen will.



  • das mit dem schaltjahr hat papst gregor im mittelalter eingeführt. deswegen
    fehlen im einführungsjahr ein paar tage und weil das mit dem schaltjahren
    noch zu kleinen abweichungen führt werden von zeit zu zeit noch korrektur-
    sekunden eingesetzt. ausserdem wurde das schaltjahr nicht überall in europa
    im selben jahr eingeführt sondern nur im politischen einflussbereich des
    papstes. ich kann mich irren: hatten die franzosen zur revolutionszeit nicht
    noch einen anderen kalender.
    für genaue rechereche bin ich zu müde. nur als hinweis.

    mfg f.-th.


Anmelden zum Antworten