Wie berechnet man den Aschermittwoch?
Guten Morgen,
ich möchte mir den Aschermittwoch berechnen, ein Teil eines Programmes. Nur blöderweise habe ich einen Denkfehler (denke ich mal).
Also, was ich zur Zeit habe:
-
Es wird überprüft, ob das Jahr ein Schaltjahr ist, so wie hier unten jetzt textlich dargestellt wird:
Jahr Modulo 400 = 0 //Schaltjahr Jahr Modulo 4 = 0 //Schaltjahr Jahr Modulo 100 = 0 //Kein Schaltjahr Alle anderen Jahre sind keine Schaltjahre
-
Ostersonntag wird nach der Gaußsche Osterformel berechnet (hier erspar ich euch die Rechnung, aber man findet die Formel bei Wikipedia und benutze diese genau so im Programm).
-
Nun weiß man, dass Aschermittwoch 46 Tage vor Ostersonntag ist. Also geht mein Gedanke so weiter:
Ostersonntag (z.b. 27.03.2016) - 46 Tage Nun hab ich es so gemacht, dass -46 + 27 gerechnet wird und derMonat um eins vermindert wird, sodass - 19 herauskommt und schlussendlich 29 (Februar hat 28 Tage, wegen Schaltjahr) - 19 gerechnet wird und das Ergebnis herauskommt, wann Aschermittwoch ist, in diesem Fall: 10.02.2016
-
So weit, so gut. Hier dachte ich, dass ich es geschafft habe. Bei der Überprüfung aber, ob dies wirklich funktioniert kam heraus, dass z.B. für das Jahr 2032 (auch Schaltjahr) Aschermittwoch am 12.02.2032 sei, obwohl es laut dem Internet am 11.02.2032 sei. (1 Tag Unterschied). Beim Jahr 2036 (auch Schaltjahr) kam bei mir 28.02.2036 heraus, laut Internet ist es aber am 27.02.2036 (wieder 1 Tag Unterschied). Für das Jahr 2041 z.B. kommt bei mir 06.03.2041 heraus, laut Internet ist dies korrekt!
Nun ist meine Frage, wieso das so ist? Ist irgend etwas falsch an meiner Denkweise, oder hab ich etwas vergessen in der Rechnung, oder sonst irgend etwas? Ich persönlich kann es mir halt nicht erklären, dass nur das Schaltjahr ab einem bestimmten Jahr nicht mehr funktioniert. Kann mir hier wer helfen?
Danke schon mal im Vorraus!
Mit freundlichen Grüßen Shinba8
4 Antworten
Wenn du die Osterformel aus der wikipedia genommen hast, ist die letzte Zeile
Ostern = (22 + d + e)ter März
Das bedeutet im Schaltjahr:
Ostern = (29 + 22 + d + e)ter Februar
und sonst
Ostern = (28 + 22 + d + e)ter Februar
bzw.
wenn Schaltjahr und (5+d+e) <= 29
AMW = (5 + d + e)ter Februar
wenn Schaltjahr und (5+d+e) > 29
AMW = (5 + d + e - 29)ter März
wenn nicht Schaltjahr und (4+d+e) <= 28
AMW = (4 + d + e)ter Februar
wenn nicht Schaltjahr und (4+d+e) > 28
AMW = (4 + d + e - 28)ter März
Daran kann man sicher noch etwas vereinfachen, aber so kannst du nachvollziehen, wie sich die Formel zusammensetzt.
Warum musst du da am Ende runden? Du rechnest doch hoffentlich alles mit ganzen Zahlen, oder? Wenn nicht, wundert mich, dass da überhaupt etwas richtig sein könnte.
Wie auch immer. Ziemlich am Ende heißt es
os = og+oe
Das entspricht dem März-Datum.
Für Aschermittwoch gilt dann:
if Schaltjahr:
AMW = (29+og+oe-46)
if AMW > 29:
monat = "März"
tag = AMW - 29
else:
monat = "Februar"
tag = AMW
else: # kein Schaltjahr
AMW = (28+og+oe-46)
if AMW > 28:
monat = "März"
tag = AMW - 28
else:
monat = "Februar"
tag = AMW
Im Schaltjahr hat der Februar 29 Tage, nicht 28. Jede kleine popelige Programmiersprache bietet dir Kalenderberechnungen an, bei denen du dann aber auch an einem Mittwoch landen solltest.
Ansonsten: Du bist in deinen Aussagen viel zu unklar, so dass man weder deine Berechnungen noch deine Ergebnisse beurteilen kann.
Hei,
ich hab oben den Fehler korrigiert, trotzdem ändert es nicht viel. Klar, es gibt diese Funktionen die zur Berechnung dienen... Aber mal angenommen, im Matheunterricht wird so etwas gefragt (ok unwahrscheinlich, aber jetzt mal angenommen). Man hat die beiden Formeln, wo man die Werte eintragen muss. Aber wieso ist das Ergebnis dann falsch, ab einem speziellen Schaltjahr? Die Formeln sind so weit ich es begutachten kann richtig und sollten funktionieren.
Meine Berechnung kann ich zwar hineinstellen, würde aber nicht viel bringen, da man diese Formel ja auch ohne Programmierprache im Matheunterricht machen kann. Nur mit einer Programmiersprache geht das ausrechnen wesentlich schneller als ohne.
Damit klar wird, wie ich rechne:
Schaltjahr wird mit den Formeln berechnet, die man bei Google findet, so wie oben beschrieben.
Ostersonntag wird nach der Gaußschen Formel berechnet (Wikipedia ist sie zu finden)
Aschamittwoch ist 46 Tage vor Ostern, also Ostern (hier als Wert: Tag, nicht Monat) - 46 Tage. Hat man Minus irgendwas. Nun + Anzahl der Tage von Februar, gegebenfalls auch + Tage von Januar um Aschamittwoch zu erhalten.
Nimm mal 2017 als Beispiel: Was soll da für dich rauskommen?
Ostersonntag: 16. April. Minus 46 Tage wäre der?
Aschermittwoch: 1. März
Wieso wolltest du die Märztage dabei nicht berücksichtigen? Wozu die Februartage dazurechnen?
Anmerkung: Es heißt nicht Aschamittwoch
Ist mir eben auch aufgefallen, dass es Aschermittwoch heißt.
Soll ich nicht gleich die komplette Rechnung hier her schreiben...?
Es kommt bei auch der 1 März heraus, auch mit dem Jahr 2031 kommt 26.02 Februar als Aschermittwoch heraus (wie man hier sehen kann auch richtig ist: http://www.kalender-365.eu/feiertage/2031.html)
Alles wird richtig berechnet, nur Schaltjahre ab 2024 haben diesen Fehler, wieso auch immer.
Hallo!
Liegt der Denkfehler vielleicht beim Februar?
Du schreibst, aber ist das korrekt?
Februar hat 28 Tage, wegen Schaltjahr
Hei,
ne der Denkfehler liegt leider nicht daran, bin einfach nicht im Stande gewesen alles richtig zu schreiben, da ich bei mir im Code alles mit Variabeln habe und dann durch einander gekommen bin.
Nun weiß man, dass Aschermittwoch 46 Tage vor Ostersonntag ist. Also geht mein Gedanke so weiter:
Ist der Aschermittwoch denn immer zwingend 46 Tage vor Ostersonntag?
Es könnte ja auch darauf ankommen, ob der 29. Februar vor Aschermittwoch liegt oder zwischen Aschermittwoch und Ostersonntag.
Ich persönlich weiß es nicht, aber überall im Internet steht, dass es 46 Tage vorher sei. Wenn er aber 45 Tage vorher wäre, sind die z.B. 2032, 2036, usw. richtig, aber 2012, 2016, usw, wieder falsch.
Ich selber habe die "ergänzte Osterformel" benutzt, da hier einige weitere Faktoren berücksichtigt wurden. Da kann ich jetzt dein Bsp. nicht wirklich mit einbringen, da bei meiner benutzten Formel zu viele Variabeln sind 8:-)
Hier die ergänzte Formel: