algorytm.org

Wyznaczanie lat przestępnych



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 lat przestępnych
Ocena użytkowników:***** / 257
SłabyŚwietny 
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:
  • jest podzielny przez 4, ale nie jest podzielny przez 100
  • jest podzielny przez 400
Podejście to jest dużo dokładniejsze od kalendarza juliańskiego, ale niestety nie perfekcyjne. Błąd kalendarza Gregoriańskiego wynosi średnio 365.2425 - 365.242199 = 0.000301 dnia na rok. Co daje około 1 dnia na 3322 lat.

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:

Podaj rok:

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Tomasz LubińskiAda
.ada
.ada
***** / 2
Tomasz LubińskiC#MS Visual Studio .net
.cs
.cs
***** / 4
Tomasz LubińskiC/C++
.cpp
.cpp
***** / 10
Tomasz LubińskiDelphi/Pascal
.pas
.pas
***** / 1
Tomasz LubińskiJava
.java
.java
***** / 5
Tomasz LubińskiJavaScript
.js
.js
***** / 4
seveN.PhpPrzykładowy formularz
.php
.php
***** / 6
YourFrogPhpMetoda do użycia w klasie
.php
.php
***** / 2
hubgrtPython
.py
.py
***** / 10
Nikodem SolarzRubyMetoda sprawdzająca czy dany rok jest rokiem przestępnym
.rb
.rb
***** / 1
 
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: 30 lipca 2012 18:15
Komentarze
photo
+1 # Kinga 2009-09-10 22:16
Bardzo interesujący artykuł...
Dziękuję bardzo ponieważ potrzebowałam tej wiadomości
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-13 # jest jeszcze prostszy sposób, 2010-01-07 16:28
Wiedząc, że 2000 rok był rokiem przestępnym, to wszystkie co 4 lata też będą przestępne.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+2 # Tomasz Lubiński 2010-01-07 17:17
No niestety ten niby prostszy sposób nie jest prawidłowy, gdyż według niego rok 2100 byłby przestępny, a w rzeczywistości 2100 nie jest rokiem przestępnym.
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).
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # RJ 2010-04-28 11:27
Dzięki, pomocny tekst. zaoszczedziłem trochę czasu..
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-5 # drub 2010-12-31 13:10
Czy lata 1900,1100,1734 są przestępne
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Tomasz Lubiński 2011-01-03 10:47
1900 - 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.

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.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+5 # jfr 2012-05-10 16:32
1100 był rokiem przestępnym, bo w kalendarzu juliańskim (do roku 1582) przestępne były wszystkie lata podzielne przez 4
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+3 # magda 2012-04-03 19:23
ok dzienks
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-6 # ZUZKA 2013-05-26 15:50
BARDZO DZIĘKUJĘ ZA POMOC! WSZYSTKIE TE INFORMACJE PRZYDAY MI SIĘ DO ZADANIA Z MATMY.
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.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+4 # Romi 2015-10-26 13:39
2000 JEST ROKIEM PRZESTĘPNYM!!!
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Ktoś 2015-01-02 14:45
Dobrze liczysz, inaczej niż cały "internet". Znasz takie przysłowie "zrobię coś jak będą dwie niedziele w kupie". Poszperaj w historii coś nt. 24 lutego.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+4 # Tomasz Lubiński 2015-08-28 10:08
24 luty był dniem powtarzanym w lata przestępne w kalendarzu rzymskim, ale nie wiem dlaczego tutaj to wyciągasz?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+2 # Gosiaczek77 2015-03-16 18:41
Mam pytanie. Skoro rok 2100 nie jest przestępnym czyli po roku 2096 następnym jest dopiero 2104? Czyli przez 8 lat nie ma roku przestępnego? Czy ktoś mi wytłumaczy dlaczego?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+4 # Tomasz Lubiński 2015-08-26 08:17
Jest tak dlatego że rok zwrotnikowy (czas pomiędzy dwoma kolejnymi przejściami Słońca przez punkt równonocy wiosennej), czyli czas od rozpoczęcia astronomicznej wiosny do rozpoczęcia kolejnej astronomicznej wiosny wynosi ~365.242199 dnia.

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.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+6 # Tcheslav 2016-02-19 08:20
Dlatego niejaki Wiliam Herschel postulował dodanie poprawki, którą nazwano jego imieniem.
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.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+2 # Nina 2016-10-27 15:48
Pomogło
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz