Vzorec pro výpočet data velikonoc
Napsal: 19 úno 2012, 09:44
Možná to patří do jiné sekce, tak mi to tam přesuňte.
Našel jsem si někde na NETu algoritmus pro výpočet data velikonoc. Zkusil jsem si ten algoritmus jen tak ze zvědavosti napsat jako výpočet do buňky EXCEL. Vzorec vychází velmi dlouhý a komplikovaný, možná by šel nějak optimalizovat. Použitý algoritmus má být platný od roku 1901 do roku 2099.
Výpočtový vzorec jsem prověřoval pro roky od asi 1998 do 2012, vždy to souhlasilo s platným kalendářem.
Zkusil si někdo napsat ten vzorec jednodušeji nebo podle jinak definovaného algoritmu?
Protože zde nejde vložit jako přílohu soubor XLS, dám sem vzorce pro pro velikonoční neděli a pondělí jen jako textový řetězec. Textové řetězce je nutno odtud zkopírovat do uvedené buňky v EXCEL a v EXCEL je možno již vzorce kopírovat do jiné libovolné buňky. Buňku se vzorcem nastavte do formátu Datum d.m.rrrr aby se výsledek výpočtu správně zobrazil.
Poznámka: Podle následující diskuse byly vzorce dodatečně doplněny 21.2. o korekci data velikonoc o jeden týden dříve pro roky 1954, 1981, 2049 a 2076.
Velikonoční neděle: Zkopírovat do buňky B4, požadovaný rok pro výpočet vepište do A4.
=CONCATENATE((22+MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7))*A((22+MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7))>0;(22+MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7))<32)+(MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)*(A((MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)>0;(MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)<31))-7*(NEBO(A4=1954;A4=1981;A4=2049;A4=2076));".";3+1*(A((MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)>0;(MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)<31));".";A4)+0
Velikonoční pondělí: Zkopírovat do buňky F4, požadovaný rok pro výpočet vepište do E4.
=(CONCATENATE((22+MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7))*A((22+MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7))>0;(22+MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7))<32)+(MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)*(A((MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)>0;(MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)<31))-7*(NEBO(E4=1954;E4=1981;E4=2049;E4=2076));".";3+1*(A((MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)>0;(MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)<31));".";E4))+1
Našel jsem si někde na NETu algoritmus pro výpočet data velikonoc. Zkusil jsem si ten algoritmus jen tak ze zvědavosti napsat jako výpočet do buňky EXCEL. Vzorec vychází velmi dlouhý a komplikovaný, možná by šel nějak optimalizovat. Použitý algoritmus má být platný od roku 1901 do roku 2099.
Výpočtový vzorec jsem prověřoval pro roky od asi 1998 do 2012, vždy to souhlasilo s platným kalendářem.
Zkusil si někdo napsat ten vzorec jednodušeji nebo podle jinak definovaného algoritmu?
Protože zde nejde vložit jako přílohu soubor XLS, dám sem vzorce pro pro velikonoční neděli a pondělí jen jako textový řetězec. Textové řetězce je nutno odtud zkopírovat do uvedené buňky v EXCEL a v EXCEL je možno již vzorce kopírovat do jiné libovolné buňky. Buňku se vzorcem nastavte do formátu Datum d.m.rrrr aby se výsledek výpočtu správně zobrazil.
Poznámka: Podle následující diskuse byly vzorce dodatečně doplněny 21.2. o korekci data velikonoc o jeden týden dříve pro roky 1954, 1981, 2049 a 2076.
Velikonoční neděle: Zkopírovat do buňky B4, požadovaný rok pro výpočet vepište do A4.
=CONCATENATE((22+MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7))*A((22+MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7))>0;(22+MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7))<32)+(MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)*(A((MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)>0;(MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)<31))-7*(NEBO(A4=1954;A4=1981;A4=2049;A4=2076));".";3+1*(A((MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)>0;(MOD((19*MOD(A4;19)+24);30)+MOD((5+2*MOD(A4;4)+4*MOD(A4;7)+6*MOD((19*MOD(A4;19)+24);30));7)-9)<31));".";A4)+0
Velikonoční pondělí: Zkopírovat do buňky F4, požadovaný rok pro výpočet vepište do E4.
=(CONCATENATE((22+MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7))*A((22+MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7))>0;(22+MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7))<32)+(MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)*(A((MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)>0;(MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)<31))-7*(NEBO(E4=1954;E4=1981;E4=2049;E4=2076));".";3+1*(A((MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)>0;(MOD((19*MOD(E4;19)+24);30)+MOD((5+2*MOD(E4;4)+4*MOD(E4;7)+6*MOD((19*MOD(E4;19)+24);30));7)-9)<31));".";E4))+1