32
Svetozara Markovica 24 www.systempro.rs e-mail [email protected] tel: 011/324-34-64 Škola računara za talentovanu decu Algoritmi Učenik: Termin: Skripta za I godinu oktobar 2015.

Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Embed Size (px)

Citation preview

Page 1: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Svetozara Markovica 24 www.systempro.rs

e-mail [email protected] tel: 011/324-34-64

Škola računara za talentovanu decu

Algoritmi

Učenik: Termin:

Skripta za I godinu

oktobar 2015.

Page 2: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

2

Sadržaj:

PREDGOVOR .................................................................................................................................................. 3

Uvod i osnovni pojmovi: ................................................................................................................................ 4

Predstavljanje algoritama prirodnim jezikom i grafičkim simbolima: ........................................................... 9

Elementi dijagrama toka: .............................................................................................................................. 9

Oznake za operacije u dijagramima toka .................................................................................................... 10

Programi proste linijske strukture ............................................................................................................... 11

Grananja u programu (if) ............................................................................................................................. 14

Petlja sa uslovom (while) ............................................................................................................................. 16

Petlja sa brojačem (for) ............................................................................................................................... 18

Gnežđenje (višestruko razgranate programske strukture): ........................................................................ 20

OBJAŠNJENJE POJMOVA KOJI SU KORIŠDENI U SKRIPTI: ............................................................................. 24

Promenljive ................................................................................................................................................. 24

Sakupljači ................................................................................................................................................. 25

Brojači ...................................................................................................................................................... 25

Čuvari ....................................................................................................................................................... 26

Naredbe ulaza i izlaza .................................................................................................................................. 27

Naredbe dodele ........................................................................................................................................... 28

Deklaracija i inicijalizacija promenljivih ....................................................................................................... 30

Blokovi naredbi ............................................................................................................................................ 32

Page 3: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

3

PREDGOVOR

Ova skripta namenjena je, prevashodno, učenicima I godine Škole za talentovanu decu Računarskog

centra Sistem Pro.

Zabranjeno je korišdenje i umnožavanje delova ove publikacije bez prethodnog odobrenja autora ili

Računarskog centra Sistem Pro (uz izuzetak da je bivši i sadašnji učenici škole mogu slobodno

razmenjivati u elektronskom obliku).

Autor zadržava pravo da sadržaj ove skripte u bududnosti iskoritsti u komrecijalne svrhe. Fotografije

korišdene u ovoj skripti pozajmljene su sa interneta, a skice, grafikoni i ostali grafički elementi su delo

autora.

Page 4: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

4

Uvod i osnovni pojmovi:

Algoritam je postupak (ili plan) za rešavanje određenog problema - na računaru.

Naravno, algoritam nije "bilo kakav" postupak za rešavanje problema. Algoritam mora biti osmišljen tako

da zadovolji nekoliko važnih uslova:

Algoritam se mora sastojati iz konačnog broja koraka i svaki korak algoritma mora biti precizno

definisan;

Algoritam mora biti efikasan;

Algoritam mora biti ostvarljiv;

Algoritam može imati jedan ili više ulaznih podatak, ali mora imati bar jedan izlazni podatak.

Sledi dosta redova koje treba pročitati i razumeti pre nego što uopšte počnemo da se bavimo crtanjem

dijagrama toka i kreiranjem algoritama, ali, da bismo dobro razumeli kako algoritmi nastaju i šta su

suštinske odlike algoritama, prodiskutovademo malo podrobnije o svim ovim uslovima ....

"Algoritam se mora sastojati iz konačnog broja koraka i svaki korak algoritma mora biti precizno

definisan."

Dakle ...... ne možemo tek tako da samo kažemo računaru: "Uradi nešto vrlo komplikovano za nas, na brz

i efikasan način", (onako kako to ljudi, na primer, naizgled vrlo uspešno, često rade u filmovima :D) i da

pri tom računar bez greške razume šta smo hteli, posle čega de besprekorno izvršiti zadatak?

Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju!

Recimo da ne možemo! Kada bi moglo tako, ljudi se najverovatnije ne bi bavili programiranjem i vi sada

ne biste čitali ovu skriptu. :)

Računari mogu obavljati zadatke velike složenosti, ali, samo pod uslovom da mi, kao programeri,

računaru veoma jasno, korak po korak, predočimo šta je sve potrebno preduzeti.

Page 5: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

5

Zamislimo jednu situaciju: (nekim čudom) imamo robota koji se može isprogramirati da sastavlja i

popravlja računare i za početak želimo da ga naučimo kako da popravi računarsko napajanje. Pošto ne

možemo tek tako da mu samo damo nalog: "popravi napajanje", moramo ga detaljno uputiti u sve

pojedinosti zadatka, korak po korak.

Prvo demo mu redi da izvadi napajanje iz računarskog kudišta, a pošto ni to nije nešto što mašina ume da

izvede bez nas, ceo proces rešavanja tog problema detaljno demo mu objasniti:

-Prvo se mora proveriti da li je računar još uvek priključen na električnu mrežu, a ako jeste, potrebno je

isključiti prekidač na napajanju i izvudi kabl i iz utičnice gradske mreže i iz napajanja, a takođe i otkačiti

sve kablove kojima je napajanje povezano na matičnu ploču računara i ostale komponente;

-Onda je potrebno skinuti napajanje iz kudišta. Naravno, pošto su i tu potrebna dodatna objašnjenja i

pošto na zadnjoj strani imamo četiri šrafa, naložidemo robotu da krene redom i za svaki od četiri šrafa

obavi proces odvrtanja, sve vreme veoma pažljivo pridržavajudi napajanje da ne ispadne. Kada to završi,

polako de izvudi napajanje iz kudišta i staviti ga na sto .....

Pomodu mašina, možemo obavljati razne zadatke, ali, da bi računari "znali" šta je potrebno uraditi,

neophodna su precizna i veoma detaljna uputstva

Ovde demo se zaustaviti i vratiti na opštu priču o algoritmima. Ovim primerom hteli smo samo da

ilustrujemo da je, u procesu smišljanja algoritama, odnosno, pisanja računarskih programa, potrebno

veoma detaljno osmisliti svaki korak do najsitnijih pojedinosti (što je u slučaju jednostavnih programa

prilično lako, a u slučaju kompleksnih programa .... ipak bar ponešto teže), ali, bududi da, u vedini

situacija, svaki korak moramo detaljno razložiti na jednostavnije korake, pa onda te jednostavnije korake

razložiti na još jednostavnije (i tako redom), postavlja se pitanje do kog nivoa detaljnosti moramo

"usitnjavati" naše planove za rešavanje određenih problema, jer deluje da bi ovaj proces mogao potrajati

doveka?

Page 6: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

6

Naravno da se to nede desiti i da granice postoje.

Kada pišemo programe, neke od naredbi računaru ipak jesu jasne same po sebi i nisu mu potrebna

dodatna objašnjenja (ako ne bi bilo tako, programiranje računara bi bio nemogud zadatak). Recimo,

mašina možda zna kako treba skinuti šrafove, kako se prekidač prebacuje u drugi položaj, ili kako se

uklanja kabl. Kada u izradi algoritama dođemo do onih instrukcija koje računar sam po sebi razume, ne

moramo mu ih dodatno objašnjavati, ali, moramo mu ipak naložiti da ih izvrši.

Ove instrukcije, koje u algoritmima ne moramo dodatno pojašnjavati, odgovaraju instrukcijama

programskih jezika koje demo koristiti za pisanje programa (o čemu de biti reči na kasnijim predavanjima

i u drugoj skripti).

"Algoritam mora biti efikasan."

Zamislimo da u izgradnji trospratne kude, drugi sprat napravimo od kartona i tankih drvenih ploča. Šta de

se desiti sa tredim spratom? Srušide se na prvi sprat, zajedno sa nejakom konstrukcijom drugog sprata. Ili,

ako bismo za taj isti, drugi sprat, upotrebili previše materijala, toliko da, kontrukcija prvog sprata ne

može da izdrži prekomernu težinu .... Ne bi ni to bilo baš dobro.

Vrhunski izvedena gradnja, prema vrhunskim zamislima!

Page 7: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

7

Šta ako bismo teglu sa zimnicom otvarali iz 28 puta, svaki put okrenuvši poklopac za svega nekoliko

stepeni i pri tom čekali po dva-tri minuta na slededi okret? Mogude je i tako, ali to nije ni izdaleka najbolji

način da rešimo složeni problem otvaranja tegle sa zimnicom.

Kreiranje dobrih algoritama od nas zahteva isti nivo angažovanja, baš kao i rešavanje ovih složenih

problema iz svakodnevnog života.

"Algoritam mora biti ostvarljiv."

Algoritmi moraju biti smišljeni tako da se mogu "pretočiti" u konkretan program koji se može zapisati na

nekom programskom jeziku (C++, C# i drugi) i izvršiti na računaru. Postupak koji je sam po sebi "lep" i

"zanimljiv", ali se ne može ostvariti na računaru .... nije od značaja za nas i nije algoritam.

("Hmmmm .... gde li je greška u našem savršenom planu!")

"Algoritam može imati jedan ili više ulaznih podatak, ali mora imati bar jedan izlazni podatak."

Možemo pisati programe kojima trebaju ili ne trebaju ulazni podaci (recimo, program koji samo treba da

pozdravi korisnika pri uključivanju računara ne zahteva nikakve ulazne podatke; program koji računa

površinu kvadrata zahteva da se na početku unese dužina stranice kvadrata), ali programi / algoritmi

moraju imati izlazne podatke.

Recimo, napravimo program čija je svrha da ustanovi tačno vreme. Program de to uraditi tako što de

iščitati tačno vreme sa sistemskog časovnika. Međutim, šta ako zaboravimo da dodamo instrukcije koje

korisnika obaveštavaju o rezultatima izršavanja programa (ups!).

U praktičnom smislu, programi moraju davati obaveštenja korisniku.

Page 8: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

8

Slika 1.

ILI

Slika 2.

Ako nam program ne pruži važna obaveštenja o tome šta je radio (slika 1), verovatno demo se pitati zašto je neko pisao takav

program i zašto ga mi koristimo; Sa obaveštenjima (slika 2), sve izgleda mnogo bolje!

Komplikovaniji programi najčešde svoje proračune predočavaju i na druge, reklo bi se možda, malo

zanimljivije načine.

Programi koji su napisani da se bave velikim proračunima nejčešde rezultate svog rada smeštaju u

fajlove, a 3D video igre recimo, iako se neprestano bave proračunima u kojima se vodi računa o

virtuelnom svetu i svim njegovim karakteristikama, uglavnom ne ispisuju podatke svojih internih

proračuna, ved korisnicima predočavaju grafiku koja od tih proračuna zavisi.

Recimo, neka video-igra (simulacija vožnje) je napisana tako da više desetina puta u sekundi ispituje

položaj svih automobila na stazi, brzine, ubrzanje, prijanjanje za podlogu; takođe i međusobne odnose

svih automobila na stazi itd (i potom iscrtava grafiku od svega navedenog zavisi), ali, mi u takvoj situaciji

ne želimo da vidimo sve te parametre koje smo spomenuli; želimo samo da vidimo put, automobile na

putu i želimo njima da upravljamo.

Da bi računarske igre delovale lepo i radile dobro, "ispod haube"

se dešava mnogo stotina proračuna svake sekunde!

Page 9: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

9

Predstavljanje algoritama prirodnim jezikom i grafičkim simbolima:

Algoritmi se mogu predstaviti na dva osnovna načina: prirodnim jezikom i grafičkim simbolima.

(Stručni naziv za jezik koji se upotrebljava u opisu algoritama je "pseudojezik" - svojevrsna i pomalo

čudna kombinacija prirodnog, govornog jezika i instrukcija programskih jezika kao što su C, C++, C#,

Pascal, BASIC itd. Iz razloga što učenicima koji prvi put čitaju ovu skriptu, verovatno nisu poznati

programski jezici, zadržademo se na korišdenju isključivo govornog jezika.)

Algoritam za pravljenje sendviča bi otprilike izgledao ovako:

1. Isedi dve kriške hleba i položiti jednu od njih na radnu ploču;

2. Namazati jednu krišku margarinom;

3. Isedi parče sira;

4. Položiti parče sira na namazanu krišku;

5. Nasuti kečap odozgo u željenoj količini;

6. Preklopiti sve drugim parčetom hleba koje smo isekli na početku.

Sendvič je gotov!

Sada kada smo usavršili kulinarsko umede i upoznali se sa jednim jednostavnim algoritmom,

pogledademo kako se algoritmi mogu zapisati preko takozvanih dijagrama toka (engl. flow-chart) i koji su

elementi takvih dijagrama.

Elementi dijagrama toka:

Grafički simboli koje sredemo u dijagramima toka su slededi:

Početak

- Početak izvršavanja programskog koda.

Naredba ulaza

- Unos vrednosti promenljivih preko tastature

Instrukcija

- Pojedinačne instrukcije, naredbe dodele, računski koraci

O = 2 x a + 2 x b

a, b

POČETAK

Page 10: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

10

Grananje / Ispitivanje

Uslova

Grananje u programu; odlučivanje o daljem toku izvršavanja programa

Naredba izlaza

- Ispisivanje podataka na ekranu.

Završetak

- Završetak izvršavanja programskog koda.

Oznake za operacije u dijagramima toka

Pored pomenutih simbola, bitno je poznavati i oznake za operacije koje se sredu u dijagramima toka:

Oznaka Opis Primer Rezultat

+ Sabiranje 5 + 4 9

- Oduzimanje 12 - 8 4

* Množenje 8 * 4 32

/ Deljenje 19 / 4 4.75

div Celobrojno deljenje 19 div 4 4

mod Ostatak pri celobrojnom deljenju 19 mod 4 3

abs Apsolutna vrednost realnog broja abs(-16) 16

sqr Kvadrat realnog broja ( skradenica od "square") sqr(25) 625

sqrt Kvadratni koren realnog broja x (skradenica od "square root")

sqrt(144) 12

round Zaokrugljivanje realnog broja x na najbliži celi broj round(14.68) 15

ceil Vedi od dva cela broja između kojih se nalazi vrednost realnog broja (skradenica od "ceiling", eng. plafon, tavanica)

ceil(14.68) 15

floor Manji od dva cela broja između kojih se nalazi vrednost realnog broja (eng. pod)

floor(14.68) 14

> Vede (od) 4 > 3 TAČNO

< Manje (od) 3 > 4 NETAČNO

>= Vede ili jednako 3 >= 3 TAČNO

<= Manje ili jednako 4 <= 3 NETAČNO

== Jednako (ispitivanje jednakosti) 10 == 10 TAČNO

!= Različito (od) 5 != 6 TAČNO

KRAJ

O, P

a > 4

Page 11: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

11

Da bismo bolje shvatili kako se svi ovi simboli i oznake koriste u dijagramima toka, upoznademo se sa više

osnovnih tipova programa. Najjednostavniji za razumevanje među njima su programi proste linijske

strukture.

Programi proste linijske strukture

Algoritmi proste linijske structure odgovaraju problemima do čijeg se rešenja dolazi jednostavnim,

uzastopnim izvršavanjem naredbi. Tipično, ovakvi algoritmi (programi), sastavljeni su iz manjeg broja

instrukcija (nije redak slučaj da se neki vrlo korisni programi sastoje iz svega nekoliko instrukcija, a

postoje i programi koji se sastoje iz samo jedne instrukcije).

Kao što je ved nagovešteno, u ovakvim algoritmima, instrukcije se izvršavaju redom, jedna po jedna. i, ni

u jednom trenutku, algoritam (program) se ne vrada na neku od prethodno izvršenih instrukcija.

Pogledajmo nekoliko primera:

1) Zbir i razlika dva broja:

Ovo je, bez velike dileme, primer najtipičnijeg algoritma proste linijske strukture: prisutne su promenljive koje predstavljaju ulazne podatke (u ovom slučaju a i b); korisnik unosi njihovu vrednost; zatim se računaju vrednosti promenljivih koje predstavljaju izlazne podatke, a potom sledi ispis promenljivih (c i d), čime dobijamo obaveštenja o tome šta je program izračunao. Veoma je korisno, pri pisanju programa, predvideti da se, pri pokretanju, korisniku postavi konkretno pitanje ili zada konkretna instrukcija u vezi sa zahtevima programa. Kada vidimo tamnu površinu ekrana i trepdudi beli kursor, možda znamo, a možda i ne znamo (najverovatnije je ovo drugo), šta program očekuje od nas.

O ovome demo više govoriti pred kraj skripte, u odeljku o naredbama ulaza i izlaza.

POČETAK

KRAJ

c = a + b

a, b

c, d

d = a - b

Page 12: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

12

2) Ispis teksta bez korišdenja promenljivih:

Ovakvi programi obično se pišu onda kada neko počinje da se bavi određenim programskim jezikom (čuveni "Hello World!" programi). Ovaj algoritam nije mnogo koristan, ali je u svakom smislu korektan, te smo ga spomenuli radi ilustracije.

3) Ispis vrednosti promenljive, bez ulaznih podataka:

Vešti programeri nede baš pisati programe koji računaju koliko je 17 + 6, ali postoje proračuni koji dugo traju (različiti statistički i astronomski proračuni, kao i mnogi drugi proračuni u ostalim naučnim oblastima) i ulazne vrednosti se ne učitavaju, ved se zadaju neposredno preko instrukcija programskih jezika.

Radi boljeg razumevanja, pogledajmo još dva veoma tipična algoritma proste linijske strukture.

POČETAK

KRAJ

c = 17 + 6

c, d

POČETAK

KRAJ

"Dobar dan!"

Page 13: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

13

Dijagram1:

Kao što je poznato, metar se

sastoji iz sto centimetara,

te je samo potrebno da

unetu vrednost

podelimo sa 100 i ispišemo

rezltat.

Dijagram 2:

Prosek se računa kao količnik zbira

pojedinačnih sabiraka i ukupnog broja sabiraka. U

ovom slučaju to je količnik zbira pet ocena i broja pet. Prosek je nekakva

"srednja vrednost".

Za kraj jedan naizgled jednostavan algoritam: izračunavanje površine kvadrata (stranica se unosi).

Reklo bi se, jednostavan problem sa jednostavnim rešenjem, ali, šta ako neko za vrednost stranice unese

negativan broj! Da li demo taj minus tretirati kao mali previd korisnika, ili demo unetu vrednost odbaciti i

(praktično) zahtevati da korisnik ponovi unos? Malo starijim učenicima koji znaju šta je kvadratni koren

broja, nede biti teško da zaključe da bi još vedi problem nastao kada bismo, preko vrlo sličnog algoritma,

umesto površine kvadrata, računali upravo kvadratni koren unetog broja (tada ne bismo mogli da

"propustimo" unetu vrednost kroz program i dobijemo praktično isti rezultat kao i u situaciji bez unetog

minusa).

Jako često moramo u programima odlučivati kako de se (a vrlo često i, da li de se uopšte) nastaviti

izvršavanje programa. Slededi odeljak posveden je upravo ovoj pojavi.

POČETAK

KRAJ

Prosek

P = a * a

a

POČETAK

KRAJ

o1, o2, o3,

o4, o5

