GRANANJE U PROGRAMU
U jednostavnim primerima u programskom jeziku C, naredbe su se izvršavale u jednom toku, tj. jedna za drugom, do samog kraja programa. Ponekad se u program neke naredbe izvršavaju pod određenim uslovom.
Npr. posmatrajmo sledeći problem: Za učitane brojeve a i b izračunati vrednost razlomka a/b. |
Video tutorijal |
Posle deklaracije promenljivih i unosa a i b od strane korisnika dolazimo do dela gde je potrebno izračunati razlomak. Da li se može jednostavno uvesti promenljiva c i izračunati c=a/b ?
Poznato je da nije dozvoljeno deljenje sa nulom. To znači, da pre nego što se napiše gore napisana formula, mora prethodno proveriti da li je ispunjen uslov da je b različito od nule. Ako jeste, onda se može napisati formula i ispisati rezultat. U suprotnom, može da se, ili nešto alternativno uradi, npr. da se napiše poruka da nije dozvoljeno deljenje sa nulom, ili da se ne uradi ništa.
Zaključujemo da postoje dve varijante izvršenja programa, ili samo jedna, koje zavise od uslova da li je b različito od nule ili ne. To znači da dolazi do grananja u programu i da se grananje vrši na osnovu logičkog podatka ili izraza.
Poznato je da nije dozvoljeno deljenje sa nulom. To znači, da pre nego što se napiše gore napisana formula, mora prethodno proveriti da li je ispunjen uslov da je b različito od nule. Ako jeste, onda se može napisati formula i ispisati rezultat. U suprotnom, može da se, ili nešto alternativno uradi, npr. da se napiše poruka da nije dozvoljeno deljenje sa nulom, ili da se ne uradi ništa.
Zaključujemo da postoje dve varijante izvršenja programa, ili samo jedna, koje zavise od uslova da li je b različito od nule ili ne. To znači da dolazi do grananja u programu i da se grananje vrši na osnovu logičkog podatka ili izraza.
Logički podaci
To su podaci čija vrednost je rezultat nekog logičkog izraza i može imati dva stanja:
true-tačno
false-netačno
Za tip ovih podatka se koristi službena reč C++jezika "bool".
true-tačno
false-netačno
Za tip ovih podatka se koristi službena reč C++jezika "bool".
Logički podaci i izrazi.
Logičke relacije tj. izrazi su izrazi koji su zapravo rezultati nekih poređenja, i koriste sledeće operatore:
<, >, <=, >=, !, !=, ==
“manje od”, “veće od”, “manje ili jednako”, “veće ili jednako”, “negacija”, “nije jednako”, “jednako”
<, >, <=, >=, !, !=, ==
“manje od”, “veće od”, “manje ili jednako”, “veće ili jednako”, “negacija”, “nije jednako”, “jednako”
Primer logičkih izraza u programskom jeziku C
Za logički tip u C jeziku se koristi int tip podatka, kao da je ceo broj u pitanju s tim što se za vrednosti koriste dve stvari:
- pozitivni brojevi prestani logičku istinu ili tačno (Obično se koristi vrednost 1)
- negativni brojevi i nula za logičku neistinu
int a=10, b=8,c;
int d;//logički podatak
c=a+b; //celobrojni izraz
c=a>b; //c=1
d=a>b; //ispravno i iznosi d=1
d=!(a>b); //d=!(1), d=0
int d;//logički podatak
c=a+b; //celobrojni izraz
c=a>b; //c=1
d=a>b; //ispravno i iznosi d=1
d=!(a>b); //d=!(1), d=0
U C ++ jeziku imate baš poseban tip za logičke podatke(bool). To je tip koji ima dve vrednosti : TRUE i FALSE.
Primer logičkih izraza u C++
int a=10, b=8,c;
bool d; c=a+b; //celobrojni izraz c=a>b; //neispravno, neslažu se tipovi podataka d=a>b; //ispravno i iznosi true d=!(a>b); //false |
|
Logički podaci i složeniji izrazi
Da bi povezali više manjih logičkih izraza koristimo operatore:
“&&” – Logičko “i”
“||” – Logičko “ili”
Pretpostavimo da imamo sledeći kod:
int a,b,c;
a=10,b=4;c=2;
bool d,e;
Tada je:
d = (a==0) && (b>c) /* d=false && true;
d=false; */
e=(a==0) || (b>c) /* e=false || true;
e=true; */
Složeniji logički izraz koji je dobijen povezivanjem dva prosta logička izraza sa “&&” će biti tačan samo ako su oba prosta izraza tačna tj:
true && true = true
true && false = false
false && true = false
false && false = false
Složeniji logički izraz koji je dobijen povezivanjem dva prosta logička izraza sa “||” će biti tačan ako je bar jedan od prostih izraza tačan tj:
true || true = true
true || false = true
false || true = true
false || false = false
“&&” – Logičko “i”
“||” – Logičko “ili”
Pretpostavimo da imamo sledeći kod:
int a,b,c;
a=10,b=4;c=2;
bool d,e;
Tada je:
d = (a==0) && (b>c) /* d=false && true;
d=false; */
e=(a==0) || (b>c) /* e=false || true;
e=true; */
Složeniji logički izraz koji je dobijen povezivanjem dva prosta logička izraza sa “&&” će biti tačan samo ako su oba prosta izraza tačna tj:
true && true = true
true && false = false
false && true = false
false && false = false
Složeniji logički izraz koji je dobijen povezivanjem dva prosta logička izraza sa “||” će biti tačan ako je bar jedan od prostih izraza tačan tj:
true || true = true
true || false = true
false || true = true
false || false = false
Grananje u programu i logički podaci.
Logički podaci se koriste kao skretnica kod grananja u programu. Ako imamo logičku promenljivu b:
Selekcije - naredba if-else
Ovo grananje se vrši pomoću naredbe if-else
if( b )
{
naredba1;
}
else
{
naredba2;
}
Ako u drugoj grani nemamo naredbu onda ova grana služi da preskoči naredbu1
Ovo grananje se vrši pomoću naredbe if-else
if( b )
{
naredba1;
}
else
{
naredba2;
}
Ako u drugoj grani nemamo naredbu onda ova grana služi da preskoči naredbu1
Selekcije - naredba if
Preskakanje naredbe 1 sa slike se vrši pomoću naredbe if
if(b)
{
naredba1; // Ovo je uslovno izvršavanje naredbe 1
}
.
.
.
Bez obzira da li će se izvršiti naredba1 ili preskočiti, program nastavlja sa izvršavanjem posle zatvorene zagrade
Preskakanje naredbe 1 sa slike se vrši pomoću naredbe if
if(b)
{
naredba1; // Ovo je uslovno izvršavanje naredbe 1
}
.
.
.
Bez obzira da li će se izvršiti naredba1 ili preskočiti, program nastavlja sa izvršavanjem posle zatvorene zagrade
Grananje u programu i uslov
a>x je logički izraz i u ovom primeru daje false, tako da se naredba 1 neće izvršiti
Logički izraz može biti napisan direktno u maloj zagradi bez uvođenja boolean promenljive.
Pretpostavimo da imamo:
int a=3, x=5;
if(a>x)
{
naredba1;
}
.
.
.
a>x je logički izraz i u ovom primeru daje false, tako da se naredba 1 neće izvršiti
Logički izraz može biti napisan direktno u maloj zagradi bez uvođenja boolean promenljive.
Pretpostavimo da imamo:
int a=3, x=5;
if(a>x)
{
naredba1;
}
.
.
.
a>x je logički izraz i u ovom primeru daje false, tako da se naredba 1 neće izvršiti
Primer: Uneti ceo broj i odrediti da li je deljiv sa 3
Rešenje:
Broj je deljiv sa 3 ako je ostatak deljenja broja koji se unese i broja 3 jednak nuli. Naredbu if-else ćemo koristiti da bi napravili grananje u programu, tako da se u jednoj grani ispiše poruka(printf) "Broj je deljiv sa 3", dok će se u drugoj grani ispisati druga poruka: "Broj nije deljiv sa 3". Da bi smo napisali uslov za grananje potrebno je odrediti ostatak deljenja. Za to se upotrebljava operator "%". Dakle ostatak deljenja broja a i broja 3 je: a%3. Zatim se proverava da li je jednak nuli. Dakle, a%3 == 0 |
|
#include < stdio.h >
/*Uneti ceo broj i odrediti da li je deljiv sa 3*/
int main()
{
/*Uneti ceo broj i odrediti da li je deljiv sa 3*/
int main()
{
int a;
printf("Unesi ceo broj\n");
scanf("%d",&a);
if((a % 3) == 0)
}printf("Unesi ceo broj\n");
scanf("%d",&a);
if((a % 3) == 0)
printf("Broj %d je deljiv sa 3\n",a);
else
printf("Broj %d nije deljiv sa 3\n",a);
return 0;Posle pokretanja programa:
Grananje u programu sa 3 grane
Grananje u programu kada imamo 3 grane ili više, ostvaruje se pomoću if-else if-else ili if-else if-else if naredbe. U prvom slučaju su potrebna 2, a u drugom slučaju 3 uslova.
Ovo grananje se vrši pomoću npr. pomoću naredbe if-else if- else i dva uslova(logičke promenljive)
if(b1) { naredba1; } else if(b2) { naredba2; } else{ naredba3; } gde su b1 i b2 logičke promenljive |
Grananje u programu sa 3 grane - video lekcijaU ovom videu je opisano grananje u programu sa 3 i više grana. Naredbe: if-else if-else, if-else if - else if. U nastavku videa je opisana switch naredba, Takođe su pokazana i 2 primera rešena pomoću CodeBlock-a.
|
Posmatrajmo sledeći primer:
Primer 2: Uneti dva realna broja preko standardnog ulaza i uporediti njihove vrednosti
Rešenje:
Posle unosa broja a i b sa tastature, program se grana na 3 grane, jer postoje 3 varijante da se program izvrši. Varijante su u stvari poruke koje će biti ispisane pomoću printf naredbe:
Posle unosa broja a i b sa tastature, program se grana na 3 grane, jer postoje 3 varijante da se program izvrši. Varijante su u stvari poruke koje će biti ispisane pomoću printf naredbe:
- " a je veće od b"
- " a je jednako b"
- " a je manje od b"
Od ponuđene 3 varijante, tj. tri moguće poruke samo jedna će se izvršiti:
Za prvi uslov tačan izvršava se prva varijanta
Za prvi uslov netačan, a drugi uslov tačan, druga varijanta i
Za prvi i drugi uslov netačan, treća varijanta
Takođe treba uočiti da else klausula, koja može biti samo poslednja, ne zahteva eksplicitno pisanje uslova, nego se on podrazumeva: Ako nije a > b i ako nije tačno da je a == b, onda zakljucujemo da je a < b.
Ovo se može rešiti i sa else if naredbom na poslednjem mestu, ali ona zahteva uslov eksplicitno(zaokruženo crvenim- vidi sliku ispod).
Za prvi uslov tačan izvršava se prva varijanta
Za prvi uslov netačan, a drugi uslov tačan, druga varijanta i
Za prvi i drugi uslov netačan, treća varijanta
Takođe treba uočiti da else klausula, koja može biti samo poslednja, ne zahteva eksplicitno pisanje uslova, nego se on podrazumeva: Ako nije a > b i ako nije tačno da je a == b, onda zakljucujemo da je a < b.
Ovo se može rešiti i sa else if naredbom na poslednjem mestu, ali ona zahteva uslov eksplicitno(zaokruženo crvenim- vidi sliku ispod).
Za pisanje naredbi kao varijante programa u grananju nisu korišćene zagrade, jer u svakoj grani postoji samo po jedna naredba. U slučaju da ima više naredbi unutar neke od grane, stavljanje tih naredbi unutar bloka sa vitičastim zagradama bi bilo obavezno.
Primer 3: Odabir Figura
Tekst:
Omogućiti prvo korisniku, da odabere jednu od tri geometrijske figure: 1-Kvadrat, 2-Krug, 3-Paralelogram, a zatim da unese potrebne ulazne podatke za odabranu figuru i izračuna njenu površinu |
Rešenje
Primer iz oblasti "Grananje u programu" u programskom jeziku C. Kroz zadatak je pokazana upotreba algoritma, naredba switch i kakva je razlika u odnosu na rešavanje istog zadatka pomoću if-else if-else naredbe
|
grananjeuprogramu.pdf |
Sledeće
Petlje u programskom jeziku C/C++ >| |