Vzorec pro výpočet data velikonoc

Software potřebné k práci s elektronikou

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Brozicek
Příspěvky: 1645
Registrován: 07 lis 2005, 00:00
Bydliště: Studénka

Vzorec pro výpočet data velikonoc

#1 Příspěvek od Brozicek »

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
Naposledy upravil(a) Brozicek dne 21 úno 2012, 09:43, celkem upraveno 1 x.
Uživatelský avatar
OK2STO
Příspěvky: 451
Registrován: 19 zář 2008, 00:00
Bydliště: Ostrava

#2 Příspěvek od OK2STO »

Zdravím, tak tu přílohu v Excelu zkomprimovat třeba do Zipu nebo Raru a vložit sem.
Uživatelský avatar
Brozicek
Příspěvky: 1645
Registrován: 07 lis 2005, 00:00
Bydliště: Studénka

#3 Příspěvek od Brozicek »

Tady je ten soubor EXCEL v ZIP.
Přílohy
Velikonoce.ZIP
V tomto souboru není korekce "minus 1 týden" pro roky 1954, 1981, 2049 a 2076 provedena. Opravený ZIP soubor je dále
(3.41 KiB) Staženo 204 x
Naposledy upravil(a) Brozicek dne 21 úno 2012, 09:38, celkem upraveno 1 x.
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#4 Příspěvek od procesor »

Aj tak mi to OOo calc nezhltne (dlhé? reťazce príkazov?)
Uživatelský avatar
Brozicek
Příspěvky: 1645
Registrován: 07 lis 2005, 00:00
Bydliště: Studénka

#5 Příspěvek od Brozicek »

Našel jsem ještě ten popis toho naprogramovaného algoritmu. Mám ho jen jako JPG obrázek, proto přikládám.
Přílohy
Algoritmus velikonoc.JPG
(287.84 KiB) Staženo 192 x
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#6 Příspěvek od tomasjedno »

Brozicek píše: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..

Co tam dělají buňky L4 (v neděli) a O4 (v pondělí), a podmínky L4>25 a O4>25? To je nějaké nevyčištěné reziduum po testování na 25.4.? (které tam ovšem nemáš).
Algoritmus ve VisualBasicu máš tady http://cs.wikipedia.org/wiki/V%C3%BDpo% ... _Velikonoc
Naposledy upravil(a) tomasjedno dne 19 úno 2012, 12:12, celkem upraveno 1 x.
Uživatelský avatar
tomasjedno
Příspěvky: 6547
Registrován: 11 říj 2008, 00:00
Bydliště: ZZ9 Plural Z Alpha

#7 Příspěvek od tomasjedno »

procesor píše:Aj tak mi to OOo calc nezhltne (dlhé? reťazce príkazov?)