Prosek

Prosek = (o1 + o2 + o3 + o4 + o5) / 5

POČETAK

KRAJ

v_m = v_cm /100

v_cm

v_m

Page 14: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

14

Grananja u programu (if)

Krajnje neophodan element velike vedina programa su instrukcije za odlučivanje o daljem toku

izvršavanja. Situacija u kojoj koristimo ovakve instrukcije naziva se grananje.

Grananje nastaje onda kada ispitujemo određeni uslov, a potom se, u skladu sa tim da li je uslov

zadovoljen ili nije (da li je to što ispitujemo tačno ili netačno), izvršava jedan od dva bloka naredbi, dok se

drugi zanemaruje!

Svaki od ova dva bloka (dve grupe) naredbi može se sastojati od jedne, nijedne ili više naredbi (videti

dodatak o blokovima).

Neformalan, ali vrlo uobičajen naziv za blok naredbi koji se izvršava ukoliko je uslov zadovoljen je “true

grana”, a za blok naredbi koji se izvršava je “false grana”.

(Naravno, ukoliko u jednom od dva bloka nema naredbi, svakako dolikuje da ih u drugom bloku bude,

iako je tehnički mogude (ali, krajnje beskorisno), da ih izostavimo iz oba bloka. O ovome demo govoriti

malo kasnije. Takođe, mogude je da se u bilo kom od dva bloka pojavi novo grananje. To se naziva

višestruko grananje i o tome de biti više reči u slededim poglavljima.)

Uzmimo za primer algoritam koji treba da ustanovi da li je jedan od unetih brojeva (A), vedi od drugog

unetog broja (B). Jedini način da dođemo do rešenja je da neposredno uporedimo dve vrednosti,

ustanovimo da li je vrednost broja A manja od vrednosti broja B i, shodno uslovima zadatka, to i ispišemo

na izlaznoj jedinici računara.

U slededem primeru, razmotridemo nešto što smo nagovestili na prethodnim stranicama: algoritam koji

za unetu stranicu kvadrata računa površinu (ovoga puta i obim), uzimajudi u obzir da li je vrednost

stranice pravilno uneta.

POČETAK

a, b

KRAJ

A > B

"A je vede od B." "A nije vede od B."

DA NE

Page 15: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

15

Kao što je ved spomenuto, sadržaj jedne od grana može biti prazan blok. Pošto u ovakvoj situaciji,

praktično, imamo samo jedan blok naredbi koji se izvršava, ovakava pojava naziva se jednoblokovsko

grananje. Slededi algoritam proverava da li je korisnik punoletan (proveravamo preko promenljive s koja

se učitava na početku). Ako jeste, ispisuje se poruka "Punoletan".

Razmotrimo još jednu situaciju iz svakodnevnog života: domar obilazi školsku zgradu I ukoliko na nekom

mestu pronađe problem (ispitivanje uslova; grananje) – otklonide ga (popravide kvar), ali, ukoliko

problem ne pronađe, nede raditi ništa. Jednostavno, kao i u ostalim životnim okolnostima, u

programiranju postoje situacije kada je potrebno da ne program ne radi ništa (ukoliko nisu zadovoljeni

uslovi za nastavak rada, ili sve dok se uslovi ne steknu).

POČETAK

s

KRAJ

DA

NE s > 18

"Punoletan"

POČETAK

a

KRAJ

a >= 0

"Uneti broj ne

sme biti

negativan"

O = a x 4

P = a x a

O, P

DA NE

Page 16: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

16

Razume se, ukoliko imamo blokove naredbi sa obe strane (podsetimo se, blok se može sastojati i iz samo

jedne naredbe), onda govorimo o dvoblokovskom grananju.

Za kraj, pogledajmo jedan malo komplikovaniji algoritam u kome jedna od dve grane sadrži novo

grananje (složenije algoritme sa višestrukim grananjem razmatrademo na kraju ove skripte). Algoritam

proverava da li je uneti broj pozitivan, negativan ili nula.

Petlja sa uslovom (while)

Petlje u programskim jezicma predstavljaju blokove instrukcija (blok instrukcija = jedna ili više uzastopnih

naredbi), koji se ponavljaju dokle god je neki uslov zadvoljen (recimo, sve dok ne dobijemo svedočasntvo

o završenoj osnovnoj školi, istu moramo pohađati svakodnevno, raditi kontrolne zadatke, usmeno

odgovarati pred profesorima itd.)

Dva osnovna elementa svake petlje su uslov i telo petlje (blok naredbi).

Jako je bitno da u okviru bloka naredbi u datoj petlji obezbedimo da uslov za ostanak u petlji u nekom

trenutku prestene da bude zadovoljen. Ako to ne uradimo, data petlja (makar teoretski) može se

izvršavati zauvek.

POČETAK

a

a > 0

"Uneti broj je

pozitivan."

NE DA

a < 0

"Uneti broj je

nula."

KRAJ

"Uneti broj je

negativan."

DA NE

Page 17: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

17

Razmotrimo ponovo jedan primer koji, striktno govoredi, nema neposredne veze sa programiranjem, ali

prati istu logiku koju smo upotrebili ovde.

Neko je napravio put između dva grada i pored puta podigao ogradu (jednostavnosti radi,

pretpostavidemo da je dužina puta, tojest ograde, deljiva sa pet). Naš zadatak je da krenemo od početka

ograde i svakoga dana ofarbamo po pet metara, sve dok cela ograda ne bude ofarbana.

U ovom slučaju, uslov za nastavak radova je da ustanovimo da ograda nije ofarbana do kraja, a blok

naredbi bi mogao izgledati otprilike ovako:

-1. Otvorimo kantu sa bojom i pripremimo četke;

-2. Ofarbamo pet metara ograde u dva sloja;

-3. Zatvorimo kantu sa bojom, operemo četke i odložimo ih;

-4. Proverimo da li smo stigli do kraja;

Ako nismo, ceo proces se ponavlja sutradan. Ako jesmo (stigli do kraja), posao je završen.

Dijagram toka koji odgovara opisanom procesu izgleda ovako:

POČETAK

KRAJ

i = 1

i <= 10

i

i = i + 1

Page 18: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

18

Petlja sa brojačem (for)

Ponekad je potrebno (kao i u prethodnom slučaju), izvršavati određeni blok naredbi više puta. Ali, za

razliku od prethodne situacije, broj ponavljanja datog bloka nam je poznat unapred (koristidemo brojače,

jedan od uobičajenih tipova promenljivih o kojima de biti reči kasnije) i ne zavisi ni od kakvog drugog

