x
Učitavanje

3.3 Grananje

Što ću naučiti?
Europska unija - Zajedno do fondova EU
Prethodna jedinica Sljedeća jedinica
Sadržaj jedinice icon sadržaj jedinice

Na početku...

Šime se našao pred novim problemom. Josip je želio da program ispisuje poruku: „Pozdrav!“, ali, ovaj put, samo ako je zadovoljen određeni uvjet. Šime je, kao i uvijek, odgovorio: "Ništa lakše!"

Dvije vrijednosti logičke varijable
Josip i Šime sjede pred prijenosnim računalom s natpisima True i False iznad glava.

Odluka

Posljednjim primjerom iz prethodne jedinice provjerili smo je li neki uvjet zadovoljen. Konkretno, je li znamenka jedinica jednaka znamenki desetica.

Što ako, u tom slučaju, želimo ispisati neku poruku? Što ako želimo ispisati poruku, a uvjet nije zadovoljen?

Tada koristimo algoritamski konstrukt koji se naziva odluka ili grananje. Odluku smo spomenuli na kraju prvog videozapisa prethodne jedinice te smo naglasili da se u dijagramu toka prikazuje simbolom romba.

Pogledajmo primjer algoritma zapisanog dijagramom toka:

Odluka

Primjer 1.

S odlukom, tok programa nužno ide jednim ili drugim putem. Znamenke iz našeg primjera ne mogu istovremeno biti i jednake i različite. Pogledajmo kako bismo to zapisali programskim jezikom Python:

Program ispisuje jesu li znamenke unesenog dvoznamenkastog broja jednake.

Pomoć:

Kao što smo u prethodnoj jedinici naglasili, desetice dvoznamenkastoga broja dobivamo cjelobrojnim dijeljenjem s deset, dok jedinice dobivamo računanjem ostatka pri dijeljenju s deset.

Grananje se u Pythonu zapisuje tako da započnemo s ključnom riječi if, nakon koje slijedi uvjet koji se provjerava (u ovom primjeru, jesu li desetice jednake jedinicama), a nakon dvotočke, slijedi ono što se izvršava kada je uvjet zadovoljen.

Želimo li da program nešto učini kada uvjet nije zadovoljen, pišemo naredbu else te, nakon dvotočke, radnju koja će se izvršiti u tom slučaju.

null

Kao što smo u prethodnoj jedinici naglasili, desetice dvoznamenkastoga broja dobivamo cjelobrojnim dijeljenjem s deset, dok jedinice dobivamo računanjem ostatka pri dijeljenju s deset.

Grananje se u Pythonu zapisuje tako da započnemo s ključnom riječi if, nakon koje slijedi uvjet koji se provjerava (u ovom primjeru, jesu li desetice jednake jedinicama), a nakon dvotočke, slijedi ono što se izvršava kada je uvjet zadovoljen.

Želimo li da program nešto učini kada uvjet nije zadovoljen, pišemo naredbu else te, nakon dvotočke, radnju koja će se tada izvršiti.

Primjer 2.

Pogledajmo primjer algoritma koji provjerava jesu li znamenke dvoznamenkastog broja jednake ili, ako nisu, koja je manja:

Višestruka odluka
Dijagram toka za algoritam koji provjerava u kakvom su odnosu znamenke desetica i jedinica unesenog dvoznamenkastog broja.

Pythonom bismo to mogli zapisati ovako:

Pokrenite program te unesite neki dvoznamenkasti broj:

Pomoć:

Razlika u odnosu na prethodni primjer jest u tome da, u ovom grananju, nemamo samo dva moguća scenarija, već ih ima tri.

Imamo li više od dva moguća ishoda if naredbe, dodajemo onoliko elif naredbi koliko nam je potrebno.

Budući da, u ovom slučaju, postoje tri moguća ishoda, dovoljno je napisati jedan if, elif i else.

null

Razlika u odnosu na prethodni primjer jest u tome da, u ovom grananju, nemamo samo dva moguća scenarija, već ih ima tri.

Imamo li više od dva moguća ishoda if naredbe, dodajemo onoliko elif naredbi koliko nam je potrebno.

Budući da, u ovom primjeru, postoje tri moguća ishoda, dovoljno je napisati jedan if, elif i else.

Kutak za znatiželjne

Sigurno ste primijetili da program neće ispravno raditi ako se unose broj koji nije dvoznamenkast.

Što mislite, kako odrediti znamenke troznamenkastog broja?

Složenije primjere možete riješiti u Edutoriju, drugom modulu šestog razreda i Edutoriju, trećem modulu prvog razreda srednje škole.

U prethodnom primjeru pojavila se i ključna riječ elif koju možemo koristiti onoliko puta koliko različitih uvjeta zadatak ima. Više o odlukama pročitajte na Edutoriju, i to u trećoj jedinici drugog modula informatike šestog razreda.

Primjer 3.