Tož si to rozkouskuj:
Velikonoční neděle:
den: =(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*(L4>25)
měsíc: =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))
rok: =A4
(bez záruky za správnost, jenom jsem to vykostil z Brozickových vzorců.
Uživatelský avatar
Brozicek
Příspěvky: 1645
Registrován: 07 lis 2005, 00:00
Bydliště: Studénka

#8 Příspěvek od Brozicek »

tomasjedno píše:
Brozicek píše: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..

Co tam dělají buňky L4 (v neděli) a O4 (v pondělí), a podmínky L4>25 a O4>25? To je nějaké nevyčištěné reziduum po testování na 25.4.?

Děkuji za upozornění. Ten vzorec vznikal někdy v roce 2006 nyní jsem ho oprášil. Je možné, že je tam přehlédnutá chyba, která se při testování na známé kalendářní dny velikonoc neprojevila. Asi tam patří také A4 a E4 jako všude jinde, ale musím se na to v klidu podívat. Jak vidím mám hodně skvělých oponentů, kteří ten postup rozpitvají a případné moje chyby opraví. Za to jim děkuji.
termit256
Příspěvky: 10029
Registrován: 06 pro 2007, 00:00

#9 Příspěvek od termit256 »

No nevim, nebude rychlejsi ty data velikonoc proste zapsat natvrdo do nejake tabulky? Nez se pul dne babrat s takovym vzorcem kde se snadno prehledne chyba.
Uživatelský avatar
Crifodo
Příspěvky: 14779
Registrován: 11 říj 2005, 00:00

#10 Příspěvek od Crifodo »

tady je to vydestilováno do Qbasicu, testováno na pár posledních let. Trvalo to míň než půl dne.

Kód: Vybrat vše

         
     CLS
     INPUT "rok:"; rok
     d = 19 * (rok MOD 19) + 24
     d = d MOD 30
     d = 22 + d + (5 + 2 * (rok MOD 4) + 4 * (rok MOD 7) + 6 * d) MOD 7
     IF d < 57 THEN GOTO brezen
     d = d - 7
brezen:
        IF d > 31 THEN GOTO duben
        PRINT d; " brezna"
        END
duben:
        PRINT d - 31; " dubna"
        END
Uživatelský avatar
EKKAR
Příspěvky: 35012
Registrován: 16 bře 2005, 00:00
Bydliště: Česká Třebová, JN89FW21

#11 Příspěvek od EKKAR »

Teď ještě jestli to splní zásadní podmínku astronomickou - totiž že datum Velikonoc se řídí kombinací slunečního a lunárního kalendáře, proto jsou Velikonoce pohyblivý svátek.
Přesně řečeno, Velikonocní svátky jsou v první neděli (a pondělí) následující po prvním jarním úplňku - neboli po prvním úplňku dovršeném po datu jarní rovnodnnosti = 21.března v tom kterém kalendářním roce. Přesně 49 dní PŘED Velikonoční nedělí je pak "Ostatkové úterý" neboli (známěji) MASOPUSTNÍ ÚTERÝ.
Nasliněný prst na svorkovnici domovního rozvaděče: Jó, paninko, máte tam ty Voltíky všecky...
A kutilmile - nelituju tě :mrgreen: :mrgreen: !!!
p32
Příspěvky: 16427
Registrován: 13 led 2007, 00:00

#12 Příspěvek od p32 »

Nemáte tam ještě i nějaký program na zjištění, kterého krásného dne půjde tato vláda včetně její opozice do prd..le ? Jen bych rád věděl, jestli se toho ještě dožiju. :wink:
Na Velikonoce se mi stačí mrknout do kalendáře (hotovo za 15 sekund).
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#13 Příspěvek od procesor »

Ta tvoja "pozice i opozice" tam u vás, rovnako ako u nás, bude aj v r. 2050, ale Veľká Noc v tom roku sa dá zistiť len v takýmto a podobným algoritmom :D.

Pripúšťam aj zmenu, ale ako doteraz jedna "lumpáreň" vystrieda druhú.
Uživatelský avatar
Brozicek
Příspěvky: 1645
Registrován: 07 lis 2005, 00:00
Bydliště: Studénka

#14 Příspěvek od Brozicek »

tomasjedno píše:.....
Co tam dělají buňky L4 (v neděli) a O4 (v pondělí), a podmínky L4>25 a O4>25? To je nějaké nevyčištěné reziduum po testování na 25.4.? (které tam ovšem nemáš)......

Tak jsem odpoledne odklidil sníh na chatě a vyčistil si tím mozek. "Tomásjedno" mě odhalil parádně, upřímně mu za to děkuji. Našel jsem si archiv pro odvození vzorce a ty buňky L4 a O4 je skutečně pozůstatek ladění, kdy byl vzorec psán "per partes" podle měsíců a testoval jsem tím data ve sloupci pro duben. Pak jsem vše spojil do 1 vzorce, "náhle mne v práci vyrušil šéf" a bylo vymalováno. Chyba tam zůstala celých 6 roků (jako u Microsoftu).
Nakopíroval jsem si ty moje vzorce do sloupečků a provedl výpočet data velikonoc od roku 1901 do roku 2099. Vyšlo mi, že datum velikonoc je větší než 25.4. jen v roce 1981 a 2076. Tak jsem zachránil situaci tím, že v těch dvou rocích odečtu těch 7 dní.
V příloze je EXCEL s opravenou chybou.
EXCEL má snad pro výpočet data velikonoc proti Visual Basic nebo Qbasic v tom, že se dají vzorečky dát do nějaké EXCELovské aplikace bez znalosti toho jak tam dostat prográmky v "basicu".
Jednu aplikaci, ve které jsem použil tento výpočet sem dám za chvíli, až tam také opravím tu chybičku (projevila by se až v roce 2076).
Přílohy
Velikonoce.ZIP
Korekce "minus 1 týden" pro roky 1954, 1981, 2049 a 2076 provedena.
(3.57 KiB) Staženo 188 x
Naposledy upravil(a) Brozicek dne 21 úno 2012, 09:35, celkem upraveno 1 x.
Uživatelský avatar
Bernard
Příspěvky: 3654
Registrován: 27 kvě 2005, 00:00

#15 Příspěvek od Bernard »

Rozložení velikonoční neděle v čase. Rozdíl mezi sousedními roky za těch 100 let je minimálně 8 dní. Kdoví, jestli i za 1000 let?
Přílohy
velikonoce.png
(22.17 KiB) Staženo 197 x
Odpovědět

Zpět na „Software“