uslova osim vredsnosti brojača.

Primer 1:

Ispisati brojeve od 1 do 10.

POČETAK

KRAJ

i = 1, 10

i

POČETAK

KRAJ

1. Priprema

4. Provera

2. Farbanje

3. Pospremanje

Page 19: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

19

Primer 2:

Potrebno je ofarbati 15 prozora na školskoj zgradi.

Pre nego što uđemo u petlju vrši se inicijalizacija promenljive „brojač“ (promenljiva dobija vrednost 1), a

sam blok naredbi definisan je na slededi način:

-1. Biramo prvi slededi prozor koji nije ofarban i postavljamo zaštitne trake na stakla;

-2. Otvaramo kantu sa farbom i spremamo četke;

-3. Farbamo prvi sloj;

-4. Čekamo da se prvi sloj osuši;

-5. Farbamo drugi sloj;

-6. Čekamo da se drugi sloj osuši;

-Uvedavamo vrednost brojača za 1 i proveravamo da li je ta vrednot i dalje manja ili jednaka petnaest.

Ako je vrednost u granicama od 1 do 15, vradamo se na početak bloka naredbi. Ako nije, proces je

završen.

Dijagram toka:

POČETAK

KRAJ

1. Priprema 1

2. Priprema 2

3. Farbanje - 1. sloj

i = 1, 15

4. Sušenje - 1. sloj

5. Farbanje - 2. sloj

5. Farbanje - 2. sloj

Page 20: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

20

Gnežđenje (višestruko razgranate programske strukture):

Razgranate programske strukture predstavljaju kombinaciju osnovnih. Ovakvih kombinacija ima jako

mnogo. Neke od njih su vrlo specifične i često se sredu, pa demo ih iz tog razloga ovde razmotriti kroz

nekoliko primera.

Primer 1: Ispitivanje uslova unutar petlje.

Verovatno najtipičniji ugnežđeni algoritam podrazumeva korišdenje grananja unutar petlje.

Ovaj algoritam opisuje postupak za učitavanje deset brojeva preko tastature, pri čemu se sabiraju sve

unete vrednosti koje su vede od 10.

Na početku, promenljiva s se inicijalizuje vrednošdu nula, bududi da u tom trenutku nije učitana ni jedna

vrednost, tako da ukupan zbir koji se traži u zadatku mora takođe biti toliki (0). Petlja se postavlja tako da

se obavi 10 ponavljanja, a u telu petlje (pri svakom ponavljanju), učitava se broj; ispituje se da li je broj

vedi od 10; ako jeste, promenljiva s se uvedava za unetu vrednost (ako nije, nikom - ništa :)).

Na kraju, vrednost promenljive s se ispisuje na ekranu.

POČETAK

KRAJ

s = 0

s = s + 10

i = 1, 10

n

n > 10 NE

DA

s

Page 21: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

21

Primer 2: Broj ponavljanja date cifre u unetom broju.

Na početku, unose se: broj koji ispitujemo (b) i cifra koju tražimo (c). Promenljiva n čuva broj ponavljanja

(koji je na početku, naravno, nula).

Kada uđemo u telo petlje, računamo ostatak pri celobrojnom deljenju unetog broja i broja 10 (tome služi

funkcija mod; skradeno od modus) i ispitujemo da li je taj ostatak jednak traženoj cifri. Ako jeste,

uvedavamo brojač (n), za jedan.

Da bismo bolje razumeli funkciju mod, razmotrimo slededu situaciju: ako delimo 16 i 10, količnik je 1, a

ostatak je 6.

Nezavisno od toga da li smo na datom mestu pronašli traženu cifru, ili ne, broj demo podeliti sa 10 i novu

vrednost dodeliti promenljivoj b. Ciklus ponavljamo sve dok je vrednost promenljive b veda od nule.

Videli smo šta radi funkcija mod, a red je da pogledamo i kako funkcioniše celobrojno deljenje u

programima.

POČETAK

KRAJ

NE

DA

b mod 10 == c

n = n + 1

b > 0

n = 0

b, c

b = b / 10

n

Page 22: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

22

Rezultat deljenja: 16 / 10 je 1.6, ali to nije celobrojno deljenje. Pri celobrojnom deljenju (setimo se, u

algoritmima, to se označava kao b div c), posmatramo samo koliko puta se, u celosti, broj c ponavlja u

broju b.

Recimo, ukoliko imamo garažu dužine jedanaest metara, u nju mogu, u celosti, da stanu dva automobila

dužine 4 metra. Ako pokušamo da stavimo tredi, on de "viriti", pa nedemo modi da zatvorimo vrata.

Primer 3: Prosek ocena.

Algoritam predstavlja postupak za računanje proseka ocena (recimo, u nekom odeljenju). Učitavanje

ocena obavlja se sve dok se sa tastature, posle unete pojedinačne ocene, unosi znak 'd' ('d' kao, "da,

želimo da nastavimo sa unosom"). Ako unesemo bilo koji drugi znak, prekida se učitavanje i ispisuje

POČETAK

KRAJ

s = s + o

p = s / i

o

o >= 1 && o <= 5 NE

DA

s

i = 0

i = i + 1

s = 0

z

z == 'd'

Page 23: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

23

prosek ocena. Ukoliko pri unosu ocene, unesemo vrednost koja nije u rasponu od 1 do 5, program de

datu ocenu zanemariti.

Na početku, inicijalizujemo promenljive "s" i "i" (postavljamo vrednost obe promenljive na 0, jer zbir

ocena i broj učitanih ocena jesu upravo 0, bududi da ništa još nismo učitavali).

Potom ulazimo u petlju i učitavamo ocenu. Ukoliko ne bismo imali proveru učitane ocene (promenljiva

o), mogli bismo da učitamo, na primer, sledede tri ocene: 5, 4 i -9. Njihov zbir je nula, kao i njihov prosek!

Pošto ovako nešto moramo da izbegnemo, proveravademo svaki put da li je ocena u rasponu od 1 do 5.

Ukoliko jeste, ocenu demo dodati dotadašnjem zbiru ocena, a brojač demo uvedati za 1 (učitali smo još

jednu ocenu). Potom učitavamo znak (koji je svojevrsna "šifra" za nastavak, a u programu je označen sa

"z") i ispitujemo da li smo uneli znak 'd'. Ako jesmo, ponavljamo (bar) još jednom celu petlju, a ako

nismo, petlja se završava.

Na kraju, računamo prosek (promenljiva "p"), kao količnik zbira svih ocena i broja učitanih ocena, a

potom ga ispisujemo.

Za vežbu probajte da napravite sličan algoritam koji de prekinuti učitavanje čim korisnik unese ocenu koja

nije u rasponu od 1 do 5 (bez promenljive z).

Page 24: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

24

OBJAŠNJENJE POJMOVA KOJI SU KORIŠĆENI U SKRIPTI:

Promenljive

U programiranju, promenljiva je niz znakova (jedan ili više), koji predstavlja neki broj, neko slovo ili neki

tekst (u programskim jezicima, promenljive mogu predstavljati i složenije tipove podataka, ali demo se za

sada zadržati na osnovna tri tipa.

Promenljivu možemo shvatiti kao svojevrstan "nosač" vrednosti nekog podatka koji je za nas bitan, dok je

vrednost promenljive (jako važam pojam u vezi sa promenljivama), konkretan broj, znak (slovo) ili niz

znakova (reč ili tekst), koji je vezan za datu promenljivu.

Recimo, promenljiva "a", koja u nekom programu predstavlja dužinu jedne od stranica nekog trougla

izraženu u centimetrima, može u različitim trenucima imati različte vrednosti: 15, 20, 31.

Promenljivu možemo posmatrati i kao (na primer) bokal u kome se čuva tečnost, a količinu tečnosti u

tom bokalu kao vrednost promenljive.

a)

b)

