You are on page 1of 25

PROGRAMIRANJE 1

Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

RJEŠAVANJE PROBLEMA POMOĆU RAĈUNARA

Uvod
Svima nama su poznate mnogobrojne aplikacije pomoću kojih je moguće
riješiti raznovrsne svakodnevne probleme, počevši od operativnih sistema i
različitih vrsta računarskog softwarea za obradu svakovrsnih tipova podataka:
teksta, slika, videa, zvuka, pa i čitavih baza podataka, preko telefonskih
aplikacija koje omogućavaju brza rješenja jednostavnih problema, i na kraju do
kompjuterskih igrica.
S druge strane, iako su mnogobrojni problemi rješivi pomoću već
postojećih aplikacija i programa, svako od nas zadesio se u situaciji da nema
aplikaciju koja može riješiti neki problem, npr. riješiti neki konkretan zadatak iz
matematike ili fizike. Prema tome, iako je situacija za korisnike računara danas
veoma povoljna, te većina korisnika ne mora kreirati svoje sopstvene programe,
njihove potrebe konstantno rastu, pa je izrada novih programa, te unapreĎivanje
starih potreba koja se konstantno javlja.

Klasifikacija problema
Ulaz, izlaz i poĉetni uslovi
Generalno, kada govorimo o problemima možemo uočiti čitavu paletu
raznorodnih problema: izračunati nešto, pronaći neku vrijednost, animirati sliku,
kompresovati video, ispitati da li vrijedi neka tvrdnja, ispitati da li se nešto
negdje nalazi,... Ono što je zajedničko svim problemima jeste da je na osnovu
nekih zadatih vrijednosti potrebno naći neki odgovor.

Skup podataka poznatih prije rješavanja nekog problema naziva se ULAZ


problema.

Informacija koju očekujemo da bismo problem smatrali rješenim nazivamo


IZLAZ problema.

Prema tome, vidimo da svaki problem mora imati ulaz i izlaz. Šta ovo znači
pokazaćemo na primjeru.

Primjer
Problem: Izračunati hipotenuzu trougla kateta 3 cm i 4 cm.
U ovom problemu dužine kateta (3 cm i 4 cm) predstavljaju ULAZ problema.
Vrijednost 5 cm koju dobijamo na osnovu Pitagorine teoreme predstavlja IZLAZ
problema.

1
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

Pored ulaza i izlaza koje svaki problem mora imati, problem može imati i
početne uslove koji moraju biti ispunjeni.

Skup ograničenja na početku problema koja osiguravaju da


problem ima smisla nazivaju se POČETNI USLOVI.

Početni uslovi uvijek se vežu za vrijednosti koje se nalaze na ulazu


problema i osiguravaju da problem, kao i samo rješenje imaju smisla.

Primjer
Osvrnimo se na prethodni primjer i poopštimo ga na sljedeći način:
Problem: Izračunati hipotenuzu ako su poznate dužine kateta.
Ovaj problem rješava se na isti način kao prethodni, primjenom Pitagorine
teoreme: c2=a2+b2, gdje a i b predstavljaju katete, a c hipotenuzu. Prema tome,
imamo da je

ULAZ: a, b
IZLAZ: c

No, ovdje nam, za razliku od prethodnog primjera, trebaju početni uslovi. Zašto?
Naime, ovdje imamo rješenje jednog uopštenog problema i nemamo konkretne
vrijednosti. Obzirom da a, b i c predstavljaju dužine stranice trougla one ne
mogu imati negativne dužine. Prema tome, imamo da je

POČETNI USLOVI: a>0, b>0, c>0

2
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

Vrste problema Euklid (oko 330.– oko


275. p.n.e.), je
I pored mnoštva različitih problema
starogrčki matematičar
koje smo naveli, počevši od svakodnevnih koji je živio i radio u
problema pretraživanja i sortiranja, preko Aleksandriji gdje je
matematičkih i inžinjerskih, pa sve do stvorio matematičku
problema obrade multimedije, podjela na školu.
Napisao je brojna djela, od kojih neka
dvije osnovne vrste problema koju je prije nisu sačuvana i poznata su samo po
više od 2000 godina dao Euklid aktuelna naslovu. Oko 300. p. n. e, pojavom
je i danas. Naime, Euklid sve probleme Euklidovog djela Elementi, geometrija
svrstava u jednu od dvije osnovne grupe: doživljava revoluciju, te se i danas
klasična geometrija naziva Euklidova
geometrija. Euklid je uveo strogo
 Računski problemi, i
deduktivni stil izražavanja i upravo
 Problemi Da/Ne tipa. zbog te dosljednosti Elementi su
stoljećima smatrani najsavršenijim
matematičkim djelom.

Raĉunski problemi ili problemi nalaženja rješenja su svi problemi koji


u zavisnosti od početnih vrijednosti mogu dati različit rezultat. Ovo su problemi
kod kojih na osnovu unaprijed poznatih podataka (ulaza) i uslova koji trebaju biti
zadovoljeni treba odrediti vrijednosti nepoznatih veličina.
U računske probleme ne spadaju samo problemi iz familije matematičkih
problema izračunavanja. Naprotiv, ovdje spada velika većina problema praktične
primjene, jer bilo koji problem čije rješenje nije odgovor "da" ili "ne" spada u
računske probleme.

Primjer Primjeri računskih problema.

1. Izračunati kojom se prosječnom brzinom kretao automobil ako je za H


sati prešao put od P km.
2. Promijeniti riječ kroz padeže.
3. Sortirati učenike po najboljoj srednjoj ocjeni.
4. Nacrtati isprekidanu liniju na ekranu.
5. Pomjeriti avatara udesno.
6. Kompresovati dokument.

I još mnogi, mnogi drugi...

Računski problemi mogu se još dalje podijeliti na direktne i inverzne.


Kod direktnih problema put od ulaza ka izlazu je ili jasan iz same postavke
problema, ili se potupak smatra poznatim od ranije. S druge strane, kod
inverznih problema je jasno samo šta želimo dobiti, ali ne i kako to dobiti.
Inverzni problemi su najčešće izuzetno teški za rješavanje. Oni su dobili ime na
osnovu činjenice da uglavnom nastaju zamjenom ulaza i izlaza kod direktnih
problema, mada ovo ne mora biti slučaj. Često je za dva problema teško utvrditi

3
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

koji je od njih direktni, a koji je njegov inverz, pa ovo pitanje veoma često ostaje
uglavnom filozofske prirode.
Problemi Da/Ne tipa ili problemi dokazivanja su problemi kod kojih je
potrebno ispitati da li je neka tvrdnja tačna ili nije, te dati potvrdan ili odričan
odgovor. Ovi problemi mogu biti izuzetno teški za rješavanje, pogotovo ako ne
postoji ideja koja ukazuje na postupak njihovog rješavanja.

Primjer Da li je moguće ofarbati kartu svijeta podijeljenu po regijama u četiri


