14
6. Rješavanje problema programiranjem 1 Probleme, tj. problemske zadatke možemo rješavati na općoj, simboličkoj razini bez poznavanja konkretnoga programskog jezika. Naime, postoje općeniti načini prezentiranja osmišljenoga algoritma, kao i neki algoritamski postupci koje ćemo prepo- znati u skoro svakome programskom rješenju problema. Dijagram toka Jedan od načina prezentiranja algoritma jest dija- gram toka. To je zapravo grafički jezik jer se za pri- kaz koristi grafičkim simbolima. Primjer najjedno- stavnijega algoritma koji odlučuje o tome hoćete li obući majicu kratkih ili dugih rukava prikazan je na slici 1. Da biste razumjeli dijagram toka, morate znati značenje poje- dinih grafičkih simbola: na općoj, gramskog šljenoga o prepo- ma. ci 1. e poje- Slika 1. Algoritam oblačenja majice s kratkim ili dugim rukavima Preudojezik i preudokod Simbol Značenje Početak ili kraj programa Učitavanje podataka Ispis podataka Alternativni simbol za ulazno-izlazne naredbe Obrada – naredba ili niz naredbi kojima se podaci modificiraju kako bi se dobili potrebni izlazni podaci Odluka – provjera uvjeta, grananje programa Poveznice Pseudokod Spomenuti algoritam (povezan s oblačenjem majice s kratkim ili dugim rukavima) mo- že se iskazati i pseudokodom. Takav način zapisivanja algoritma vrlo je blizak svakod- nevnomu govoru i često se od njega skoro uopće ne razlikuje. Pseudokod je razumljiv i prihvatljiv način opisivanja koji nam daje potpunu slobodu u izboru riječi pri izražavanju i opisivanju osmišljenoga algoritma. Pogledajte sljedeći algoritam napisan u pseudokodu: Početak Pogledaj kolika je vanjska temperatura Ako je temperatura manja od 25 stupnjeva obuci majicu dugih rukava inače obuci majicu kratkih rukava Kraj Pseudokod

6. Rješavanje problema programiranjem

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

1

Probleme, tj. problemske zadatke možemo rješavati na općoj, simboličkoj razini bez poznavanja konkretnoga programskog jezika. Naime, postoje općeniti načini prezentiranja osmišljenoga algo ritma, kao i neki algoritamski postupci koje ćemo prepo-znati u skoro svakome programskom rješenju problema.

Dijagram tokaJedan od načina prezentiranja algoritma jest dija-gram toka. To je zapravo grafi čki jezik jer se za pri-kaz koristi grafi čkim simbolima. Primjer najjedno-stavnijega algoritma koji odlučuje o tome hoćete li obući majicu kratkih ili dugih rukava prikazan je na slici 1.Da biste razumjeli dijagram toka, morate znati značenje poje-dinih grafi čkih simbola:

na općoj,gramskog

šljenogao prepo-

ma.

ci 1.e poje-

Slika 1. Algoritam oblačenja majice s kratkim ili dugim rukavima

Preudojezik i preudokod

Simbol Značenje

Početak ili kraj programa

Učitavanje podataka

Ispis podataka

Alternativni simbol za ulazno-izlazne naredbe

Obrada – naredba ili niz naredbi kojima se podaci modifi ciraju kako bi se dobili potrebni izlazni podaci

Odluka – provjera uvjeta, grananje programa

Poveznice

Pseudokod Spomenuti algoritam (povezan s oblačenjem majice s kratkim ili dugim rukavima) mo-že se iskazati i pseudokodom. Takav način zapisivanja algoritma vrlo je blizak svakod-nevnomu govoru i često se od njega skoro uopće ne razlikuje. Pseudokod je razumljiv i prihvatljiv način opisivanja koji nam daje potpunu slobodu u izboru riječi pri izražavanju i opisivanju osmišljenoga algoritma. Pogledajte sljedeći algoritam napisan u pseudokodu:

PočetakPogledaj kolika je vanjska temperaturaAko je temperatura manja od 25 stupnjeva obuci majicu dugih rukavainače obuci majicu kratkih rukavaKraj

Pseudokod

Page 2: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

2

GrananjeKad u algoritmu moramo odlučiti koji ćemo dio koda izvršiti ovisno o nekome uvjetu (čimbeniku), moramo upotrijebiti grananje. To je postupak razdvajanja izvršavanja ko-da na dvije putanje ili više različitih putanja. Tipičan primjer odluka je želi li korisnik re-gistrirati internetski kupljen program. Evo primjera:

Nije komplicirano, zar ne? Uočite da su mnoge naše svakodnev-ne radnje zapravo algorit mi zapisani pseudokodom. Rezultat gornjega algoritma jasan je: ako je temperatura niža od 25 stup-njeva, obući ćete majicu dugih rukava; inače ćete obući majicu kratkih rukava.

Osnovni algoritamski postupci

SlijedKada bismo slijed naredbi željeli prikazati dijagramom toka, sim-bole bismo spojili strelicom. Pseudokod bi izgledao slično, s tom razlikom da ne bi bilo simbola i strelica, nego bi naredbe bi-le navedene slijedom kojim se izvršavaju:

POČETAK

KRAJ

A

C = A + B

C

B

Početak

Unesi broj A

Unesi broj B

C = A + B

Ispiši C

Kraj

POČETAK

KRAJ

ODGOVORNE DA

RegistrirajProgram

Molimo Vas da idući putregistrirate program!

Hvala na registraciji

ODGOVOR

Početak

Ispis "Želite li registrirati program?"Učitaj Odgovor

Ako je Odgovor = "DA" RegistrirajProgram Ispis "Hvala na registraciji!"inače Ispis "Molimo da idući put registrirate

program!"

Kraj

Slika 2. Slijed algoritma

Slika 3. Grananje algoritma

Grananje

Page 3: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

3

PonavljanjeAko neku radnju želimo izvršiti više puta, moramo se koristiti ponavljanjem. To je situa-cija u kojoj se jedan dio koda izvršava više puta. To se još naziva i petlja, a u program-skim jezicima realizira se na razne nači-ne (for, while, repeat). Kod nekih vrsta petlji moramo upotrijebiti brojač koji “broji” koliko se puta ponavljajući dio koda treba izvršiti. Brojače možemo upotrebljavati i u drugim prilikama i u drugim vrstama petlji – kad god su nam potrebni.Slika 4. prikazuje primjer ka ko se izraču-nava zbroj prvih N prirodnih brojeva, s tim da broj N unosi korisnik.U dijagrame toka naknadno je uveden i simbol za po navljanje. Evo kako po nav-ljanje izgleda u kombinaciji dijagrama toka i pseudokoda.

Slika 4. Ponavljanje dijela algoritma

POČETAK

KRAJ

N

Brojac<=N

DA

NE

Brojac = 1Zbroj = 0

Zbroj

Zbroj = Zbroj + BrojacBrojac = Brojac + 1

Početak

Učitaj N

Brojac = 1Zbroj = 0

Dok je Brojac <= N

Zbroj = Zbroj + Brojac Brojac = Brojac + 1

Ispiši Zbroj

Kraj

Slika 5. Ponavljanje dijela algoritma

POČETAK

KRAJ

N

Brojac = 0Zbroj = 0

Zbroj

Zbroj = Zbroj + N

Brojac

Brojac=1,N

Početak

Učitaj N

Brojac = 0Zbroj = 0

Za Brojac = 1 do N (korak 1)

Zbroj = Zbroj + N

Ispiši Zbroj

Kraj

Page 4: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

4

Za kraj upoznavanja s načinima prezentiranja algoritama i osnovnih algoritamskih po-stupaka pogledajmo takozvani "algoritam za sklapanje prijateljstva" koji se pojavljuje u jednoj TV seriji. Vjerujemo da ćete prateći strelice lako pronaći načine koji vode počet-ku jednoga uspješnog prijateljstva.