c)

Promenljive i vrednosti promenljivih: a) narandžastom bojom je označena promenljiva, "posuda" u kojoj se čuva tečnost, a

plavom bojom vrednost promenljive; b) vrednost promenljive je promenjena (ne zovu se promenljive tako bez razloga :)) i sada

je manja nego malopre; c) vrednost promenljive je sada veda nego u oba prethodna slučaja i skladišni kapaciteti date

promenljive su iskorišdeni do kraja; ako pokušamo da dolijemo još vode, voda de se prelivati (u programiranju, ovo je nešto o

čemu moramo jako voditi računa; memorijski prostor koji se koristi za čuvanje vrednosti promenljivih uglavnom dozvoljava

korišdenje jako velikih vrednosti, ali nije neograničen!)

Dobra praksa u programiranju je da se nazivi promenljivih formiraju tako da nedvosmisleno ukazuju na

svrhu i smisao date promenljive u programu, uz dodatno poštovanje pravila za imenovanje promenljivih

koja važe u konkretnim programskim jezicima.

Neke promenljive se tipično (ne i obavezno) označavaju određenim slovima, ili određenim grupama

znakova (više o ovome u narednim odeljcima), ali najčešde mi odlučujemo o nazivima promenljivih.

Recimo, ako promenljiva treba da čuva podatak o starosti neke osobe, verovatno je najbolje da tu

promenljivu jednostavno nazovemo upravo tako - "starost". Ako bismo da malo "uštedimo, pa umesto

toga stavimo "str" ili "sta", nekog našeg kolegu koji gleda naš programski kod, "str" bi moglo da podseti

na pojam Samostalna Trgovinska Radnja, a "sta" na stadion. Ne treba biti previše izdašan i dati naziv

promenljivoj: "promenljiva_u_kojoj_cuvamo_starost_osobe", ali svakako ne treba ni previše štedeti. :)

O svemu ovome de biti više reči kada budemo počeli da izučavamo programski jezik C/C++.

Page 25: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

25

Sakupljači

Vrlo često u programima potrebno je da na nekin način predstavimo zbir nekih brojeva, ukupnu masu

svih predmeta u nekom skladištu i slično.

Promenljive koje se koriste za izražavanje ovakvih vrednosti često se nazivaju sakupljačima i, ukoliko se u

datom programu koristi samo jedna takva promenljiva, tipično se obeležava sa "s".

Kao što se u svakodnevnom životu javlja potreba za skladištenjem više predmeta na jednom mestu,

tako i u programiranju često postoji potreba za skladištenjem podataka u okviru jedne promenljive.

Primer, ako želimo na kraju programa ispišemo koliko je litara mleka prodato u toku današnjeg dana u

nekoj samoposluzi, morademo da za to koristimo promenljivu s kojoj demo na početku dana dodeliti

vrednost 0 i koja de, svaki put kada se proda n litara mleka, uvedati svoju vrednost za n, a mi demo pisati:

s = s + n;

(Više o inicijalizaciji promenljivih i naredbama dodele u narednim odeljcima.)

Brojači

U programima se takođe, veoma često srede potreba za prebrojavanjem. Recimo, neki program mogao

bi nam biti od pomodi da ustanovimo broj prodatih olovaku u nekoj knjižari (ili nekog drugog artikla) i u

takvom programu, morali bismo imati promenljivu koja je zadužena za čuvanje upravo tog podatka.

Po nepisanim pravilima, brojači se u programiranju tipično označavaju sa "i".

Page 26: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

26

Da li su nam svi bajtovi na broju?

U. našem slučaju bi vrednost promenljive i, na početku dobila vrednost 0, a svaki put kada bismo prodali

jednu olovku, pisali bismo:

i = i + 1;

Čuvari

Kada se javi potreba za čuvanjem vrednosti jedne promenljive, da bi ta promenljiva mogla privremeno da

"uskladišti" neku drugu vrednost, dodatnu promenljivu koju demo upotrebiti za čuvanje možemo shvatiti

i kao svojevrsnog "čuvara".

Primer:

Bokal koristimo za čuvanje tečnosti i u njemu se trenutno nalazi 250 ml vode. Ali, pošto je bokal providan

i na sebi ima podelu sa oznakama za vodu, mleko i ulje, možemo ga koristiti i za merenje. Ako je

potrebno da odmerimo (izmerimo) neko količinu mleka, onih prvobitnih 250 ml vode moramo prvo

skloniti u neku novu posudu (ta posuda je čuvar). Zatim demo u prazan bokal nasuti mleko, izmeriti ga i

dalje, po potrebi eventualno sipati mleko u neku tredu posudu, a vodu vratiti nazad u bokal.

Popularna "Hanojska kula". Pravila igre nalažu da je pločice sa prvog stuba (a) potrebno prebaciti na drugi (b), tako da se u

jednom koraku može prebaciti samo jedna pločica, kao i da se manja pločica može staviti na vedu, ali ne i obrnuto. Ako ne bi bilo

tredeg stuba, ovo ne bi bilo mogude izvesti; stub "p" je ovde "čuvar".

Čuvari se često označavaju sa "p" ili "t" (p - privremeni; t - temp/temporary).

Page 27: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

27

