Pomoc oko IF petlje

1

Pomoc oko IF petlje

offline
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Pozdrav!
U skoli smo poceli da ucimo C u programu devcpp. Stigli smo do IF operatora, tj. treba tek da pocnemo da radimo. Meni je to zanimljivo pa sam resio i kuci da proradim.

Zelim da napravim program koji ce mi izracunavati koliko para cu potrositi na gorivo, ako ja upisem marku auta i kilometrazu.
Znaci prvo treba da definisem kolika je potrosnja za svaki auto. Treba da ih bude tri, citroen, golf i pezo.
Kada pokrenem program treba prvo da me pita koju marku zelim. Ja kazem citroen. Onda me on pita kolika je kilometraza. Ja kazem 100km na primer. I on mi onda ispise koliko para potrosim na gorivo.

E sad, ja imam problem sto ne znam kojim redosledom da pisem naredbe i ne znam sve kombinacije IF naredbe. Tu mi je potrebna pomoc. Ako neko moze da mi pomogne da napisem to ili pak da mi neko napise pa da ja onda to proucim.
U svakom slucaju meni je cilj da naucim da sam napravim takav program. Imam ja neku ideju kako to da uradim, ali nikako ne mogu da je realizujem.

Ako mi pomognete, hvala!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 02 Jan 2008
  • Poruke: 2167

Prvo trebas deklarisati varijable koje zelis da koristis. Samim tim, odmah si deklarisao i kolika ti je potrosnja za svaki auto.

float potrosnjaCitroen = 10; float potrosnjaPezo = 20; float potrosnjaGolf = 30; int tip = 0; //varijabla koju ces koristiti za proveru u IF naredbi float kilometraza = 0;

Nakon toga, koristeci printf i scanf, ispisaces pozdravnu poruku i pitati koji model automobila korisnik zeli da unese. Moj predlog je da ispises tipa, "Za Citroen, ukucajte 1; Za Golf 2" i tako dalje...

Kada korisnik unese vrednost za tip, ispisaces ponovo poruku da korisnik unese kilometrazu.

Sad na scenu stupa IF. Ispitaces u IF naredbi da li je vrednost tip jednaka, na primer, 1. Ako jeste, mnozis potrosnju i kilometrazu i ispisujes vrednost.

Tako uradis i za ostala dva modela.

Nisam hteo da pisem kod jer je bolje da sve uradis sam, mada sam ti dosta stvari vec rekao. Pokusaj da uradis, pa javi ako negde zapne.

Proguglaj malo o IF komandi, evo necega sto ce ti pomoci: https://www.tutorialspoint.com/cprogramming/if_else_statement_in_c.htm



offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14227
  • Gde živiš: Niš

Milos ZA ::U skoli smo poceli da ucimo C u programu devcpp. Stigli smo do IF operatora...Od samog početka treba učiti ispravnu terminologiju. If naredba nikako nije operator. Operatori su jedna posebna vrsta tokena u programskim jezicima, i ne treba ih nikako mešati sa naredbama za kontrolu toka.

offline
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Napisano: 06 Dec 2016 17:21

#include<stdio.h> main() {    float potrosnjaCitroen=10;    float potrosnjaGolf=20;    float potrosnjaPezo=30;    int tip;    float kilometraza;    float cena;    float cg=100; //cena goriva    printf("Unesite za koji auto zelite da izracunate cenu.\n");    printf("Za Citroena unesite broj: 1\n");    printf("Za Golfa unesite broj: 2\n");    printf("Za Pezoa unesite broj: 3");    scanf("%i",&tip);        printf("Unesite kilometrazu: ");    scanf("%f",&kilometraza);    if(tip=1)       cena=potrosnjaCitroen/100*kilometraza*cg;       printf("Cena puta je %.3f\n",cena);    if(tip=2)       cena=potrosnjaGolf/100*kilometraza*cg;       printf("Cena puta je %.3f\n",cena);    if(tip=3)       cena=potrosnjaPezo/100*kilometraza*cg;       printf("Cena puta je %.3f",cena);               scanf("%i"); }

Dopuna: 06 Dec 2016 17:22

To je kod koji sam napisao, a izgled programa je ovakav:



Dopuna: 06 Dec 2016 17:25

Prvo sto ne znam kako da namestim je to sto kada pokrenem program kursor za pisanje mi je odmah iza broja 3 u cetvrtom redu. Ja zelim da namestim da bude u novom redu.

Drugo sto ne znam sto ne radi je to sto kada unesem tip i kilometrazu on mi izracuna i ispise sva tri moguca dogadjaja, znaci ne samo onaj koji sam napisao pod tip. Ne shvatam zasto.

Ako mozete da mi razjasnite, hvala!

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14227
  • Gde živiš: Niš

