Dyskusja:Rok przestępny

message: Wszystko jest fajnie opisane tylko brakuje wyjaśnienia skąd bierze się 29 dzień lutego co cztery lata a gdzie wytłumaczenie
"Historia lat przestępnych, umożliwiających zgranie roku kalendarzowego z rokiem zwrotnikowym"

message: ===Nawiasy===
Nux zakłada, że AND i OR mają priorytety jak + i -, co tworzy mylne wrażenie, że zmiana kolejności podwyrażeń z AND i OR nie zmienia wartości całego wyrażenia, co jest oczywiście nieprawdą, co można łatwo udowodnić. Tu chodzi o to, że podwyrażenie z AND ma mieć wyższy priorytet (no i też często przyjmuje się, że AND jest "wazniejsze" niż OR, jednak nigdzie nie znalazlem takiego zalozenia). Albo zapiszcie to zalozenie, albo zostawcie te nawiasy w spokoju. Co do interpunkcji wiem, że przed "lub" nie stawia się przecinka, jednak w tym przypadku taki przecinek zmienia znaczenie (odpowiada nawiasowi wokol AND), wiec warto go zostawic... --83.30.89.165
replies: text: Ale ja nie napisałem, że są przemienne po prostu jak mają ten sam priorytet, to wykonuje je się w kolejności otrzymywania... Z drugiej strony widzę, że w rzeczywistości część języków programowania rozróżnia priorytety dla AND i OR. Szczerze powiedziawszy nie bardzo rozumiem po co -  przy zachowaniu kolejności (a taka jest zachowana w odwrotnej notacji polskiej) wszystko i tak jest w porządku. No, ale jeśli się upierasz, to OK - możesz dodać nawiasy, chociaż według mnie nie ma to praktycznego znaczenia. --Nux (dyskusja) 01:12, 18 mar 2007 (CET)
===Inne===
Dla tych, którzy mają wątpliwości odnośnie algorytmu:
Co dokładnie daje:
if (rok%4==0 && rok%100!=0 || rok%400==0)
    luty = 29;
else
    luty = 28;
Czyli dla przykładu:
* 1900 -> luty = 28 (poprawka co 100 lat)
* 2000 -> luty = 29 (poprawka co 400 lat)
* 2004 -> luty = 29 (poprawka standardowa co 4 lata)
Jeśli ktoś chce może sobie sprawdzić słuszność wprowadzanych poprawek w sekcji Bieżący błąd.
--Nux 17:13, 17 lut 2006 (CET)
===Zmiany w algorytmie===
Ktoś zmienił na formę:
bool Przestepny(unsigned rok)
{
     if (rok%4==0 && rok%100!=0 || rok%400==0) return true;    
     else return false;      
}
I tu już został popełniony błąd, bo bool nie istnieje w języku C (co za pewne może być dla niektórych zaskoczeniem), a konkretniej nie istnieje w ANSI C, bo w niektórych nowych C tak, ale tak naprawdę to istnieje dopiero w C++.
Skasowałem tą wersję zamiast poprawić, bo algorytm staje się przez to mniej uniwersalnym (pomijając już to, że użycie funkcji jest tu dla mnie nie uzasadnione, bo ona wcale nie jest samotłumacząca się).
Kolejne wersje moim zdaniem zaciemniały tylko skąd się to bierze, a bierze się ze zdania wytłuszczonego w artykule i zacytowanego powyżej. Przywrócona wersja jest też dlatego własnie (według mnie) lepsza, że spójna z resztą artykułu.
A jak ktoś woli, to może sobie zapisać tak:
l=(!(rok%4)&&rok%100||!(rok%400))?29:28;
ale chyba nie o to chodzi ;).
Nux >dyskusja< 22:40, 25 mar 2006 (CET)
----
Zamknięcie w funckje bynajmniej nie jest zabiegiem czysto formalnym - w poprzedniej wersji użytkownik oprócz wklejenia tekstu musiałbyby zadeklarować zmienną luty, zainicjować zmienną rok - w przypadku funkcji postulat "czarnej skrzynki" jest najważniejszy - wystarczy wkleić treść funkcji i korzystać właśnie na zasadzie czrnej skrzynki... i właśnie wtedy jest to rozwiązanie uniwersalne (bo na dobrą sprawę można tą funkcję przerobuić na część biblioteki dll co w poprzednim przypadku nie byłoby takie łatwe)
. No bo wyobraźcie sobie "duży" program rysujący kalendarz, wyliczający różnice między datami - czy łatwiej jest do każdej tej funkcji wkleić treść poprzednią, czy po prostu dodać plik z definicją Przestepny(rok) i sprawdzać (czytelność + zwięzłość kodu).
Oczywiste, że artykuł ten nie jest stricte informatyczny, i nie chodzi o niuanse c ale o sam algorytm sprawdzania przestępności roku, jednak nie usprawiedliwia to nie stosowania się do elementarnych zasad inżynierii programowania!
----
Niech będzie - byleby już nikt nie dodawał kolejnych funkcji w ich ulubionym języku programowania, bo ta część już jest niewiele mniejsza od reszty artykułu ;). Nux >dyskusja< 12:22, 29 mar 2006 (CEST)
thread_title:  Algorytm 

