Panniikt Temat założony przez niniejszego użytkownika |
Obliczanie roku przestępnego » 2018-06-05 21:19:09 Witam wszystkich. Robiłem ostatnio zadanko które miało liczyć mi lata przestępne i małych poszukiwaniach w necie znalazłem taki warunek "if((rok%4==0 && rok%100!=0) || rok%400==0)". Może mi ktoś na chłopski rozum wytłumaczyć dlaczego rok przestępny nie może się dzielić przez 100.
Pozdrawiam |
|
Monika90 |
» 2018-06-05 21:49:10 Ale przecież może się dzielić przez 100 pod warunkiem, że dzieli się również przez 400. Czyli: 2000 jest przestępny, a 2100 nie jest. |
|
garlonicon |
» 2018-06-05 22:05:47 dlaczego rok przestępny nie może się dzielić przez 100 |
To wynika z powodów historycznych. 1. Rok przestępny występuje co cztery lata (czyli jak liczba nie dzieli się przez cztery, to na pewno mamy rok zwykły). Odrzucamy te przypadki jako rozwiązane i przechodzimy dalej. 2. Mamy lata podzielne przez cztery. Te, które się dzielą przez sto, są latami zwykłymi (czyli jak w tym momencie liczba nie dzieli się przez sto, to na pewno rok jest przestępny). Odrzucamy te przypadki i przechodzimy dalej. 3. Mamy lata podzielne przez sto. Te, które w tym momencie dzielą się przez czterysta, są latami przestępnymi. W przeciwnym wypadku mamy rok zwykły. Po prostu ludzie tak wymyślili. Ogólnie kalendarz jest dość pokręcony i zawiera ślady historii (July - Juliusz Cezar, August - Oktawian August, September...December - miesiące od dziewiątego do dwunastego, chociaż nazwa sugeruje liczby od siedmiu do dziesięciu). |
|
Panniikt Temat założony przez niniejszego użytkownika |
» 2018-06-05 22:19:27 Rok przestępny występuje co 4 lata, dlatego zastanawia mnie wynik programu bo według tego warunku rok 96 jest przestępny a następny występuje dopiero za 8 lat czyli 104. Tak samo sytuacja ma sie z latami 196 - 204 oraz 296 - 304 itd. (nie che mi sie wyszystkich wypisywać). |
|
Monika90 |
» 2018-06-05 22:26:44 Rok przestępny występuje co 4 lata |
To byłoby zbyt często i średnia długość roku kalendarzowego wynosiłaby 365.25 dnia. Tak było w kalendarzu juliańskim. My używamy kalendarza gregoriańskiego, gdzie reguła brzmi: lata podzielne przez 4 są przestępne, chyba że dzielą się przez 100 to nie są, no chyba że dzielą się przez 400 to są. Daje to średnią długość roku 365.2425 dnia, co dużo lepiej przybliża faktyczną długość roku zwrotnikowego równą 365.24219 dni. (Długość roku zwrotnikowego zmienia się w czasie, ale 365.2425 na pewno lepiej ją przybliża niż 365.25.) Polska przeszła z kalendarza juliańskiego na gregoriański w 1582 roku, więc jak ktoś jeszcze o tym nie wie to ma spore zaległości. |
|
Panniikt Temat założony przez niniejszego użytkownika |
» 2018-06-05 22:29:36 Dzięki za odpowiedzi. Garlonicon w takim razie jeżeli ktoś nie zna tych haczyków "historycznych" praktycznie zawsze zrobi to zadanie źle, jeżeli treść zadania będzie brzmiała "napisz program który wypisze wszystkie lata przestępne" |
|
YooSy |
» 2018-06-05 23:09:18 To są ogólnodostępne informacje: lata przestępne. Pisząc program obliczający boki trójkąta, opierasz się na regułach matematycznych, czy na przekazach ustnych? |
|
jankowalski25 |
» 2018-06-06 00:42:06 jeżeli ktoś nie zna tych haczyków "historycznych" praktycznie zawsze zrobi to zadanie źle |
Błąd jak każdy inny. W praktyce zwykle to wygląda tak, że do tego używa się gotowych bibliotek. Jeśli takich nie ma lub z jakiegoś powodu trzeba coś takiego samodzielnie zaimplementować, to wtedy zazwyczaj wstawia się jakąś trywialną implementację, którą można ewentualnie później rozbudować (jeśli zajdzie taka potrzeba). Przykład? Jak trzeba gdzieś podać maila, to zwykle reguły są dość wyśrubowane i maile mają wyglądać klasycznie. Jeśli jednak sięgniesz do RFC, to nagle okaże się, że w nazwie użytkownika może wystąpić @, istnieją poprawne adresy bez żadnych kropek, znak plus ma być traktowany jako alias, i tak dalej. W praktyce jednak mało kto implementuje takie rzeczy, bo rzadko kiedy zachodzi taka potrzeba. |
|
« 1 » |