Milos ZA ::Prvo sto ne znam kako da namestim je to sto kada pokrenem program kursor za pisanje mi je odmah iza broja 3 u cetvrtom redu. Ja zelim da namestim da bude u novom redu.Dodaj u liniju 27 na kraju stringa karakter '\n' kao što je to u linijama 24 i 21.
Milos ZA ::Drugo sto ne znam sto ne radi je to sto kada unesem tip i kilometrazu on mi izracuna i ispise sva tri moguca dogadjaja, znaci ne samo onaj koji sam napisao pod tip. Ne shvatam zasto.To je zbog toga što u uslovu if naredbe koristiš operator dodele, a ne operator poređenja. Operator dodele je =, a operator poređenja je ==.

offline
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Ovo prvo sam resio tako sto sam stavio "\n" u 14. liniju koda iza broja 3. Kada stavim tamo gde si mi rekao nista se ne menja. Bilo kako bilo taj problem sam resio.

E sad, ovaj drugi problem. Kada u sve tri if naredbe umesto if(tip=1) ja stavim if(tip==1) izadje mi pogresan rezulat. Izadje mi ovo:

Unesite za koji auto zelite da izracunate cenu.
Za Citroena unesite broj: 1
Za Golfa unesite broj: 2
Za Pezoa unesite broj: 3
2
Unesite kilometrazu: 2
Cena puta je 0.000
Cena puta je 40.000
Cena puta je 40.000


Ne razumem zasto.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14227
  • Gde živiš: Niš

Napisano: 06 Dec 2016 18:40

Milos ZA ::Ovo prvo sam resio tako sto sam stavio "\n" u 14. liniju koda iza broja 3.Da, na to sam i mislio.

Dopuna: 06 Dec 2016 18:47

Milos ZA ::E sad, ovaj drugi problem. Kada u sve tri if naredbe umesto if(tip=1) ja stavim if(tip==1) izadje mi pogresan rezulat. Izadje mi ovo...Nema tu pogrešnog rezultata. Problem je što nisi dobro shvatio if naredbu. Kada je uslov if naredbe ispunjen izvršava se naredba ili blok naredbi iz then grane if naredbe. Kod tebe u then grani za sve tri if naredbe stoji samo jedna naredba, dok odmah posle toga sledi ispisivanje rezultata. Zbog toga ti se tri puta prikazuje rezultat. A sada ću da pojasnim i zašto je takav:
scanf("%i",&tip);  // ovde si uneo da je tip 2     printf("Unesite kilometrazu: "); scanf("%f",&kilometraza);  // ovde si uneo da je kilometraža 2 if(tip==1)  // ovaj uslov nije ispunjen, vrednost promenljive cena ostaje 0.0    cena=potrosnjaCitroen/100*kilometraza*cg; printf("Cena puta je %.3f\n",cena);   // ovo štampa vrednost promenljive cena koja je 0.0 if(tip==2)  // ovaj uslov je ispunjen    cena=potrosnjaGolf/100*kilometraza*cg;  // vrednost promenljive cena postaje 40.0 printf("Cena puta je %.3f\n",cena);   // ovo štampa vrednost promenljive cena koja je 40.0 if(tip==3)  // ovaj uslov nije ispunjen, vrednost promenljive cena ostaje 40.0    cena=potrosnjaPezo/100*kilometraza*cg; printf("Cena puta je %.3f",cena);  // ovo štampa vrednost promenljive cena koja je 40.0Dakle, obzirom da nijedna printf naredba nije unutar then grane bilo koje if narebe, sve tri printf naredbe se izvršavaju. Verovatno si želeo da se to štampanje obavlja samo jednom? Ako da, trebalo je da samo ubaciš te dve naredbe nakon if naredbe u blok naredbi. Drugi i jednostavniji način je da imaš samo jedno jedino štampanje na kraju sekvence i 'if - else if' stukturu:
if(tip==1)    cena=potrosnjaCitroen/100*kilometraza*cg; else if(tip==2)    cena=potrosnjaGolf/100*kilometraza*cg; else if(tip==3)    cena=potrosnjaPezo/100*kilometraza*cg; printf("Cena puta je %.3f",cena);Takođe, sve ovo si mogao da odradiš i u jednoj jedinoj naredbi, a ti razmisli kako... Smile

offline
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Napisano: 06 Dec 2016 19:30

U kompajleru mi izbavuje ovu gresku:
21 1 C:\Users\Home\Desktop\Milos program\projekat.cpp [Error] stray '\240' in program
Ne razumem sta znaci i sta je greska.

Dopuna: 06 Dec 2016 19:37

Resio sam to pomocu ovoga:

I had a similar error a couple of days ago. It was an extraneous hidden character I'd typed by accident. Try deleting all the whitespace in the line and then padding it out with spaces. That shoud clear the \240 character, which probably won't show in the source code.

Treba samo da se izbrisu tabovi i spejsovi sa leve strane i sve ce da radi. Posle se moze sve vratiti u normalu.

Dopuna: 06 Dec 2016 19:47