boje tako da dvije regije koje se dodiruju ne budu iste boje?

Iako djeluje trivijalno, ovo je jedan veoma težak problem Da/Ne tipa postavljen
prije više od 200 godina, a čije je rješenje (odgovor je potvrdan) pronađeno tek
prije petnaestak godina.

Metodologija rješavanja problema


Stoljećima su mnogobrojni filozofi i
matematski teoretičari smatrali kako mora Alan Turing (1912–
1954.) bio je britanski
postojati neka univerzalna metodologija
matematičar i
rješavanja problema koju je moguće informatičar koji je
mehanički primjenjivati na rješavanje svih imao nemjerljiv značaj
problema. Nažalost, sredinom dvadesetog u razvoju teorijske
kompjuterske nauke,
stoljeća, uglavnom zahvaljujući radovima
te ga mnogi smatraju
britanskog matematičara Alana Turinga, ocem teorijske kompjuterske nauke i
ustanovljeno je da ovakva univerzalna vještačke inteligencije. Njegova
metodologija ne postoji. kreacija, takozvana Turingova mašina,
smatra se pretečom modernog
Ipak, prilikom pokušaja pronalaska višenamjenskog kompjutera.
univerzalne metodologije rješavanja
problema mnogobrojni naučnici došli su do važnih djelimičnih, ili čak potpunih
metodologija rješavanja odreĎenih skupina problema. Mnoga od ovih rješenja
pokazala su se izuzetno korisnim upravo u oblasti informatike i računarske
tehnike.
Izuzetno korisne upute za pristup metodologiji rješavanja problema dao je
poznati maĎarski matematičar i metodičar Georg Pólya. Naime, on je dao upute
za globalnu strategiju rješavanja problema koja se odvija u četiri etape:
I FAZA: RAZUMIJEVANJE PROBLEMA,
II FAZA: RAZRADA PLANA AKCIJE,
III FAZA: REALIZACIJA PLANA AKCIJE,
IV FAZA: OSVRT NA RJEŠENJE.

U etapi razumijevanja problema potrebno je prvo JASNO DEFINISATI


problem. Znači, potrebno je definisati koje se to infornacije koje su nam poznate

4
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

(ulaz), koji uslovi vrijede, te šta se to tačno od nas traži (izlaz). Nakon što smo
problem definisali potrebno je ustanoviti koje su to veze izmeĎu ulaza i izlaza
problema. Ove veze nisu uvijek očigledne i nekada ih je teško uspostaviti. U
ovakvim slučajevima problem je potrebno razbiti na podprobleme.
Sve dok se etapa razumijevanja problema na obavi u potpunosti nema
smisla prelaziti na sljedeće etape. Naime, ukoliko ne razumijemo problem ne
postoji upošte mogućnost da ga možemo predočiti računaru, a kamoli riješiti.
Etapa razrade plana akcije često predstavlja najtežu etapu. Naime,
ukoliko je problem poznat od ranije ova etapa biće krajnje jednostavna. No,
ukoliko nam problem nije poznat ova etapa može utrošiti enormne količine
energije. Stoga, prva stvar koju je potrebno uraditi je provjeriti da li je problem
već rješen.
Za plan akcije možemo reći da je izraĎen tek nakon što su detaljno
razraĎeni svi koraci rješavanja problema. Ovo podrazumijeva i redoslijed koraka
u kojima se rješenje izvodi.
Sljedeća etapa je realizacija plana akcije. U ovoj etapi, ukoliko problem
rješavamo pomoću računara, potrebno je niz koraka koje smo definisali u ranijim
koracima pretočiti u program.
Posljednja etapa predstavlja osvrt na rješenje. Naime, nakon što smo
sproveli sve prethodne korake potrebno je izvršiti verifikaciju rješenja, tj.
ustanoviti da li je rješenje koje smo dobili ispravno. Nakon toga, potrebno je
dublje analizirati problem i pokušati utvrditi da li je problem bilo moguće riješiti
efikasnije.

5
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

Algoritam
Ranije smo ustanovili da je najteža
etapa rješavanja nekog problema upravo Abu Ja'far Mohammed
ibn Musa al-Khwarizmi
razrada plana akcije. TakoĎer, rekli smo
(oko 800–850.) je bio
da je u ovom koraku potrebno jasno perzijski matematičar,
definisati sve korake i redoslijed njihovog astronom i geograf. Kroz
izvoĎenja. Sada je potrebno formalizovati svoju knjigu „Račun sa
hindu brojkama“ prenio je
i samu razradu plana. U tu svrhu uvodi se
modernu numeričku (indijsku) notaciju
pojam algoritam. deset cifara, u kojoj vrijednost numerala
Algoritam je riječ nastala lošom zavisi od njegove pozicije, u evropsku
matematiku koja je zbog utjcaja ove
transkripcijom posljednje riječi imena knjige pogrešno nazvana arapskom
perzijskog matematičara Abu Ja'far notacijom. Smatra se da je Hvarizmi prvi
Mohammed ibn Musa al-Khwarizmi. konkretizovao korake postupaka
Smatra se da je on u svom djelu "Kitab rješavanja različitih matematičkih
problema, te su ovakvi postupci, iako
al-jabr wa'l-muquabala" prvi formulisao
zasnovani na grešci u prevodu njegovog
jasne i precizne postupke, algoritme, za imena, njemu u čast nazvani algoritmi.
obavljanje osnovnih računskih operacija.
Pojam algoritma nije lako definisati. Mnogobrojne su nepotpune definicije
ovog pojma. Naime, definicija algoritma mora uzeti u obzir da postupak
pronalaženja rješenja mora biti formalizovan u smislu koraka, te njihovog
redoslijeda i broja. Nadalje, algoritam uvijek mora dati odgovor. Šta ovo znači?
Pa, ukoliko rješenje ne postoji, algoritam treba biti u stanju prepoznati takvu
situaciju. Mi ćemo se ovdje voditi sljedećom definicijom.

Svaki jasan, precizan i nedvosmislen konačan niz koraka


koji u konačnom vremenu daje rješenje ili odgovor da rješenja nema
zove se ALGORITAM.

Česta je situacija da rješenje nekog problema možemo naslutiti. Bilo da se


radi o iskustvu ili pukom pogaĎanju, dešavaju se situacije kada rješenje
jednostavno znamo, ili makar mislimo da znamo.

Rješavanje problema čistom intuicijom, bez formalnog postupka,


naziva se HEURISTIKA.

Rješenja koja se zasnivaju na heurističkoj metodi ne moraju uvijek dati


rješenje ili odgovor da ga nema. Često, obzirom da se zasnivaju na intuiciji i
iskustvu, rješenja dobijena ovom metodom su pogrešna (iako to ne mora biti
slučaj). UvoĎenjem pojma heuristike stvorili smo prostor za sljedeću definiciju
algoritma:

6
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

Svaki postupak koji se može provesti mehanički, bez upotrebe intuicije,


naziva se algoritam.
Ova definicija nije potpuna. Kakav je to postupak koji se može provesti
mehanički? Naravno, mehanički postupak je uvijek formalizovani postupak, ali ni
to nije dovoljno. Prema tome, potrebno je definisati pojam mehaničkog
postupka. Postoje različiti postupci formalizacije, tj. postupci koji rasvjetljavaju
koji su to tačno mehanički postupci. Najbitnije postupke formalizacije dali su
Turing, Post, Church i Klin. Svaki od ovih postupaka je različit, ali je kasnije
pokazano da su oni ekvivalentni. Mi ćemo se osvrnuti samo na Turingov
postupak formalizacije, obzirom da se on uglavnom koristi u praksi.
Ovaj postupak zasniva se na tzv. Turingovoj mašini. Turingova mašina
sastoji se od beskonačne memorijske trake koja je podijeljena na jednaka polja.
Iznad trake nalazi se glava koja se može pomjerati za po jedno polje lijevo ili
desno. U svako polje mogu se upisivati neke vrijednosti ili instrukcije. Dozvoljene
instrukcije su: upiši drugi znak, pomjeri glavu jedno mjesto lijevo i pomjeri glavu
jedno mjesto desno. Dokazano je da se svaki formalizovani postupak može
izvesti pomoću Turingove mašine.
Turing i Church su postavili tezu
da se svaki problem koji se može riješiti
intuitivno može riješiti i formalizovanim
postupcima (Church-Turingova teza).
MeĎutim, 1960-ih dolazi do pronalaska
problema koji nisu rješivi niti jednim
formalnim postupkom, tj. do problema
koji su takve prirode da se ne mogu Turingova mašina
riješiti algoritamski.

7
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

Struktura algoritama
Moderni algoritmi pišu se u vidu niza nenumerisanih koraka koji se u
ovisnosti od algoritamske strukture pišu uvučeni ili na istom nivou kao početni
iskaz. Oni sadrže tri osnovne algoritamske strukture:
 Sekvence iskaza,
 Strukture grananja, i
 Strukture ponavljanja.

Primjer Zapis algoritma za sabiranje dva broja sa potpisivanjem:


 Napiši brojeve jedan ispod drugog poravnato s desna
 Postavi kurzor na krajnju desnu cifru
 Cifra desetica D = 0
 Dok ima brojeva:
 Saberi potpisane cifre i cifru desetica D
 Ako je zbir jednocifren
 Upiši cifru ispod sabranih cifara
 D postavi na 0
 U suprotnom
 Upiši cifru jedinica ispod sabranih cifara
 Cifru desetica zapamti u D
 Pomjeri se jedno mjesto ulijevo

Ovdje vidimo primjer algoritma koji nam je već veoma dobro poznat
napisan u stilu modernog zapisa algoritama. Na ovom primjeru je uočljivo da se
naredbe koje se izvršavaju skupa zapisuju na istom nivou. Prikazani primjer
sadrži sve nabrojane algoritamske strukture.

Sekvence iskaza
Sekvenca iskaza je forma koja se sastoji od niza iskaza koji se izvode po
redu kako su zapisani. Unutar algoritma jedna sekvenca iskaza je skup
kontinuiranih naredbi napisanih na istom nivou. U prethodnom primjeru možemo
uočiti više sekvenci iskaza.

Primjer Neke sekvence iskaza u algoritma za sabiranje dva broja sa


potpisivanjem:
Primjer sekvence 1:
 Napiši brojeve jedan ispod drugog poravnato s desna
 Postavi kurzor na krajnju desnu cifru
 Cifra desetica D = 0
Primjer sekvence 2:
 Upiši cifru ispod sabranih cifara
 D postavi na 0

8
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

Strukture grananja
Strukture grananja su algoritamske strukture kod kojih se jedna
sekvenca iskaza izvršava ukoliko je neki uslov ispunjen, a druga ukoliko uslov
nije ispunjen. U prvom primjeru ove lekcije nalazi se jedna struktura grananja.

Primjer Struktura grananja unutar algoritma za sabiranje dva broja sa


potpisivanjem:

 Ako je zbir jednocifren


 Upiši cifru ispod sabranih cifara
 D postavi na 0
 U suprotnom
 Upiši cifru jedinica ispod sabranih cifara
 Cifru desetica zapamti u D

Vidimo da se sekvenca iskaza koja se izvršava u nekom od slučajeva piše


uvučeno u odnosu na uslov. Kada se nivo nekog iskaza poravna sa nivoom
uslova tada je sekvenca iskaza vezana za taj uslov završena.
Strukture grananja mogu imati jednostruki, dvostruki ili višestruki izbor.
Strukture grananja sa jednostrukim uslovom imaju konstrukciju „ako vrijedi
uslov izvrši akciju“ i ne navode ništa ukoliko uslov nije zadovoljen. Strukture
grananja sa dvostrukim izborom, pak navode šta učiniti ukoliko uslov nije
ispunjen: „ako vrijedi uslov izvrši akciju 1, a u suprotnom izvrši akciju 2“.
Strukture višestrukog izbora nisu ništa drugo do nanizane strukture grananja
dvostrukog izbora.

Primjer: Struktura grananja sa jednostrukim izborom.


 Ukoliko pada kiša:
 Obuj nepromočive cipele.
 Ponesi kišobran.
 Izađi iz kuće.

Primjer: Struktura grananja sa dvostrukim izborom.

 Ukoliko pada kiša:


 Obuj nepromočive cipele.
 Ponesi kišobran.
 Izađi iz kuće.
 U sprotnom:
 Izađi iz kuće.

9
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

Primjer: Struktura grananja sa višestrukim izborom.

 Ukoliko pada kiša:


 Obuj nepromočive cipele.
 Ponesi kišobran.
 Izađi iz kuće.
 U sprotnom, ako sija sunce:
 Obuj sandale.
 Stavi sunčane naočale.
 Izađi iz kuće.
 U sprotnom:
 Izađi iz kuće.

Strukture ponavljanja
Strukture ponavljanja su algoritamske strukture kod kojih se jedna
sekvenca iskaza izvršava više puta. U polaznom primjeru ove lekcije nalazi se
jedna struktura ponavljanja.

Primjer Struktura ponavljanja unutar algoritma za sabiranje dva broja sa


potpisivanjem:
 Dok ima brojeva:
 Saberi potpisane cifre i cifru desetica D
 Ako je zbir jednocifren
 Upiši cifru ispod sabranih cifara
 D postavi na 0
 U suprotnom
 Upiši cifru jedinica ispod sabranih cifara
 Cifru desetica zapamti u D
 Pomjeri se jedno mjesto ulijevo

Vidimo da se sekvenca iskaza koja se ponavlja piše se uvučeno u odnosu