PseudojezikKako biste što bolje upoznali osnovne algoritamske postupke i pojmove vezane uz pro-gramiranje te usvojili njihovu primjenu u programskome jeziku Python, upoznat ćemo vas s pseudojezikom. Pseudojezik je simbolički jezik prilagođen hrvatskome govornom jeziku, a ima strukturu i sve elemente programskoga jezika. Njime se rješavaju problem-ski zadatci na državnoj maturi.

1. VarijableU pozadini većine informatičkih problema i algoritama nalazi se obrada nekih podata-ka. To može biti jedan broj (temperatura mora objavljena na internetskoj stranici), više brojeva (dva broja koja predstavljaju broj golova domaćina i gosta u netom odigrano-me nogometnom derbiju) ili niz znakova (zaporka za račun elektroničke pošte koju tre-ba upisati prilikom prijave). Čovjek te podatke lako memorira i upotrebljava u prigodnoj situaciji. Npr. kada vas pri-jatelj pita tko je pobijedio u derbiju, vi ćete se vrlo lako prisjetiti tih dvaju brojeva, uspo-rediti ih i ovisno o tome izgovoriti naziv kluba pobjednika ili reći da je bilo neriješeno.

Slika 6. Dijagram toka stvara-nja prijatelj-stva prema zamisli Sheldona Coopera.

Pseudojezik

Page 5: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

5

Računalo tako nešto ne može učiniti bez vaše pomoći. Poznato je da oni podatke s ko-jima rade dobivaju od korisnika preko nekoga od ulaznih uređaja (tipkovnica) i sprema-ju u svoju radnu memoriju. Varijabla je ključan pojam u toj priči. Varijabla je memorijska lokacija simboličkoga ime-na u koju zapisujemo vrijednost ulaznoga podatka i možemo je mijenjati tijekom izvršenja programa. Vrijednosti varijable jednostavno možemo pristupiti navo-đenjem njezina imena.

2. Naredba pridruživanjaNaredba pridruživanja omogućuje zapisivanje konkretne vrijednosti u varija-blu. Naredbu pridruživanja prikazujemo oznakom :=. Konkretna vrijednost, vrijednost izraza ili vrijednost druge varijable koja je zapisana s desne strane od znaka := pridružuje se varijabli navedenoj s njezine lijeve strane. U tablici 1. nekoliko je takvih primjera.

3. Aritmetički operatoriAritmetički operatori omogućuju kreiranje matematičkih izraza od varijabli i dodatnih konkretnih vrijednosti. Prisjetimo se nekih od njih i naučimo nekoliko novih (Tablica 2.).

Simboličko ime varijable smije sadržavati samo brojeve, velika i mala

slova engleske abecede i poseban znak “_” te ne smije po-četi brojem.

Primjer Opis primjera

a := 5konkretna vrijednost 5 zapisana je u memoriju na slobodnu memorijsku loka-ciju koju sada nazivamo a

b := 4 + 6vrijednost izraza 4+6 upisuje se u memoriju na slobodnu memorijsku lokaciju koja se sada simbolički zove b

c := a + 1trenutnoj vrijednosti varijable a dodajemo jedan i tako dobivenu novu vrijed-nost upisujemo u varijablu c

a := a + 5trenutnoj vrijednosti varijable a dodajemo pet i tako dobivenu novu vrijednost prepisujemo preko postojeće vrijednosti u varijabli a Tablica 1. Varijable u primjeni.

Varijabla

Tablica 2. Aritmetički operatori.

Operator Primjer Opis

+ x := a + boperator zbrajanja zbraja vrijednosti zapisane u varijablama a i b i za-pisuje ih u varijablu x

- x := a - boperator oduzimanja oduzima vrijednosti zapisane u varijablama a i b i zapisuje ih u varijablu x

* x := a * b operator množenja množi vrijednosti a i b

/ x := a / b operator dijeljenja realno dijeli a i b

div x := a div b operator cjelobrojnoga dijeljenja cjelobrojno dijeli a i b

mod x := a mod boperator ostatka pri dijeljenju u varijablu x sprema ostatak pri cjelo-brojnome dijeljenju vrijednosti a s b

