[ Free_Sex @ 27.10.2003. 16:54 ] @
Kad uopste ne mogu da se setim kako se racuna dali je godina prestupna ?

Znam da treba jos da se doda na kraju /400 da bi to bilo to ali
kad sam skroz zaboravio a nigde ne mogu da nadjem ?
[ Shadowed @ 27.10.2003. 16:57 ] @
Pravilo 1. Svaka cetvrta godina je prestupna.
Pravilo 2. Izuzetak za pravilo 1. je da svaka stota godina nije prestupna.
Pravilo 3. Izuzetak za pravilo 2. je da svaka 400-ta godina jeste prestupna.

Mislim da nema dljih izuzetaka. Ako neko zna neka dopuni...
[ filmil @ 27.10.2003. 17:12 ] @
Isto to, samo malo lakše za razumevanje: za godine čiji je broj deljiv sa 100, prestupna je ona koja je deljiva sa 400. Za ostale godine (ne-deljive sa 100) prestupna je ona koja je deljiva sa 4.

A zašto je lakše za razumevanje? Pa zato jer se odmah prevodi u program:

Code:

bool prestupna(int godina)
{
  if ( godina % 100 == 0) {
    if ( godina % 400 == 0) {
      return true;
    } else {
      return false;
    }
  } 
  
  if ( godina % 4 == 0) {
      return true;
  }
  return false;
}


f


[Ovu poruku je menjao filmil dana 27.10.2003. u 19:26 GMT]

[Ovu poruku je menjao filmil dana 27.10.2003. u 19:28 GMT]
[ Free_Sex @ 27.10.2003. 17:20 ] @
Citat:
filmil:
Isto to, samo malo lakše za razumevanje: za godine čiji je broj deljiv sa 100, prestupna je ona koja je deljiva sa 400. Za ostale godine (ne-deljive sa 100) prestupna je ona koja je deljiva sa 4.

f


Meni je ipak lakse da razumem ono prvo ... al nema veze hvala u svakom slucaju.
[ Free_Sex @ 27.10.2003. 18:44 ] @
Kad je vec Art Of Programming ....

Code:

prestupna = ( godina % 100 ==0)  && ( godina % 400 ==0 ) || (godina % 4 ==0 );


A i zar vas laslo nije iscimavao da skracujete kod i vreme izvrsavanja, upotrebu memorije i sl ? Znas li ti covece sta se desava kad pozoves funkciju, pa tu radi i stek, i adresiranja razna i gluposti .... :)
[ Mikky @ 27.10.2003. 22:57 ] @
Zar nije najlakse da podelis broj godina sa 4 i ako ima ostatka godina nije prestupna?
[ reiser @ 27.10.2003. 23:09 ] @
Citat:
Mikky:
Zar nije najlakse da podelis broj godina sa 4 i ako ima ostatka godina nije prestupna?


Da, ali kao sto je gore napisano, svaka 100-ta i svaka 400-ta godina nije prestupna. Znaci :
Code:

var
 prestupna : Boolean;
begin
 prestupna := FALSE;
 If (trenutna_godina mod 4 = 0) and
    (trenutna_godina mod 100 > 0) and
    (trenutna_godina mod 400 > 0) then
  prestupna := TRUE
 ....
end.



[Ovu poruku je menjao Marko Paunovic dana 28.10.2003. u 01:12 GMT]
[ Shadowed @ 27.10.2003. 23:10 ] @
Pa da li ste vas dvojica citali prethodne postove? U mom postu ste mogli da vidite da postoji "pravilo 2." koje je izuzetak od tog sto si ti rekao. Pa jos pravilo 3 kao izuzetak pravila 2.

[Ovu poruku je menjao Shadowed dana 28.10.2003. u 01:15 GMT]
[ reiser @ 27.10.2003. 23:15 ] @
Citat:
Shadowed:
Pa da li si citao prethodne postove? U mom postu si mogao da vidis da postoji "pravilo 2." koje je izuzetak od tog sto si ti rekao.


