Pitanja oko resavanja zadataka

Pitanja oko resavanja zadataka

offline
  • Dario V.
  • Pridružio: 10 Jan 2012
  • Poruke: 975

Zz svima!

Da mi objasnite par programa nije mi jasno nikako, a moram skontati ti ih:

Prvi program:

#include <stdio.h>
main ()
{
int a, b, c;
a = 20; b = 7;
c = (--a > ++b) ? --a*b : a/++b;

printf("c=%d\n", c);
system ("pause");
}

Uglavnom srž programa je:
int a, b, c;
a = 20; b = 7;
c = (--a > ++b) ? --a*b : a/++b;


Da mi se razjasni? ovo za izracunavanje c ?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

U suštini program kaže sledeće:
1. a je 20, b je 7
2. smanji a za 1 (19) i poveća b za 1 (8)
3. proveri da li je a veće od b
4. pošto jeste, smanji a za 1 (18) i pomnoži ga brojem b (8) i rezultat (144) upiše u c

Format "uslov ? x : y" znači: ako je ispunjen "uslov" vrati "x", a ako nije vrati "y".
Izraz "--x" znači: smanji x za 1 i zatim ga koristi u sledećim operacijama
Izraz "x--" znači: iskoristi trenutnu vrednost x u narednoj operaciji i zatim smanji x za 1



offline
  • Dario V.
  • Pridružio: 10 Jan 2012
  • Poruke: 975

Srki_82 hvala ti!

A cek kod je ovaj:
c = (--a > ++b) ? --a*b : a/++b;

TI si racunao a i C je racunao do: c = (--a > ++b) ? --a*b
Sta je sa ovog posle " a/++b; ?

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Taj deo a/++b se nikad neće izvršiti zato što je uslov --a > ++b ispunjen.

offline
  • Dario V.
  • Pridružio: 10 Jan 2012
  • Poruke: 975

Napisano: 29 Mar 2012 22:18

U ovom slucaju da je a bilo manje a ne vece od b, on ne bi dalje isao odmah bi dao rezultat nulu.

A kada bi se izvrsavao taj a/++b?
I zasto mi onda on tu stoji bzvz?

Dopuna: 29 Mar 2012 22:26

Ako bi mogli da mi objasnite sta znaci tacno kada sotji u kodu pored broja U, npr 115U.

Znam da je to unsigned i da je neoznaceni broj, i da nece biti negativan broj, i da ce biti ceo broj!

Ali ne kontam nikako!

u jendom programu pise 115U/b (a b je negativan broj) izbaci nulu kao rezultat, a nikako mi nije jasno?

offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3898
  • Gde živiš: Novi Sad,Klisa

nike992 ::Napisano: 29 Mar 2012 22:18

U ovom slucaju da je a bilo manje a ne vece od b, on ne bi dalje isao odmah bi dao rezultat nulu.

A kada bi se izvrsavao taj a/++b?
I zasto mi onda on tu stoji bzvz?


to ti je takozvani trinarni operator (uslov) uslov zadovoljen : uslov nije zadovoljen


i ovde nemas nikakav ciklus (do,while,for) da bi ti se a postepeno smanjivalo,a b postepeno uvecavalo, i zato ti taj uslov nikad ne moze biti zadovoljen.

offline
  • Dario V.
  • Pridružio: 10 Jan 2012
  • Poruke: 975

Napisano: 29 Mar 2012 22:57

Ako bi mogli da mi objasnite sta znaci tacno kada sotji u kodu pored broja U, npr 115U.

Znam da je to unsigned i da je neoznaceni broj, i da nece biti negativan broj, i da ce biti ceo broj!

Ali ne kontam nikako!

u jendom programu pise 115U/b (a b je negativan broj) izbaci nulu kao rezultat, a nikako mi nije jasno?

je li to uvijek bude nula ako je neki od ta dva broja negativan!

Dopuna: 29 Mar 2012 23:13

A pogledajte ovaj zadatak isto je sa onim uslovom samo se racuna i posle dvotacke:

c = (a++ < 110U) ? ++b : b--;

a u proslom zadatku je bilo c = (--a > ++b) ? --a*b : a/++b;
i racunao je samo do dvotacke, posle dvotacke nije racunao.

Moja logika je ovakva:
Kada ima U izvrsava se uslov do kraja tj i spole dvotacke, a ako nema U onda samo do dvotacke, ako je prosao prvi uslov.

Nishta mi nije jasno kada je U!

Skontao sam da kada ima u uslovu U onda se racuan posle dvotacke, a kada nema U onda racuna ono izmedju uslova i dvotacke, ali nisam zadovoljan kako sam skontao, posto zeleo bi da mi se objasni to !

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

1.
Slovo 'U' je sufix koji oznacava koji tip literalne konstante predstavlja taj broj, moze se kosristiti i malo slovo 'u'.
Citat:
u jendom programu pise 115U/b (a b je negativan broj) izbaci nulu kao rezultat...

Predpostavljam da kompajler implicitno (iza ledja) kastuje vrednost sa desne strane '/' u unsigned tip (u zavisnosti od tipa sa leve) pre nego odradi deljenje, pa ako je recimo b = -5 kad se kastuje bude 4294967291:
115u / 4294967291u = 0u
Ovo je veoma opasno mixovanje tipova jer dovodi do bagova koji se tesko pronalaze (u vecim projektima) zato treba paziti sta se radi!

2. Inkriment i dekriment operatori su unarni operatori, znaci menjaju jednog operanda. Od toga imas dva tipa, pre i post inkrement/dekrement. Inkrement dodaje a dekrement oduzima 1.
post inkrement:
int a = 5; int b = a++; // b = 5 ...// a je tek sad 6

pre inkrement:
int a = 5; int b = ++a; // a = 6 i b = 6

za dekrement je isto samo se oduzima 1.

Ko je trenutno na forumu
 

Ukupno su 767 korisnika na forumu :: 2 registrovanih, 2 sakrivenih i 763 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: leonard, Pretender