Ako se u izrazu pojavljuje više operatora, tada se redoslijed izvršenja određuje prema njihovu prioritetu. Iz matematike znamo da najveći prioritet prilikom izvršavanja imaju zagrade, zatim operatori povezani s množenjem i dijeljenjem (*, /, div, mod) i na kraju operatori zbrajanja i oduzimanja (+, -).

Page 6: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

6

Pored osnovnih aritmetičkih operatora kojima možemo kreirati matematičke izraze, postoje i naredbe kojima možemo za zadanu ulaznu vri-jednost dobiti novu izlaznu vrijednost. Defi nirajmo neke od najčešće korištenih naredbi (tablica 3.).

Primjer 3.Duljine kateta pravokutnoga trokuta jesu a = 5 i b = 12 cm. Odredite opseg tako zada-noga pravokutnog trokuta.Opis rješenja:Takvo postavljanje zadatka poznato nam je iz matematike, kao i koraci algoritma za rje-šavanje toga problema. Kako je riječ o pravokutnome trokutu, duljinu treće stranice (hi-potenuze) možemo odrediti pomoću Pitagorina poučka. Kada odredimo duljinu hipote-nuze, lako ćemo odrediti opseg trokuta. Na ploči u razredu to bi trebalo izgledati kao na slici 7.

Primjer 1.Odredite vrijednosti varijabli za zadani slijed naredbi.

a := 5b := 2c := a + bd := a * ce := d mod bf := d div 2g := f / a

Stanje u memoriji

a 5b 2c 7d 35e 1f 17g 3.4

a := a + 2b := d – 4c := (a + b) * f

e := (b mod f) + (b div f)

g := g + db := b * b

Stanje u memoriji

a 5 7b 2 31 961c 7 646d 35e 1 15f 17g 3.4 38.4

Primjer 2.Koristeći se trenutnim stanjem u varijablama iz Primjera 1, pratite njihovu promjenu i odredite završno stanje u varijablama nakon izvršenja posljednje naredbe iz slijeda.

Naredba Opis

abs(x) abs(x) računa apsolutnu vrijednost broja x

sqr(x) sqr(x) računa kvadrat broja x

sqrt(x) sqrt(x) računa korijen broja x

round(x) round(x) zaokružuje realni broj x na najbliži cijeli broj

trunc(x) trunc(x) određuje cijeli dio realnoga broja x

Tablica 3. Unaprijed definirane naredbe.

Page 7: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

7

Slijed naredbi koj ima bismo taj problem rješava-li uz pomoć pseudojezika prati korake napisane na ploči. Vrijednosti kateta zapisat ćemo u vari-jable, a varijablama ćemo se koristiti i za spre-manje duljine hipotenuze i opsega. Točka zarez na kraju svake linije odvaja jednu liniju od druge linije našega programa.Slijed naredbi:

a := 5;b := 12;c := sqrt(sqr(a) + sqr(b));O := a + b + c;

Na žalost, tako napisan slijed naredbi ima neko-liko nedostataka. Vrijednost opsega nije nam dostupna (kao što je to slučaj na ploči) jer je zapisana u memoriji pod simboličkim imenom “O”. Korisno bi bilo tako određenu vri-jednost ispisati na standardni izlaz (monitor). Dalje, tako postavljen slijed koristan je sa-mo za ovaj konkretni pravokutni trokut. Za svaku drugu kombinaciju duljina kateta za-datak bi se iznova morao rješavati na ploči, a iznova bi se morao pisati sličan slijed na-redbi za računalo.

4. Naredba ispisivanja izlazNaredba ispisa izlaz omogućuje ispis vrijednosti na standardni izlaz (zaslon monitora). Pritom može ispisivati nizove znakova zapisane unutar dvostrukih navodnika, konkretne vrijednosti, vrijednost izraza i vrijednost zadane varijable. Vrijednosti koje ispisujemo od-vajamo zarezom.

Primjer 4.Pogledajmo nekoliko ka rakterističnih primjera ko rištenja naredbe ispisa.

