| |
|
|
p.specht
| Manchmal möchte man wissen, auf welchen Wochentag ein bestimmtes Datum fällt. Da Wochentage von der Gregorianischen Kalenderreform 1582 unbeeinflußt blieben, denke man sich, das sei recht einfach. Jedoch: Andere Schaltjahresregeln sowie eine 10-tägige Anpassungsperiode (auf Donnerstag, den 4. Oktober 1582 folgte gleich Freitag, der 15. Oktober) komplizieren die Berechnung direkt aus einer Datumsangabe.
Einen tauglichen Algorithmus verdanken wir Herrn Pfarrer Christian Zeller, Priester und Mathematiker, dessen "ZELLER´s KONGRUENZ" erstmals 1882 veröffentlicht wurde.
Hier eine Quick-n-dirty Umsetzung ohne grande Plausibilitätsprüfung in XProfan 11.2a. Einstellige Angaben sind dabei mit vorangestellter 0 zweistellig einzugeben. Trennzeichen nicht vergessen!
' Zellers Kongruenz, Version 1.02, ohne jede Gewähr
WindowTitle "Direkte Wochentagsermittlung aus Datum"
declare da$,dy%,mnth%,fyear%,syear%,kal$,i%,j%,h%,greg%
Window 424,300
nochmal:
cls rgb(0,100,255)
print
print " Algorithmus " + chr$(34) + "Zeller´s Kongruenz" + chr$(34) + " "
print " Quelle: Pfarrer Dr. Christian Zeller, A.D.1882 "
print
print " Datum [dd.mm.yyyy] = ";
locate 5,24 : input da$
case da$="" : end
dy%=val(left$(da$,2))
mnth%=val(mid$(da$,4,2))
fyear%=val(mid$(da$,7,4))
syear%=val(mid$(da$,9,2))
print
print
if fyear% > 1582 : greg%=1
elseif fyear% < 1582 : greg%=0
elseif fyear% = 1582
if mnth%>10 : greg%=1
elseif mnth%<10 : greg%=0
elseif mnth%=10
if dy%>=15 : greg%=1
elseif dy%<=4 : greg%=0
else
greg%=-1
endif
endif
endif
kal$=" Julianischer Kalender 45vChr-4.10.1582 "
case greg%=1 : kal$=" Gregorianischer Kalender "
case greg%=-1: kal$=" KEIN KALENDER ZUFREFFEND! "
Print kal$
Print " Der " + str$(dy%)+"."+str$(mnth%)+"."+str$(fyear%)+" fällt auf einen ";
if mnth%<3
mnth%=mnth%+12
fyear% = fyear%-1
syear% = syear%-1
endif
h%=-1
if greg%=1
h%=(dy%+int((mnth%+1)*26/10)+syear%+int(syear%/4)+int( int(fyear%/100) /4) + 5*int(fyear%/100) ) mod 7
elseif greg%=0
h%=(dy%+int((mnth%+1)*26/10)+syear%+int(syear%/4)+ 5 + 6* int(fyear%/100) ) mod 7
else
h%=99
endif
if h%=0 : print "Samstag";
elseif h%=1 : print "Sonntag";
elseif h%=2 : print "Montag";
elseif h%=3 : print "Dienstag";
elseif h%=4 : print "Mittwoch";
elseif h%=5 : print "Donnerstag";
elseif h%=6 : print "Freitag";
elseif h%=99: print " "
print " nicht existierenden Zeitraum (wegen "
print " grego. Kalenderreform ausgelassen)";
else : print " fehlerhaften Eingabewert";
endif
print ". "
WaitInput
Goto "nochmal"
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 11.04.2021 ▲ |
|
|
|