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.