Pokušajmo da rešimo Hanojsku kulu (ovde de biti data prva dva koraka):

b = a; (Najmanji, zeleni disk prelazi sa prvog stuba na drugi);

p = a; (Narandžasti stub prelazi sa prvog stuba na tredi) ....

Dalje nastavljate vi (mala vežba za razgibavanje vijuga). :)

Naredbe ulaza i izlaza

Svrha naredbi ulaza je unošenje podataka u program, a preko naredbi izlaza, programi nam saopštavaju

rezultate svog rada. Primera radi, zamislimo program koji dužinu u centimetrima pretvara u metre

(algoritam koji smo videli u odeljku o algoritmima proste linijske strukture). Sama računica (odnos

između metara i centimetara), je jednostavna, ali .....

Ako ne predvidimo unos podataka na početku i ne unesemo vrednost u centimetrima, program de svaki

put obavljati račun sa, ili unapred zadatom vrednošdu ili nasumično izabranom vrednošdu (o naredbama

dodele, inicijalizaciji i deklaraciji promenljivih, govoridemo u slededim odeljcima). Dakle, svaki put demo

računati koliku de vrednost imati (na primer), 12 centimetara, izraženo u metrima. Posle prvih 1215

izvršavanja ovakvog programa, upamtidemo rezultat i ovakav program nam nede više biti zanimljiv. :)

Ako u algoritam uvrstimo unos podataka, program de nas na početku pitati koju vrednost u centimetrima

želimo da pretvorimo u metre, što je mnogo bolje i svrsishodnije!

Možemo da uradimo i nešto što ima čak i manje smisla. Možemo da predvidimo unos podataka, pravilno

obavimo račun, ali ..... da pri tom zaboravimo komande kojima de program ispisati rezultat na ekranu.

Nije teško uvideti da, bez naredbi izlaza, programi nemaju mnogo smisla, ali, pogledajmo i još nešto,

veoma bitno i uzmimo za primer program za računanje površine kvadrata.

Bududi da nismo zaboravili naredbe ulaza i izlaza, program de nas svaki put tražiti da unesemo stranicu, međutim .... da li demo razumeti šta program od nas traži?

_ 5 _ 5 25 _

Kursor "blinka" i mi .... valjda .... nešto treba da upišemo?! (Ko će ga znati!)

Upisali smo nešto i pritisnućemo taster "Enter". (Valjda će sve biti u redu.)

Dobili smo i neki rezultat, ali šta on zapravo predstavlja, to je pitanje. Da li smo skroz siurni da program nije računao koliko je: uneta vrednost + 20?

Situacija koju vidimo na slikama, nije pod obavezno loša (ali, samo pod uslovom da je program jednostavan i da precizno znamo

šta treba da upišemo pri pokretanju i šta treba da očekujemo na kraju); međutim, bolja je praksa da ipak budemo predusretljivi

prema korisnicima programa i jasno im stavimo do znanja šta je potrebno uraditi u datoj situaciji!

Page 28: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

28

Pokušajmo sada malo drugačije:

Uneti stranicu kvadrata: _ Uneti stranicu kvadrata: 5 _ Uneti stranicu kvadrata: 5 _ Površina kvadrata je: 25.

Precizno uputstvo u vezi sa tim šta se od nas očekuje u datom trenutku.

Ovoga puta, znamo šta smo upisali ....

.... pa nas ni rezultat neće iznenaditi.

Ovog puta je sve jasno!

Naredbe dodele

Sada kada znamo šta su promenljive, nede nam biti teško da razumemo šta su naredbe dodele. Naredba

dodele je naredba kojom se nekoj promenljivoj dodeljuje vrednost. Zvuči jednostavno, u vedini situacija,

tako i jeste, ali, razmotridemo sve pojedinosti vezane za naredbe dodele.

Primera radi, uzmemo lonac i u njega sipamo 5 litara vode. Lonac je promenljiva, 5 litara je vrednost

promenljive, a postupak u kome smo u lonac smestili neku količiunu tečnosti, možemo, u prenesenom

značenju, shvatiti kao naredbu dodele.

Promenljivoj se može dodeliti neka brojčana vrednost (naravno i znak ili tekst, ali, samo ako je data

promenljiva za to predviđena), a može i vrednost nekog izraza.

Kako sve, u praksi (u programskim jezicima C, C++ i C#, koje demo izučavati), mogu izgledati naredbe

dodele:

1) Promenljivoj neposredno dodeljujemo vrednost:

a = 12;

2) Promenljivoj dodeljujemo vrednost druge promenljive:

a = b;

3) Promenljivoj dodeljujemo kombinaciju vrednosti neke druge druge promenljive i neke konstantne

brojčane vrednosti:

a = b + 21;

a = b - 13;

a = c / 4;

Page 29: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

29

4) Promenljivoj dodeljujemo kombinaciju vrednosti dve ili više promenljive, datu preko izraza:

a = b + c;

a = b - c / d;

5) Promenljivoj dodeljujemo kombinaciju vrednosti dve ili više promenljive i brojčane vrednosti, datu

preko izraza:

a = b + c - 19;

a = b + 14 / d + 8 - c;

Jedna vrlo specifična situacija zavređuje našu posebnu pažnju, a to je korišdenje promenljive u izrazu čija

vrednost se toj istoj promenljivoj dodeljuje.

Primer:

a = a + 4;

Možda deluje čudno, ali svaki programer na početku bavljenja programiranjem mora naučiti da su

ovakve naredbe ne samo logične i mogude, ved i veoma korisne!

Ono što može "zapeti" u razumevanju ovakvih naredbi dodele je pomisao da se zapravo radi o ispitivanju

jednakosti, međutim ....

NE RADI SE O ISPITIVANJU JEDNAKOSTI! :)

Setimo se: naredba dodele je naredba kojom se datoj promenljivoj dodeljuje neka vrednost, a ta

vrednost može biti i vrednost nekog izraza. U našem slučaju imamo sledede.

Recimo da je na početku u jednom loncu bilo 5 litara vode; dodali smo još 4 litra (na primer, iz drugog

lonca) .... i sada u prvom loncu imamo ukupno devet litara vode.

Ne ispitujemo da li je količina voda u narandžastom i zelenom loncu ista,

ved prelivamo vodu iz zelenog lonca u narandžasti!

Dakle, prvo rešavamo izraz i u njemu koristimo dotadašnju vrednost promenljive (5 litara), a potom novu

dobijenu vrednost (5l + 4l = 9l), dodeljujemo promenljivoj.

