_____________________________________________________________________________
Inhalt....: Wochentagberechnung nach der Formel von Zeller
Kategorie.: Arbeitsblatt
Mathematik: Analysis, Programmierung
MuPAD.....: 4.0.0
Datum.....: 2007-05-14
Autoren...: Dr. Peter Kubach <kubach@studienkolleg-bochum.de>
Autoren...: Dr. Andreas Sorgatz <sorgatz@sciface.com>
Funktionen: floor, mod, print, if, proc, local
_____________________________________________________________________________
Die Berechnung des Wochentages nach einer Formel von Christian Zeller wird auch heute noch in sogenannten Ewigen Kalendern benutzt. Das folgende Notebook kann sowohl im Informatik Unterricht Anwendung finden, wenn bedingte Anweisungen sinnvoll programmiert werden sollen, als auch im Mathematik Unterricht als Beispiel für die Gaußklammer-Funktion (etwa bei der Untersuchung stetiger Funktionen).
Wann fiel die Berliner Mauer ?
Eine Anwendung des Ewigen Kalenders.
Aus einem gegebenen Datum soll der Wochentag berechnet werden. Hierzu benötigt man einen Algorithmus, der auf einer Formel des Geistlichen Christian Zeller aus dem Jahr 1882 beruht. Berechnet wird ein Wert w, der für w=0 Samstag, für w=1 Sonntag, usw. bis w=6 Freitag liefert. Die Eingabedaten sind T für den Tag, M für den Monat, J für das Jahrhundert und j für das Jahr innerhalb des Jahrhunderts.
Für einige Tage kann es Probleme geben, wenn der Divident negativ wird, also w<0 gilt, dann addiere man den Wert 7 zu w. Bei Tagen im Januar und Februar nach dem Jahr 2000 kann ebenfalls die Situation auftreten, dass kein Wochentag ermittelt wird, in diesem Fall rechnet man mit den Monaten 13 bzw. 14 und dem Vorjahr. Zum Beispiel gibt man statt 1.1. 2000 das Datum 1. 13. 1999 ein.
Rückwirkend gilt die Formel nur bis zum 15. Oktober 1582, damals fand die Kalenderreform statt, es gilt heute der Gregorianische Kalender.
Die Formel lautet (die Restdivision mod 7 ist auf den gesamten Term bezogen)

Wir programmieren die Prozedur wochentag(T,M,J,j):
wochentag := proc(T,M,J,j)
begin
w := T+floor((M+1)*26/10)+j+floor(j/4)+floor(J/4)-2*J:
if w<0 then w := w+7 end_if:
if w>0 then w := w mod 7 end_if:
if w = 0 then print (Unquoted, "Der ".T.".".M.".".J.
(if j < 10 then "0" else "" end).j." ist ein Samstag")
elif w = 1 then print (Unquoted,"Der ".T.".".M.".".J.
(if j < 10 then "0" else "" end).j." ist ein Sonntag")
elif w = 2 then print (Unquoted,"Der ".T.".".M.".".J.
(if j < 10 then "0" else "" end).j." ist ein Montag")
elif w = 3 then print (Unquoted,"Der ".T.".".M.".".J.
(if j < 10 then "0" else "" end).j." ist ein Dienstag")
elif w = 4 then print (Unquoted,"Der ".T.".".M.".".J.
(if j < 10 then "0" else "" end).j." ist ein Mittwoch")
elif w = 5 then print (Unquoted,"Der ".T.".".M.".".J.
(if j < 10 then "0" else "" end).j." ist ein Donnerstag")
elif w = 6 then print (Unquoted,"Der ".T.".".M.".".J.
(if j < 10 then "0" else "" end).j." ist ein Freitag")
else print(Unquoted, "Der Wochentag kann nicht ermittelt werden")
end_if:
end_proc:
Die Berliner Mauer fiel am 9. November 1989. Was war das für ein Wochentag?
wochentag(9,11,19,89)
Der 9.11.1989 ist ein Donnerstag
Nach einer Anregung von A. Sorgatz kann man die Prozedur durch Listen auch so schreiben:
wochentag2 := proc(T,M,J,j)
local wTage, Index;
begin
wTage:= [Samstag, Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag];
Index:= T+floor((M+1)*26/10)+j+floor(j/4)+floor(J/4)-2*J ;
if Index < 0 then Index := Index + 7 end:
if Index > 0 then Index := Index mod 7 end:
print (Unquoted, "Der ".T.".".M.".".J.(if j<10 then "0" else "" end).j
. " ist ein " . wTage[Index+1] );
end_proc:
wochentag2(9,11,19,89)
Der 9.11.1989 ist ein Donnerstag
______________________________________________________________________
Aufgaben:
1. An welchem Wochentag wurden Sie geboren?
2. Welchen Wert liefert die Formel für den 1. Februar 1801?
3. Die folgende Aufgabe kann man ohne MuPAD logisch erschließen: Im Jahr 2000 fielen drei Sonntage auf einen geradzahligen Wochentag. Welcher Wochentag war am 1. April 2000? (Kein Aprilscherz!)
Anmerkungen:
1. Weitere Anmerkungen finden Sie auf den WebSeiten der MuPAD Education Group
unter http://schule.mupad.de.
______________________________________________________________________