1. Razgranati algoritmi
Za rješavanje većine zadataka potrebne su složenije programske strukture kod kojih redoslijed izvršavanja
naredbi zavisi o vrijednostima podataka koji se obrađuju.
Grananje je programska struktura koja omogućuje različit tok programa, zavisno o rezultatu postavljenog uslova.
To je važna struktura bez koje bi mogućnost rješavanja zadataka računarom bila vrlo ograničena.
Razgranata algoritamska struktura je ona kod koje se svaki korak izvršava jednom ili nijednom. Stvar je
u tome da, kada zadatak zahteva dase neke vrijednosti unesu u promenljive, jednostavno, ne možemo da znamo
koje će to vrednosti biti.
Prosto, potreban nam je neki korak pomoću koga možemo da postavimo pitanje "šta ako", ili možda tačnije "da li
je".
Ovakav korak predstavlja "račvanje" izvršavanja programa. U našem algoritmu pripremamo dvije odvojene
grane, i zavisno od provjere na "raskrsnici" izvršiće se koraci u jednoj ili u drugoj. Zbog toga kažemo
da se neki koraci izvrše jednom, a neki nijednom.
Međutim, šta ako je potrebno imati više od dvije mogućnosti? Tj. šta ako je potrebno da se algoritam odvaja
u više od dvije grane? Pa, jednostavno - svaku granu uvijek možemo ponovo da "račvamo". Takođe,
za specifičan tip problema, možemo koristiti višestruko grananje.
2. Naredbe grananja su:
•if,
•if-else,
•if-else if-else,
•switch-case.
Jednostruko uslovno grananje
Naredba if omogućava jednostruko uslovnono grananje programa. Uslov je logički izraz, a upisuje se unutar para
malih zagrada.
Na kraju naredbe if ne stavlja se znak tačka zarez (;).
Korak koji služi za "račvanje", u sebi sadrži izraz logičkog tipa.
To znači da se u ovom koraku zadaje neki uslov. Njegova vrijednost može biti "tačno" (true) ili "netačno"
(false).
Najjednostavnija vrsta ovakvog izraza su relacioni izrazi, odnosno upoređivanja.
3. Blokovi naredbi
Dijelovi programa koji se uslovno izvode, grupišu se u skupine ili blokove naredbi. Svaki se blok naredbi ograničava parom
otvorena-zatvorena vitičasta zagrada ({ }).
Ako blok naredbi ima samo jednu naredbu zagrade se mogu izostaviti. Blokovi naredbi se obično pišu uvučeno zbog
preglednosti.
Primjer bloka naredbi
{
int x;
cout<<endl<<"Upisi cijeli broj u bloku:";
cin>>x;
}
5. Evo primjera gdje početnici često griješe.
Potrebno je sastaviti uslov kojim se provjerava da li je vrijednost promjenljive X u intervalu od 0 do 9. Matematički
je sasvim opravdano napisati:
0 <= X <= 9
Međutim, u programiranju je ovo pogrešno!
Računar bi prvo ispitao da li je 0 manje od X, a onda dobijenu vrijednost (true ili false) uporedio sa 9.
U nekim programskim jezicima bi ovo bilo prijavljeno kao greška, a u nekim bi računar nastavio da radi, ali bismo
dobili pogrešan rezultat (true bi prepoznao kao 1, a false kao 0 pa bi to uvek bilo manje od 10). U programiranju bismo
morali da napišemo npr. ovakav uslov:
(X >= 0) && (X <= 9)
Dakle, provjeravamo da li važi da je X veće ili jednako 0 i istovremeno X manje ili jednako 10.
Ova dva uslova povezujemo operatorom AND.
Hajdemo korak dalje.
Recimo da treba ispitati da li je X van ovog intervala. Pazite, kreiranje "obrnutog" uslova nije trivijalan zadatak.
Rješenje bi bilo:
(X < 0) || (X > 9)
Znači pitamo da li važi da je X manje od 0 ili možda da je X veće od 9.
Kao što vidimo, ne možemo baš samo da "obrnemo znakove". Primećujemo da za povezivanje uslova koristimo
operator OR, koji vraća vrednost "tačno" ako je zadovoljen bilo prvi, bilo drugi uslov.
Ako je problem samo "obrtanje" postojećeg uslova, mnogo je lakše da koristimo operator NOT:
!((X >= 0) && (X <= 9))
6. Inače, u razgranatim strukturama mogu učestvovati svi koraci koje smo do sada naučili ( ulaz, izlaz i obrada
podataka), kao i strukture koje ćemo tek učiti.
Primjer 1: Napiši program koji ispituje da li je broj pozitivan ili negativan!
7. Primjer 2: Napiši program koji ispisuje da li je uneseni broj pozitivan, negativan ili nula!