Primer 2: U novčaniku imamo 1600 Dinara i rešavamo slededi izraz:

novcanik = novcanik + 400;

Page 30: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

30

Rezultat se formira na slededi način: gledamo koliko smo novca imali do tada (1600 Din.), dodajemo novu

količinu (400 Din.) i to je ukupna količina koju demo na kraju imati u novčaniku.

-Za starije polaznike i one hrabrije:

Ako se pitamo šta de biti sa izrazom kao što je ....

a = a + a / 2 + a * 4;

(Recimo da je dotadašnja vrednost promenljive a bila 14.)

.... nemojmo previše brinuti. Nedemo morati da vodimo računa o promeni vrednosti promenljive za svaki

od tri člana ovog izraza, tj vrednost promenljive a ostaje ista sve dok se ceo izraz ne reši, a potom se nova

vrednost dodeljuje (naravno) samoj promenljivoj a.

a / 2 = 14 / 2 = 7;

a * 4 = 14 * 4 = 56;

14 + 7 + 56 = 77;

Kad se sve ovo završi, promenljiva a dobija vrednost 77.

Deklaracija i inicijalizacija promenljivih

Primetili ste, verovatno, da smo u prethodnom odljeku, svaki put kada smo koristili vrednost promenljive

a u izrazu, napominjali kolika je bila dotadašnja vrednost promenljive. U toku svog izvršavanja, program

po potrebi računa novu vrednost promenljive, skladišti je i pamti. Šta se dešava u prvom izrazu u kome se

koristi vrednost promenljive? Prvom izrazu naravno nije prethodio neki drugi izraz sa datom

promenljivom, ali vrednost promenljive morala je na neki način biti zadata.

Postupak (naredba) kojim se promenljivoj zadaje početna vrednost, naziva se inicijalizacija promenljive.

(Reč inicijalizacija je latinskog porekla; "initium" = početak)

Inicijalizacija se može obaviti preko naredbe dodele, ili preko učitavanja vrednosti putem tastature.

Inicijalizacija promenljivih je OBAVEZNA, pre prvog korišdenja promenljive u datom programu!

Pored inicijalizacije, važno je da se upoznamo i sa pojmom deklaracije (deklarisanja) promenljivih.

Jednostavno, pre nego što nekoj promenljivoj dodamo inicijalnu (prvobitnu) vrednost, moramo pre svega

saopštiti računaru da de se u okviru programa koristiti promenljiva datog naziva.

Primer radi, da li ste nekada, u razgovoru sa nekim čulim da sagovornik, "iz vedra neba", spomene neku

tredu osobu koju vi ne poznajete (koju vam do tada nikada nije spomenuo), oslovi je imenom i spominje

vam detalje vezane za tu osobu koji vama ne znače ništa, jer vam je sve o čemu se govori nepoznato.

Page 31: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

Algoritmi 2015

31

- "I tako, ode moj Bojan danas na utakmicu u novom dresu."

Ako mi ne poznajemo dotičnu osobu (kao što rekosmo, zato što nam je sagovornik nije do tada nikada

spominjao), ne možemo znati da li je on našem sagovorniku: sin, otac, brat, komšija ili zet? Ne znamo da

li je dres deo sportske opreme koje pomenuti mladid nosi kao sportista, sudija ili samo kao

navijač/posmatrač.

Tako isto, ako ne deklarišemo u programu promenljivu i napravimo inicijalizaciju koja je sama po sebi

korektna:

a = 154.866;

.... program de jednostavno odbiti saradnju. Pre inicijalizacije, mora se obaviti deklaracija (od latinskog

"declaratio" - najava, obznanjivanje).

-"Bojan, moj mlađi sin, otišao je danas da gleda utakmicu sa svojim stricem. Obukao je dres svog

omiljenog kluba."

(Pitanje je da li baš ovako ljudi govore u svakodnevnom životu, ali ipak, kada ovo pročitamo, otprilike

nam je sve jasno.)

Postoji razlog zašto smo više pažnje posvetili inicijalizaciji promenljivih: naime, ukoliko zaboravimo neku

promenljivu da deklarišemo, razvojno okruženje u kome pišemo program (ili, kako učenici često vole da

kažu, "program u kome pišemo programe"), javide nam poruku o grešci i naš program nede modi ni da

bude pokrenut (naravno, ovo nije za nas povoljno, ali je to greška koja se lako otkriva i lako uklanja).

Ako zaboravimo da inicijalizujemo promenljivu (ni to ne smemo zaboraviti - nikako!), uglavnom nedemo

dobiti poruku o grešci, uglavnom de program biti pokrenut, ali de njegovo izvršavanje u velikoj vedini

slučajeva biti podložno velikim greškama.

To je nešto o čemu strogo moramo voditi računa!

Page 32: Algoritmi - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13120/PrvaGodina/Literatura/02_Algoritmi.pdf · Komplikovani zadaci mogu se rešavati samo uz dobru organizaciju! Recimo da ne

2015 Algoritmi

32

Blokovi naredbi

Bilo koju pojavu više uzastopnih naredbi koje se izvršavaju jedna za drugom možemo shvatiti kao blok

naredbi (kada spomenemo ovaj pojam obično zapravo i mislimo na više naredbi, ali bar teroretski, blok

se može sastojati i iz samo jedne naredbe, a može čak biti i prazan).

Recimo, ponekad želimo da nacrtamo dijagram toka ili da prostim jezikom označimo da de se na nekom

mestu izvršavati određene naredbe, ali, u datom trenutku nismo još odredili koje de se sve naredbe

izvršavati. Tada možemo koristiti delimičan algoritam, kao na slici 1.

Kada odlučimo šta de se sve izvršavati ako je uslov zadovoljen (da li smo uneli znak 'a' preko tastature),

podelidemo BLOK 1 na konkretne naredbe (slika 2).

Dijagrami toka mogu se predstavljati kao na slici 1. i u situaciji kada nije ekonomično predstaviti ih u

celosti, kao na primer onda kada je izrazito složen algoritam potrebno predstaviti na relativno malom

papiru. Ali, kada kažemo "izrazito složen algoritam", ne mislimo na one koje dete vi kao učenici raditi u

prvoj godini školovanja (svi vaši algoritmi modi de da stanu na papir A4 formata :)).

POČETAK

KRAJ

BLOK 1

c

c == 'a'

NE DA

BLOK 2

BLOK 1

Naredba 1

Naredba 2

Naredba 3

Slika 1 - Delimično

rešen algoritam

Slika 2 - Blok 1 podeljen

na više naredbi

Ispis