5. Naredba učitavanja ulazU većini slučajeva vrijednost varijable zadaje korisnik unosom njezine vrijednosti preko standardnoga ulaza (tipkovnicom). Posrednik u prenošenju vrijednosti od ulaza do me-morije jest naredba ulaz.Npr. naredba ulaz(t) zapisuje u varijablu simboličkoga imena t (tj. u memoriju) konkretnu vri-jednost koju unosi korisnik.

Slika 7. Školski primjer primjene Pitagorina

poučka.

Naredba Ispis na standardni izlaz

izlaz ("Danas je nedjelja!") Danas je nedjelja!

a := 5

izlaz ("Vrijednost varijable a jest: ", a)Vrijednost varijable a jest: 5

izlaz ("Sljedbenik broja ", a, " jest ", a + 1) Sljedbenik broja 5 jest 6

Page 8: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

8

Primjer 5.Napišite program koji učitava duljine kateta pravokutnoga trokuta te računa i ispisuje opseg tako zadanoga pravokutnog trokuta.Opis rješenja:Uočimo da u ovome primjeru nisu zadane konkretne vrijednosti kateta a i b, nego ćemo njihove vrijednosti morati sami učitati s ulaza. Nakon što to uradimo, lako ćemo odrediti op-seg i tako dobivenu vrijednost ispisati na ekran.Slijed naredbi:

ulaz(a);ulaz(b);c := sqrt(sqr(a) + sqr(b));O := a + b + c;izlaz("Opseg trokuta iznosi:", O);

6. Naredba grananjaU nekim situacijama nije moguće unaprijed znati oblik zadanih podataka i na taj način pri premiti slijed naredbi za izvršenje. Kao i u životu, nije unaprijed poznat ishod svih događa ja i o tome ovise naši daljnji koraci. Vjerojatno ste se našli u situaciji da vam ko-rištenje raču nala ili gledanje televizije navečer ovisi o tome hoćete li stići napisati zada-ću unutar zada noga vremena. Znači, o ispunjenosti zadanoga uvjeta ovise i daljnji ko-raci koji će se izvršavati. Kada u algoritmu moramo odlučiti koji ćemo dio koda izvršiti ovisno o nekome zada-nom uvjetu, moramo upotrijebiti grananje. To je postupak razdvajanja izvršavanja koda na dvije ili više različitih putanja.Uvjet u algoritmima uvijek je logički izraz čija vrijednost može biti samo istina ili laž. Grananje omogućuje izvršenje jedne ili više naredbi ako je postavljeni uvjet istinit, a iz-vršenje druge naredbe (ili više njih) ako je postavljeni uvjet lažan.Sintaksa naredbe grananja:

Pojednostavljeno rečeno, ako je postavljeni uvjet istinit, tada će se izvršiti naredba1, a ako je uvjet lažan, tada će se izvršiti naredba2.

Primjer 6.Što će se ispisati nakon izvođenja sljedećega dijela programa?

a := 7;ako je a > 0 onda izlaz("Broj a veći je od nule")

ako je uvjet onda naredba1inače naredba2;

Page 9: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

9

inače izlaz("Broj a manji je ili jednak nuli");

Opis rješenja:Varijabli a pridružena je vrijednost 7. Postavljeni uvjet a>0 istinit je (7 je veće od nule) i zbog toga će se izvršiti naredba izlaz(“Broj a je veći od nule”). Znači, program ispisuje rečenicu “Broj a veći je od nule”.

Primjer 7.Koju će vrijednost imati varijabla a nakon izvođenja sljedećega dijela programa?

a := 5;b := a + 5; b := b * b - a;a := a * a - b;ako je a < b onda a := a - binače a := a + b;

Opis rješenja:Nakon izvođenja prvih četiriju naredbi, varijabla b ima vrijednost 95, a varijabla a -70. Zbog toga je postavljeni uvjet (a < b) istinit i izvršit će se naredba a := a - b. Znači, vri-jednost varijable a nakon izvođenja svih naredbi jest -165.