na uslov petlje. Strukture ponavljanja dijele se u tri grupe ovisno o tipu uslova
petlje:
1. Strukture kod kojih je poznat broj ponavljanja.
2. Sekvenca iskaza se ponavlja sve dok je neki uslov ispunjen.
3. Sekvenca iskaza se ponavlja sve dok se neki uslov ne zadovolji.

Često se jedna te ista struktura ponavljanja može napisati u bilo kojem od


ovih oblika. Ovo je slučaj za sekvence iskaza za koje je poznat broj ponavljanja.
S druge strane, ako broj ponavljanja nije poznat, moguće je kreirati ekvivalentne
petlje drugog i trećeg oblika.

10
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

Primjer: Ista struktura ponavljanja napisana u sva tri oblika.


1. 2. 3.
 Za svaku bombonu u  Dok u kesi ima  Dok kesa nije prazna:
kesi: bombona:
 Izvadi  Izvadi  Izvadi
bombonu. bombonu. bombonu.
 Odmotaj  Odmotaj  Odmotaj
bombonu. bombonu. bombonu.
 Pojedi  Pojedi  Pojedi
bombonu. bombonu. bombonu.

Strukture ponavljanja moguće je logički podijeliti još na dva načina:


1. Po dužini izvršavanja: na konačne i beskonačne.
2. Po uslovima izvršavanja: na uslovne i bezuslovne.

Kod konaĉnih struktura ponavljanja se sekvenca iskaza ponavlja konačan


broj puta, tj. momenat njenog zaustavljanja nalazi se u programu. Beskonaĉne
strukture ponavljanja izvršavaju se unutar programa u nedogled, te je jedini
način zaustavljanja programa nasilni prekid izvršavanja.
Kod bezuslovnih struktura ponavljanja sekvenca iskaza se izvršava
makar jednom, a tek nakon toga dolazi do provjere da li sekvencu treba ponoviti.
S druge strane, kod uslovnih struktura prvo se provjerava uslov pod kojim se
sekvenca iskaza ponavlja, te se tek onda, ukoliko je uslov ispunjen, sekvenca
izvršava.

Konstrukcija algoritama. Pseudokod


Prva i druga etapa Pólyaine strategije predstavljaju FAZU RJEŠAVANJA
PROBLEMA, dok druge dvije etape predstavljaju FAZU IMPLEMENTACIJE
RJEŠENJA. Sada ćemo kroz primjer pogledati kako provesti fazu rješavanja
jednog jednostavnog matematičkog problema, te kako kreirati algoritam za
njegovo rješavanje.

Primjer Kreirati algoritam koji računa površinu cilindra ako su poznati njegova
zapremina i visina.

1. RAZUMIJEVANJE PROBLEMA
 Poznate informacije: zapremina (V) i visina (H) cilindra.
 Informacije koje se traže: površina (P) cilindra.
 Pravila koja ih povezuju: P=2rπ(r+H), V=r2πH.
 Početni uslovi: V>0, H>0

11
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

Znači, kako bismo mogli izračunati površinu, nedostaje nam informacija o


poluprečniku. No, poluprečnik možemo naći iz formule za zapreminu.
2. RAZRADA PLANA AKCIJE
U ovom koraku treba formalizovati zaključke iz prethodnog koraka kako bi
kreirali algoritam. Ovaj problem nije algoritamski zahtjevan, pa ovaj proces
možemo realizirati odmah. Bitno je uočiti da ulaz čine poznate informacije,
izlaz informacije koje se traže, a koraci između odvijaju se na osnovu
informacija koje povezuju ulaz i izlaz na način opisan u zaključku. Prema tome,
dolazimo do sljedećeg algoritma:
ULAZ: V, H
P.U. V>0, H>0
 Unesi V i H
𝐕
 Izračunaj r, r=
𝝅𝐇
 Izračunaj P, P=2rπ(r+H)
 Ispiši P
IZLAZ: P
Vidjeli smo kako možemo realizirati jedan algoritamski jednostavan
problem koji sadrži samo sekvence iskaza. Napomenimo to da je ovaj problem
algoritamski jednostavan jedino ukoliko su nam poznate formule koje povezuju
podatke iz problema. Ukoliko to nije slučaj, mi bismo sami trebali pronaći ove
formule. Na sreću, većina problema iz matematike, inžinjerstva, fizike, hemije,
isl. već posjeduje algoritamske postupke, te sve što je potrebno za kreiranje
programa koji ih rješava jeste formalizovati te korake na način koji razumije
računar.
Mi smo u prethodnom primjeru napravili formalizaciju algoritma govornim
jezikom, ali na način da ga računar može razumjeti ukoliko ga prevedemo na
neki programski jezik.

Niz koraka koji nevezano i za jedan programski jezik


opisuje algoritamsko rješenje problema zove se
PSEUDOKOD ili APSTRAKTNI PROGRAM.

U prethodnom primjeru vidjeli smo kako realizirati pseudokod


algoritamski najjednostavnijeg tipa problema. Pogledajmo sada kako pristupiti
rješavanju nešto kompleksnijeg problema koji zahtjeva korištenje struktura
grananja.

12
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

Primjer Kreirati algoritam koji za unijeti broj ispisuje da li je manji, veći ili
jednak 0.
1. RAZUMIJEVANJE PROBLEMA
 Poznate informacije: broj X
 Informacije koje se traže: znak broja X
 Pravila koja ih povezuju: X>0, X<0 ili X=0;
 Početni uslovi: Problem nema početnih uslova
Prema tome, treba provjeriti koja je od ove tri tvrdnje tačna.
2. RAZRADA PLANA AKCIJE
Formalizujmo sada zaključke iz prethodnog koraka. Ovaj problem nije
algoritamski zahtjevan, te možemo odmah formirati sljedeći algoritam:
ULAZ: X
 Unesi X
 Ako je X>0
 Znak je pozitivan
 U suprotnom, ako je X<0
 Znak je negativan
 U suprotnom
 X je 0
 Ispiši rezultat

Kreiranje algoritama koji koriste strukture ponavljanja demonstriraćemo


na jednom praktičnom problemu.

Primjer Kreirati algoritam aparata za naplatu parkinga koji prima novčanice u


apoenima 1 KM, 2 KM i 5 KM.
1. RAZUMIJEVANJE PROBLEMA
 Poznate informacije: Cijena C
 Informacije koje se traže: Kusur K, tiket
 Pravila koja ih povezuju: Korisnik uplaćuje iznos I, K=I–C
 Početni uslovi: Da bi prikazao cijenu, u aparat je potrebno ubaciti tiket.
Pojedinačne novčanice n moraju biti u apoenima od 1, 2 ili 5 KM.
Znači, za cijenu C koju prikaže aparat korisnik ubacuje novčanice sve dok ne
dostigne iznos I takav da je IC, a potom aparat izračunava da li je potrebno
vratiti kusur, izbacuje kusur i tiket.
2. RAZRADA PLANA AKCIJE

