Poslao: 29 Mar 2012 21:57
|
offline
- 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.
|
|
Poslao: 29 Mar 2012 22:06
|
offline
- Srki_82
- Moderator foruma
- 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
|
|
|
|
Poslao: 29 Mar 2012 22:10
|
offline
- 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; ?
|
|
|
|
Poslao: 29 Mar 2012 22:14
|
offline
- Srki_82
- Moderator foruma
- 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.
|
|
|
|
Poslao: 29 Mar 2012 22:26
|
offline
- 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?
|
|
|
|
Poslao: 29 Mar 2012 22:50
|
offline
- NIx Car
- Legendarni građanin
- 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.
|
|
|
|
Poslao: 29 Mar 2012 23:13
|
offline
- 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 !
|
|
|
|
Poslao: 30 Mar 2012 10:47
|
offline
- morando
- Građanin
- 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.
|
|
|
|