Wpisany przez Tomasz Lubiński
wtorek, 19 lutego 2008 21:43
Wielkanoc jest tak zwanym świętem ruchomym - oznacza to, że każdego roku występuje w inny dzień. Definicja mówi, iż przypada ona w pierwszą niedzielę po pierwszej pełni Księżyca przypadającej po równonocy wiosennej. Jeden ze sposobów obliczenia tej daty został podany przez Gaussa. Algorytm przebiega następująco:
Zatem suma zmiennych d oraz e oznacza ile dni po 22 marca przypada wielkanoc.
dla podanej metody mamy dwa wyjątki:
Do obliczeń potrzebne są dwie liczby A i B.
Ich wartości dla kalendarza gregoriańskiego (czyli tego obowiązującego w Polsce) odczytujemy z poniższej tabeli:
Przykład:
Obliczymy datę wielkanocy dla roku 2007.
a = 2007 mod 19 = 12
b = 2007 mod 4 = 3
c = 2007 mod 7 = 5
d = (12*19 + 24) mod 30 = 252 mod 30 = 12
e = (2*3 + 4*5 + 6*12 + 5) mod 7 = 103 mod 7 = 5
Sprawdzamy czy obliczenia pokrywają się z dwoma podanymi wyjątkami? Nie.
Zatem wielkanoc przypada 12 + 5 = 17 dni po 22 marca, czyli 22 + 17 = 39. Marzec ma zawsze 31 dni wynik jest większy od 31 zatem wielkanoc przypada w kwietniu, a dokładnie 39 - 31 = 8 kwietnia.
Obliczymy datę wielkanocy dla roku 2008.
a = 2008 mod 19 = 13
b = 2008 mod 4 = 0
c = 2008 mod 7 = 6
d = (13*19 + 24) mod 30 = 252 mod 30 = 1
e = (2*0 + 4*6 + 6*1 + 5) mod 7 = 35 mod 7 = 0
Sprawdzamy czy obliczenia pokrywają się z dwoma podanymi wyjątkami? Nie.
Zatem wielkanoc przypada 1 + 0 = 1 dni po 22 marca, czyli 22 + 1 = 23 marca.
- a = rok mod 19
- b = rok mod 4
- c = rok mod 7
- d = (a*19 + A) mod 30
- e = (2b + 4c + 6d + B) mod 7
- wielkanoc = 22 marzec + d + e
Zatem suma zmiennych d oraz e oznacza ile dni po 22 marca przypada wielkanoc.
dla podanej metody mamy dwa wyjątki:
- jeżeli d = 29 oraz e = 6 to Wielkanoc miałaby przypaść na dzień 26 kwietnia. Wtedy zawsze obchodzi się ją tydzień wcześniej, tzn. 19 kwietnia
- jeżeli d = 28 oraz e = 6 to Wielkanoc miałaby przypaść 25 kwietnia. Wtedy zawsze obchodzi się ją tydzień wcześniej, tzn. 18 kwietnia
Do obliczeń potrzebne są dwie liczby A i B.
Ich wartości dla kalendarza gregoriańskiego (czyli tego obowiązującego w Polsce) odczytujemy z poniższej tabeli:
| Zakres lat | A | B |
| - 1582 | 15 | 6 |
| 1583 - 1699 | 22 | 2 |
| 1700 - 1799 | 23 | 3 |
| 1800 - 1999 | 23 | 4 |
| 1900 - 2099 | 24 | 5 |
| 2100 - 2199 | 24 | 6 |
| 2200 - 2299 | 25 | 0 |
| 2300 - 2399 | 26 | 1 |
| 2400 - 2499 | 25 | 1 |
Przykład:
Obliczymy datę wielkanocy dla roku 2007.
a = 2007 mod 19 = 12
b = 2007 mod 4 = 3
c = 2007 mod 7 = 5
d = (12*19 + 24) mod 30 = 252 mod 30 = 12
e = (2*3 + 4*5 + 6*12 + 5) mod 7 = 103 mod 7 = 5
Sprawdzamy czy obliczenia pokrywają się z dwoma podanymi wyjątkami? Nie.
Zatem wielkanoc przypada 12 + 5 = 17 dni po 22 marca, czyli 22 + 17 = 39. Marzec ma zawsze 31 dni wynik jest większy od 31 zatem wielkanoc przypada w kwietniu, a dokładnie 39 - 31 = 8 kwietnia.
Obliczymy datę wielkanocy dla roku 2008.
a = 2008 mod 19 = 13
b = 2008 mod 4 = 0
c = 2008 mod 7 = 6
d = (13*19 + 24) mod 30 = 252 mod 30 = 1
e = (2*0 + 4*6 + 6*1 + 5) mod 7 = 35 mod 7 = 0
Sprawdzamy czy obliczenia pokrywają się z dwoma podanymi wyjątkami? Nie.
Zatem wielkanoc przypada 1 + 0 = 1 dni po 22 marca, czyli 22 + 1 = 23 marca.
| Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
| Tomasz Lubiński | C# | MS Visual Studio .net | ![]() | ![]() |
![]() ![]() ![]() ![]() / 5 |
| Tomasz Lubiński | C/C++ | ![]() | ![]() |
![]() ![]() ![]() ![]() / 3 | |
| Tomasz Lubiński | Delphi/Pascal | ![]() | ![]() |
![]() ![]() ![]() ![]() / 2 | |
| Tomasz Lubiński | Java | ![]() | ![]() |
![]() ![]() ![]() ![]() / 3 |
Poprawiony: piątek, 10 czerwca 2011 20:44






