Professional Documents
Culture Documents
Nina Šmalcelj
2018/2019. I - 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.
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.
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
2
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA
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.
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.
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.
6
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA
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.
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.
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.
9
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.
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.
10
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA
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.
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
13
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.
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
15
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.
16
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA
17
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.
18
PROGRAMIRANJE 1
Nina Šmalcelj
2018/2019. I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA
POČETAK / KRAJ
ULAZ / IZLAZ
OBRADA PODATAKA
BLOK ODLUKA
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
19
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.
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.
21
PROGRAMIRANJE 1
Nina Šmalcelj
I - RJEŠAVANJE PROBLEMA POMOĆU RAČUNARA 2017/2018.
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
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