Heh, prvo sam napisao poruku, pa sam onda video tvoj post i izmenio poruku, a ti si u medjuvremenu postovao ovu gore poruku. Greska od moje strane, brzopleto sam odgovorio, bez detaljnijeg citanja prethodnih postova.
[ Mihailo Kolundzija @ 28.10.2003. 01:45 ] @
Citat:
Free_Sex:
Kad je vec Art Of Programming ....

Code:

prestupna = ( godina % 100 ==0)  && ( godina % 400 ==0 ) || (godina % 4 ==0 );


A i zar vas laslo nije iscimavao da skracujete kod i vreme izvrsavanja, upotrebu memorije i sl ? Znas li ti covece sta se desava kad pozoves funkciju, pa tu radi i stek, i adresiranja razna i gluposti .... :)


I šta se desi kad je godina==200?
[ Free_Sex @ 28.10.2003. 12:39 ] @
Pa 200 % 4 jeste 0 .... dakle prestupna je .... mada dali je stvarno prestupa ne mogu da proverim posto kompovi racunaju vreme od cinimi se 1970 ? U sekundama jeli ... (linuz/ unix) a glupi vindov da ni ne pominjem .... u svakom slucaju me zanimaju samo "buduce" godine :)

A sto sta se desi kad je godine = 200 ?
[ Goran Rakić @ 28.10.2003. 14:01 ] @
pa šta se desi, tvoj program će reći da jeste, a zbog pravila 2 nije.
[ formeye @ 30.10.2003. 18:37 ] @
Kao sto neko rece, ovo je Art of Programming

Code:

prestupna = !(godina % 4)  &&  ((godina % 100) || !(godina % 400));


[ chupcko @ 31.10.2003. 08:14 ] @
Drago mi je da sam video sve ovo ovde ...
Malo sam zatecen, ali ajde ..., mozda ste mladi, ili vas mrzi da proveravate programe ili jednostavno ne znate de morganova pravila ...

Kao sto neko rece, programiranje je samo nacin kodiranje, onogo sto intuitivno znamo da uradimo (a teze Churcha to lepo potvrdjuje).

Dakle ako neko kaze:

Godina je prestupna ako:
(je deljiva sa 4 i nije deljiva sa 100) ili je deljiva sa 400

To je lepo intutivno napisano, ajde sada da kodiramo, jelte.

U cemu cemo, ajde C posto se puno vas lozi na C.

godina neka bude promenjljiva sa vrednoscu godine

(godina %4 ==0 && godina %100 !=0) || godina %400=0

Ovaj izraz vraca integer koji ce biti 0 ako godina nije prestupna ili !=0 ako jeste.

Ako se nekome ne svidja neka koristi malo optimizacije i sredi
podsetio bi da (X)==0 mozemo zameniti sa !(X)
A (X)!=0 mozemo zameniti sa (X)

Sada gorenapisani izraz moze da se napise kao:

(!(godina%4) && (godina%100)) || !(godina%400)

Naravno sada uzmite tabelu prioriteta operatora i skidajte suvisne zagrade, ako vam je stalo da ustedite koji simbol.

Ako se ovo zove Art of Programming unesite malo umetnosti, ili bar umesnosti...

Kada vas vec smaram, ajde igrajte se i probajte da vidite sta ovo radi:

Code:

int _[16];m(x,i,f,z){for(f=z=-9,i=0;i<16;i++)f=_[i]==x?i:f,z=_[i]?z:i;i
=abs(f-z);if((i==1&&f/4==z/4)||i==4)i=_[f],_[f]=_[z],_[z]=i;}main(i,j){
srand(time(0));for(i=0;i<9999;i++)i<15?_[i]=i+1:m(rand()%15+1);for(;;){
for(j=i=0;i<16;j+=_[i]==++i)printf(_[i]?"%c%2d":"%c  ",i%4?' ':'\n',_[i
]);if(j>14&&puts("\n\nYou WIN"))break;printf("\n\nMove ? ");scanf("%d",
&i)||scanf("%*[^0-9]");m(i);}} /* http://alas.matf.bg.ac.yu/~chupcko */