message: Nux zakłada, że AND i OR mają priorytety jak + i -, co tworzy mylne wrażenie, że zmiana kolejności podwyrażeń z AND i OR nie zmienia wartości całego wyrażenia, co jest oczywiście nieprawdą, co można łatwo udowodnić. Tu chodzi o to, że podwyrażenie z AND ma mieć wyższy priorytet (no i też często przyjmuje się, że AND jest "wazniejsze" niż OR, jednak nigdzie nie znalazlem takiego zalozenia). Albo zapiszcie to zalozenie, albo zostawcie te nawiasy w spokoju. Co do interpunkcji wiem, że przed "lub" nie stawia się przecinka, jednak w tym przypadku taki przecinek zmienia znaczenie (odpowiada nawiasowi wokol AND), wiec warto go zostawic... --83.30.89.165
replies: text: Ale ja nie napisałem, że są przemienne po prostu jak mają ten sam priorytet, to wykonuje je się w kolejności otrzymywania... Z drugiej strony widzę, że w rzeczywistości część języków programowania rozróżnia priorytety dla AND i OR. Szczerze powiedziawszy nie bardzo rozumiem po co -  przy zachowaniu kolejności (a taka jest zachowana w odwrotnej notacji polskiej) wszystko i tak jest w porządku. No, ale jeśli się upierasz, to OK - możesz dodać nawiasy, chociaż według mnie nie ma to praktycznego znaczenia. --Nux (dyskusja) 01:12, 18 mar 2007 (CET)
thread_title: Nawiasy

message: Dla tych, którzy mają wątpliwości odnośnie algorytmu:
Co dokładnie daje:
if (rok%4==0 && rok%100!=0 || rok%400==0)
    luty = 29;
else
    luty = 28;
Czyli dla przykładu:
* 1900 -> luty = 28 (poprawka co 100 lat)
* 2000 -> luty = 29 (poprawka co 400 lat)
* 2004 -> luty = 29 (poprawka standardowa co 4 lata)
Jeśli ktoś chce może sobie sprawdzić słuszność wprowadzanych poprawek w sekcji Bieżący błąd.
--Nux 17:13, 17 lut 2006 (CET)
thread_title: Inne

message: Ktoś zmienił na formę:
bool Przestepny(unsigned rok)
{
     if (rok%4==0 && rok%100!=0 || rok%400==0) return true;    
     else return false;      
}
I tu już został popełniony błąd, bo bool nie istnieje w języku C (co za pewne może być dla niektórych zaskoczeniem), a konkretniej nie istnieje w ANSI C, bo w niektórych nowych C tak, ale tak naprawdę to istnieje dopiero w C++.
Skasowałem tą wersję zamiast poprawić, bo algorytm staje się przez to mniej uniwersalnym (pomijając już to, że użycie funkcji jest tu dla mnie nie uzasadnione, bo ona wcale nie jest samotłumacząca się).
Kolejne wersje moim zdaniem zaciemniały tylko skąd się to bierze, a bierze się ze zdania wytłuszczonego w artykule i zacytowanego powyżej. Przywrócona wersja jest też dlatego własnie (według mnie) lepsza, że spójna z resztą artykułu.
A jak ktoś woli, to może sobie zapisać tak:
l=(!(rok%4)&&rok%100||!(rok%400))?29:28;
ale chyba nie o to chodzi ;).
Nux >dyskusja< 22:40, 25 mar 2006 (CET)
----
Zamknięcie w funckje bynajmniej nie jest zabiegiem czysto formalnym - w poprzedniej wersji użytkownik oprócz wklejenia tekstu musiałbyby zadeklarować zmienną luty, zainicjować zmienną rok - w przypadku funkcji postulat "czarnej skrzynki" jest najważniejszy - wystarczy wkleić treść funkcji i korzystać właśnie na zasadzie czrnej skrzynki... i właśnie wtedy jest to rozwiązanie uniwersalne (bo na dobrą sprawę można tą funkcję przerobuić na część biblioteki dll co w poprzednim przypadku nie byłoby takie łatwe)
. No bo wyobraźcie sobie "duży" program rysujący kalendarz, wyliczający różnice między datami - czy łatwiej jest do każdej tej funkcji wkleić treść poprzednią, czy po prostu dodać plik z definicją Przestepny(rok) i sprawdzać (czytelność + zwięzłość kodu).
Oczywiste, że artykuł ten nie jest stricte informatyczny, i nie chodzi o niuanse c ale o sam algorytm sprawdzania przestępności roku, jednak nie usprawiedliwia to nie stosowania się do elementarnych zasad inżynierii programowania!
----
Niech będzie - byleby już nikt nie dodawał kolejnych funkcji w ich ulubionym języku programowania, bo ta część już jest niewiele mniejsza od reszty artykułu ;). Nux >dyskusja< 12:22, 29 mar 2006 (CEST)
thread_title: Zmiany w algorytmie

