cpp grananje

Upload: demir-gazetic

Post on 09-Jan-2016

235 views

Category:

Documents


0 download

DESCRIPTION

c++ programiranje sve o programiranju sve s e ss d d ddddds dsasada dsadsa dsa ewqwe qwe qew qrqwrwqrwq qoiriwqjrqirqw r qwrw q we q wq e qew[p lkczcz xv d fa sd a efasdadsad asda qweq weqe wqp[[poij ewqoije

TRANSCRIPT

  • (c) S.utalo i D.Grundler, 2005.*C++Grananje8. dio

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*GrananjeTijek programa katkad ovisi o ulaznim podacima ili o meurezultatima obrade. Struktura kod koje se ovisno o stanju podataka odvija jedan od moguih dijelova (grana) programa, naziva se grananje.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*GrananjeKao primjer grananja moe posluiti ovaj zadatak.

    Treba izraunati i ispisati apsolutnu vrijednost broja kojeg upie korisnik.

    Treba uoiti da redoslijed izvravanja naredbi ovisi o ulaznom podatku.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Dijagram tijeka grananjaDijagram toka grananja za raunanje apsolutne vrijednosti broja.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Blok naredbiDijelovi programa koji se uvjetno izvode objedinjavaju se u blokove naredbi. Blokovi naredbi se piu uvueno (zbog preglednosti).

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Blok naredbiSvaki se blok naredbi omeuje parom otvorena-zatvorena vitiasta zagrada (osim sluaja kada se blok sastoji od samo jedne naredbe, tada se zagrade mogu izostaviti).

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Blok naredbiAko se varijable deklariraju unutar bloka, vidljive su samo unutar bloka u kome su deklarirane i u glavnoj funkciji ne postoje.Varijable deklarirane unutar bloka nazivaju se lokalne i mogu zakloniti istoimene varijable prethodno deklarirane izvan bloka.(Zbog toga unutar bloka nije uputno deklarirati varijable istog imena kakvo je koriteno izvan bloka jer to moe izazvati zabunu.)

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 34Zadatak (varijabla deklarirana unutar bloka):Treba deklarirati cjelobrojnu varijablu x unutar zasebnog bloka, pa joj pridruiti vrijednost. Pokuati ispisati vrijednost te varijable u glavnoj funkciji. Ispis neka bude oblika:Upisi cijeli broj u bloku:Vrijednost varijable iz bloka x=....

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 34BLOK

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*#includeusing namespace std;int main() { {int x;cout
  • (c) S.utalo i D.Grundler, 2005.*Primjer 34Pri pokuaju prevoenja bit e prijavljena pogreka.

    Varijable deklarirane unutar bloka vidljive su samo unutar tog bloka. U glavnoj funkciji varijabla x ne postoji. Zato se pri prevoenju javlja pogreka.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Naredbe grananjaStruktura grananja se moe ostvariti naredbama:if (if else, if else if - else),switch case.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Grananje naredbom ifNaredba if omoguava uvjetno grananje programa.Daljnji tijek programa ovisi o ispunjenju uvjeta navedenog iza kljune rijei if.Uvjet (logiki izraz) se upisuje unutar para okruglih zagrada.Na kraju naredbe if ne stavlja se znak ;

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Naredba if osnovni oblik

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Naredba if osnovni oblikif (logiki izraz) {blok naredbi}naredba iza bloka10Ako je vrijednost logikog izraza istina (1), izvodi se blok naredbi koji se nalazi iza naredbe if. Ako je vrijednost logikog izraza neistina (0), blok se preskae i izvoenje se nastavlja od prve naredbe iza bloka.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 35Zadatak (osnovni oblik naredbe if):Treba unijeti cijeli broj pa provjeriti da li je negativan ili pozitivan. U oba sluaja ispisati apsolutnu vrijednost broja. Ispis neka bude oblika:Upisi broj:Broj...je.... Njegova apsolutna vrijednost je....

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 35Primjer e biti rijeen pomou dvije if naredbe.Ako je (a < 0) izvrit e se blok naredbi nakon if naredbe.Ako uvjet nije zadovoljen, blok naredbi nakon prve if naredbe se preskae i izvoenje programa se nastavlja od prve naredbe iza bloka.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 35Prva naredba iza bloka je provjera drugog uvjeta (a > 0). Ako nije ispunjan niti prvi niti drugi uvjet (tj. ako je a = 0), blok naredbi nakon druge if naredbe se preskae i izvoenje programa se nastavlja od naredbe iza drugog bloka.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 351. BLOK1102. BLOK01

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*#includeusing namespace std;int main() { int a;couta;if(a
  • (c) S.utalo i D.Grundler, 2005.*Primjer 35Za (a < 0):

    Za (a > 0):

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 35Ako nije ispunjen ni prvi ni drugi uvjet, program se prekida.(a = 0)

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Grananje dvije neovisne grane

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Grananje dvije neovisne grane if (logiki izraz)prvi blok naredbielsedrugi blok naredbinaredba iza blokaAko je vrijednost logikog izraza istina (1), izvodi se prvi blok naredbi. Po njegovom zavretku izvoenje se nastavlja od prve naredbe iza drugog bloka.Ako je vrijednost logikog izraza neistina (0), preskae se prvi blok i izvodi se drugi blok naredbi (iza else). Nakon toga se izvode naredbe kako slijede.01

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 36Zadatak (oblik naredbe if else):Treba unijeti cijeli broj razliit od 0 pa provjeriti je li negativan ili pozitivan. U oba sluaja ispisati apsolutnu vrijednost broja. Ispis neka bude oblika:Upisi broj razlicit od 0:Broj...je....Njegova apsolutna vrijednost je....

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 36Primjer je rijeen uz pomo if else naredbe.Uneseni broj mora biti razliit od 0. Ako je (a < 0) izvrit e se prvi blok naredbi.Ako a nije manje od 0, preskae se prvi blok i izvodi se drugi blok naredbi.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 361. BLOK2. BLOK10

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*#includeusing namespace std;int main() { int a;couta;if(a
  • (c) S.utalo i D.Grundler, 2005.*Primjer 36Za (a < 0):

    Ako uvjet nije ispunjen:

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 36 dopunato ako korisnik ne proita uputu paljivo, pa unese broj 0?Rezultat nee biti ispravan: Broj 0 je pozitivan. Njegova .....Stoga bi bilo dobro izbjei takvu situaciju. Ako korisnik unese nulu, neka dobije upozorenje, pa neka ponovi unos broja koji e zadovoljiti postavljeni uvjet.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 36 gotoDa bi se program mogao nastaviti od odabranog programskog retka (u ovome sluaju od naredbe unosa broja), potrebna je odgovarajua naredba koja e to i omoguiti. Naredba goto je naredba bezuvjetnog skoka (omoguava nastavak programa od odabranog programskog retka).

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Naredba gotoOpi oblik je:goto ime_oznake; ime_oznake je simboliki naziv odabranog programskog retka od kojeg se program eli nastaviti.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Naredba gotoSimboliki se naziv stavlja ispred naredbe na koju se eli "skoiti" (preusmjeriti program). Iza simbolikog naziva dolazi znak dvotoka (:). Naredba na koju se eli skoiti moe se nalaziti bilo gdje.

    Naredba goto najee smanjuje razumljivost i preglednost kda pa ju nije preporuljivo rabiti.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 36 dopuna

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*#includeusing namespace std;int main() { int a;upis:couta;if(a==0){cout
  • (c) S.utalo i D.Grundler, 2005.*Primjer 36 dopunaZa a == 0

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Ulanena if naredbaBlokovi if naredbi se mogu ulaniti.

    if (logiki izraz 1)prvi blok naredbielse if (logiki izraz 2)drugi blok naredbi.....elsezadnji blok naredbi011100

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Ulanena if naredbaAko je vrijednost logikog izraza1 logika istina (1), izvodi se prvi blok naredbi. Po njegovom zavretku izvoenje se nastavlja od prve naredbe iza zadnjeg bloka naredbi.

    Ako vrijednost logikog izraza1 nije logika istina (0), provjerava se vrijednost logikog izraza2 i ovisno u njegovoj vrijednosti izvodi se drugi blok naredbi ili se program nastavlja iza njega.

    Ako niti jedna vrijednost logikih izraza nije logika istina izvodi se zadnji blok naredbi iza naredbe else.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 37Zadatak (oblik ulanene naredbe if):Primjer 36 treba dopuniti tako da se u sluaju unesene nule ispie odgovarajua poruka. Ispis neka bude oblika:Upisi broj:Broj...je....Njegova apsolutna vrijednost je....iliUnio si 0. Apsolutna vrijednost od 0 je 0.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 371001

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*#includeusing namespace std;int main() { int a;couta;if (a==0){cout
  • (c) S.utalo i D.Grundler, 2005.*else if (a
  • (c) S.utalo i D.Grundler, 2005.*Primjer 37Ako se unese 0, poruka e biti:

    U ostalim sluajevima, provjera je ista kao u primjeru 36.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Ugnjeivanje if naredbiMogue je ugnjeivati if naredbe jedne unutar drugih. Ugnjeivanje e biti prikazano na sljedeem primjeru.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 38Zadatak (oblik ugnjeenih naredbi if):Treba upisati cijeli broj razliit od 0. Treba provjeriti je li broj vei ili manji od 100, te je li paran ili neparan. Ispis neka bude oblika:Upisi broj:Uneseni broj je ... od 100 i ....

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 38Vanjska if naredba provjerava je li broj vei ili manji od 100. Ako se unese broj 100, ispisuje se odgovarajua poruka.Unutarnje if naredbe (neovisno o tome je li broj vei ili manji od 100) provjeravaju parnost broja.Parnost se provjerava operatorom modulo (ostatak dijeljenja sa 2 se usporeuje sa 0).

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 38vanjski if ugnjeeni if ugnjeeni if

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*#includeusing namespace std;int main() { int a;couta;if (a
  • (c) S.utalo i D.Grundler, 2005.*else if{cout
  • (c) S.utalo i D.Grundler, 2005.*Primjer 38Provjera

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Uvjetna naredba kratki oblikAko su uvjet (logiki izraz) i naredbe blokova kratki, umjesto if else naredbi moe se rabiti skraeni oblik zapisa.

    (logiki izraz) ? (1. blok naredbi) : (2. blok naredbi)

    Ovaj se oblik koristi kada logiki izraz i naredbe blokova stanu u jedan redak.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Uvjetna naredba kratki oblikif (a
  • (c) S.utalo i D.Grundler, 2005.*Primjer 39Zadatak (uvjetna naredba skraenog oblika): Treba unijeti cijeli broj razliit od 0 pa ispisati apsolutnu vrijednost broja. Ispis neka bude oblika:Upisi broj:Apsolutna vrijednost je....

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 39

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*#includeusing namespace std;int main() { int a;couta;(a
  • (c) S.utalo i D.Grundler, 2005.*Grananje naredbom switchNaredba switch case omoguava viestruko grananje.Iza naredbe switch dolazi cjelobrojni izraz u zagradi.Rezultat cjelobrojnog izraza je cjelobrojna konstanta. Ovisno o vrijednosti konstante izvodi se odgovarajui blok naredbi (grana).

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*switch case (opi oblik)

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*switch (opi oblik)switch (cjelobrojni izraz){case (1. konstanta):prvi blok naredbibreak; case (2. konstanta):drugi blok naredbibreak; .........default:zadnji blok naredbi}

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*switch (opi oblik)Prvo se izraunava vrijednost cjelobrojnog izraza u zagradi (to je postavljeni uvjet).Zatim se dobivena vrijednost izraza (konstanta) usporeuje s nizom zadanih konstanti.Ako je dobivena vrijednost izraza jednaka bilo kojoj od zadanih konstanti izvrava se blok naredbi pridruen toj konstanti.Po zavretku bloka naredba break oznaava izlaz iz swith case bloka.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*switch (opi oblik)Ako dobivena vrijednost izraza nije jednaka niti jednoj od zadanih konstanti, izvrava se blok naredbi pridruen default naredbi.Cjelokupni switch case blok zapisuje se unutar para otvorena-zatvorena vitiasta zagrada.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 40Treba izraunati ukupni otpor za otpore R1 i R2 ovisno o tome jesu li spojeni serijski ili paralelno. Ispis neka bude oblika:Otpor R1 (u omima):Otpor R2 (u omima):Za serijski spoj otpora upisi 1, a za paralelni 2:Ako se otpori od ... oma i ... oma spoje u ... ukupni je otpor ... oma.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 40Rabi se naredba grananja switch case.Postoje dvije grane (jedna za serijski spoj (1), druga za paralelni (2) ).Ovisno o tome to korisnik upie (broj 1 ili broj 2) izvrit e se jedna od dvije grane.U sluaju da korisnik unese vrijednost koja nije 1 ili 2, ispisat e se upozorenje.

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 40

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*#includeusing namespace std;int main() { float R, R1,R2;int i;coutR1;coutR2;couti;

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*switch (i){case 1:R=R1+R2;cout
  • (c) S.utalo i D.Grundler, 2005.*default:cout
  • (c) S.utalo i D.Grundler, 2005.*Primjer 40Provjera:

    (c) S.utalo i D.Grundler, 2005.

  • (c) S.utalo i D.Grundler, 2005.*Primjer 40Ako se ne upie broj 1 ili 2 ispisat e se ova poruka:

    (c) S.utalo i D.Grundler, 2005.

    ********************************************************************