GRANANJE U PROGRAMU U C++

U osnovnim primerima u programskom jeziku C++, naredbe se mogu izvršavati sekvencijalno, jedna za drugom, kao što je to slučaj u jeziku C. Međutim, u realnim aplikacijama često je potrebno prilagoditi tok izvršavanja programa na osnovu određenih uslova. Ovaj proces se naziva grananje, jer omogućava programu da se u nekom trenutku deli na dve ili više grana izvršavanja. Na slici 1 - desno, prikazano je jednostavno grananje sa dve grane. Program započinje sa jednom sekvencom izvršavanja, zatim dolazi do grananja, gde se na osnovu ispunjenosti uslova bira jedna od dve moguće grane izvršavanja.
Uslov predstavlja logički izraz koji može imati dve vrednosti:
U jeziku C++ postoji poseban tip podataka za logičke vrednosti, nazvan bool. Vrednost true se interno interpretira kao 1, dok se vrednost false interpretira kao 0. Ovo je unapređenje u odnosu na jezik C, gde se za logičke vrednosti koristi tip int, sa 0 kao neistinom i bilo kojom pozitivnom vrednošću kao istinom.

Grananje u programu sa 2 grane

Grananje u programu: Poređenje programa u jednom toku i sa grananjem u programu
Slika 1: Grananje u programu: Poređenje programa u jednom toku i sa grananjem u programu
Grananje omogućava programima da donose odluke na osnovu zadatih uslova, čime se otvara mogućnost prilagođavanja toka izvršavanja. Na prethodnoj slici prikazano je osnovno grananje u programu sa dve grane, gde svaka grana sadrži bar jednu naredbu (naredba 2 u levom toku, a naredba 3 u desnom).
Međutim, postoje situacije kada je potrebno omogućiti izvršavanje određene naredbe samo ako je ispunjen određeni uslov, dok u drugom toku nema naredbi za izvršenje. Ovo se naziva uslovno izvršavanje, i dijagram toka za takve situacije je prikazan na narednoj slici (slika 2).
Na levom dijagramu toka, ako je vrednost uslova 0 (FALSE), program zaobilazi naredbu 2 i nastavlja dalje bez njenog izvršenja. Na desnom dijagramu toka, vidimo slično grananje sa dodatkom mogućnosti da se izvršavanje u jednoj grani preskoči ako uslov nije zadovoljen.
U jeziku C++ ovakvo grananje često koristi ključne reči poput if i else, a zbog postojanja bool tipa podataka, izrazi koji se koriste za uslov mogu biti izraženiji i intuitivniji. Na primer:

if(uslov){
// Naredba se izvršava ako je uslov tačan
naredba2();
}
// Tok nastavlja dalje ovde bez dodatne grane
​Ova struktura omogućava jednostavniju i pregledniju implementaciju odluka u programima, što doprinosi čitljivosti i održivosti koda.

​Sličnosti i razlike sa grananjem u C jeziku

Sličnosti

1. Osnovne strukture grananja:
if (uslov) {
// Kod za izvršenje
} else {
// Alternativni kod
}
  1. Logički izrazi:
    • Oba jezika koriste iste logičke operatore:
      • && (logičko "i"),
      • || (logičko "ili"),
      • ! (logička negacija).
  2. Prekid i nastavak toka u switch strukturi:
    • Oba jezika koriste break za prekidanje switch grananja i default za podrazumevane slučajeve.

Razlike

Tipovi podataka u uslovima Primer:c

​if (10) {
    printf("Ovo će se uvek izvršiti u C.\n");
}
C++:
bool uslov = true;
if (uslov) {
    std::cout << "Ovo će se izvršiti u C++.\n";
}
 2. Funkcionalnosti u grananju​
auto uslov = []() { returntrue; };
if (uslov()) {
std::cout << "Lambda uslov je tačan.\n";
}
3. switch sa složenim izrazima 4. else if vs else if kao jedan blok 5. Integracija sa objektno orijentisanim konceptima (C++) ZaključakIako osnovne strukture grananja u C i C++ ostaju slične, C++ pruža dodatne funkcionalnosti koje omogućavaju veću fleksibilnost i bolju integraciju sa modernim programskim praksama, poput korišćenja bool tipa, lambda izraza i constexpr evaluacije. U C jeziku, fokus ostaje na jednostavnosti i kompatibilnosti sa starijim verzijama jezika.