I FAZA: DIZAJN PODATAKA


Potrebni promjenljive: Cijena C, trenutno uplaćeni iznos I, kusur K
Dalje, ovdje nam je potreban i skup novčanica n koje ubacuje korisnik,
označićemo ga sa N, N={n|n=1 v n=2 v n=5}

13
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

II FAZA: ULAZ – IZLAZ


ULAZ: Tiket, N
Početni uslovi: Tiket ubačen. (nN) (n=1 v n=2 v n=5). Trenutni iznos I je 0.
IZLAZ: K, Tiket
III FAZA: GLOBALNI KORACI
U ovoj fazi definisaćemo uopštene korake koje program treba imati. Za ovaj
problem ti koraci bi glasili:
ULAZ: Tiket, N
P. U. Tiket ubačen; (nN) (n=1 v n=2 v n=5); I=0
 Očitaj cijenu C
 Dok je C>I
 Ubaci novčić n
 Uvećaj I za n
 Ako je I>C
 Izračunaj K=I-C
 Vrati kusur K
 Izbaci Tiket
IZLAZ: K, Tiket
IV FAZA: RJEŠAVANJE PODPROBLEMA
U ovoj fazi trebalo bi dodatno razraditi korake koji u sebi sadrže više akcija.
Međutim, u napisanom algoritmu takvih koraka nema, te u ovoj fazi nemamo
nikakvog posla.

Većina problema u praksi je znatno složenija, te samim tim teža za


algoritmizaciju. U sljedećem primjeru ćemo vidjeti kako algoritmizirati naizgled
jednostavan problem iz prakse.

Primjer Algoritamski riješiti, te kreirati pseudokod za sljedeći problem.


Za svakog učenika u razredu poznat je broj opravdanih i broj neopravdanih
izostanaka. Izlistati spisak učenika sortiran u rastući poredak po ukupnom
broju izostanaka.

1. RAZUMIJEVANJE PROBLEMA
 Poznate informacije: ime, prezime, broj opravdanih, broj neopravdanih.
 Informacije koje se traže: Učenici sortirani po broju izostanaka.
 Pravila koja ih povezuju: broj izostanaka = opravdani + neopravdani.
 Početni uslovi: ime i prezime učenika ne smiju sadržati brojeve, broj
opravdanih i broj neopravdanih izostanaka ne smije biti manji od 0
Znači, potrebno je za svakog učenika izračunati ukupan broj izostanaka, a
potom spisak sortirati od najmanjeg broja izostanaka do najvećeg.

14
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

2. RAZRADA PLANA AKCIJE


Ovaj problem je algoritamski dosta složeniji od prethodnih. Prvi problem je u
tome što računar može baratati samo elementarnim tipovima podataka, a naš
program mora povezati ime i prezime sa brojem izostanaka. Nadalje, računar
poznaje samo elementarne instrukcije, a podatke treba sortirati. Ovo znači da
proces sortiranja također treba svesti na elementarne operacije. Sve ove
probleme treba riješiti pojedinačno.

I FAZA: DIZAJN PODATAKA


Sada treba definisati kakvi će nam podaci trebati. Nama u program ulaze podaci
o svakom učeniku, i to u formatu
ime, prezime, broj opravdanih, broj neopravdanih
Prema tome, potreban nam je tip podataka koji je skup uređenih četvorki:
Učenici={(ime, prezime, opravdani, neopravdani)}
Dalje, nakon što za svakog učenika izračunamo ukupan broj izostanaka
potrebno je formirati skup uređenih trojki oblika:
Izostanci={(ime, prezime, izostanci)}

II FAZA: ULAZ – IZLAZ


Očito je:
ULAZ: Učenici
No, šta je izlaz? Izlaz NIJE skup Izostanci! Izlaz je skup izostanci sortiran u
rastući poredak po broju izostanaka.

IZLAZ: Sortirani skup Izostanci


III FAZA: GLOBALNI KORACI
U ovoj fazi definisaćemo uopštene korake koje program treba imati. Za ovaj
problem ti koraci bi glasili:
 Unesi skup Učenici.
 Za svakog učenika iz skupa kreiraj (ime, prezime, izostanci) i ubaci
uređenu trojku u skup Izostanci.
 Sortiraj skup izostanci.
 Ispiši skup Izostanci.

IV FAZA: RJEŠAVANJE PODPROBLEMA


Bilo bi lijepo kada bi se prethodni algoritam mogao direktno prevesti u
program, međutim, navedene radnje nisu elementarne. Zbog toga, svaku liniju
koju smo napisali treba prekontrolisati i pogledati da li ju je potrebno razbijati
dalje na elementarnije korake.

15
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

"Unesi skup Učenici"


Ovdje je potrebno uočiti sljedeće:
 Potrebno je prvo kreirati prazan skup u koji ćemo ubacivati učenike.
Nazvaćemo ga U.
 Obzirom da imamo repetativnu radnju trebaće kreirati petlju. Kako bismo
znali koliko puta treba ponoviti radnju, poželjno je znati broj učenika. Broj
učenika označićemo sa N.
 Za svakog učenika treba unijeti sva četiri podatka, formirati četvorku i
ubaciti je u skup U.
Prema tome, isječak algoritma koji razrješava ovu liniju bio bi:
 Kreiraj prazan skup U
 Unesi broj učenika N
 N puta:
 Unesi ime.
 Unesi prezime.
 Unesi opravdane.
 Unesi neopravdane.
 Kreiraj četvorku (ime, prez, op, neop) i obaci je u skup U.
"Za svakog učenika iz skupa kreiraj (ime, prezime, izostanci)
i ubaci uređenu trojku u skup Izostanci."

Ovdje je potrebno uočiti sljedeće:


 Potrebno je prvo kreirati prazan skup u koji ćemo ubacivati učenike, ali ovaj
put sa ukupnim brojem izostanaka. Nazvaćemo ga I.
 Imamo da je izost=op+neop, pa opet imamo repetativnu radnju jer za
svakog učenika treba formirati (ime, prez, izost) i ubaciti u skup I. Kako
odrediti kada se ova petlja zaustavlja? Možemo smatrati da su učenici u
skupu U numerisani, te se pomjerati kroz skup na sljedeći redni broj "i".
Isječak algoritma koji razrješava ovu naredbu sada glasi:
 Za svakog učenika i iz skupa U (i ide od 1 do N)
 izost = op + neop
 Kreiraj (ime, prez, izost) i ubaci u skup I
