[code:1]#define PR(x) printf("%d\n",(x)); [/code:1]
ovime si definirala sto ce ti PR radit u programu, dakle on ce ispisivat ono sto uneses za x i to svaki put u novi red zbog \n.
[code:1]x=-4%4/4+-4; PR(x);[/code:1]
vrijednosti x pridruzis ovaj br =-4 (jer, -4%4=0, 0/4=0, 0+(-4)=-4) i ispises ga.
[code:1]y=4/-x++-4; PR(x); PR(y); [/code:1]
y pridruzi vrijednost -3 (4/(4)=1, 1-4=-3) a x povecaj za jedan nakon sto y pridruzis -3 (x++=x+1, da je bilo ++x onda bi prvo x povecala za jedan, i tek onda racunala y) i naravno, onda ispise x i y.
[code:1]y*=z=x+4==4/-y; PR(y); PR(z); [/code:1]
za ovaj nisam 100% ziher, pa nek me neko ispravi ak sam u krivu:
prvo x+4=1, i to usporedjujes sa 4/-y=1, znaci imas 1==1, a to je istina, dakle ->1. te z postaje istina(ili ti 1). zatim y pridruzis y=y*z=y(jer, y*=z -> y=y*z, a buduci da jz z=1, y=y), btw. ovaj == usporeduje, ali ne mjenja vrijednost niti jedne varijable. znaci y je -3, a z 1. PR ih ispisuje.
[code:1]x=x||y&&--z PR(x); PR(y); PR(z); [/code:1]
mislim da bi se prvo trebao z umanjiti za 1, jer je to unarni operator, zatim y&&z=0, tj laz jer je y!=0, a z=0, pa imamo istina&&laz->laz, pa na kraju x koji je != 0 (dakle istina) || 0(laz)->istina(1), znaci x postaje 1.
e sad, ja smatram da bi nakon ove linije z trebao biti 0, ali nije tako.. :grebgreb: (jel to mozda zato sto je z zapravo "istina", pa se njegova vrijednost ne mjenja?)
i tako su za sad vrijednosti slijedece: x=1, y=-3, z=1.
[code:1]PR(++x&&++y||++z); PR(x); PR(y);PR(z);[/code:1]
dakle, mislim da bi opet trebalo prvo proc unarne operatore, znaci x=2, y=-2, z=2 i onda 2 && (-2) ->1 i sad 1||2 ->1, znaci vrijednost ovog u prvom PR je 1, x=2,y=-2, i po ovom mom z bi trebalo biti 2, ali naravno nije, vec je ostalo 1. nadam se da ce mi netko objasniti zasto je tako, jer ovo ni meni nije bas jasno.
inace, moj savjet ti je da skicnes Jurakova predavanja, imas na netu i skoro sve je lijepo objesnjeno. konkretno za ovo imas na str 76. tablicu prioriteta i redoslijed izracunavanja..
nadam se da sam bar malo pomogla. ;)
Kod: | #define PR(x) printf("%d\n",(x)); |
ovime si definirala sto ce ti PR radit u programu, dakle on ce ispisivat ono sto uneses za x i to svaki put u novi red zbog \n.
vrijednosti x pridruzis ovaj br =-4 (jer, -4%4=0, 0/4=0, 0+(-4)=-4) i ispises ga.
Kod: | y=4/-x++-4; PR(x); PR(y); |
y pridruzi vrijednost -3 (4/(4)=1, 1-4=-3) a x povecaj za jedan nakon sto y pridruzis -3 (x++=x+1, da je bilo ++x onda bi prvo x povecala za jedan, i tek onda racunala y) i naravno, onda ispise x i y.
Kod: | y*=z=x+4==4/-y; PR(y); PR(z); |
za ovaj nisam 100% ziher, pa nek me neko ispravi ak sam u krivu:
prvo x+4=1, i to usporedjujes sa 4/-y=1, znaci imas 1==1, a to je istina, dakle →1. te z postaje istina(ili ti 1). zatim y pridruzis y=y*z=y(jer, y*=z → y=y*z, a buduci da jz z=1, y=y), btw. ovaj == usporeduje, ali ne mjenja vrijednost niti jedne varijable. znaci y je -3, a z 1. PR ih ispisuje.
Kod: | x=x||y&&--z PR(x); PR(y); PR(z); |
mislim da bi se prvo trebao z umanjiti za 1, jer je to unarni operator, zatim y&&z=0, tj laz jer je y!=0, a z=0, pa imamo istina&&laz→laz, pa na kraju x koji je != 0 (dakle istina) || 0(laz)→istina(1), znaci x postaje 1.
e sad, ja smatram da bi nakon ove linije z trebao biti 0, ali nije tako.. (jel to mozda zato sto je z zapravo "istina", pa se njegova vrijednost ne mjenja?)
i tako su za sad vrijednosti slijedece: x=1, y=-3, z=1.
Kod: | PR(++x&&++y||++z); PR(x); PR(y);PR(z); |
dakle, mislim da bi opet trebalo prvo proc unarne operatore, znaci x=2, y=-2, z=2 i onda 2 && (-2) →1 i sad 1||2 →1, znaci vrijednost ovog u prvom PR je 1, x=2,y=-2, i po ovom mom z bi trebalo biti 2, ali naravno nije, vec je ostalo 1. nadam se da ce mi netko objasniti zasto je tako, jer ovo ni meni nije bas jasno.
inace, moj savjet ti je da skicnes Jurakova predavanja, imas na netu i skoro sve je lijepo objesnjeno. konkretno za ovo imas na str 76. tablicu prioriteta i redoslijed izracunavanja..
nadam se da sam bar malo pomogla.
|