
Dlaczego istnieją lata przestępne
Ziemia obiega Słońce w czasie, który nie jest całkowitą liczbą dób. Rok zwrotnikowy, czyli czas między kolejnymi takimi samymi położeniami Słońca względem pór roku, trwa około 365,2422 dnia. Kalendarz z samymi 365 dniami byłby więc krótszy od tego roku o prawie ćwierć doby. Po 100 latach różnica wyniosłaby ponad 24 dni: początek wiosny przypadałby w kalendarzu o ponad trzy tygodnie później niż dziś, a po kilkuset latach pory roku przesunęłyby się o całe miesiące.
Pierwsze rozwiązanie było proste: dodatkowa doba co cztery lata. Daje ono średni rok 365,25 dnia, czyli o ułamek za dużo, a błąd kumuluje się przez stulecia. Dlatego w 1582 roku wprowadzono kalendarz gregoriański z dodatkową regułą dla lat kończących się na „00”.
Reguła krok po kroku
Reguła składa się z trzech testów podzielności, wykonywanych po kolei:
- Jeśli rok nie dzieli się przez 4, nie jest przestępny.
- Jeśli dzieli się przez 4, ale nie dzieli się przez 100, jest przestępny.
- Jeśli dzieli się przez 100, jest przestępny tylko wtedy, gdy dzieli się też przez 400.
Ten sam przebieg w formie schematu decyzyjnego:
START
|
v
rok dzieli się przez 4?
|-- nie --> NIE jest przestępny
|-- tak --> rok dzieli się przez 100?
|-- nie --> JEST przestępny
|-- tak --> rok dzieli się przez 400?
|-- nie --> NIE jest przestępny
|-- tak --> JEST przestępny
W cyklu 400 lat wypada 400/4 − 400/100 + 400/400 = 97 lat przestępnych, więc średni rok ma 365 + 97/400 = 365,2425 dnia. To bardzo blisko roku zwrotnikowego.
Przykłady do samodzielnego sprawdzenia
Weź kartkę i przejdź schemat dla każdego roku z tabeli. Wynik możesz potem porównać z programem.
Przesuń tabelę, aby zobaczyć wszystkie kolumny →
| Rok | Przez 4 | Przez 100 | Przez 400 | Przestępny? |
|---|---|---|---|---|
| 1900 | tak | tak | nie | nie |
| 2000 | tak | tak | tak | tak |
| 2024 | tak | nie | nie dotyczy | tak |
| 2026 | nie | nie dotyczy | nie dotyczy | nie |
| 2028 | tak | nie | nie dotyczy | tak |
| 2100 | tak | tak | nie | nie |
| 2400 | tak | tak | tak | tak |
Skrót do zapamiętania: lata stuleci są przestępne tylko wtedy, gdy po odrzuceniu dwóch zer wynik dzieli się przez 4. Z 1900 zostaje 19, z 2000 zostaje 20.
Jak sprawdzić rok przestępny w programie
W kodzie reguła zapisuje się jednym wyrażeniem logicznym. Operator reszty z dzielenia (%) daje 0, gdy liczba dzieli się bez reszty.
Python
def czy_przestepny(rok):
return rok % 4 == 0 and (rok % 100 != 0 or rok % 400 == 0)
for rok in (1900, 2000, 2024, 2026, 2100):
print(rok, czy_przestepny(rok))
Wynik: 1900 False, 2000 True, 2024 True, 2026 False, 2100 False.
JavaScript
const czyPrzestepny = (rok) =>
rok % 4 === 0 && (rok % 100 !== 0 || rok % 400 === 0);
console.log(czyPrzestepny(1900), czyPrzestepny(2000)); // false true
Gotowa funkcja z biblioteki
Python ma w module calendar funkcję isleap(year), która zwraca True dla roku przestępnego. Przydaje się do sprawdzenia własnej wersji: obie dały identyczne wyniki dla każdego roku od 1 do 4999. Ta sama biblioteka ma leapdays(y1, y2), czyli liczbę lat przestępnych w przedziale, w którym y2 jest wyłączone.
Typowe błędy w kodzie
- Test tylko
rok % 4 == 0daje błąd dla 1900 i 2100. - Sprawdzenie „przez 100 lub 400” bez warunku podzielności przez 4 wymaga uważnej kolejności; najbezpieczniejszy jest zapis z nawiasem jak wyżej.
- Wynik liczby lat przestępnych w przedziale zależy od tego, czy końce przedziału są włączone. Funkcja
leapdayswyłącza koniec.
Zobacz też: Algorytm, Schemat blokowy, Pętla for.
Najczęstsze pytania (FAQ)
Czy rok 2100 będzie przestępny?
Nie. Dzieli się przez 100, ale nie dzieli się przez 400, więc luty 2100 roku będzie miał 28 dni. Ten sam wynik daje 1900.
Kiedy będzie następny rok przestępny po 2026?
W 2028 roku, a potem w 2032. Zwykle odstęp to 4 lata; dłuższy, 8-letni, pojawia się przy pominiętym roku stulecia, jak między 2096 a 2104.
Ile dni ma rok przestępny?
366 dni, czyli o jeden więcej niż zwykły rok. Dodatkowy dzień to 29 lutego.
Ile lat przestępnych jest w 400 latach?
- W 400 latach jest 100 lat podzielnych przez 4, z nich odpada 4 lata stuleci, a wraca 1 podzielny przez 400: 100 − 4 + 1 = 97.
Czy w programie wystarczy sprawdzić dzielenie przez 4?
Dla lat od 1901 do 2099 tak, bo w tym przedziale nie ma wyjątku stuleci. Ogólna funkcja powinna jednak zawierać pełną regułę, żeby działała dla każdego roku.