[ sspasic @ 31.10.2003. 08:35 ] @
Citat:
chupcko:
U cemu cemo, ajde C posto se puno vas lozi na C.

godina neka bude promenjljiva sa vrednoscu godine

(godina %4 ==0 && godina %100 !=0) || godina %400=0

Ovaj izraz vraca integer koji ce biti 0 ako godina nije prestupna ili !=0 ako jeste.

Ako se nekome ne svidja neka koristi malo optimizacije i sredi
podsetio bi da (X)==0 mozemo zameniti sa !(X)
A (X)!=0 mozemo zameniti sa (X)

Sada gorenapisani izraz moze da se napise kao:

(!(godina%4) && (godina%100)) || !(godina%400)


Da bismo bili precizni do kraja - ovo u C-u nije optimizacija, posto je !A i A==0, odnosno A (kao uslov) i A != 0 potpuno ista stvar.
I semanticki i u odnosu na to kakav kod generise.
[ chupcko @ 31.10.2003. 13:10 ] @
O da, izvinjavam se, optimizacija po pitanju napisanog koda ...

Slucajno to generise isti kod (sto u mnogome zavisi od kompajlera) i znaci isto (to vec nije slucajno), kao kada bi u paskalu za neki boolean b pitali:

if b=true

a dovoljno je

if b

Dakle to je takozvana optimizacija po kodu, a da li generise isti kod ... (probaj da se igras sa iskljucivanjim raznih optimizacija u kompajlera, pa cemo videti).

Mada mi je vise akcenat bio ka tome sto mi nije jasno sto ne sednu i napisu lepo kod koji radi :))).


[ formeye @ 31.10.2003. 20:26 ] @
Citat:
chupcko:
Drago mi je da sam video sve ovo ovde ...
Malo sam zatecen, ali ajde ..., mozda ste mladi, ili vas mrzi da proveravate programe ili jednostavno ne znate de morganova pravila ...

Godina je prestupna ako:
(je deljiva sa 4 i nije deljiva sa 100) ili je deljiva sa 400



Da neces da kazes da
Code:

prestupna = !(godina % 4)  &&  ((godina % 100) || !(godina % 400));

ne radi kako bi trebalo?

Godina je prestupna ako je deljiva sa cetiri i (nije deljiva sa 100 ili je deljiva sa 400)

Ovo radi za ne Milankovicevske kalendare (on je uzeo od nekog tipa i da se proverava ostatak pri deljenju sa 7...)
[ chupcko @ 03.11.2003. 08:15 ] @
Ne, ja sam samo izkodirao iskaz:
godina je prosta ako je delijiva sa 4 a nije sa 100
ili je deljiva sa 400

...
nema tu puno filozofije, moze samo da se rade razne transformacije iskaza...

Ajde crtajte tablice i proveravajte :)

Sto se mene tice, stvarno mi nije jasno u cemu je problem, ali ako neko zna neka mi pojasni :)
[ formeye @ 03.11.2003. 12:24 ] @
Citat:
chupcko:
Ne, ja sam samo izkodirao iskaz:
godina je prosta ako je delijiva sa 4 a nije sa 100
ili je deljiva sa 400

Ja se zabrinuh da si rekao da mi kod nije ok ;)


Citat:

...
nema tu puno filozofije, moze samo da se rade razne transformacije iskaza...

Ajde crtajte tablice i proveravajte :)

Sto se mene tice, stvarno mi nije jasno u cemu je problem, ali ako neko zna neka mi pojasni :)

Ni meni. Tresla se gora, rodi se, pa..., nista...
[ Revisor @ 02.02.2004. 14:59 ] @
(post je editovan)
Ne zelim nikom da stajem na zulj. Samo primetih par mogucih
optimizacija:

Code:
 prestupna = !(godina & 3)  &&  (godina % 100 || !(godina/100 & 3));