7. Još o operatorimaU prošlim primjerima upotrijebili smo dva jednostavna logička uvjeta a > 0 i a < b. Općenito, logičke uvjete kreiramo uz pomoć relacijskih operatora i logičkih operatora.

Relacijski operatoriIzrazi u kojima se koriste relacijski operatori nakon evaluacije mogu biti istiniti ili laž-ni. Re lacijski su operatori: jednako (=), različito (< >), veće (>), manje (<), manje ili jednako (<=) i veće ili jednako (>=). Pri evaluaciji takva izraza poštuju se poznata aritmetička pravila iz matematike.

Logički operatoriSloženije logičke izraze možemo kreirati korištenjem logičkih operatora. Tri su najkorište-nija: logičko I u oznaci “I” (engl. AND), logičko ILI u oznaci “ILI” (engl. OR) i logičko NE u oznaci “NE” (engl. NOT). Prisjetimo se kako je defi nirano djelovanje navedenih ope-ratora.Iz tablica 4. – 6. vidimo da operator NOT uvijek preokreće vrijednost (0 postaje 1 i 1 postaje 0), operator AND istinit je sa mo ako su oba parametra istinita (1 AND 1 = 1, sve su

Tablica 4. Operator NOT

Tablica 5. Operator AND

A NE A0 1

1 0

A B A I B0 0 0

0 1 0

1 0 0

1 1 1

Tablica 6. Operator OR

A B A ILI B0 0 0

0 1 1

1 0 1

1 1 1

Page 10: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

10

ostale kombinacije 0), a OR je istinit kad god je barem jedan parame tar istinit (0 OR 0 = 0, 0 OR 1 = 1, 1 OR 0 = 1, 1 OR 1 = 1). S obzirom na to da se operatori mogu i kombinirati (primjerice 1 AND 0 OR 1 AND 0), potrebno je uvesti i pojam prednosti operatora. Najveću prednost ima operator NOT, on se izvršava prvi. Nakon njega dolazi AND, a nakon njega OR.

Višestruka naredba grananja Višestruka naredba grananja omogućuje korištenje ako je-inače strukture unutar ako je ili inače dijela naredbe grananja.Primjer višestruke naredbe grananja:

Prednost (prioritet) logičkih operatora

ako je uvjet1 onda ako je uvjet2 onda naredba1 inače naredba2inače naredba3;

ako je uvjet1 onda naredba1inače ako je uvjet2 onda naredba2 inače naredba3;

Primijetite da se naredba inače veže uz prvi ako je koji se nalazi iznad njega, a nije već zauzet.

Primjer 8.Što će ispisati sljedeći dio programa za unesenu vrijednost varijable t = 123?

ulaz(t);s := t div 100;j := t mod 10;ako je s > j onda izlaz("LIJEVO NAGNUT")inače ako je j > s onda izlaz("DESNO NAGNUT") inače izlaz("U RAVNOTEZI");

Opis rješenjaNaredbom s := t div 100 određujemo znamenku stotica u troznamenkastome broju, a naredbom j := t mod 10 znamenku jedinica. Tako postavljena višestruka naredba gra-nanja provjerava je li u broju t veća stotica ili jedinica i ovisno o tome određuje na koju stranu “po težini” preteže uneseni broj. U konkretnome slučaju, za t=123 ispisat će se “DESNO NAGNUT”.

Primjer 9.Napišite program koji učitava cijeli broj i ispisuje odgovarajuću poruku ovisno o tome je li taj broj pozitivan, negativan ili nula.

Page 11: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

11

Opis rješenjaNajprije ćemo provjeriti je li učitani broj strogo veći od nule. Ako jest, znači da je broj pozitivan. Ako nije strogo veći od nule, moguće su dvije situacije: broj je nula ili je stro-go manji od nule. Zbog toga je nužno postaviti još jedan uvjet i omogućiti grananje za taj dodatni slučaj.

Slijed naredbi ulaz (n);ako je n > 0 onda izlaz ("Broj je pozitivan")inače ako je n < 0 onda izlaz ("Broj je negativan") inače izlaz ("Broj je nula");