message: Dlaczego właśnie luty ma 28 i 29 dni, a nie np. czerwiec?
----
Myślę, że dlatego, że jest najkrótszy. A dlaczego jest najkrótszy to już nie wiem - może tak wychodziło z faz księżyca, albo coś. Nux >dyskusja< 23:19, 2 mar 2006 (CET)
replies: text: Niezupełnie - kiedyś też miał do 30 dni, ale z niego obcięto trochę dla Augustusa i Juliusa. Gdzieś niedawno o tym czytałem, jak znajdę źródło, to napiszę. Argothiel 21:16, 7 mar 2006 (CET)to chyba jednak nie miejsce na historię lutego:)
Historia kalendarza rzymskiego jest na wiki, nie wiem czy wszystko opisano.
StoK 22:23, 7 mar 2006 (CET)
to moze jeszcze ja. kiedyś luty był ostatnim miesiacem w roku i jego dlugością regulowano właśnie liczbe dni w roku. patrzac na nazwe October - październik a oznacza osiem, December - grudzień a oznacza dziesiec. i tyle - prosta historia, niestety nie pamietam czemu sie przesuneło na "od stycznia"
* Nastąpiło to w 153 r. pne. Jak pisze Ludwik Zajdler w Dziejach zegara: "z nowym rokiem obejmowali swe urzędy nowo mianowani dowódcy wojskowi. Zanim - przy ówczesnych środkach komunikacyjnych - zdążyli dotrzeć do odległych od Rzymu prowincji olbrzymiego imperium, mijała wiosna i nie mieli już czasu na przygotowanie przewidzianych na okres letni operacji wojskowych. Aby więc zapewnić sprawniejsze działanie organizacji wojskowych, przesunięto początek roku o 2 miesiące wstecz." Pilot Pirx (dyskusja) 18:38, 17 lip 2019 (CEST)
thread_title:  dlaczego luty 

message: *To nie są funkcje boolowskie, dziedziną funkcji w tym artykule sa "unsigned int" czyli N "plus" {0}. Dziedzina funkcji boolowskiej jest B^m, gdzie B={0,1}
*Zazwyczaj używa się notacji, w której nazwy metod i zmienych zaczynają się od małych liter. 
Pan Camel 22:46, 30 mar 2006 (CEST)
Z notacją to różnie bywa, ale w sumie racja. Nux >dyskusja< 04:11, 1 kwi 2006 (CEST)
thread_title:  Małe zmiany 

message: W kalędarzach księżycowych też jest rok przestępny, to rok w którym wstawiany jest dodatkowy miesiąc.
replies: text: nie całkiem; kalendarz islamski jest księżycowy, liczy 12 miesięvy, nie ma miesięcy dodatkowych. Wystepują one natomiast w kalendarzach księżycowo-słonecznych, np. w żydowskim. kaszkawal 13:50, 14 maja 2006 (CEST)
thread_title:  Nie wyłącznie .. 

message: Uzasadnienie (jak to często bywa dłuższe od samych zmian):
*rok przestępny to niekoniecznie 1 dzień na 4 lata, jak w naszym kalendarzu, np. w kalendarzu żydowskim jest dodatkowy miesiąc. Dlatego usunąłem mglistą wzmiankę o dodawaniu 1 dnia co 4 lub 400 (? nie ma przykładu takiego kalendarza, nieudane sformułowanie reguły kalendarza gregoriańskiego?) lat.
*dodawanie dnia między 23 a 24 lutego ma zastosowanie tylko w kalendarzu liturgicznym, w normalnym życiu dodatkowy dzień to 29 lutego, czyli dzień miedzy 28 lutego a 1 marca. (Jeżeli jest jakiś termin, umówienie się itp. na 27 lutego, a jest rok przestępny, to jest oczywiste że data pozostaje bez zmian a nie przesuwa się na 28 jak w regule "23/24 lutego".)
*Poprawiłem własnymi słowami (żeby nie powielać), jak najlepiej umiałem, regułę lat przestępnych podzielnych przez 100 lub 400, wszędzie gdzie było to potrzebne, do wyboru różne sformułowania. I tak jest lepiej, bo kiedyś dawniej (wyżej w dyskusji) było jeszcze zamieszanie z funkcjami logicznymi języków programowania i f. boolowskimi. Dobre i zwięzłe wyjaśnienie reguły gregoriańskiej jest w artykule o tamtym kalendarzu.
*Jeśli ktoś wie jak przenieść tekst do nowej linii ale bez nowego akapitu (2x Enter), bez wypunktowania i bez "nielubianego", "przestarzałego", zbyt "gołego" hateemelowskiego <br>, to byłbym wdzięczny za podpowiedź. wtb@poczta.onet.pl 16:40 27 marca 2016r. CEST
thread_title:  Zmiany 27 marca 2016r.