Založen: Nov 07, 2005 Příspěvky: 1520 Bydliště: Studénka
Zaslal: ne únor 19 2012, 9:44 Předmět: Vzorec pro výpočet data velikonoc
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 Brozicek dne út únor 21 2012, 9:43, celkově upraveno 1 krát.
Založen: Oct 11, 2008 Příspěvky: 6066 Bydliště: ZZ9 Plural Z Alpha
Zaslal: ne únor 19 2012, 11:27 Předmět:
Brozicek napsal(a):
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%C4%8Det_data_Velikonoc
Naposledy upravil tomasjedno dne ne únor 19 2012, 12:12, celkově upraveno 1 krát.
Založen: Oct 11, 2008 Příspěvky: 6066 Bydliště: ZZ9 Plural Z Alpha
Zaslal: ne únor 19 2012, 11:39 Předmět:
procesor napsal(a):
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ů.
Založen: Nov 07, 2005 Příspěvky: 1520 Bydliště: Studénka
Zaslal: ne únor 19 2012, 12:11 Předmět:
tomasjedno napsal(a):
Brozicek napsal(a):
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.
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.
tady je to vydestilováno do Qbasicu, testováno na pár posledních let. Trvalo to míň než půl dne.
kód:
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
Založen: Mar 16, 2005 Příspěvky: 31853 Bydliště: Česká Třebová, JN89FW21
Zaslal: ne únor 19 2012, 16:32 Předmět:
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...
Založen: Jan 13, 2007 Příspěvky: 15516 Bydliště: Olomouc
Zaslal: ne únor 19 2012, 17:19 Předmět:
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.
Na Velikonoce se mi stačí mrknout do kalendáře (hotovo za 15 sekund).
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: ne únor 19 2012, 18:50 Předmět:
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 .
Pripúšťam aj zmenu, ale ako doteraz jedna "lumpáreň" vystrieda druhú.
Založen: Nov 07, 2005 Příspěvky: 1520 Bydliště: Studénka
Zaslal: ne únor 19 2012, 19:43 Předmět:
tomasjedno napsal(a):
.....
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).
Velikonoce.ZIP
Komentář:
Korekce "minus 1 týden" pro roky 1954, 1981, 2049 a 2076 provedena.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.