02 Algoritmi PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 32

Svetozara Markovica 24

www.systempro.rs
e-mail office@systempro.rs
tel: 011/324-34-64

Škola računara za talentovanu decu

Algoritmi

Učenik:
Termin:

Skripta za I godinu
oktobar 2015.
2015 Algoritmi

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

2
Algoritmi 2015

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.

3
2015 Algoritmi

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.

4
Algoritmi 2015

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?

5
2015 Algoritmi

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!

6
Algoritmi 2015

Š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.

7
2015 Algoritmi

ILI

Slika 1. 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!

8
Algoritmi 2015

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.
Početak

a, b
- Unos vrednosti promenljivih preko tastature
Naredba ulaza

O=2xa+2xb - Pojedinačne instrukcije, naredbe dodele, računski koraci

Instrukcija

9
2015 Algoritmi

a>4
Grananje u programu; odlučivanje o daljem toku izvršavanja programa
Grananje / Ispitivanje
Uslova

O, P
- Ispisivanje podataka na ekranu.
Naredba izlaza

KRAJ
- Završetak izvršavanja programskog koda.

Završetak

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
Kvadratni koren realnog broja x (skradenica od
sqrt sqrt(144) 12
"square root")
round Zaokrugljivanje realnog broja x na najbliži celi broj round(14.68) 15
Vedi od dva cela broja između kojih se nalazi
ceil vrednost realnog broja (skradenica od "ceiling", ceil(14.68) 15
eng. plafon, tavanica)
Manji od dva cela broja između kojih se nalazi
floor floor(14.68) 14
vrednost realnog broja (eng. pod)
> 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

10
Algoritmi 2015

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:

POČETAK

a, b

c=a+b

d=a-b

c, d

KRAJ

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.

11
2015 Algoritmi

2) Ispis teksta bez korišdenja promenljivih:

POČETAK

"Dobar dan!"

KRAJ

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:

POČETAK

c = 17 + 6

c, d

KRAJ

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.

12
Algoritmi 2015

Dijagram1: POČETAK
POČETAK Dijagram 2:
Kao što je
poznato, o1, o2, o3, Prosek se računa
v_cm
metar se o4, o5 kao količnik zbira
sastoji iz sto pojedinačnih
v_m = v_cm /100 centimetara, sabiraka i ukupnog
te je samo Prosek = (o1 + o2 + o3 + o4 + o5) / 5 broja sabiraka. U
potrebno da ovom slučaju to je
v_m unetu količnik zbira pet
Prosek
vrednost ocena i broja pet.
podelimo sa Prosek je nekakva
KRAJ 100 i ispišemo "srednja vrednost".
rezltat. KRAJ

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

POČETAK

P=a*a

Prosek

KRAJ

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.

13
2015 Algoritmi

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.

POČETAK

a, b

DA NE
A>B

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

KRAJ

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.

14
Algoritmi 2015

POČETAK

DA NE
a >= 0

O=ax4
"Uneti broj ne
P=axa sme biti
negativan"
O, P

KRAJ

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".

POČETAK

NE
s > 18

DA
"Punoletan"

KRAJ

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).

15
2015 Algoritmi

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.

POČETAK

NE DA
a>0

DA NE
a<0 "Uneti broj je
pozitivan."

"Uneti broj je "Uneti broj je


negativan." nula."

KRAJ

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.

16
Algoritmi 2015

POČETAK

i=1

i <= 10

i=i+1

KRAJ

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:

17
2015 Algoritmi

POČETAK

1. Priprema

2. Farbanje

3. Pospremanje

4. Provera

KRAJ

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

i = 1, 10

KRAJ

18
Algoritmi 2015

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

i = 1, 15

1. Priprema 1

2. Priprema 2

3. Farbanje - 1. sloj

4. Sušenje - 1. sloj

5. Farbanje - 2. sloj

5. Farbanje - 2. sloj

KRAJ

19
2015 Algoritmi

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.

POČETAK

s=0

i = 1, 10

NE
n > 10

DA
s = s + 10

KRAJ

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.

20
Algoritmi 2015

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.

POČETAK

b, c

n=0

NE
b mod 10 == c

DA

n=n+1

b = b / 10

b>0

KRAJ

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.

21
2015 Algoritmi

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.

POČETAK

s=0

i=0

NE
o >= 1 && o <= 5

DA
s=s+o

i=i+1

z == 'd'

p=s/i

KRAJ

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

22
Algoritmi 2015

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).

23
2015 Algoritmi

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.

b) c)
a)
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++.

24
Algoritmi 2015

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".

25
2015 Algoritmi

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).

26
Algoritmi 2015

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 Upisali smo nešto i Dobili smo i neki rezultat, ali šta
.... nešto treba da upišemo?! pritisnućemo taster "Enter". on zapravo predstavlja, to je
(Ko će ga znati!) (Valjda će sve biti u redu.) 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!

27
2015 Algoritmi

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 Ovoga puta, znamo šta smo .... pa nas ni rezultat neće
šta se od nas očekuje u datom upisali .... iznenaditi.
trenutku.

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;

28
Algoritmi 2015

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;

29
2015 Algoritmi

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.

30
Algoritmi 2015

- "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!

31
2015 Algoritmi

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.

POČETAK

c Naredba 1

DA NE Naredba 2
c == 'a'

BLOK 1 Naredba 3

BLOK 1 BLOK 2 Ispis

KRAJ Slika 2 - Blok 1 podeljen


na više naredbi

Slika 1 - Delimično
rešen algoritam

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 :)).

32

You might also like