StartAlgorytmyPrzetwarzanie datWyznaczanie lat przestępnych
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Wyznaczanie lat przestępnych
Ocena użytkowników:++++- / 34
SłabyŚwietny 
Wpisany przez Tomasz Lubiński
wtorek, 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:


Autor Język programowania Komentarz Otwórz Pobierz Ocena
Tomasz Lubiński Ada
Implementacja w Ada
Implementacja w Ada
++++- / 1
Tomasz Lubiński C# MS Visual Studio .net
Implementacja w C#
Implementacja w C#
++++- / 1
Tomasz Lubiński C/C++
Implementacja w C/C++
Implementacja w C/C++
++++- / 1
Tomasz Lubiński Delphi/Pascal
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
++++- / 1
Tomasz Lubiński Java
Implementacja w Java
Implementacja w Java
++++- / 1
Tomasz Lubiński Java Script
Implementacja w Java Script
Implementacja w Java Script
++++- / 3
 
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: piątek, 10 czerwca 2011 20:43

Komentarze

 
photo
0 # 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
+1 # 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
0 # drub 2010-12-31 13:10
Czy lata 1900,1100,1734 są przestępne
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # 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
0 # 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
0 # magda 2012-04-03 19:23
ok dzienks
Odpowiedz | Odpowiedz z cytatem | Cytować
 

Dodaj komentarz

Kod antysapmowy
Odśwież