Pojasnjenje zadatka

Pojasnjenje zadatka

offline
  • Pridružio: 06 Sep 2007
  • Poruke: 2

Molila bih ako mozete da mi pomognete u vezi ovog zadatka posto imam ispit iz C koji se bazira na Krausovoj knjizi a malo mi bas ne ide ili ne znam gde gresim.
Zadatak glasi: Koje su vrednosti promenljivih a i b, nakon izvršavanja izraza:
a=1,b=2,a+=sizeof(char)>sizeof(short) ? sizeof(float)>sizeof(double) ? ++b+a:--b+a:++b-a

Ovde imamo ternarni operator pri cemu je drugi operand takodje ternarni operator (1?(2?X:Y) :3).
Sada ja radim ovako: sizeof(char)>sizeof(short) je false samim tim je jednako 0 pa je onda a+=sizeof(char)>sizeof(short) ili a=a+sizeof(char)>sizeof(short) jednako a=1+0=1. Posto je vrednost prvog operanda logicka istina(a=1) onda se izracunava vrednost drugog operanda(da je vrednost bila logicka neistina a=0 onda bi se racunala vrednost treceg operanda). Posto je drugi operand takodje ternarni operator ponavljm postupak pa dobijm da je sizeof(float)>sizeof(double) takodje false tj. jednako nuli pa onda racunam vrednost izraza --b+a a to je nova vrednost b tj. b=b-1 pa je b=2-1=1 a a se nije promenilo i ostalo je a=1. Medjutim ovo resenje nemam medju ponudjenim odgovorima pa ne znam da li gresim.
I da koliko je 2%5 tj ostatak deljenja celobrojnih operanada 2 i 5?

Poz



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 16 Jun 2005
  • Poruke: 2392
  • Gde živiš: Beograd

Ovako, posto je sizeof(char) > sizeof(short) netacno, izvrsava se samo ++b-a, tu je b povecano za jedan, a onda je od njega oduzeto a (3-1=2) i to je dodato na a, pa su resenja a=3, b=3.

Inace 2%5=2



offline
  • Pridružio: 06 Sep 2007
  • Poruke: 2

Nije mi jasno zasto je ++b-a ali pp da je zbog toga sto ternarni operator ima smer grupisanja zdesna ulevo pa se tek onda na kraju izracunava ovaj deo a+=
Hvala na pomoci

offline
  • Pridružio: 16 Jun 2005
  • Poruke: 2392
  • Gde živiš: Beograd

Pa, to je jer je tako napisan kod, to je u stvari kao da pise (mislim da ces ovako lakse da razumes):

if(sizeof(char)>sizeof(short)){
if(sizeof(float)>sizeof(double)) a+=++b+a;
else a+=--b+a;}
else a+=++b-a;

Prvo se izvrsava ++b (2+1), pa b-a (3-1) i na kraju se to doda na a (1+2).

Ko je trenutno na forumu
 

Ukupno su 1274 korisnika na forumu :: 29 registrovanih, 3 sakrivenih i 1242 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Aleksej, bobomicek, BOXRR, BUDDAR70, cojapop, debeli, dejno, eagle.rs, Jose, Jozo74, karjatid, kolle.the.kid, Lazarus, Manjane, mir, N.e.m.a.nj.a., N95, novator, Outis, ozzy, PrincipL, redstar72, ruma, shajone, sokars, The Boss, Vladko, zeka013