Dátum pohyblivých sviatkov

Ilustrácia

Možno ste si všimli, že dátum Veľkej noci (v ďalšom VN) sa každý rok mení. V cirkevnom roku poznáme totiž sviatky nepohyblivé - ich dátum je každý rok ten istý, a pohyblivé - ich dátum sa každý rok mení. Medzi nepohyblivé patrí napríklad Sviatok narodenia Pána, ktorý každý rok oslavujeme 25. decembra. VN patrí medzi pohyblivé sviatky. Dátumy ostatných pohyblivých sviatkov sa potom pohybujú podľa dátumu VN. Ako je to vlastne s VN? Dňom jarnej rovnodennosti je 21. marec. Po dni jarnej rovnodennosti, keď mesiac dosiahne spln (veľkonočný spln-pascha), najbližšia nedeľa, ktorá nasleduje, je Veľkonočná nedeľa. Veľkonočný spln je prvý dátum aproximatívneho astronomického splnu po 20. marci a nazýva sa aj eklektický spln. Pretože Juliánsky kalendár obsahoval chybu 0,0078 dňa, do r. 1500 táto chyba činila okolo 12 dní. Preto už pápež Pavol III. začal pripravovať reformu kalendára. V r. 1576 bratia Luigi a Antonio Lilio navrhli systém, ktorý sa stal základom Gregoriánskeho kalendára a zostrojili tabuľky pre určenie VN. Christopher Clavius modifikoval tieto tabuľky a od r. 1583 sa užívajú pre určenie dátumu VN. Pápež Gregor XIII. v r. 1582 vydal pápežskú bullu INTER GRAVISSIMAS , ktorou sa zaviedla reforma kalendára, ktorú postupne prijal celý západný a pozápadnený svet. Všetky algoritmy pre výpočet Veľkej noci (západná cirkev) sú založené na týchto tabuľkách. Dôležitý je tiež Gaussov algoritmus , ktorý sa používa pre výpočet dátumu VN pre ortodoxnú (východnú) cirkev. V ďalšom uvádzam dva algoitmy pre určenie VN (západná cirkev):


Public Function VelkaNoc(rok As Integer) As String
' Carterov algoritmus
' Platný pre roky 1900-2099
  Dim den As Integer
  den = (((255 - 11 * (rok Mod 19)) - 21) Mod 30) + 21
  VelkaNoc = DateSerial(rok, 3, 1) + den + (den > 48) + _
  6 - ((rok + rok \ 4 + _
  den + (den > 48) + 1) Mod 7)
  VelkaNoc = Format(VelkaNoc, "dddd dd.mm.yyyy")
End Function  

Aby ste mohli kedykoľvek Vami vytvorenú funkciu použiť, uložte súbor, v ktorom máte VBA kód funkcie, ako doplnok (uložiť ako) pod tým istým menom ako pôvodný súbor a rozšírením mena súboru XLA. Potom budete mať túto funkciu vždy k dispozícii, pokiaľ si ju v Exceli v Doplnkoch začiarknete. V liste potom túto funkciu zadáte (bude v kategórii definované používateľom) a ako argument zadáte rok ktorý Vás zaujíma. Výpočty pre väčší časový interval, napr. pre celý obor platnosti, t.j.pre roky 2000 až 2099 si môžete urobiť v IMMEDIATE WINDOW pomocou subrutíny MAIN , ktorú uvádzam nižšie:

Sub Main()
   Dim i As Integer
  For i = 2003 To 2099
   Debug.Print VelkaNoc(i)
  Next i
End Sub
Dim mes As Integer, den As Integer
Function oud(rok)
'Oudinova metóda výpočtu 
' dátumu Veľkonočnej nedele
  storoc = Int(rok / 100)
  g = rok Mod 19
  k = Int((storoc - 17) / 25)
  i = (storoc - Int(storoc / 4) - Int((storoc - k) / 3) + _
  19 * g + 15) Mod 30
  a = Int(i / 28)
  b = Int(29 / (i + 1))
  c = Int((21 - g) / 11)
  i = i - a * (1 - a * b * c)
  d = Int(rok / 4)
  j = (rok + d + i + 2 - storoc + Int(storoc / 4)) Mod 7
  l = i - j
  mes = 3 + Int((l + 40) / 44)
  den = l + 28 - 31 * Int(mes / 4)
End Function

V procedúre MAIN môžete výsledky zapísať do textového súboru s názvom napr.oudin.txt alebo do IMMEDIATE WINDOW

Sub main()
Dim m As Integer, dtm As Date
'Open "C:\oudin.txt" For Output As #1
For m = 2000 To 2020
rok = m
Call oud(rok)
dtm = Str(den) & Str(mes) & Str(rok)
Debug.Print dtm
'Print #1, dtm
Next m
'Close #1
End Sub

Ďalšie pohyblivé sviatky sa určia vo vzťahu k VN. Nedeľa pred VN sa nazýva Kvetnou nedeľou. Ak od nej odčítate 40 dní, prídete ku dňu, ktorý sa nazýva Popolcová streda.

Prestupné roky v Gregoriánskom kalendári

Prestupné roky sú definované ako roky, ktoré sú delitelné číslom 4 bez zbytku s výnimkou storočí. Zo storočí sú prestupné len tie, ktoré sú deliteľné číslom 400. Rok 1800 preto prestupný nie je, hoci je delitelný bez zbytku číslom 4.Vytvorme si kód pre vlastnú funkciu, ktorá vráti odkaz, či zadaný rok je prestupný alebo nie.


Function prest(dtm As Date)
Dim i As Integer, rok As Integer
rok = Year(dtm)
rr = rok Mod 4
rrr = rok Mod 400
If rr = 0 Or rrr = 0 Then
prest = "Prestupný"
Else
prest = "Neprestupný"
End If
End Function

Podrobnosti o vytvorení vlastných funkcií nájdete v článku Funkce a vlastní funkce (2886)

Vzorec pre výpočet dátumu VN, použiteľný v liste Exceli

=FLOOR(DAY(MINUTE(A1/38)/2+56)&".5."&A1;7)-34. Predpokladá sa, že rok je zadaný v bunke A1.
Celočíselné delenie zaokrúhlené dole Funkcia FLOOR je menej známa funkcia a taktiež jej vysvetlenie v HELP-e nie je práve najvýstižnejšie. Jej syntax je: FLOOR(number;significance). Napr. =FLOOR(x;s).
Jej matematické vyjadrenie vidíme na obrázku vľavo, pričom výraz v zátvorke znamená celočíselné delenie zaokrúhlené dole.
Miesto funkcie FLOOR by sa mohla použiť aj funkcia =ROUNDDOWN(x/s;0)*s. Na tomto vzorci je pre mňa veľkou záhadou, že správne určí veľkonočnú nedeľu pre celý interval rokov [1900,2099] s výnimkou r. 2079! Miesto dátumu 23.4.2079 udáva dátum o 7 dní skorší 16.4.2079. Možná, že niekto z čitateľov príde na to, kde je chyba, alebo ako má byť správny vzorec.
Zdroje:
  1. Royal Greenwich Observatory's Leaflet on the Date of Easter:
  2. Eva Kotulová: Kalendář aneb kniha o věčnosti času, 1978.
  3. WEB stránka Astronomickej spoločnosti v Austrálii www.chariot.net.au
Príklady boli vypracované v Excel 2000 pod OS Windows XP.


Valid HTML 4.01 Transitional
Domov


Stránka je v súlade s aktuálnymi normami.

© Klára Mrázová