Algoritamska struktura - grananje

Sjedište: CARNET - Arhiva 2021 Loomen
E-kolegij: III. Gimnazija Osijek - Informatika 1
Knjiga: Algoritamska struktura - grananje
Otisnuo/la: Gost (anonimni korisnik)
Datum: petak, 31. siječnja 2025., 17:59

1. Grananje

Pri pisanju programa često je potrebno provjeriti neki uvjet: je li broj pozitivan ili negativan, paran ili neparan, je li jedan broj veći od drugog broja, je li broj troznamenkast, te, ovisno o rezultatu uvjeta, izvršiti određenu naredbu ili naredbe. Za ispitivanje uvjeta koriste se relacijski operatori, a za postavljanje složenih uvjeta koriste se logički operatori. Ako je izvršavanje neke naredbe ili naredaba uvjetovano  rezultatom relacijskih ili logičkih izraza, tada se oni stavljaju u strukturu grananja.

Relacijskim i logičkim izrazima najčešće se koristimo kad je, ovisno o rezultatu provjere, potrebno izvršiti neku naredbu. Na primjer, želimo li unijeti ocjene učenika da bismo izračunali njihov prosjek, najprije moramo provjeriti je li korisnik unio ocjenu (broj između 1 i 5) i tada izvršiti određenu naredbu (zbrojiti ocjenu s prethodnim ocjenama). Ako korisnik nije upisao ocjenu, potrebno je izvršiti neku drugu naredbu (na primjer, napisati mu poruku o tome da nije unio ispravan podatak).

1.1. Relacijski operatori

Izrazi u kojima je potrebno usporediti dvije vrijednosti nazivaju se relacijskim izrazima. Za uspoređivanje se koriste relacijski operatori: manje od (<), veće od (>), manje ili jednako (≤), veće ili jednako (≥), jednako (=) i različito (≠). Kad uspoređujemo dvije vrijednosti, rezultat može biti laž (0) ili istina (1).

Relacijski operatori u pseudojeziku su:

Primijetite da se za ispitivanje jednakosti koristi operator == (dvostruka jednakost). Njegova je svrha razlikovanje ispitivanja jednakosti od pridruživanja. Ista mu je svrha i u programskim jezicima Python i C.

Primjeri složenijih relacijskih izraza:
a + b < c
a mod 2 == 0

U ovim primjerima nalaze se kombinirani izrazi (aritmetički (+, mod) i relacijski (<, ==)). U takvim se situacijama najprije izračunaju aritmetički izrazi, a nakon toga se usporede dobivene vrijednosti. To znači da relacijski operatori imaju manji prioritet od aritmetičkih operatora.

Primjer: Izračunajmo vrijednosti relacijskih izraza:

1.2. Logički operatori

Što napraviti ako je potrebno usporediti više vrijednosti, primjerice, trebamo li provjeriti je li uneseni broj troznamenkast (veći od 99 i manji od 1000)? U matematici to zapisujemo ovako: 99 < a < 1000.
Nažalost, u programiranju uglavnom ne možemo na taj način zapisivati relacijske izraze. Moramo provjeriti je li a > 99 te je li a < 1000. U tu se svrhu koristimo logičkim operatorima I, ILI i NE, koje smo naučili ove godine.

Logički operatori u pseudojeziku su:

Primjeri složenih logičkih izraza:
(A < 1000) I (A > 99)
A I B ILI NE C
(A + B < C) I C > 0
U mješovitim izrazima u kojima se nalaze aritmetički, relacijski i logički operatori, najveći prioritet imaju aritmetičke, zatim relacijske i na kraju logičke operacije. Izrazi u zagradi izračunavaju se prvi.

1.3. Zadaci

Zadatke riješi u svoju bilježnicu!

1. Koja će biti vrijednost varijable c nakon izvođenja sljedećih naredaba?
a = 7
b = 4
c = NE(NE(a < b) I a) ILI b

2. Koja će biti vrijednost varijable d nakon izvođenja sljedećih naredaba?
a = 2
b = 3
c = 4
d = (a < b) I (b < c) ILI NE (c > a + b)

3. Napiši izraz kojim bi se provjerilo je li uneseni broj veći od nule i manji od 100.

4. Napiši izraz kojim bi se provjerilo je li uneseni broj dvoznamenkast.

2. Naredbe grananja

U svakodnevnom životu stalno donosimo odluke: hoćemo li prijeći cestu, trebamo li ustati, trebamo li ponijeti jaknu ili kišobran…. Tako se i u većini složenijih programa nalazi velik broj naredbi grananja.

Već smo prije napomenuli da se programskom strukturom grananja koristimo pri donošenju odluka, odnosno onda kad se program treba granati u jedan smjer ili više njih, ovisno o istinitosti danog uvjeta.

Grananje u algoritmima koje zapisujemo u pseudojeziku možemo zapisati na sljedeći način:

Ovo je oblik grananja u dva smjera: naredba_1 izvršit će se ako je zadani uvjet istinit, a naredba_2 ako nije. Pojam blok naredbi odnosi se na skup naredbi koje se nalaze u nekoj drugoj naredbi i u različitim se programskim jezicima označava različito. Na primjer, u programskom jeziku C naredbe u bloku stavljaju se između znakova { i }, a u Pythonu se blok naredbi označava uvlačenjem naredbi. U pseudojeziku blok naredbi ćemo pisati u vitičastim zagradama ({ i }). Zbog preglednosti, naredbe u zagradama ćemo uvući.


Zapisujemo li grananje dijagramom tijeka, možemo ga prikazati na sljedeći način:

Naredbu grananja moguće je koristiti i bez dijela

Tada govorimo o jednostrukom uvjetnom grananju. Jednostruko uvjetno grananje koristi se onda kad se naredba (ili blok naredbi) treba izvršiti samo ako je dani uvjet istinit. Ako uvjet nije istinit, program se nastavlja s prvom naredbom iza naredbe grananja.

2.1. Primjeri

Proučite sljedeće primjere!

Primjer 1.
Provjerimo je li uneseni broj paran ili neparan.

Objašnjenje: Ako je broj paran, ostatak pri cjelobrojnom dijeljenju s brojem 2 je 0.

Primjer 2.
Provjerimo je li uneseni broj troznamenkast.
U ovom primjeru u uvjetu je potrebno kombinirati relacijske operatore s onima logičkima:

Primjer 3.
Provjerimo je li uneseni broj manji od nule, veći od nje ili jednak njoj.
Pri rješavanju ovog zadatka moguće je tri puta se koristiti naredbom jednostrukoga grananja:

Trebamo li program granati u više od dva smjera, naredbe grananja moguće je pisati jednu u drugoj. Tako prethodni primjer možemo riješiti i na sljedeći način:

Primijetite da će u prvom algoritmu program provjeravati sva tri uvjeta bez obzira na upisani broj dok će u drugom primjeru čim jedan uvjet bude ispunjen one u nastavku preskočiti.