Schaltjahr berechnen
Zur Navigation springen
Zur Suche springen
Allgemeines
Ich habe vor kurzem als Dozent einen Python-Kurs gehalten. Auf der Suche nach "schoenen" kleinen Beispielen habe ich mich wieder an meinen Schulzeit erinnert und die Schaltjahr-Berechnung rausgekramt. Das war so ein Klassiker neben den Tuermen von Hanoi, Game of Life und allen Varianten von Zahlenberechnungen (Pi, Prim, Fibonacci, ggT, Fakultaet, ...)
Schaltjahr (lateinisch annus intercalarius oder annus bissextus)
Ein siderisches Jahr der Erde dauert derzeit im Mittel etwa 365,256 Tage, gemessen in SI-Einheiten, somit ungefähr 20 Minuten länger als ein tropisches Jahr.
Die Einschaltung eines zusätzlichen Tages oder Monats wird auch als Interkalation bezeichnet. Eine Sonderform der Schalttage sind Epagomene.
Der Julianische Kalender (Julius Caesar 45 v.Chr.) fuegt alle 4 Jahre einen Schalttag (29.2.) ein. Seit 1582 n.Chr. wird im greogorianischen Kalender alle 400 Jahre auf das Einfuegen verzichtet.
Die Regeln:
- Ist das Jahr durch 4 (ohne Rest) teilbar? ("Julianische Regel")
- Ist das Jahr durch 100 (ohne Rest) und ist das Jahr durch 400 (ohne Rest) teilbar? ("Gregorianische Ergaenzung")
Programme
Excel
In der Zelle A1 steht das Jahr.
=IF(OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)<>0)),"Leap Year", "NOT a Leap Year")
Die Bedingung mal etwas aufgeloest:
OR(MOD(A1,400)=0, AND(MOD(A1,4)=0, MOD(A1,100)<>0 ) )
Wie kommt man jetzt auf sowas?
Wir haben 3 Bedingungen, die man alle 3 mit der Modulo-Operation abbilden kann. Eine 0 bei der Modulo-Division bedeutet keinen Rest und damit ein "True" fuer das Schaltjahr.
- Jahr Modulo 4 = 0 -> Schaltjahr
- Jahr Modulo 400 = 0 UND Jahr Modulo 100 = 0 -> kein Schaltjahr