Logički podaci i složeniji izrazi

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 podataka koristi se 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”

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 bismo 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;
d = (a == 0) && (b > c); /* d = false && true;
d = false; */

e = (a == 0) || (b > c); /* e = false || true;
e = true; */

Složeniji logički izrazi sa “&&”

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 izrazi sa “||”

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. Na sledećoj slici su prikazana grananja u programu na osnovu postavljenog uslova. Na slici levo je prikazamo uslovno izvršenje naredbe 2. Prvo se izvršava naredba 1 u jednom toku, a zatim se proverava tačnost uslova. Ako je tačan izvršiće se naredba 2, a ako nije neće se izvršiti ni jedna. Uslov na dijagramu može biti ili logički podatak tipa bool ili logički izraz, takođe tipa bool.
Na slici desno, je prikazano grananje na dve grane, na osnovu logičke promenljive Uslov(ili logičkog izraza). Ako je tačan izvršiće se grana levo, tj. naredba 2, a ako je netačan onda će se izvršiti naredba 3.
Ovo omogućavaju naredba if (za slučaj levo) ili naredba if-else za slučaj desno.Grananje u programu, algoritam za if-else naredbu
Slika 2: Grananje u programu, algoritam za if-else naredbu

Grananje u programu: if-else naredba

Naredba if-else omogućava grananje u programu kao što je prikazano na sledećoj slici(slika 3):Grananje u programu: if-else naredba, algoritam i sintaksa
Slika 3: Grananje u programu: if-else naredba, algoritam i sintaksa
Na slici je sa leve prikazana sintaksa naredbe, a sa desne strane dijagram toka. Ovde se vidi da se u levoj grani, koja se izvršava ako je uslov =true, izvršava naredba 2(obojena plavo), a u desnoj grani, ako je uslov=false, se izvršava naredba 3(obojena zeleno). U granama se mogu naći više od jedne naredbe i onda one moraju biti obuhvaćene vitičastim zagradama, kao što je pokazano u nastavku:
// Naredbe 1
if(uslov)
{
// Naredbe 2
}
else
{
// Naredbe 3
}

​Ako u drugoj grani nemamo naredbu onda ova grana služi da preskoči naredbu 2, i onda se koristi samo if naredba, bez klauzule else, kao što je prikazano u nastavku.Selekcije - naredba if

Pretpostavimo da se naredba 1 vrši u 1 toku a onda da se naredba 2 izvršava ako je određen uslov ispunjen, onda bi dijagram toka i kod izgledali kao na slici 4. Uslovno izvršenje neke naredbe se  vrši pomoću naredbe if:
​

Grananje u programu: if naredba, bez else, algoritam i sintaksa
Slika 4: Grananje u programu: if naredba, bez else, algoritam i sintaksa
U grani sa naredbama može biti i više naredbi kao što je pokazano na sledećem primeru:
// Naredbe 1
if(uslov)
{
// Naredbe 2
}
Bez obzira da li će se izvršiti naredbe2 ili preskočiti, program nastavlja sa izvršavanjem posle zatvorene zagrade.

Primer: Provera ispravnosti unetog podatka

Zadatak: Uneti dužinu stranice  kvadrata a i ispitati da li je podatak ispravan. Napomena: Podatak se smatra ispravnim ako je pozitivan brojGrananje u programu: Primer primene if-else naredbe na primeru koji proverava ispravnost unetog podatka
Slika 5: Grananje u programu: Primer primene if-else naredbe na primeru koji proverava ispravnost unetog podatka

Rešenje u C++

#include<iostream>
// Provera ispravnosti unosa dužine stranice kvadrata
using namespacestd;

int main() {
double a;
cout << "Unesite dužinu stranice kvadrata: ";
cin >> a;

if (a > 0) {
cout << "Unesena dužina je ispravna: " << a << ".";
} else {
cout << "Unesena dužina nije ispravna. Dužina mora biti pozitivan broj.";
}

return 0;
}

