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, razlikujemo 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
Naredbe ulaza (u dijagramima toka), simbolično su predstavljene 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
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 predstavljene su u obliku trapeza (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 (kao i sa različitim tokovima izvršavanja), razmotrićemo nekoliko primera.
Linearno izvršavanje naredbi
Kao primer (veoma jednostavnog), 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, algoritma u kome postoji grananje), razmotrićemo postupak za računanje obima i površine kvadrata:
- ulazni podatak je brojčana vrednost, koja "bi trebalo" da predstavlja stranicu kvadrata
- pošto ne možemo biti sigurni da je korisnik programa uneo ispravan ulazni podatak (stranicu kvadrata) - ulazni podatak se mora proveriti:
- ukoliko je korisnik uneo 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 nije uneo korektnu ulaznu vrednost (recimo, unet je negativan broj, ili 0), potrebno je da program ispiše poruku o grešci (i naravno, prekida se dalje izvršavanje)

Petlje
Ukoliko zamislimo grananje koje se izvršava samo ukoliko je uslov zadovoljen - pri čemu se algoritam vraća na ispitivanje uslova posle izvršavanja bloka naredbi, 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 ćemo "brojati korake" - na početku, promenljiva
i
će dobiti 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
se prvo ispisuje, a zatim uvećava za 1 - posle čega se algoritam vraća na proveru uslova - ukoliko uslov nije zadovoljen, blok naredbi se preskače

Za sam kraj, vratićemo se na ideju o višestrukoj pojavi simbola za završetak izvršavanja, i u tom smislu ćemo razmotriti opštiju varijantu prethodnog algoritma, gde dodatni simbol za završetak izvršavanja - sasvim dobro dođe.
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/dijagrama toka, skoro je isti kao u prethodnom primeru.)

Vidimo da je pojava simbola za završetak neposredno pored prvog uslova - znatno elegantnije rešenje od spajanja prvog uslova sa "donjim" simbolom za završetak.