Wpisany przez Tomasz Lubiński,
19 lutego 2008 18:57
Czas jednego obiegu ziemi wokół słońca wynosi 365 dni 5 godzin i 49 minut (365.242199 dnia). W związku z tym faktem wprowadzono do kalendarza tak zwane lata przestępne. Rok przestępny to taki, który ma 366 zamiast 365 dni.
Początkowo zgodnie z kalendarzem juliańskim wprowadzonym przez Juliusza Cezara w 45 roku p.n.e, rok przestępny występował co 4 lata, zatem średnio rok trwał 365.25 dnia. Niestety podejście to nie było zbyt dokładne. Średnio co roku bowiem ubywało 365.25 - 365.242199 = 0.007801 dnia. Wydaje sie to niezbyt dużą różnicą, ale nawarstwiając się przez kolejne lata daje przesunięcie o około 1 dzień co 128 lat.
Obecnie stosuje się formułę zgodną z kalendarzem Gregoriańskim wprowadzonym w 1582 roku przez papieża Grzegorza XIII, w którym rok przestępny spełnia jeden z następujących warunków:
Formalnie sprawdzenie czy dany rok jest rokiem przestępnym możemy zapisać następująco:
((rok mod 4 = 0) and (rok mod 100 <> 0)) or (rok mod 400 = 0)
Czy rok 2008 jest rokiem przestępnym?
Sprawdźmy pierwszy warunek, jest podzielny przez 4 (2008 mod 4 = 0), i nie jest podzielny przez 100 (2008 mod 100 = 8). Pierwszy warunek jest spełniony, zatem rok 2008 jest rokiem przestępnym.
Czy rok 2000 jest rokiem przestępnym?
Sprawdźmy pierwszy warunek, jest podzielny przez 4 (2000 mod 4 = 0), ale jest również podzielny przez 100 (2000 mod 100 = 0). A więc pierwszy warunek nie jest spełniony.
Sprawdźmy zatem drugi warunek, jest podzielny przez 400 (2000 mod 400 = 0), zatem rok 2000 jest rokiem przestępnym.
Czy rok 2100 jest rokiem przestępnym?
Sprawdźmy pierwszy warunek, jest podzielny przez 4 (2100 mod 4 = 0), ale jest również podzielny przez 100 (2100 mod 100 = 0). A więc pierwszy warunek nie jest spełniony.
Sprawdźmy zatem drugi warunek, nie jest podzielny przez 400 (2100 mod 400 = 100).
Żaden z warunków nie jest spełniony zatem rok 2100 nie jest rokiem przestępnym.
Czy rok 2007 jest rokiem przestępnym?
Sprawdźmy pierwszy warunek, nie jest podzielny przez 4 (2007 mod 4 = 3). Pierwszy warunek nie jest spełniony.
Sprawdźmy zatem drugi warunek, nie jest podzielny przez 400 (2007 mod 400 = 7). Ten warunek również nie jest spełniony.
Żaden z warunków nie jest spełniony zatem rok 2007 nie jest rokiem przestępnym.
Początkowo zgodnie z kalendarzem juliańskim wprowadzonym przez Juliusza Cezara w 45 roku p.n.e, rok przestępny występował co 4 lata, zatem średnio rok trwał 365.25 dnia. Niestety podejście to nie było zbyt dokładne. Średnio co roku bowiem ubywało 365.25 - 365.242199 = 0.007801 dnia. Wydaje sie to niezbyt dużą różnicą, ale nawarstwiając się przez kolejne lata daje przesunięcie o około 1 dzień co 128 lat.
Obecnie stosuje się formułę zgodną z kalendarzem Gregoriańskim wprowadzonym w 1582 roku przez papieża Grzegorza XIII, w którym rok przestępny spełnia jeden z następujących warunków:
- jest podzielny przez 4, ale nie jest podzielny przez 100
- jest podzielny przez 400
Formalnie sprawdzenie czy dany rok jest rokiem przestępnym możemy zapisać następująco:
((rok mod 4 = 0) and (rok mod 100 <> 0)) or (rok mod 400 = 0)
Przykład:
Czy rok 2008 jest rokiem przestępnym?
Sprawdźmy pierwszy warunek, jest podzielny przez 4 (2008 mod 4 = 0), i nie jest podzielny przez 100 (2008 mod 100 = 8). Pierwszy warunek jest spełniony, zatem rok 2008 jest rokiem przestępnym.
Czy rok 2000 jest rokiem przestępnym?
Sprawdźmy pierwszy warunek, jest podzielny przez 4 (2000 mod 4 = 0), ale jest również podzielny przez 100 (2000 mod 100 = 0). A więc pierwszy warunek nie jest spełniony.
Sprawdźmy zatem drugi warunek, jest podzielny przez 400 (2000 mod 400 = 0), zatem rok 2000 jest rokiem przestępnym.
Czy rok 2100 jest rokiem przestępnym?
Sprawdźmy pierwszy warunek, jest podzielny przez 4 (2100 mod 4 = 0), ale jest również podzielny przez 100 (2100 mod 100 = 0). A więc pierwszy warunek nie jest spełniony.
Sprawdźmy zatem drugi warunek, nie jest podzielny przez 400 (2100 mod 400 = 100).
Żaden z warunków nie jest spełniony zatem rok 2100 nie jest rokiem przestępnym.
Czy rok 2007 jest rokiem przestępnym?
Sprawdźmy pierwszy warunek, nie jest podzielny przez 4 (2007 mod 4 = 3). Pierwszy warunek nie jest spełniony.
Sprawdźmy zatem drugi warunek, nie jest podzielny przez 400 (2007 mod 400 = 7). Ten warunek również nie jest spełniony.
Żaden z warunków nie jest spełniony zatem rok 2007 nie jest rokiem przestępnym.
Przykład w JavaScript:
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Tomasz Lubiński | Ada | .ada | .ada | ***** / 2 | |
Tomasz Lubiński | C# | MS Visual Studio .net | .cs | .cs | ***** / 4 |
Tomasz Lubiński | C/C++ | .cpp | .cpp | ***** / 10 | |
Tomasz Lubiński | Delphi/Pascal | .pas | .pas | ***** / 1 | |
Tomasz Lubiński | Java | .java | .java | ***** / 5 | |
Tomasz Lubiński | JavaScript | .js | .js | ***** / 4 | |
seveN. | Php | Przykładowy formularz | .php | .php | ***** / 6 |
YourFrog | Php | Metoda do użycia w klasie | .php | .php | ***** / 2 |
hubgrt | Python | .py | .py | ***** / 10 | |
Nikodem Solarz | Ruby | Metoda sprawdzająca czy dany rok jest rokiem przestępnym | .rb | .rb | ***** / 1 |
Poprawiony: 30 lipca 2012 18:15
Dziękuję bardzo ponieważ potrzebowałam tej wiadomości
Nie jest gdyż nie spełnia żadnego z dwóch warunków:
- jest podzielny przez 4, ale nie jest podzielny przez 100 (2100 jest podzielne przez 4 i jest również podzielne przez 100),
- jest podzielny przez 400 (2100 nie jest podzielne przez 400).
a) jest podzielny przez 4 ale jednocześnie jest podzielny przez 100 - zatem pierwszy warunek nie jest spełniony,
b) nie jest podzielny przez 400 - zatem drugi warunek również nie jest spełniony.
1100 - nie jest rokiem przestępnym:
a) jest podzielny przez 4 ale jednocześnie jest podzielny przez 100 - zatem pierwszy warunek nie jest spełniony,
b) nie jest podzielny przez 400 - zatem drugi warunek również nie jest spełniony.
1734 - nie jest rokiem przestępnym:
a) nie jest podzielny przez 4 - zatem pierwszy warunek nie jest spełniony,
b) nie jest podzielny przez 400 - zatem drugi warunek również nie jest spełniony.
POZDRAWIAM ZUZA
P.S.
2000 NIE JEST ROKIEM PRZESTĘPNYM!!! SPENIA CO PRAWDA WARUNKI, ALE WEDUG JAKIEJŚ INNEJ ZASADY TEN NIE JEST ROKIEM PRZESTĘPNYM.
Gdybyśmy mieli rok przestępny co 4 lata wówczas wiosna kalendarzowa byłaby średnio co 365.25 dnia a wiosna astronomiczna co ~365.2421995 dnia, co skutkowałoby tym, że pomału (co roku o 0.007 dnia) byłaby ona coraz szybciej w kalendarzu. Po tysiącu lat kalendarz 'rozjechałby' się z rzeczywistością o 7 dni.
Podejście zastosowane obecnie też nie jest idealne (rok kalendarzowy trwa 365.2425 dnia), ale powoduje trochę wolniejsze 'rozjeżdżanie' się kalendarza: 0.3 dnia na tysiąc lat.
Polega ona na dodaniu dodatkowego warunku do algorytmu wyliczania lat przestępnych.
- Rokiem przestępnym nie jest rok podzielny przez 4000.
Taka zasada niweluje dodaie tego doatkowego dnia co 4000 lat...
Dodam tylko, ze współczesne systemy komputerowe uwzględniają poprawkę Herschela.