Resio sam zadatak uz pomoc ovoga sto si mi napisao. Juce sam citao clanak o tim kombinacijama if naredbi sto mi je dao @return void. Tu sam procitao o ovoj kombinaciji if-else if, ali sam to sad smetnuo sa uma. Znao sam da mi nesto u glavi kucka da znam kako da resim, ali ne mogu da se setim.

Znaci meni nije radilo kako sam ja hteo zato sto nisam definisao sta ce da se desi ako prva IF naredba nije tacna, odnosno, definisano je da ako je tacna da ispise printf("Cena puta je %.3f\n",cena);, ali nisam definisao sta da uradi ako nije tacno, odnosno, ako je ELSE. Onda sam namestio da ako prva IF naredba nije tacna da on sa ELSE predje na drugu IF naredbu, pa ako i ona nije tacna onda on prelazi na trecu i tako dalje.

U sustini, mislim da sam shvatio. Inace ovaj zadatak mi je pao na pamet dok sam se vracao iz skole, jer sam razmisljao o tome da napravim neki program koji ce mi realno za nesto posluziti i eto ideje. Videcu ako mogu da smislim jos nesto, pa ako ne mogu to sam da resim, potrazicu pomoc ovde.

Porazmislicu kako da resim to u jednoj naredbi, ali mi trenutno nista ne pada na pamet. Kao sto kazu "Sutra je novi dan", pa ce mozda nesto da mi sine.

Zelim da se zahvalim na ukazanoj pomoci.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14227
  • Gde živiš: Niš

Milos ZA ::Znaci meni nije radilo kako sam ja hteo zato sto nisam definisao sta ce da se desi ako prva IF naredba nije tacna, odnosno, definisano je da ako je tacna da ispise printf("Cena puta je %.3f\n",cena);, ali nisam definisao sta da uradi ako nije tacno, odnosno, ako je ELSE.Mislim da opet nisi shvatio... Confused

Kao što rekoh, suština je u ovome:
if(tip==1)    cena=potrosnjaCitroen/100*kilometraza*cg; printf("Cena puta je %.3f\n",cena);Ovde se naredba dodele izvršava samo kada je uslov if naredbe zadovoljen, ali se printf naredba izvršava uvek, apsolutno nezavisno od toga da li je uslov if naredbe zadovoljen ili ne, ili još tačnije totalno nezavisno od same if naredbe.
U ovakvom slučaju bi postigao ono što si ti želeo:
if(tip==1) {    cena=potrosnjaCitroen/100*kilometraza*cg;    printf("Cena puta je %.3f\n",cena); }U ovom slučaju se i naredba dodele i printf naredba izvršavaju samo ako je uslov if naredbe ispunjen.

Inače, else grana je za korektnost ovog zadatka totalno nebitna. Apsolutno bi isti rezultat dobio sa if(tip==1)    cena=potrosnjaCitroen/100*kilometraza*cg; if(tip==2)    cena=potrosnjaGolf/100*kilometraza*cg; if(tip==3)    cena=potrosnjaPezo/100*kilometraza*cg;   printf("Cena puta je %.3f",cena); kao i sa if(tip==1)    cena=potrosnjaCitroen/100*kilometraza*cg; else if(tip==2)    cena=potrosnjaGolf/100*kilometraza*cg; else if(tip==3)    cena=potrosnjaPezo/100*kilometraza*cg;   printf("Cena puta je %.3f",cena);Jedina razlika je u tome što bi izvršenje druge sekvence koda bilo nešto kraće, jer se ne bi uvek proveravala sva tri uslova (ako se izvrši then grana prve ili druge if naredbe odmah se skače na printf naredbu).

offline
  • Milos Stojanovic
  • Programer u pokusaju
  • Pridružio: 31 Dec 2015
  • Poruke: 828
  • Gde živiš: Srbija / Zajecar

Znaci, u prvom primeru, ako je uslov ispunjen, tacan, onda ce da se "ceni" dodeli vrednost, a ako nije onda nece i prelazi se na drugu naredbu.

Kod drugog primera printf zavisi od IF zbog toga sto je printf ubaceno u { }.

Ko je trenutno na forumu
 

Ukupno su 608 korisnika na forumu :: 35 registrovanih, 8 sakrivenih i 565 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 1567 - dana 15 Jul 2016 19:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Aleksandar Burgić, amir3045, aposoulyptic, Arhiv, batofilm, bojank, branko72, dimitrovskid, dolinalima, Drug pukovnik, Dusko Nikolin, duskovuk63, havoc995, Kubovac, Ljubitelj2, Lošmi, MegaVLAdaR, Metanoja, Mihajlo2, Mr. Majevica, nedeljkovici, RJ, rkekoke, royst33, t84dar, Toni, USSVoyager, VJ, vlvl, voja64, Wrangler2, yrraf, Zlatko580, zlatkovuka