"Sortiraj skup izostanci.
Ispiši skup Izostanci."
Primijetmo da su ovdje označene dvije linije iz prvobitnog algoritma. O čemu se
ovdje radi? Ove naredbe mogu se izvoditi i odvojeno, a mogu i paralelno, ovisno
o tome kako riješimo problem sortiranja. Pa, najlakše je sortirati tako što iz
skupa I uzmemo najboljeg učenika, ispišemo ga, pa ga obrišemo iz skupa I, te
ponavljamo ovu radnju dok ne ispraznimo skup I. Na ovaj način nema potrebe
za pamćenjem pomoćnih informacija, niti novim skupom u koji bismo sortirali
elemente. Prema tome, ovaj isječak rješavamo na sljedeći način:

16
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

 Dok skup I nije prazan:


 Nađi učenika sa najmanje izostanaka u skupu I.
 Ispiši ime.
 Ispiši prez.
 Ispiši izost.
 Obriši učenika iz skupa I.
 Umanji N za 1.

Uočimo da jedan od ovih koraka nije elementarna operacija! Radi se o prvom


koraku unutar petlje. Znači, potrebno je i njega svesti na elementarne radnje.
"Nađi učenika sa najmanje izostanaka u skupu I"
Kako pronaći učenika sa najmanjim brojem izostanaka? Ovo je vjerovatno
najteži dio ovog zadatka. Većina nas iz skupa vrijednosti zna izdvojiti najmanju,
ali isto tako, većina ne zna objasniti kako je do tog pronalaska došla. Logika
kojom se većina nas vodi je sljedeća. Izaberemo element koji nam se čini
najboljim i onda gledamo da li u skupu ima bolji od njega. Ako ima, uzmemo taj
bolji element i provjeravamo dalje, a ako nema, pronašli smo najbolji.
Sličnom logikom vodićemo se i ovdje, s tom razlikom da ćemo, pošto ovdje ne
možemo pogledom potražiti najbolju opciju, uzeti prvi element skupa i porediti
ga sa svakim sljedećim, i prilikom svake usporedbe uzećemo onaj bolji.
Prema tome, pronalazak najboljeg elementa izvršićemo na sljedeći način:

 Najbolji je prvi učenik


 Za svakog učenika i iz skupa I (i ide od 2 do N)
 Ako je učenik i bolji od najboljeg
 Najbolji je učenik i.

Razvijajući ovaj apstraktni program prvo smo skicirali grubi kostur


algoritma, a zatim smo svaki od koraka po potrebi dalje raščlanjivali do
elementarnih instrukcija. Ova metodologija naziva se razvoj programa s vrha
naniže ("top-down") i predstavlja jednu od najkorištenijih metodologija.
Mi smo prilikom razvoja prethodnog pseudokoda kreirali i sopstvene
"tipove" podataka kako bismo olakšali dalji razvoj programa. Ovakvi podaci
nazivaju se struktuirani podaci. Metodologija programiranja koja koristi
struktuirane podatke naziva se struktuirano programiranje, i na njoj se
zasniva programiranje u većini modernih programskih jezika.
Struktuirani pristup programiranju olakšava razvoj modularnog dizajna
programa. Osnovna ideja ovog dizajna je da se program izdijeli na više manjih
cjelina (podprograma) koji su što je više moguće neovisni jedan o drugom. Kod
ovakvih programa olakšana je kontrola ispravnosti i održavanje, a program je
znatno pregledniji.

17
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

Numerisanje koraka i dijagram toka


Pored načina opisanog do sada, postoje i drugi formalizovani načini
zapisivanja algoritama. Najstariji je zapisivanje algoritama u vidu numerisanih
koraka. Nakon ovog načina zapisivanja nastao je grafički prikaz algoritama u
vidu dijagrama toka koji je služio za lakše praćenje pisanog algoritma. Oba ova
načina mi ćemo ovdje proučiti čisto iz akademskih razloga, iako su izbačeni iz
upotrebe jer narušavaju odreĎene koncepte modernog programiranja.
U čemu je zapravo problem? Stari stil zapisivanja algoritama koristio je
dvije algoritamske strukture:
 Sekvence iskaza, i
 Iskaze grananja.
Ranije smo vidjeli da sekvence iskaza same po sebi nisu problematične, te
da se koriste i u modernom programiranju. Prema tome, očigledno je problem u
iskazima grananja. Naime, kod iskaza grananja program se nastavlja od nekog
iskaza koji se može nalaziti bilo gdje u programu. Upravo zbog ove činjenice
algoritmi su morali biti numerisani.
Stil koji je koristio iskaze grananja dozvoljavao je da se proces nakon što
doĎe do nekog koraka vrati na neki raniji korak. Ovo se u programima
realizovalo pomoću "go to" naredbe. Pored toga što realizovan na osnovu
ovakvog plana program može biti nečitljiv i težak za pratiti, vremenom se
pokazalo da ovakav pristup može biti i veoma štetan jer dovodi do takozvanog
"spaghetti" koda.

Primjer Pogledajmo kako bismo sljedeći problem realizovali u vidu


numerisanih koraka.
Kreirati algoritam aparata za naplatu parkinga koji prima novčanice u
apoenima 1 KM, 2 KM i 5 KM.
ULAZ: Tiket, N
P. U. Tiket ubačen; (nN) (n=1 v n=2 v n=5); I=0
1. Očitaj cijenu C
2. Ubaci novčić n
3. Uvećaj I za n
4. Ako je I<C idi na korak 2.
5. Ako je I=C idi na korak 9.
6. Ako je I>C
7. Izračunaj K=I-C
8. Vrati kusur K
9. Izbaci Tiket
IZLAZ: K, Tiket

18
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

Kako je kompleksnije programe u ovakvom zapisu bilo izuzetno teško


pratiti razvijen je grafički način prikaza numerisanih algoritama pod nazivom
dijagram toka ili organigrama. U dijagramima toka pojedini koraci algoritma
opisuju se različitim grafičkim simbolima, dok se tok prelaska sa jednog na drugi
korak označava strelicama.

POČETAK / KRAJ

ULAZ / IZLAZ

OBRADA PODATAKA

BLOK ODLUKA

Grafički simboli dijagrama toka

U jednom dijagramu toka ima tačno jedan početak, ali može biti više
krajeva. Simbol za ULAZ / IZLAZ koristi se na mjestima na kojima se unose
podaci u algoritam, odnosno ispisuju iz njega. Postoji i notacija koja za ulaz i
izlaz, umjesto zajedničkog, koristi različite simbole. U blokovima obrade
podataka nalaze se koraci unutar kojih se vrši bilo kakva obrada podataka
(izračunavanja isl). Blok odluka je karakterističan jer iz njega obično izlaze dvije
strelice, u ovisnosti o tome da li je uslov koji se nalazi unutar njega ispunjen.
Pomoću ovog bloka realiziraju se iskazi grananja.

ULAZ

IZLAZ

Različiti simboli za prikaz ulaza i izlaza u dijagram toka

19
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

Primjer Realizirajmo sada algoritam za naplatu parkinga iz prethodnog


primjera pomoću dijagrama toka.

Očitaj C
I=0

NE

DA

20
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

Programski jezici