Napravimo sada jedan zadatak sa znakovima. Od korisnika se traži da unese neki znak. Unese li korisnik '#', program ispisuje znak i poruku "je hashtag". U protivnom, program ispisuje znak i poruku "nije hashtag".

Pokreni program te unesi neki znak:

Pomoć:

Budući da unosimo niz znakova, ovaj put naredba input ne stoji unutar neke druge naredbe.

Prilikom provjere je li sadržaj neke varijable jednak nekom znaku, moramo paziti da znak zapišemo unutar navodnih znakova.

null

Primjer 4.

Kao što smo napomenuli u prethodnoj jedinici, kada unosimo znakove, naredba input() stoji samostalno. Modificirajmo sada program tako da onda kada se unese '@', ispiše znak i poruku "je tag". U ostalim situacijama ostaje isto.

Pokreni program!

Pomoć:

U ovom primjeru, grananje ima tri moguća scenarija: 'je hashtag', 'je tag' te 'nije ni hashtag ni tag'. U takvoj situaciji, pišemo naredbe if, elif te else

null

Vježba

Zadatak 1.

Josip i Šime odlučili su kraj prvog polugodišta proslaviti pizza partyjem. Dok se dizalo tijesto za pizzu, koje je zamijesio njihov otac, Josip i Šime odlučili su napraviti program. Nisu bili sigurni koliko će se prijatelja odazvati njihovu pozivu na pizzu, a majka ih je učila da uvijek ravnopravno sve podijele među sobom i prijateljima. Zato su odlučili napraviti program koji će, kada se unese broj sudionika pizza partyja te broj odsječaka pizze koji će biti ispečeni, računa koliko je to odsječaka pizze za svaku osobu. Po dogovoru, ono što ostane (ako ostane), pripada njihovim roditeljima.

Pizza party
Bijeli četvrtasti tanjur na kojem se nalazi trokut pizze i začinsko bilje u maloj posudi. S lijeve strane tanjura je ubrus s nožem i vilicom te čaša.

Napravi program u koji se upisuje koliko se gostiju odazvalo na pizza party (uključujući Josipa i Šimu) te koliko je odsječaka pizze Josipov i Šimin otac ispekao. Program ima dva ispisa. Najprije ispisuje koliko će odsječaka pizze pripasti svakom gostu, a zatim provjerava je li ostao koji odsječak njihovim roditeljima. Ako jest, ispisuje njihov broj, a ako nije, ispisuje: "Roditelji će si morati napraviti sendvič."

Pogledajmo nekoliko primjera kako bi program trebao raditi:

Primjer 1. Primjer 2.
Ulaz Ulaz
broj sudionika 5 6
broj odsječaka 18 18
Izlaz Izlaz
broj odsječaka po sudioniku 3 3
broj preostalih odsječaka 3 "Roditelji će si morati
napraviti sendvič."

Objašnjenje prvog primjera: Podijelimo li osamnaest odsječaka pizze na petero, svakome pripadaju po tri odsječka, i još će ostati tri odsječka za roditelje.

Objašnjenje drugog primjera: Podijelimo li osamnaest odsječaka pizze na šestero, svakome pripadaju po tri odsječka, a neće ostati nijedan odsječak za roditelje.

Pripazite da ulaz i izlaz izgledaju jednako kao u primjeru!

Dovrši program koji rješava problem prethodnog zadatka:

Pomoć:

Pogledaj prethodnu jedinicu! Koliko će odsječaka pizze dobiti koji sudionik, računamo tako da cjelobrojno podijelimo broj prijatelja s brojem odsječaka pizze.

Ostatak pri dijeljenju jest broj odsječaka koji ostaje roditeljima.

Ako je ostatak pri dijeljenju jednak nuli, onda se ispisuje poruka, u protivnom se ispisuje broj ostalih isječaka.

Postupak:

broj_odsjecaka_po_prijatelju = broj_odsjecaka // prijatelji
preostali_broj_odsjecaka = broj_odsjecaka % prijatelji
print(broj_odsjecaka_po_prijatelju)
if preostali_broj_odsjecaka == 0:
    print('Roditelji ce si morati napraviti sendvic.')
else:
    print(preostali_broj_odsjecaka)

Sastavi dijagram toka za prethodni zadatak.

  • br_pr označava broj prijatelja
  • br_pizza označava broj odsječaka pizze
  • pr označava broj odsječaka pizze po prijatelju
  • rod označava broj odsječaka pizze koji su ostali za roditelje
  • <> označava simbol za različito.

...i na kraju

Josip još uvijek nije načisto s odlukama, no Šime ga motivira svojim razumijevanjem. Josip je kreativac pa se, unatoč tome, sjetio: "Bez veze mi je da stalno ispočetka pokrećemo program! Napravi ti meni, Šime, lijepo program koji me pita želim li ga ponoviti!" Šime je malo razmislio, rekao: "Ništa lakše!" i kliknuo na sljedeću jedinicu.

Povratak na vrh