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 */
CHUPCKO