Kako računar zna šta i kako treba uraditi? Kako mu podnosimo taj
zahtijev? Bilo bi idealno kada bismo mogli reći računaru: „Riješi mi ovaj zadatak
iz zadaće i isprintaj.“ Nažalost, ovo još uvijek nije moguće. Bilo bi lijepo i kada
bismo ovo mogli utipkati; ali ni to nije moguće. Zašto? Računari prosto „ne
govore“ naš (ljudski) jezik. Računar komunicira sa korisnikom kroz niz
jednostavnih rečenica izuzetno stroge sintakse koje se zovu komande. Zašto
izuzetno stroge? U ljudskom govornom jeziku često može doći do dvosmislenosti,
a računar mora znati šta treba raditi, stoga te dvosmislenosti treba eliminirati.

Primjer Zabranjeno gostima hrniti ribe.


Da li je:
1. gostima zabranjeno da hrane ribe?
2. zabranjeno bacati goste kao hranu ribama?
Programski jezik nikada ne smije imati ovakvu nedoumicu.

Programski jezici niskog nivoa


Osnovna podjela programskih jezika je na programske jezike niskog i
programske jezike visokog nivoa. Jezici niskog nivoa predstavljaju mašinski
orijentisane jezike jer su u potpunosti ovisni o mašini na kojoj rade.
Najprimitivniji programski jezik je mašinski jezik. Mašinski jezik sastoji
se samo od niza jedinica i nula. Ovakav jezik ljudima je izuzetno težak za
razumijevanje, meĎutim, to je jedini jezik koji računar razumije bez ikakve
potrebe za prevoĎenjem.
Nekada je jedini način programiranja bio pomoću mašinskog jezika. U cilju
olakšavanja programiranja razvijaju se drugi, ljudima razumljiviji jezici. Prvu
nadogradnju na mašinski jezik predstavlja asemblerski jezik. U ovom jeziku
odreĎene skupine 0 i 1 su objedinjene u skraćenice koje opisuju njihovo
značenje. Iako je asemblerski jezik značajan pomak u odnosu na mašinski,
naredbe koje on prepoznaje su strogo elementarne, kao npr. sabiranje dva broja,
te svaki program treba rastaviti na mnogobrojne elementarne instrukcije. Ovo i
dalje nije dovoljno za značajno unapreĎenje komunikacije čovjeka sa računarom.

Proceduralni programski jezici i programerske filozofije


Znatno napredniju skupinu jezika čine jezici visokog nivoa. Programski
jezici visokog nivoa dijele se na proceduralne i neproceduralne. Proceduralni
programski jezici čine najveću skupinu jezika. Njihova je osnovna karakteristika
da pri rješavanju nekog problema računaru treba precizno opisati sve korake na
putu ka rješenju. Ovi programski jezici imaju na raspolaganju mnogo širu paletu
radnji, a njihove elementarne instrukcije nisu u potpunosti rudimentarne.

21
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

Proceduralni programski jezici su problemski orijentisani jezici, za razliku


od jezika niskog nivoa koji su mašinski orijentirani. Ovo znači da proceduralni
jezici nisu uvjetovani mašinom na kojoj se izvode. Proceduralne programske
jezike dalje dijelimo na osnovu programerske filozofije koju inkorporiraju na
strogo proceduralne i objektno orijentisane.
Strogo proceduralni jezici akcentiraju funkcije, a podaci unutar
programa služe samo kao „hrana“ za funkciju. U ovu skupinu jezika spadaju
FORTRAN, BASIC, Pascal, C,...
Kod objektno orijentisanih jezika prilikom rješavanja problema
modeliraju se struktuirani tipovi podataka koji posjeduju svoje funkcije. U ovim
programskim jezicima akcentiraju se podaci, a funkcije su tu samo kako bi
opsluživale podatke. U objektno orijentisane jezike spadaju SmallTalk, Delphi,
C++, C#, JAVA, JavaScript, Visual BASIC, Ruby,...

Neproceduralni programski jezici


Posljednju skupinu programskih jezika čine neproceduralni programski
jezici. Dijele se na deklarativne i funkcionalne programske jezike. Deklarativni
programski jezici obično su usmjereni na rješavanje tačno odreĎene skupine
problema, te prilikom njihovog korištenja računaru ne treba objašnjavati kako
nešto uraditi, već samo šta treba uraditi. Ova skupina jezika je uglavnom prilično
jednostavna za upotrebu, a obično se koriste u kombinaciji sa nekim
proceduralnim jezikom. Glavni predstavnik ove grupe jezika je mySQL.
Znatno univerzalniji jezici od deklarativnih su funkcionalni programski
jezici. Ovi jezici rade sa minimalnim utroškom memorije jer svaki podatak je
samo argument neke nove funkcije. Možemo reći da su programi napisani u
funkcionalnim jezicima samo jedna velika kompozicija funkcija. Ovi jezici nisu
jednostavni za korištenje, ali su s druge strane pogodni za rješavanje veoma
široke palete problema, te se koriste za programiranje vještačke inteligencije. U
ovu skupinu programskih jezika spadaju LISP, PROLOG i ML.

Prevodioci
Kako računar razumije samo mašinski jezik neophodno je posjedovati
prevodioce izmeĎu mašinskog i drugih programskih jezika. Generalno, postoje
dvije vrste prevodioca kompajleri i interpreteri.
Kompajleri se nazivaju još i esejski prevodioci jer rade tako što prvo čitav
izvorni program prevode u mašinski kod, pa tek potom izvršavaju instrukcije.
Interpreteri, s druge strane, prevode jednu po jednu liniju i odmah ih po
prevoĎenju izvršavaju, te se zbog toga nazivaju još i linijski prevodioci. Prednost
kompajlera je u brzini izršavanja, dok su prednost interpretera manji memorijski
zahtjevi. Danas mnogi jezici koriste hibridne prevodioce nastale kombinovanjem
kompajlera i interpretera, kao što su P-kod kompajleri i run-time
interpreteri, kako bi iskoristili pogodnosti oba tipa prevodioca.

22
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

Pitanja i zadaci za vježbu

