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
  • 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
  • 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 3630 korisnika na forumu :: 89 registrovanih, 6 sakrivenih i 3535 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 5623 - dana 13 Dec 2025 19:56

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: AF-1, ajo baba, Aleksa-, amonsrb, AndrejPetar, Andrija357, Avalon015, Badja, Bbbggg1979, Betta, Bojan198527, BtR-45, Cigi, Colt D, cuculo, cyprus, DalmatinacMF, darionis, Deki Duga Devetka, Demi87, Despot1, doragan, drimer, Dukelander, dzoni19, ElvisP, Ercomero, esx66, eulereix, gale48, Georgius, goflja76, igorkozar83, ivica976, janbo, Jaz, jnikola23, Kenanjoz, Khalid ibn al-Walid, kreker, ladro, laurusri, Lieutenant, markolopin, Marky, Mcdado, mdp92, mercedesamg, metallac777, Mi lao shu, miki kv, milanovic, milenko crazy north, Milos ZA, milutin134, Mis uz pusku, mrav pesadinac, nelezele, Nemanja.M, Niki2024, Nikolajevic, oldusername, Paki, Paklenica, pceklic, pein, peradetlić, Pilipenda, powSrb, qurtamurta, Remarqe, RJ, Sarmat, sasovsky, Sinduk, srpskasparta, stalja, stokssone, tachinni, tm, tuf, vathra, Vatreni Zmaj, Velički, vensla, vidra1, Zjmc, Zrcalo, zubri