GRANANJE U PROGRAMU U C++
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
- 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
- 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:
printf("Ovo će se uvek izvršiti u C.\n");
}
- 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";
}
- 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.
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
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.
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
Rešenje u C++
// Provera ispravnosti unosa dužine stranice kvadrata
using namespace std;
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.
Primer: Uneti ceo broj i odrediti da li je deljiv sa 3
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 unutarif
bloka izvršio.x < 0 || y > 20
: Kod se izvršava ako je barem jedan uslov tačan.
Grananje u programu sa 3 grane
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
Primer 2: Uneti dva realna broja preko standardnog ulaza i uporediti njihove vrednosti
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
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
|< Grananje u programu u C jeziku |
Sledeće
Petlje u programskom jeziku C/C++ >| |