Objašnjenje

  • #include <iostream> uključuje biblioteku za ulaz i izlaz.
  • Koristi se cin za unos vrednosti promenljive a, koja predstavlja dužinu stranice kvadrata.
  • Proverava se da li je a veće od nule:
    • Ako jeste, ispisuje se poruka da je dužina ispravna.
    • Ako nije, ispisuje se upozorenje da dužina mora biti pozitivan broj.
  • Na kraju program vraća vrednost 0, što označava uspešno izvršenje programa.

Testirajte svoje kodove!

// Ovde pišite C++ kod...

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(cout) "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 <iostream>

/* Uneti ceo broj i odrediti da li je deljiv sa 3 */
int main()
{
int a;
std::cout << "Unesi ceo broj: " << std::endl;
std::cin >> a;
if ((a % 3) == 0)
std::cout << "Broj " << a << " je deljiv sa 3" << std::endl;
else
std::cout << "Broj " << a << " nije deljiv sa 3" << std::endl;
return 0;
}
Posle pokretanja programa:Grananje u programu, primer
Slika 6: Grananje u programu, primer "Deljivost sa 3"-izvršenje

​Detaljnije objašnjenje "if" naredbe

"if" Izraz

"if" izraz omogućava uslovno izvršavanje koda na osnovu specificiranog uslova.

Sintaksa:

if (uslov) {
// Kod koji se izvršava ako je uslov tačan
}

Primer sa jednostavnim uslovom:

#include <iostream>
using namespace std;

int main() {
int broj;
cout << "Unesite broj: ";
cin >> broj;

if (broj > 0) {
cout << "Broj je pozitivan." << endl;
  }

return 0;
}

U ovom primeru, kod unutar if bloka se izvršava samo ako je uslov broj > 0 tačan.

Kompleksni uslovi

Često je potrebno evaluirati više uslova. Logički operatori poput && (AND) i || (OR) koriste se za kombinovanje uslova:

Primer sa logičkim operatorima:

#include <iostream>
using namespace std;

int main() {
int x, y;
cout << "Unesite dve vrednosti (x i y): ";
cin >> x >> y;

if (x > 0 && y < 10) {
cout << "x je pozitivan, a y je manji od 10." << endl;
  }

if (x < 0 || y > 20) {
cout << "x je negativan ili y je veći od 20." << endl;
  }

return 0;
}

Objašnjenje:

  • x > 0 && y < 10: Oba uslova moraju biti tačna da bi se kod unutar if bloka izvršio.
  • x < 0 || y > 20: Kod se izvršava ako je barem jedan uslov tačan.

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.Pogledajmo sada prvi slučaj sa 2 uslova:Picture
Slika 7: Grananje u programu sa 3 grane u jeziku C++, ostvareno sa dva uslova(logička izraza).
Naredba za grananje u skladu sa algoritmom prikazanom na slici 4 bi bila:
// Naredbe 0
if(Uslov1)
{
// Naredbe 1
}
else if(Uslov2)
{
// Naredbe 2
}
else
{
// Naredbe 3
}

Objašnjenje:

  1. Struktura koda:

    Kod prikazuje strukturu if-else if-else naredbe u C++ jeziku, koja omogućava grananje toka izvršavanja programa na osnovu različitih uslova.

  2. Elementi koda:

    Uslov1, Uslov2 su logički izrazi (uslovi).

    • Ako je Uslov1 tačan, izvršiće se naredbe 1, a ostale grane će biti preskočene.
    • Ako je Uslov1 netačan, ali je Uslov2 tačan, izvršiće se naredbe 2, a ostale grane će biti preskočene.
    • Ako su i Uslov1 i Uslov2 netačni, izvršiće se naredbe 3 iz else bloka.
  3. Opis ponašanja:
    • if (Uslov1): Proverava prvi uslov (Uslov1). Ako je tačan, izvršava blok koda unutar prve grane (naredbe 1), a ostale grane se ignorišu.
    • else if (Uslov2): Proverava drugi uslov (Uslov2) samo ako je prvi uslov netačan. Ako je drugi uslov tačan, izvršava se blok koda unutar druge grane (naredbe 2).
    • else: Izvršava se samo ako su svi prethodni uslovi netačni. Ovaj blok obezbeđuje "podrazumevani" scenario (naredbe 3).
  4. Uloga boja:

    Naredbe 1, 2 i 3 koriste različite boje kako bi naglasile svoju funkciju:

    • Zelena: Naredbe koje se izvršavaju za prvu granu (if).
    • Crvena: Naredbe koje se izvršavaju za drugu granu (else if).
    • Plava: Naredbe koje se izvršavaju u poslednjoj grani (else).
  5. Primer upotrebe:

    Zamislite program koji analizira ocenu studenta i daje povratne informacije:

Umesto poslednjeg else bloka možemo staviti else if blok koji zahteva 3. uslov. Ovo je pokazano na sliciGrananje u programu sa 3 grane u jeziku C++, ostvareno sa 3 uslova - algoritam
Slika 8: Grananje u programu sa 3 grane u jeziku C++, ostvareno sa 3 uslova - algoritam
Na slici je prikazan drugi slučaj, a to je grananje sa 3 grane: Program prvo izvršava naredbe 0 u jednom toku(grani) a zatim se deli na osnovu postavljena 3 uslova na 3 grane. Prvo se ispituje uslov 1. Ako je on tačan izvršiće se naredbe 1. Ako taj uslov nije tačan onda se ispituje uslov 2. Ako je on tačan izvršavaju se naredbe 2. Ako uslov 2 nije tačan onda se ispituje uslov 3. Ako je tačan izvršiće se naredbe 3, a ako nije preskočiće se sve naredbe. Program se posle toga vraća u jedan tok(vidi kako se strelice ulivaju u kružić na dijagramu).
Kod koji je predstavljen ovim dijagramom bi bio:
// Naredbe 0
if (uslov1) {
// Naredbe 1
} else if (uslov2) {
// Naredbe 2
} else if (uslov3) {
// Naredbe 3
}

Grananje u programu sa 3 grane - video lekcija

​U 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 cout naredbe:​Prvo treba postaviti prvi uslov pomoću if naredbe, npr. da li je a veće od b(a>b). Sa ovim uslovom dobijamo dve te sledeći grane jedna za tačan uslov i tada se ispisuje prva poruka. Druga za netačan uslov, ali s obzirom da imamo jos dve mogućnosti, potreban nam je još bar jedan uslov. Npr. "da li je a jednako nuli"(a==0). Ovo ide uz else ifklauzula odmah ispod prve varijante. Drugu varijantu dobijamo za ovaj uslov tačan. Treću varijantu dobijamo za ovaj uslov netačan i to se piše uz klauzulu else. Sledeći kod ovo pokazuje:
#include <iostream>
using namespace std;

// Program koji ispisuje odnos između dva broja a i b
int main() {
int a, b;
cout << "Unesite broj a: ";
cin >> a;
cout << "Unesite broj b: ";
cin >> b;

if (a > b) {
cout << "a je veće od b" << endl;
} else if (a == b) {
cout << "a je jednako b" << endl;
} else {
cout << "a je manje od b" << endl;
}

return 0;
}
Posle pokretanja na izlazu:Grananje u programu, primer
Slika 9: Grananje u programu, primer "Poredjenje brojeva"-kompletno
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:
#include <iostream>
using namespace std;

// Program koji ispisuje odnos između dva broja a i b
int main() {
int a, b;
cout << "Unesite broj a: ";
cin >> a;
cout << "Unesite broj b: ";
cin >> b;

if (a > b) {
cout << "a je veće od b" << endl;
} else if (a == b) {
cout << "a je jednako b" << endl;
} else if (a < b) {
cout << "a je manje od b" << endl;
}

return 0;
}
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

Zadatak:
​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
Prethodno
​|<Operatori u C++ jeziku
​Sledeće
​​Petlje u programskom jeziku C++>|

Srodni članci

Grananje u programu-primeri
Podaci
Grananje u programu - JAVA
Nizovi-primeri
Algoritmi