Obliczanie daty Wielkanocy
Algorytmy i sposoby ręcznego liczenia



Zobacz także:
Podstawowe algorytmy astronomiczne - Cybermoon



Jak wiadomo Wielkanoc jest to ruchome święto, którego data jest zależna od Księżyca, a dokładniej od jego fazy. Data Wielkanocy wypada w pierwszą niedzielę po Pełni, która będzie miała miejsce między 22 dniem marca a 25 dniem kwietnia.
W artykule tym przedstawione są trzy algorytmy, do obliczania daty Wielkanocy w podanym roku.

Algorytmy:



Algorytm 1:


rok - podajemy rok z przedziału 33 - 2100.

... sprawdzamy liczbę podanego roku i zmiennym A i B przydzielamy odpowiednie wartości.

if (rok>=33 ) then begin A:=15;B:=6;end;
if (rok>=1583) then begin A:=22;B:=2;end;
if (rok>=1700) then begin A:=23;B:=3;end;
if (rok>=1800) then begin A:=23;B:=4;end;
if (rok>=1900) then begin A:=24;B:=5;end;
if (rok>=2100) then begin A:=24;B:=6;end;

a1:=rok mod 19;
b1:=rok mod 4;
c1:=rok mod 7;
d1:=(a1*19+A)mod 30;
e1:=( 2*b1 + 4*c1 + 6*d1 + B )mod 7;
suma:=d1+e1+22;
writeln;
write('Wielkanoc w roku ',rok,' bedzie obchodzona dnia ');

if (suma>31) then
 begin
  suma:=suma-31;
  if (suma=25)and(suma=26) then suma:=suma-7;
  writeln(suma,' Kwietnia.');
 end
  else
   writeln(suma,' Marca.');

end.


Jak widać algorytm działa dla lat 33 - 2100 naszej ery, jest bardzo prosty. Prosi o podanie roku, następnie podaje miesiąc i dzień Wielkanocy. Tutaj możesz ściągnąć gotowe algorytmy (kody źródłowe) napisane w języku C++ i Pascal, oraz gotowe programy napisane w tychże językach.



Algorytm 2:


y - podajemy rok z przedziału 1900 - 2099.

a:= y mod 19;
b:= y mod 4;
c:= y mod 7;
d:= (19*a + 24) mod 30;
e:= (2*b +4*c + 6*d + 5) mod 7;
dayMar:= 22 + d + e;
dayApr:= d + e - 9;

Dwie zmienne dayMar i dayApr otrzymały wartości, jest to numer dnia Marca i Kwietnia, w którym wypada Wielkanoc. Należy sprawdzić, który z tych miesięcy brać pod uwagę. Sprawdzamy wielkość (numer dnia) Marca, czyli zmiennej dayMar, i jeżeli nie przekracza liczby 31 to wiemy że Wielkanoc wypada w Marcu w dniu o numerze dayMar, jeżeli natomiast wartość zmiennej dayMar przekracza 31, oznacza to że Wielkanoc będzie w Kwietniu w dniu o numerze dayApr.

Formułka sprawdzająca dla języka Pascal będzie wyglądała następująco:

if dayMar>31 then
   writeln('Data wielkanocy bedzie w dniu ',dayApr,' Kwietnia')
 else
   writeln('Data wielkanocy bedzie w dniu ',dayMar,' Marca');


Jak widać jest to algorytm, który powstał po zmodyfikowaniu algorytmu Nr1, przez co stał się krótszy i bardziej łatwiejszy. W algorytmie tym wykasowano obsługę wcześniejszych lat. Algorytm obsługuje tylko lata 1900 - 2099. Tutaj możesz ściągnąć gotowe kody źródłowe i wynikowe tego algorytmu napisane w Pascalu.



Algorytm 3:


y - podajemy dowolny rok.

a = y mod 19;
b = int (y/100);
c = y mod 100;
d = int (b/4);
e = b mod 4;
f = int ((b+8)/25);
g = int ((b-f+1)/3);
h = (19*a+b-d-g+15) mod 30;
i = int (c/4);
k = c mod 4;
l = (32+2*e+2*i-h-k) mod 7;
m = int ((a+11*h+22*l)/451);
p = (h+l-7*m+114) mod 31;

p = (p+1);
n = int ((h+l-7*m+114)/31);


Jest to najlepszy z podanych tutaj algorytmów, gdyż działa dla dowolnego roku. W odpowiedzi otrzymujemy wartości dwóch zmiennych p i n.

p - oznacza dzień miesiąca.
n - oznacza numer miesiąca ( 3 - marzec, 4 - kwiecień ).

Jak widać algorytm ten daje nam konkretną odpowiedź odnośnie daty Wielkanocy. Autorem algorytmu jest Meeus. Tutaj możesz ściągnąć gotowe kody źródłowe i wynikowe tego algorytmu napisane w Pascalu.




Tutaj podane są daty Wielkanocy. Możesz przetestować swój program:

2000 04 23   2003 04 20   2006 04 16
2007 04 08   2009 04 12   2014 04 20
2019 04 21   2023 04 09   2024 03 31
2027 03 28   2045 04 09   2048 04 05
2054 03 29   2067 04 03   2070 03 30
2073 03 26   2080 04 07   2099 04 12





Linki pomocnicze:

Proste algorytmy astronomiczne - Cybermoon
Kalendarz Faz Księżyca w latach 2005 - 2015


Pamiętaj, że Autor opracowując tę stronę poświęcił trochę swojego czasu , więc jeżeli choć trochę skorzystałeś z tych informacji w ramach zapłaty poświęć trochę swojego czasu i dopisz się do Księgi Gości, lub oddaj głos klikając w banery rankingów, znajdujących się w Menu po lewej stronie.