Primjer 10.Napišite program koji unosi tri različita prirodna broja i ispisuje ih poredane po veličini, od najvećega do najmanjega.Opis rješenjaKod tako zadanih problema rješenje možemo dobiti provjeravanjem svih slučajeva koji se mogu pojaviti. Npr. najprije ćemo provjeriti je li prvi zadani broj veći od druga dva broja i zatim između preostala dva broja provjeriti koji je veći. Isto to trebamo provjeriti i za druga dva slučaja.

Slijed naredbi ulaz (a); ulaz (b); ulaz (c);ako je (a > b) i (a > c) onda ako je (b > c) onda izlaz (a, b, c) inače izlaz (a, c, b);ako je (b > a) i (b > c) onda ako je (a > c) onda izlaz (b, a, c) inače izlaz (b, c, a);ako je (c > a) i (c > b) onda ako je (a > b) onda izlaz (c, a, b) inače izlaz (c, b, a);

Page 12: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

12

8. Naredba ponavljanjaPonavljanjem se koristimo kada jedan dio koda želimo izvršiti više puta. To se još nazi-va i petlja, a u programskim se jezicima realizira na razne načine (for, while, repeat). Ovdje ćemo razlikovati dvije vrsti naredbi ponavljanja: one kod kojih se jedna ili više na-redbi ponavljaju unaprijed zadan i konačan broj puta i one kod kojih se naredbe ponav-ljaju sve dok je ispunjen postavljeni uvjet.

8.1. Petlja s unaprijed poznatim brojem ponavljanjaKod ove vrste petlje koristimo se kontrolnom varijablom koja “broji” koliko se puta po-navljajući dio koda treba izvršiti. Svakim prolaskom kroz petlju vrijednost kontrolne va-rijable povećava se za jedan, počevši od početne vrijednosti pa sve dok se njezina vri-jednost ne izjednači s krajnjom vrijednosti.

Sintaksa naredbe ponavljanja

za i := pocetna_vrijednost do zavrsna_vrijednost činiti blok_naredbi;

Primjer 11.Odredite stanje varijabli i ispisa tijekom izvršenja sljedeće naredbe ponavljanja.

za i := 1 do 6 činiti izlaz ("Kontrolna varijabla i jest:", i);

Opis rješenja:Naredba izlaz(“Kontrolna varijabla i jest:”, i) izvršit će se šest puta jer će se vrijednost kontrolne varijable svakim prolaskom kroz petlju povećavati za jedan, počevši od jedan pa sve do šest. Znači, konačan ishod ove naredbe ponavljanja jest sljedeći ispis: Kontrolna varijabla i jest: 1 Kontrolna varijabla i jest: 2 Kontrolna varijabla i jest: 3 Kontrolna varijabla i jest: 4 Kontrolna varijabla i jest: 5 Kontrolna varijabla i jest: 6

Primjer12.Odredite stanje varijabli tijekom izvršenja sljedećega dijela programa.

a := 10;b := 99;koliko := 0;za i := a do b činiti ako je i mod 2 = 0 onda koliko := koliko + 1;izlaz (koliko);

Programska petlja

Page 13: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

13

Opis rješenja:Logički uvjet i mod 2 = 0 istinit je za svaki i koji je paran broj. Znači, za svaku vrijednost kontrolne varijable i između a (10) i b (99) provjerit će se je li ona paran broj pa će se varijabla koliko povećati za jedan. Koliko je prije ulaska u petlju inicijaliziran na vrijed-nost nula jer je to njegova početna vrijednost. Općenito gledano, gornji program pre-braja i ispisuje broj parnih dvoznamenkastih brojeva.

