Dijagram toka - osnove
Uvod
Dijagram toka je sistem povezanih grafičkih simbola preko kojih se predstavlja algoritam, odnosno, tok izvršavanja programa.
Svaki pojedinačni simbol predstavlja pojedinačni korak u algoritmu, a kada je u pitanju sled izvršavanja programskih instrukcija, razlikuju se tri osnovne opcije:
- linearno (bezuslovno) izvršavanje uzastopnih pojedinačnih naredbi
- grananja (prelazak na jedan od dva moguća bloka instrukcija u sledećem koraku - u skladu sa određenim uslovom)
- petlje (uzastopno ponavljanje određenog bloka instrukcija, takođe shodno određenom uslovu)
Naravno, osnovne opcije koje smo naveli, moguće je i kombinovati.
Simboli
U nastavku, upoznaćemo se sa pojedinačnim simbolima, nakon čega ćemo razraditi nekoliko primera (sa dijagramima koji prikazuju različite tokove izvršavanja).
Početak izvršavanja
Simbol sa slike #1 predstavlja početak izvršavanja programa:
Naredba ulaza
Naredba ulaza (u dijagramima toka), simbolično se predstavlja kao "obrnuti trapez" * u kome se navodi jedan ili više identifikatora promenljivih koje se učitavaju.
Naredba
U dijagramima toka, pravougaonik označava ("običnu") pojedinačnu naredbu, a sama naredba se zapisuje unutar pravougaonika.
Kao primere pojedinačnih naredbi možemo navesti: računanje zbira ili razlike, dodelu vrednosti promenljivama (a = 10), inkrementaciju (uvećanje vrednosti za 1), primenu formula (v = s / t), kao i mnoge druge jednostavne operacije.
Grananje/odlučivanje
Uslovi koji određuju dalji tok izvršavanja algoritma, zapisuju se unutar simbola koji izgleda kao romb (onako kako je prikazano na donjoj slici):
Naredba izlaza
Naredbe izlaza takođe se predstavljaju preko simbola u obliku trapeza (ali, ovoga puta, donja osnovica je veća):
Za razliku od ulaznih vrednosti koje mogu izostati, algoritam (odnosno, dijagram toka), mora sadržati bar jednu izlaznu vrednost.
Završetak izvršavanja
Simbol sa slike #6 predstavlja završetak izvršavanja.
Prikazani simbol pojavljuje se (tipično, ali, ne i uvek), posle naredbe izlaza.
Primeri
Da bismo se što bolje upoznali sa praktičnom ulogom različitih simbola i različitim tokovima izvršavanja programa, razmotrićemo nekoliko primera.
Linearno izvršavanje naredbi
Kao primer linearnog izvršavanja naredbi, razmotrićemo dijagram toka koji predstavlja algoritam za sabiranje dva broja:
- ulazni podaci su dve brojčane vrednosti
- obrada podataka podrazumeva računanje zbira dve unete vrednosti
- izlazni podatak je prethodno izračunati zbir
Uslovno izvršavanje naredbi (grananje)
Kao primer uslovnog izvršavanja naredbi (to jest, primer algoritma u kome postoji 'grananje'), razmotrićemo postupak za računanje obima i površine kvadrata:
- očekivani ulazni podatak je brojčana vrednost, koja predstavlja stranicu kvadrata
- međutim, pošto nije zagarantovano da će svaki put (pri pokretanju programa), biti unet ispravan ulazni podatak (stranica kvadrata) - ulazni podatak se mora proveriti:
- ukoliko korisnik programa unese broj koji je veći od 0, pristupa se računanju obima i površine kvadrata - i zatim se izračunate vrednosti ispisuju
- ukoliko korisnik ne unese korektnu ulaznu vrednost (recimo, ako se unese negativan broj, ili 0), potrebno je da program ispiše poruku o grešci (i naravno, prekida se dalje izvršavanje)
Petlje
Pored bezuslovnog izvršavanja pojedinačnih naredbi i usmeravanja toka programskih instrukcija preko uslova, u algoritmima (tj. programima), moguće je definisati i "petlje" - blokove programskih instrukcija koji se izvršavaju uzastopno, sve dok je određeni uslov zadovoljen.
U 'tehničkom' smislu, petlje u velikoj meri podsećaju na grananja: ukoliko 'prepravimo' dijagram toka koji predstavlja osnovno grananje, tako da ostane samo grana koja se izvršava ako je uslov zadovoljen - nakon čega sledi povratak na ispitivanje uslova, praktičan rezultat je "petlja".
Uzmimo za primer algoritam koja ispisuje prvih 5 pozitivnih celih brojeva (ovoga puta, korisnik ne unosi podatke):
- uvešćemo pomoćnu promenljivu
i
, preko koje se "broje koraci" - na početku, promenljiva
i
dobija vrednost 1 (prva vrednost za ispis) -
uslov za izvršavanje bloka naredbi (od kojih je glavna - naredba ispisa), biće:
i <= 5
- ukoliko je uslov zadovoljen, vrednost promenljive
i
prvo se ispisuje, zatim, uvećava za 1, posle čega se algoritam vraća na proveru uslova - ukoliko uslov nije zadovoljen, blok naredbi se preskače
- ukoliko je uslov zadovoljen, vrednost promenljive
Za sam kraj, uopštićemo prethodni algoritam, osvrnućemo se dodatno na ideju o višestrukoj pojavi simbola za završetak izvršavanja (što smo najavili ranije), i videćemo zašto dodatni simbol za završetak izvršavanja - i te kako može biti od koristi.
U alternativnoj verziji algoritma nećemo ispisivati prvih 5 brojeva, već prvih n
brojeva, gde n
predstavlja celobrojnu vrednost koju korisnik unosi - pri čemu je očekivano da uneta vrednost bude veća od 0.
Naravno, budući da ovoga puta ne znamo da li će korisnik (zapravo) uneti odgovarajuću vrednost, potrebno je prvo proveriti da li je uneti broj veći od 0, a ako navedeni uslov nije zadovoljen - potrebno je zaustaviti dalje izvršavanje naredbi.
Ostatak algoritma (tj. dijagrama toka), skoro je isti kao u prethodnom primeru, a što se tiče simbola za završetak programa koji se pojavljuje neposredno pored prvog uslova .....
.... može se primetiti da je u pitanju elegantnije rešenje u odnosu na spajanje prvog uslova sa "donjim" simbolom za završetak.