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:
- true: što označava logičku istinu.
- false: što označava logičku neistinu.
Grananje u programu sa 2 grane
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:
naredba2();
// Tok nastavlja dalje ovde bez dodatne grane
Sličnosti i razlike sa grananjem u C jeziku
Sličnosti
1. Osnovne strukture grananja:- Oba jezika koriste if, else if, else, i switch za kontrolu toka programa.
- Sintaksa za ove strukture je identična:
- Logički izrazi:
- Oba jezika koriste iste logičke operatore:
- && (logičko "i"),
- || (logičko "ili"),
- ! (logička negacija).
- Oba jezika koriste iste logičke operatore:
- 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- C:
- U C jeziku, uslov u grananju može biti bilo koji izraz koji se može interpretirati kao celobrojna vrednost:
- 0 se smatra lažnim.
- Sve što nije 0 smatra se istinitim.
- U C jeziku, uslov u grananju može biti bilo koji izraz koji se može interpretirati kao celobrojna vrednost:
if (10) {
printf("Ovo će se uvek izvršiti u C.\n");
}
C++:
- C++ ima dodatnu strožiju logiku i podržava bool tip uveden u C++98.
- U C++ jeziku je preporučljivo koristiti bool za logičke uslove, što čini kod čitljivijim i manje podložnim greškama.
- Primer:
if (uslov) {
std::cout << "Ovo će se izvršiti u C++.\n";
}
2. Funkcionalnosti u grananju
- C:
- Nema podršku za napredne mehanizme kao što su lambda izrazi ili klasični std::function objekti za logičke izraze.
- C++:
- Pruža dodatne mogućnosti kao što su lambda izrazi, što omogućava složenije i fleksibilnije grananje:
if (uslov()) {
- C:
- switch u C može koristiti samo integralne tipove (int, char, enum).
- C++:
- U modernim verzijama C++ (C++11 i kasnije), moguće je koristiti constexpr izraze i enum class u switch strukturama, što nije moguće u C.
- C:
- Tehnički, else if nije specifična ključna reč, već kombinacija else { if }.
- C++:
- Funkcionalnost ostaje ista, ali zbog strože logike sa tipovima, logički izrazi u grananju mogu biti provereni pomoću statičke analize kompajlera.
- U C++, grananje se može integrisati sa metodama i svojstvima klasa, što omogućava složenije logike u objektno-orijentisanim programima.
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++
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:
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 && 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 || 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: if-else naredba
Naredba if-else omogućava grananje u programu kao što je prikazano na sledećoj slici(slika 3):
if(uslov)
{
else
{
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:
if(uslov)
{
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 broj
Rešenje u C++
// Provera ispravnosti unosa dužine stranice kvadrata
using namespacestd;
int main() {
cout << "Unesite dužinu stranice kvadrata: ";
cin >> a;
if (a > 0) {
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!
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
/* Uneti ceo broj i odrediti da li je deljiv sa 3 */
int main()
{
std::cout << "Unesi ceo broj: " << std::endl;
std::cin >> a;
if ((a % 3) == 0)
Detaljnije objašnjenje "if" naredbe
"if" Izraz
"if" izraz omogućava uslovno izvršavanje koda na osnovu specificiranog uslova.
Sintaksa:
// Kod koji se izvršava ako je uslov tačan
}
Primer sa jednostavnim uslovom:
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:
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 unutarifbloka 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:
if(Uslov1)
{
else if(Uslov2)
{
else
{
Objašnjenje:
- 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.
- 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.
- 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).
- 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).
- Primer upotrebe:
Zamislite program koji analizira ocenu studenta i daje povratne informacije:
Kod koji je predstavljen ovim dijagramom bi bio:
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:
- " a je veće od b"
- " a je jednako b"
- " a je manje od b"
using namespace std;
// Program koji ispisuje odnos između dva broja a i b
int main() {
cout << "Unesite broj a: ";
cin >> a;
cout << "Unesite broj b: ";
cin >> b;
if (a > b) {
return 0;
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:
using namespace std;
// Program koji ispisuje odnos između dva broja a i b
int main() {
cout << "Unesite broj a: ";
cin >> a;
cout << "Unesite broj b: ";
cin >> b;
if (a > b) {
return 0;
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-primeriPodaci
Grananje u programu - JAVA
Nizovi-primeri
Algoritmi
