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:***** / 72
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
***** / 1
Tomasz LubińskiC#MS Visual Studio .net
.cs
.cs
***** / 2
Tomasz LubińskiC/C++
.cpp
.cpp
***** / 3
Tomasz LubińskiDelphi/Pascal
.pas
.pas
***** / 1
Tomasz LubińskiJava
.java
.java
***** / 2
Tomasz LubińskiJavaScript
.js
.js
***** / 3
seveN.PhpPrzykładowy formularz
.php
.php
***** / 0
YourFrogPhpMetoda do użycia w klasie
.php
.php
***** / 0
Nikodem SolarzRubyMetoda sprawdzająca czy dany rok jest rokiem przestępnym
.rb
.rb
***** / 0
 
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
-3 # 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
-1 # 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
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
-4 # 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
-1 # magda 2012-04-03 19:23
ok dzienks
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # 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
-1 # lamparcica!!! 2013-05-28 20:04
supcio!!!
to mi się podoba. dzinks
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz

Kod antysapmowy Odśwież