Primjer 13.Napišite program u pseudojeziku koji će unijeti prirodni broj N i zatim još N prirodnih brojeva. Program treba odrediti i ispisati koji je od N unesenih brojeva bio najveći.Opis rješenja:Algoritam za određivanje maksimalne vrijednosti prirodan je i prati tijek naših misli. U početku defi niramo jednu varijablu i nju inicijaliziramo na vrijednost koja će u tom tre-nutku biti najmanja moguća vrijednost koju ćemo razmatrati. Zatim unosimo brojeve i svaki put kada uneseni broj bude strogo veći od trenutnoga maksimuma, zamijenimo vrijednost trenutnoga maksimuma unesenim brojem. Slijed naredbi

ulaz (N);najveci := 0;za i := 1 do N činiti{ ulaz (novi_broj); ako je (novi_broj > najveci) onda najveci := novi_broj;}izlaz (najveci);

Algoritam za određivanje maksimalne vrijednosti

Vitičastim zagradama { i } označavamo po-četak, odnosno zavr-šetak bloka naredbi.

dok je uvjet činiti blok_naredbi;

Ponekad je nužno više naredbi izvršiti odjednom kao jednu cjelinu. U pseudojeziku blokom naredbi smatraju se sve naredbe napisane unutar otvorenih i zatvorenih vi-tičastih zagrada {}.

8.2. Uvjetna petlja ponavljanjaOva petlja omogućuje ponavljanje izvršenja bloka naredbi sve dok zadani uvjet izvrše-nja ne postane lažan. Uvjet izvršenja logički je izraz koji nakon evaluacije može imati samo dvije vrijednosti: istinu ili laž. U ovoj naredbi posebnu pozornost treba posvetiti postavljenomu uvjetu izvršenja. Naime, tijekom izvršenja ove petlje moramo se osigura-ti da u nekome trenutku postavljeni uvjet postane lažan. U protivnome bismo ušli u sta-nje beskonačne petlje. Uočimo da se blok naredbi u slučaju lažnosti postavljenoga uvjeta na početku neće izvršiti nijednom.Sintaksa naredbe ponavljanja

Uvjet izvršenja

Beskonačna petlja

Page 14: 6. Rješavanje problema programiranjem

6. Rješavanje problema programiranjem

14

Primjer 14.Odredi stanje varijabli i ispisa tijekom izvršenja sljedeće naredbe ponavljanja.

n := 256;dok je n > 0 činiti{ izlaz (n mod 10); n := n div 10;}

Opis rješenjaPažljivom analizom ovoga programa možemo uočiti da će se na ekranu ispisati sve zna-menke zadanoga broja n, tj. redom 6, 5, i 2. Blok naredbi izvršavat će se sve dok je broj n veći od nule. Naredbom n := n div 10 osigurali smo da se ova petlja zaustavi, tj. da uvjet izvršavanja u nekome trenutku postane lažan.

Primjer 15.Napišite program u pseudojeziku koji unosi jedan prirodni broj N i jednu znamenku Z. Program treba provjeriti ima li u broju N znamenka Z i o tome ispisati primjerenu poruku.Opis rješenjaU prošlome primjeru vidjeli smo kako možemo ispisati sve znamenke iz zadanoga bro-ja. Sada trebamo kombinirati postojeći algoritam s provjerom ima li u tom broju zadane znamenke. Jedna od uobičajenih metoda u kreiranju algoritama jest korištenje brojača kojim ćemo prebrojiti ukupan broj zadanih znamenki u zadanome broju. Jednostavnom provjerom vrijednosti brojača možemo riješiti naš problem.Slijed naredbi

ulaz (N);ulaz (Z);koliko := 0;dok je N > 0 činiti ako je (N mod 10 = Z) onda koliko := koliko + 1;ako je koliko > 0 onda izlaz ("U broju ", N, " postoji znamenka ", Z)inače izlaz ("U broju ", N, " ne postoji znamenka ", Z);

1. Robert Sedgewick, Algorithms, Addison-Wesley Professional, 1983.2. Ljiljana Miletić, Sanja Grabusin, Priručnik za državnu maturu, SysPrint, Zagreb 2011.3. Steve Maguire, Pisanje dobrog koda, Znak, Zagreb, 1995.

POGLEDAJ I POTRAŽI

Brojač - varijabla koja pamti koliko je puta bio

zadovoljen neki uvjet