1. Šta je ulaz, a šta izlaz problema? 24. Kreirati pseudokod programa za pravljenje
2. Šta su početni uslovi problema? Zašto ih je kafe za jednog robota kuhara.
neophodno postaviti? 25. Napisati algoritam koji računa zapreminu
3. Koje osnovne vrste problema razlikujemo? kocke ako je data njena površina.
Koje su njihove osobine? 26. Kreirati pseudokod za program koji nalazi
4. Koja je razlika, a koja veza između direktnih i obim (O=4a) kvadrata ako je poznata njegova
inverznih problema? dijagonala (d=a ).
5. Koje je etape za generalnu strategiju 27. Kreirati pseudokod za program koji nalazi
rješavanja problema dao Georg Pólya? obim (O=2rπ) kružnice ako je poznata njena
Opisati svaku od etapa. površina (P=r2π).
6. Definisati pojam algoritma. 28. Kreirati pseudokod za program koji za uneseni
7. Šta je heuristika? broj ispisuje da li je paran ili neparan.
8. Šta su elementarne instrukcije? 29. Kreirati algoritam koji za unesene stranice a, b
i c trougla ispisuje da li je trougao pravougli ili
9. Na čemu se zasniva Turingova definicija
ne.
mehaničkog postupka?
30. Dat je početni isječak jednog algoritma za
10. Opisati Turingovu mašinu.
robota kuhara. Zaokružiti korake koje je
11. Da li je svaki problem moguće riješiti potrebno razvijati dalje kao podprobleme:
algoritamskim postupkom? Obrazložiti.  isjeckaj jedan luk
12. Na koje se načine može zapisati algoritam?  isprži meso na luku
13. Šta su algoritamske strukture?  sipaj 200 ml paradajz pirea
 začini solju i paprikom
14. Navesti koje algoritamske strukture postoje i
 ako je sos kiseo
opisati ih.
 dodaj malu kašiku šećera
15. Koja je razlika između iskaza grananja i  kada prokuha, naspi sos na
struktura grananja? tjesteninu
16. Zašto moderni algoritmi ne koriste iskaze  ...
grananja? 31. Dat je algoritam aparata za naplatu parkinga
17. Kako dijelimo strukture ponavljanja? koji vraća kusur. Zaokružiti korake koje je
18. Šta će se desiti u strukturama ponavljanja ako dalje potrebno razvijati kao podprobleme.
neki uslov nije ispunjen nikada, šta ako je  Dok je iznos manji od računa:
uvijek ispunjen?  Traži još novca.
19. Šta je pseudokod ili apstraktni program?  Ako je iznos veći od računa:
 Vrati kusur.
20. Koje su faze kreiranja algoritma? Opisati
 Izbaci račun.
svaku od faza.
21. Šta su struktuirani podaci, a šta struktuirano 32. Kreirati algoritam koji traži unos poluprečnika i
programiranje? visine cilindričnog bureta, te dužine stranice
kockastog akvarija, a potom ispisuje da li je
22. Opisati pristup "odozgo–naniže" pri razvoju
moguće preliti sadržaj bureta u akvarij.
apstraktnog programa?
33. Kreirati pseudodkod za program za podizanje
23. Opisati princip modularnog dizajna programa.
novca sa bankomata.

23
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.

34. Kreirati algoritam koji ispisuje sve kontakte iz 42. Šta radi algoritam predstavljen sljedećim
imenika koji žive u zadatom gradu. dijagramom toka? Napisati numerisani
algoritam koji mu odgovara.
35. Kreirati algoritam koji za svakog učenika u
razredu na osnovu broja bodova ispisuje
ocjenu. (0-40 ocjena 1, 41-55 ocjena 2, 56-70
ocjena 3, 71-85 ocjena 4 i 86-100 ocjena 5)
36. Kreirati pseudokod za program koji računa
srednju temperaturu u sedmici nakon što su
unijete sve dnevne temperature te sedmice.
37. Kreirati pseudokod za program koji računa
srednju ocjenu učenika.
38. Jedna firma ima više poslovnica i vodi
sedmičnu evidenciju o pojedinačnoj dobiti
svake. Kreirati algoritam koji će izlistati spisak
poslovnica po dobiti, od najveće do najmanje,
nakon što je unijet spisak poslovnica skupa sa
njihovim dnevnim prihodima i rashodima za
cijelu sedmicu. (dobit=prihod – rashod)
39. Prodavnica vodi evidenciju o trajanju
proizvoda kako bi najstariji proizvodi bili
naprijed u rafama. Kreirati algoritam koji će
izlistati sve iste proizvode od najbližeg do naj-
udaljenijeg datuma, pri čemu se svaki pojedi-
načni primjerak pamti po serijskom broju. 43. Šta radi algoritam predstavljen sljedećim
40. Kino-operater sa više termina prikazivanja dijagramom toka? Napisati numerisani
(svaki parni sat od 10 do 22) u više sala, algoritam koji mu odgovara.
numerisanih nekim jedinstvenim brojevima,
vodi evidenciju o posjetama. Potrebno je
napisati algoritam koji će izlistati sve termine u
opadajućem poretku po srednjoj vrijednosti
broja gledalaca kroz sedmicu ako je za svaku
projekciju u danu poznat broj gledalaca.
41. U nogometnom timu trener vodi evidenciju
o broju golova i brzini kojom igrač pretrči
teren. Na kraju sedmice unosi podatke sa
svakog treninga i želi dobiti spisak sortiran
tako da na prvom mjestu bude igrač sa
najviše golova u toku sedmice, s tim da uko-
liko dva igrača imaju isti broj golova ispred na
spisku dolazi igrač sa boljim srednjim vreme-
nom. Kreirati algoritam koji će ovo uraditi.
42. Šta je dijagram toka?
43. Koji se simboli koriste za koje akcije u
dijagramima toka?

24
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA

44. Šta radi algoritam predstavljen sljedećim 45. Kreirati dijagram toka algoritma za vaš put od
dijagramom toka? Napisati numerisani kuće do škole.
algoritam koji mu odgovara. 46. Kreirati dijagram toka za algoritam koji
ispisuje uspjeh svih učenika u razredu u
tekstualnom obliku.
47. Kreirati dijagram toka algoritma koji štampa
imena učenika koji su predloženi za
takmičenje iz nekog predmeta, pri čemu
predmet zadaje korisnik, a kriterij je srednja
ocjena učenika koju također zadaje korisnik.
48. Kreirati dijagram toka programa koji ispisuje
po veličini brojeve a, b i c.
49. Kreirati dijagram toka za algoritam koji za
unos baze a i eksponenta n izračunava an.
50. Kreirati dijagram toka za program koji
prebrojava koliko je puta moguće oduzeti broj
b od broja a.
51. Koji je najprimitivniji programski jezik i koje su
njegove osobine?
52. Šta je asemblerski jezik?
53. U čemu je razlika između programskih jezika
niskog i visokog nivoa?
54. U čemu je ralika između proceduralnih i
neproceduralnih programskih jezika?
55. U čemu je ralika između strogo proceduralnih i
objektno orijentisanih programskih jezika?
56. Objasniti koncept na kojem rade strogo
proceduralni programski jezici i navesti neke
predstavnike ove skupine jezika.
57. Objasniti koncept na kojem rade objektno
orijentisani programski jezici i navesti neke
predstavnike ove skupine jezika.
58. Objasniti koncept na kojem rade deklarativni
programski jezici i navesti neke predstavnike.
59. Objasniti koncept na kojem rade funkcionalni
programski jezici i navesti neke predstavnike.
60. Šta su kompajleri i interpreteri? Koja je razlika
između kompajlera i interpretera?

25

You might also like