algorytm.org

Wyznaczanie daty Wielkanocy - metoda Meeusa/Jonesa/Butchera



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Wyznaczanie daty Wielkanocy - metoda Meeusa/Jonesa/Butchera
Ocena użytkowników:***** / 18
SłabyŚwietny 
Wpisany przez Jakub Raban, 26 sierpnia 2015 17:50

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. W 1991 roku Jean Meeus opublikował sposób na obliczanie daty Wielkanocy. Można uznać tą metodę za lepszą od metody Gaussa, ponieważ nie ma od niej wyjątków i nie wymaga wartości dla danych zakresów czasu, jednak obliczenie wymaga wykonania większej ilości kroków.

Aby obliczyć datę Wielkanocy:
  • Tworzymy zmienne całkowitoliczbowe a, b, c, d, e, f, g, h, i, k, l, m, p, zmienną przechowującą podany przez użytkownika rok, a także obliczony dzień i miesiąc
  • Pobieramy rok od użytkownika
  • a = rok [mod] 19
  • b = zaokrąglenie w dół (rok / 100)
  • c = rok [mod] 100
  • d = zaokrąglenie w dół (b / 4)
  • e = b [mod] 4
  • f = zaokrąglenie w dół ((b + 8) / 25)
  • g = zaokrąglenie w dół ((bf + 1) / 3)
  • h = (19 * a + bdg + 15) [mod] 30
  • i = zaokrąglenie w dół (c / 4)
  • k = c [mod] 4
  • l = (32 + 2 * e + 2 * ihk) [mod] 7
  • m = zaokrąglenie w dół ((a + 11 * h + 22 * l) / 451)
  • p = (h + l – 7 * m + 114) [mod] 31
  • dzień = p + 1
  • miesiąc = zaokrąglenie w dół (h + l – 7 * m + 114) / 31
(Aby w Javie zaokrąglić w dół wystarczy rzutować na użyty typ, np. i = (int) c / 4; W innych językach jest podobnie bądź trzeba użyć wbudowanej funkcji np. floor.)

Datę możemy wyświetlić w formacie dd.mm lub też dodać dodatkową zmienną oraz blok warunkowy:
Jeżeli miesiąc wynosi 4, to słowo = "kwietnia", przeciwnie słowo = "marca"


Przykład:

Data Wielkanocy dla roku 2015:
  • a = rok [mod] 19 = 1
  • b = rok / 100 ≈ 20
  • c = rok [mod] 100 = 15
  • d = b / 4 ≈ 20 / 4 = 5
  • e = b [mod] 4 = 20 [mod] 4 = 0
  • f = (b + 8) / 25 = 28 / 25 ≈ 1
  • g = (bf + 1) / 3 = 20 / 3 ≈ 6
  • h = (19 * a + bdg + 15) [mod] 30 = 43 [mod] 30 = 13
  • i = c / 4 = 15 / 4 ≈ 3
  • k = c [mod] 4 = 15 [mod] 4 = 3
  • l = (32 + 2 * e + 2 * ihk) [mod] 7 = 22 [mod] 7 = 1
  • m = (a + 11 * h + 22 * l) / 451 = 166 / 451 ≈ 0
  • p = (h + l – 7 * m + 114) [mod] 31 = 128 [mod] 31 = 4
  • dzień = p + 1 = 5
  • miesiąc = (h + l – 7 * m + 114) / 31 = 128 / 31 ≈ 4
Tak więc Wielkanoc w roku 2015 wypada 5 kwietnia


Przykład w JavaScript:

Podaj rok:

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
DarekSC#
.cs
.cs
***** / 0
Michał WitaszekC/C++
.cpp
.cpp
***** / 0
Jakub RabanJava
.java
.java
***** / 0
Michał WitaszekJavaScript
.js
.js
***** / 2
Mariusz653456Python
.py
.py
***** / 2
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 09 września 2015 14:38
Dodaj komentarz