<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=4735&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-11T10:53:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4735&amp;mode</id>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-11-11T10:53:59+01:00</updated>
<published>2013-11-11T10:53:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56313#p56313</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56313#p56313"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56313#p56313"><![CDATA[
Dlaczego na nic? Na tablicach jest ok ale to jeszcze nie dla mnie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> juz powoli koncze swoj 1 projekt niedlugo sie pochwale i pewnie dostane bure <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale to moj 1 gruby kod bedzie. Nastepne bede pisal optymalniej.<br /><br />Wysłane z telefonu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 11 lis 2013, o 10:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ledes]]></name></author>
<updated>2013-11-10T22:27:21+01:00</updated>
<published>2013-11-10T22:27:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56256#p56256</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56256#p56256"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56256#p56256"><![CDATA[
Ehhhhh... i wszystko na nic...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=355">Ledes</a> — 10 lis 2013, o 22:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-11-10T22:16:11+01:00</updated>
<published>2013-11-10T22:16:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56252#p56252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56252#p56252"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56252#p56252"><![CDATA[
Codzilo mi o sam zapis nie o crahe ... no i nie uzywam pcf dzieki za idpowiedzi zostane przy ifach<br /><br />Wysłane z telefonu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 10 lis 2013, o 22:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ledes]]></name></author>
<updated>2013-11-10T21:38:25+01:00</updated>
<published>2013-11-10T21:38:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56236#p56236</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56236#p56236"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56236#p56236"><![CDATA[
<div class="quotetitle">dambo napisał(a):</div><div class="quotecontent"><br />a czy czasem np pcf8583 nie ma zapisanego w sobie dnia tygodnia ? wtedy wystarczy odczyt odpowiedniego bitu<br /></div><br />Chodzi o maksymalny dzień danego miesiąca, a nie o bieżący dzień tygodnia.<br /><br /><div class="quotetitle">arturf209 napisał(a):</div><div class="quotecontent"><br />Jestem ciekawy co byłoby szybsze, przeszukanie if'a czy pętla po tablicy. Jest ktoś kto ma czas sprawdzić?<br /></div><br />Zróbcie crashtesty, jednak nawet jak tablica jest wolniejsza i zajmuje może 2 bajty więcej, to jest zdecydowanie bardziej czytelnym rozwiązaniem i bardziej eleganckim.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=355">Ledes</a> — 10 lis 2013, o 21:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[arturf209]]></name></author>
<updated>2013-11-10T21:34:11+01:00</updated>
<published>2013-11-10T21:34:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56232#p56232</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56232#p56232"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56232#p56232"><![CDATA[
Ledes w Twoim przykładzie nic nie było o flash <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> dlatego się doczepiłem, sam wiem że można tak zrobić.<br /><br />Jestem ciekawy co byłoby szybsze, przeszukanie if'a czy pętla po tablicy. Jest ktoś kto ma czas sprawdzić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=801">arturf209</a> — 10 lis 2013, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ledes]]></name></author>
<updated>2013-11-10T21:33:23+01:00</updated>
<published>2013-11-10T21:11:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56224#p56224</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56224#p56224"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56224#p56224"><![CDATA[
Zużywasz zaledwie 24 bajty, które możesz umieścić nawet we Flashu przy pomocy instrukcji PROGMEM.<br />A myślisz, że Wasze kody bez tablic kompilator skompiluje optymalnie? Gdzieś i tak musi te liczby przechowywać.<br />A namnożenie ifów czy sum logicznych też nie jest optymalnym rozwiązaniem. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />Mało tego, masz tylko 4 możliwości: 28, 29,30, 31 dni w miesiącu. Co daje zaledwie 2 bity na miesiąc, żeby je zakodować - 0,1,2,3 czyli 00, 01, 10, 11. Używając pól bitowych w jednym bajcie zmieścisz 4 miesiące. Przy odkodowywaniu stosujesz maskowanie na 2 bity i dodajesz stały offsett + 28. Rok to 3 bajty, dwie tablice - 6 bajtów, które na dodatek możesz ulokować we Flashu. Nadal twierdzisz, że to pamięciożerne rozwiązanie?<br /><br />Nie podchodźcie do sprawy &quot;na hama&quot;, szukajcie optymalnych rozwiązań i miłych dla oka, czytelnych i o dużym reusabilty (ktoś inny bierze funkcję z Waszego kodu i ją używa w swoim programie). Piszcie tak, aby jak nastąpi zmiana założeń, to nie zmieniać tego w stu miejscach, a w jednym, np. w tablicy.<br /><br />A co, jeśli następnym razem nie będą to miesiące, a długość dnia w roku w każdym dniu? Będziecie sprawdzać 365 warunków? Przecież to bez sensu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=355">Ledes</a> — 10 lis 2013, o 21:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[arturf209]]></name></author>
<updated>2013-11-10T21:05:55+01:00</updated>
<published>2013-11-10T21:05:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56222#p56222</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56222#p56222"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56222#p56222"><![CDATA[
Ledes wybacz ale zupełnie nieoptymalne jest robienie tego w tablicach, zużywasz zbyt dużo pamięci, zupełnie niepotrzebnie...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=801">arturf209</a> — 10 lis 2013, o 21:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ledes]]></name></author>
<updated>2013-11-10T17:58:02+01:00</updated>
<published>2013-11-10T17:58:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56170#p56170</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56170#p56170"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56170#p56170"><![CDATA[
<div class="quotetitle">icer_cmg napisał(a):</div><div class="quotecontent"><br />[syntax=c]max_dzien = 31;<br /><br />((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11) ) ? max_dzien-=1 : (miesiac == 2 ? (przestepny==1 ? max_dzien-=2: max_dzien-=3):);[/syntax]<br /><br />A co powiecie na to?<br /></div><br />Nigdy, przenigdy nie pisz w ten sposób. To tzw. spaghetti code. Daj to teraz komuś, niech to użyje w innym projekcie to będzie godzinę rozkminiał jak to działa.<br />Piszemy czytelny kod, używamy funkcji, tablicujemy zbiory liczb, nie stosujemy magic intów (liczb bezpośredno w kodzie).<br />Nagle zachce Ci się zmienić max_dzień z 31 na 32 (bo np. wyjedziesz na Malediwy a tam mają swój kalendarz) i co? Cały kod w łeb...<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br />Ja bym zrobił tak:<br />stablicowałbym liczbę dni w każdym miesiący w roku (tablica 12 uintów8) dla roku przestępnego i nieprzestępnego - dwie tablice po 12 uintów8<br />Potem funkcja uint8_t liczba_dni(miesiac m, rok r) czy jak kto woli z angielska uint8_t days_nr(month m, year y)<br />[syntax=c]uint8_t liczba_dni(miesiac m, rok r) <br />{<br />   if(rok_przestepny(r))<br />   {<br />       return(tab_przestepny&#91;m&#93;)<br />   }<br />   else<br />   {<br />      return(tab_nieprzestepny&#91;m&#93;)<br />   }<br />}[/syntax]<br /><br />rok i miesiac to enumy.<br />Proste? Czytelne? Widać, o co kaman?<br /><br /><br />Funkcja rok_przestepny() banalna, chyba kazdy napisze sam.<br />Za wiki:<br />[syntax=c]boolean czyPrzestepny(int rok)<br />   {   <br />       return ((rok%4 == 0 &amp;&amp; rok%100 != 0) || rok%400 == 0);<br />   }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=355">Ledes</a> — 10 lis 2013, o 17:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[arturf209]]></name></author>
<updated>2013-11-10T17:52:50+01:00</updated>
<published>2013-11-10T17:52:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56169#p56169</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56169#p56169"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56169#p56169"><![CDATA[
<div class="quotetitle">icer_cmg napisał(a):</div><div class="quotecontent"><br />[syntax=c]max_dzien = 31;<br /><br />((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11) ) ? max_dzien-=1 : (miesiac == 2 ? (przestepny==1 ? max_dzien-=2: max_dzien-=3):);[/syntax]<br /><br />A co powiecie na to?<br /></div><br /><br />Można zrobić jeszcze na kilka sposobów. Zapis jest moim zdaniem niechlujny i bym go w życiu nie użył. <br />Kwiatki typu: max_dzien-=1 można śmiało zapisać jako max_dzien--;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=801">arturf209</a> — 10 lis 2013, o 17:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2013-11-10T17:39:37+01:00</updated>
<published>2013-11-10T17:39:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56165#p56165</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56165#p56165"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56165#p56165"><![CDATA[
[syntax=c]max_dzien = 31;<br /><br />((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11) ) ? max_dzien-=1 : (miesiac == 2 ? (przestepny==1 ? max_dzien-=2: max_dzien-=3):);[/syntax]<br /><br />A co powiecie na to?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 10 lis 2013, o 17:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[arturf209]]></name></author>
<updated>2013-11-10T17:30:22+01:00</updated>
<published>2013-11-10T17:30:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56162#p56162</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56162#p56162"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56162#p56162"><![CDATA[
yhym...<br /><br />[syntax=c]switch(miesiac)<br />{<br />case 1:<br />case 3:<br />case 5:<br />case 7:<br />case 8:<br />case 10:<br />case 12:<br />max_dzien = 31;<br />break;<br /><br />case 2:<br />if (przestepny) <br />max_dzien = 29<br />else<br />max_dzien=28;<br />break;<br /><br />default:<br />max_dzien = 30;<br />}[/syntax]<br /><br />pisałem tutaj na forum więc nie koniecznie musi działać ale pokazuje sposób<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />Ilu programistów tyle pomysłów <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Z if'em nawet bardziej mi się spodobało<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=801">arturf209</a> — 10 lis 2013, o 17:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2013-11-10T17:27:51+01:00</updated>
<published>2013-11-10T17:27:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56161#p56161</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56161#p56161"/>
<title type="html"><![CDATA[Re: obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56161#p56161"><![CDATA[
Można też tak:<br />[syntax=c]if( (miesiac == 2) || (miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11) )<br />      {           <br />        max_dzien = 30;<br />        if(miesiac == 2)<br />         if(przestepny==0)<br />          max_dzien = 29;<br />         else<br />          max_dzien = 28;<br />      }<br />else<br />     max_dzien = 31;[/syntax]<br />Inna metoda to tablica max. dni i korekcja na rok przestępny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 10 lis 2013, o 17:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-11-10T15:52:58+01:00</updated>
<published>2013-11-10T15:52:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56146#p56146</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56146#p56146"/>
<title type="html"><![CDATA[obliczanie dni miesiaca w dacie - pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4735&amp;p=56146#p56146"><![CDATA[
witam czy ten sposób zapisu obliczenia daty a dokładnie maksymalnego dnia danego miesiaca w dacie jest prawidłowy ?<br /><br />Jeżeli jest prawidłowy to czy można to jakoś prościej zapisać ?<br /><br />[syntax=c]if( (miesiac == 1) || (miesiac == 3) || (miesiac == 5) || (miesiac == 7) || (miesiac == 8) || (miesiac == 10) || (miesiac == 12) ){<br />max_dzien = 31;<br />}else if( (miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11) ){<br />max_dzien = 30;<br />}else if( (miesiac == 2) &amp;&amp; (przestepny == 0) ){<br />max_dzien = 29;<br />}else if( (miesiac == 2) &amp;&amp; ( (przestepny == 1) || (przestepny == 2) || (przestepny == 3) ) ){<br />max_dzien = 28;<br />}[/syntax]<br /><br />W sensie to że działa to wiem i sprawdzałem ale czy taki zapis jest dopuszczalny czy można jakoś prościej ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 10 lis 2013, o 15:52</p><hr />
]]></content>
</entry>
</feed>