You are on page 1of 61

Sintaksa programskog jezika, Osnovi

teorije algoritma, Strukturirano


programiranje, Strukture podataka i
Testiranje programa
Sadraj

Sintaksa programskog jezika ............................................................................................................... 1


Bekus-Naurova forma BNF .......................................................................................................... 1
Poboljana Bekus-Naurova forma EBNF ...................................................................................... 2
Sintaksni dijagram ........................................................................................................................... 2
Primeri ............................................................................................................................................ 3
Osnovi teorije algoritma ...................................................................................................................... 4
Tjuringove maine ........................................................................................................................... 5
Primer ............................................................................................................................................. 7
Normalni algoritmi Markova ........................................................................................................... 8
Fundamentalne osobine algoritama ................................................................................................ 10
Strukturirano programiranje .............................................................................................................. 11
Sredstva za analizu algoritama ....................................................................................................... 11
Analiza algoritama ........................................................................................................................ 12
Strukturna teorema i programiranje bez goto ................................................................................. 14
Minimalna baza strukturiranih programa ....................................................................................... 15
Uzroci nestrukturiranosti programa ................................................................................................ 16
Strukturiranje programa ................................................................................................................. 18
Pisanje programa bez upotrebe skokova......................................................................................... 20
Strukture podataka ............................................................................................................................ 21
Pojam podatka ............................................................................................................................... 21
Znaaj struktura podataka .............................................................................................................. 22
Definicija strukture podataka ......................................................................................................... 23
Grafovi .......................................................................................................................................... 23
Operacije nad strukturama podataka .............................................................................................. 24
Fizika realizacija struktura podataka ............................................................................................ 25
Klasifikacija struktura podataka ..................................................................................................... 26
Statike strukture podataka................................................................................................................ 28
Nizovi ........................................................................................................................................... 28
Slogovi .......................................................................................................................................... 30
Tabele ........................................................................................................................................... 32
Poludinamike strukture podataka ..................................................................................................... 33
Stek ............................................................................................................................................... 33
Red ................................................................................................................................................ 35
Dek ............................................................................................................................................... 38
Sekvenca ....................................................................................................................................... 38
Dinamike strukture podataka ........................................................................................................... 39
Jednostruko spregnuta lista ............................................................................................................ 39
Dinamiki niz ................................................................................................................................ 40
Dvostruko spregnute liste .............................................................................................................. 41
Viestruko spregnuta lista .............................................................................................................. 41
Stabla ............................................................................................................................................ 42
Testiranje programa .......................................................................................................................... 49
Destruktivno testiranje ................................................................................................................... 49
Testiranje sloenih programa ......................................................................................................... 55
Sintaksa programskog jezika

Aspekti svakog programskog jezika su:

o sintaksa
o semantika
o pragmatika

Sintaksa sadri pravila za graenje konstrukcija programskog jezika. Ta pravila su unapred odreena
(definisana). Sintaksa programskog jezika je mnogo jednostavnija od sintakse govornog jezika, ali je
zato krajnje stroga.
vrsto je vezana za kompajler, iji je osnovni zadatak (pored prevoenja programa na mainski jezik) da
proveri da li je program napisan u skladu sa sintaksnim pravilima. Drugaije reeno, kompajler proverava
da li je neka struktura pravilno napisana i na taj nain proverava da li je ta struktura uopte deo programskog
jezika.
Semantika se bavi znaenjem onoga to je napisano. To je interpretacija sintaksno pravilno napisane
strukture.
Pragmatika predstavlja nain korienja jezikih konstrukcija da bi se reio zadati problem.

Metajezik slui za formalan prikaz sintakse. To je jezik za opis programskog jezika. Metajezik je
formalan i postoji u mnogo razliitih varijanti. Tri najpoznatija su: BNF, EBNF i sintaksni dijagram.
Prva dva predstavljaju linearnu formu i koriste se za formalno zadavanje sintakse (bazirani su na
metaformulama), dok se trei prikazuje dvodimenzionalno i slui za prezentovanje sintakse.
Terminali su samoobjanjavajue konstrukcije nekog programskog jezika, dok su neterminali
konstrukcije koje treba dalje razjanjavati (treba ih definisati).

Bekus-Naurova forma BNF

Tvorci: John Backus i Peter Naur

Karakteristike:

1. neterminali se prikazuju izmeu < i >. Naziv neterminala je mnemoniki, ukazuje na prirodu
definisanog neterminala;
2. terminali se prikazuju originalnim simbolima, bez ikakvih dodatnih znakova;
3. metaoperacija (tanije metarelacija) dodele prikazuje se simbolom ekvivalencije :: . Sa leve
strane nalazi se terminal (neterminal), a sa desne njegov opis u vidu kombinacije terminala i
neterminala;
4. ekskluzivna disjunkcija eksplicitno navedenih elemenata prikazuje se simbolom | ;
5. lananje simbola vri se tako to ih piemo jedan za drugim;
6. ako konstrukti ne moraju uvek imati istu duinu, koristimo rekurziju;
7. postoji mogunost ponavljanja simbola jednom ili vie puta x i mogunost ogranienog
ponavljanja x m , gde m predstavlja najmanji, a n najvei mogui broj ponavljanja.
n

1
Poboljana Bekus-Naurova forma EBNF

Vie se upotrebljava od BNF i posebno je pogodna za kompajler generatore.

Karakteristike:

1. neterminali se prikazuju bez ikakvih dodatnih znakova. Ako se neterminal sastoji od vie rei,
izmeu njih se stavlja crtica ili donja crta;
2. terminali se prikazuju originalnim simbolima (kao i u ciljnom jeziku), izmeu navodnika;
3. metaoperacija dodele prikazuje se znakom jednakosti, ;
4. ekskluzivna disjunkcija eksplicitno navedenih elemenata prikazuje se simbolom | ;
5. lananje simbola vri se tako to ih piemo jedan za drugim;
6. ako konstrukti ne moraju uvek imati istu duinu, koristimo rekurziju;
7. postoji mogunost ponavljanja simbola nula ili vie puta x i mogunost ogranienog

ponavljanja x m , gde m predstavlja najmanji, a n najvei mogui broj ponavljanja;


n

8. opcija se oznaava srednjim zagradama, [ i ] (metaizraz moe, a ne mora da se pojavi);


9. objedinjavanje izraza oznaava se malim zagradama, ( i );
10. na kraju svake formule stavlja se taka . , koja oznaava njen kraj.

Sintaksni dijagram

Najvie se koristi za prezentovanje sintakse. On je itljiviji od BNF i EBNF. Sredstva za prikazivanje


sintaksnog dijagrama su grafika.

Sintaksni dijagram kao celina ima jednu ulaznu granu, na kojoj pie naziv konstrukcije koju
definiemo.

Karakteristike:

1. neterminali se prikazuju vorovima oblika pravougaonika, u koje se malim slovima upisuju


njihovi nazivi;
2. terminali se prikazuju vorovima oblika kruga ili zaobljenog pravougaonika, u koje se velikim
slovima upisuje njihov naziv (ako nije u pitanju cifra);
3. lananje se postie povezivanjem vorova granama orijentisanim u skladu sa smerom lananja;
4. ekskluzivna disjunkcija ostvaruje se povezivanjem disjunktnih vorova paralelnim granama,
koje imaju zajedniki ulaz i izlaz;
5. rekurzija se postie usmerenim granama, tj. povratnim granama;
6. ponavljanje se postie usmerenim granama, a ako je broj ponavljanja nekog metaizraza
ogranien, upotrebljava se posebna vrsta grane, koja se oznaava maksimalnim dozvoljenim
brojem prolaza.

Svaka konstrukcija dobijena prolaskom kroz dijagram je pravilna.

2
Primeri

neterminal identifikator

6
terminal

lananje slovo cifra

ekskluzivna disjunkcija

cifra

0 1 2 3 4 5 6 7 8 9

rekurzija

ponavljanje

kard_broj
cifra

Elementi metajezika BNF EBNF Sintaksni dijagram

neterminal <neterminal> neterminal pravougaonici


terminal terminal "terminal" krugovi ili zaobljeni pravougaonici
simbol ekvivalencije ::= =
ekskluzivna disjunkcija | | paralelnim granama
lananje simbola <prvi> <drugi> trei prvi drugi trei usmerenim granama
<idnetifikator>::= <slovo> | idnetifikator= slovo |
rekurzija <identifikator> <slovo> | identifikator slovo | usmerenim (povratnim) granama
<identifikator> <cifra> identifikator cifra
konstruktivno zadavanje (ponavljanje) {<x>} (najmanje jednom) {<x>} (najmanje 0 puta) usmerenim granama
n n
ogranieno ponavljanje {<x>}m {<x>}m posebnim granama
opcija [x]
objedinjavanje izraza (x)
kraj meta izraza .

3
Osnovi teorije algoritma

Empirijska definicija algoritma

Algoritam je pravilo, formulisano na nekom jeziku, koje jednoznano definie redosled


operacija, neophodan za transformaciju dozvoljenih ulaznih podataka u traeni rezultat.

Sintaksna definicija algoritma

Sintaksna definicija algoritma formalnija je od empirijske. Oslanja se na apstraktni alfabet (


W= ,1, , , , konaan skup simbola bez semantike). Od simbola apstraktnog alfabeta grade se rei,
koje takoe nemaju semantiku. Duinu rei predstavlja broj simbola.

W* skup svih rei (nizova simbola), ukljuujui i praznu re, nad jednim apstraktnim alfabetom.

Algoritam je ureena etvorka (X*, Y*, G, Z).

X ulazni alfabet (sadri dozvoljene ulazne podatke)


Y izlazni alfabet (sadri izlazne rezultate).
G alfabetski operator (G nije funkcija, ve relacija koja povezuje rei (ulaz i izlaz))
G vri transformacije rei iz X* u re iz Y*, G X* Y*
Z kodeks (skup zakona koji blie odreuju kako G vri transformaciju ulazne u izlaznu re).
Iako su X*, Y* i G strogo definisani, Z je definisan intuitivno, pa je i sintaksna definicija intuitivna.

Dva algoritma mogu biti ekvivalentni na dva naina:

- funkcionalno isti ulazni podaci daju iste rezultate

- po izvrenju i kodeksi im se poklapaju

Algoritmi mogu biti:

- deterministiki za isti ulaz daju isti izlaz

- sholastiki za isti ulaz daju razliit izlaz

Algoritamski sistem je sredstvo za zadavanje algoritma. Algoritamski sistemi su sa algoritmom povezani


algoritamskom hipotezom: Svaki algoritam moe da se prikae algoritamskim sistemom.

Tri algoritamska sistema su najpoznatiji i sva tri su ekvivalentna, tj. mogu se svesti jedan na drugi. To su:
- rekurzivne funkcije,
- Tjuringove maine i
- Markovljevi normalni algoritmi.
4
Tjuringove maine

Ovaj algoritamski sistem postavio je Alan Tjuring 1936. godine

Pod Tjuringovim mainama podrazumevamo familiju matematikih apstrakcija, koje predstavljaju


jednu apstraktnu mainu. One tretiraju algoritme sa stanovita izvrioca. Tjuringove maine
predstavljaju apstraktnog izvrioca algoritma i njegovo ponaanje, kojim se strogo definisan ulaz
transformie u strogo definisan izlaz.

Svaki dananji raunar predstavlja Tjuringovu mainu.

Zadatak Tjuringove maine je da re iz negog ulaznog alfabeta transformie u re nekog izlaznog


alfabeta. Glavni problem je zadavanje alfabetskog opetatora.

Postoje dve grupe Tjuringovih maina, specijalne i univerzalne.

Specijalne Tjuringove maine


Imaju tri funkcionalne celine:

o beskonana traka ima ulogu memorije, moe ih biti jedna ili vie, ali su sve ekvivalentne.
Beskonana traka podeljena je na elije, u kojima se nalaze neki simboli. Na
beskonanoj traci nalazi se ulazna re na kojoj se izvode sve transformacije. Na
poetku rada na beskonanoj traci nalazi se neka ulazna re od slova, a levo i desno od
nje su prazne elije.
o upisno-itajua glava vri operaciju uitavanja nekog slova sa ili upisivanja nekog slova na
trenutnu poziciju. Ima mogunost da se pomeri za jedno mesto ulevo ili udesno. U
poetnom trenutku nalazi se iznad prvog slova ulazne rei.
o upravljaki blok upravlja radom Tjuringove maine i uvek se nalazi u nekom stanju. Skup
stanja upravljakog bloka naziva se unutranji alfabet Tjuringove maine. Kad se
upravljaki blok nae u jednom od zavrnih stanja, sesija je zavrena. Na poetku rada,
upravljaki blok je u poetnom stanju.

Specijalna Tjuringova maina

Rad Tjuringove maine

Rad Tjuringove maine odvija se u koracima, iz tri dela:

1. menja se stanje upravljakog bloka


2. vri se upis slova na poziciju iznad koje je upisno-itajua glava (aktuelnu eliju)
3. glava se pomera za jedno mesto ulevo ili udesno
5
Ovaj postupak se ponavlja dok se upravljaki blok ne nae u nekom zavrnom stanju. Rezultat rada
bie re, koja se nalazi izmeu dve prazne elije, koje obeleavamo sa B.

- prazan simbol (prazno slovo) kada ga upiemo u eliju, skraujemo izlaznu re za jedno slovo.

Nemogue je unapred znati da li e za neku ulaznu re, posle konanog broja koraka, Tjuringova
maina doi u jedno od zavrnih stanja.

Formalna definicija

Tjuringova maina je ureena estorka (, , , , q0, F).

unutranji alfabet (konaan skup stanja upravljakog bloka);

spoljanji alfabet (skup svih simbola koji se mogu nai na beskonanoj traci ukljuujui i B i );

skup ulaznih slova (podskup skupa , u optem sluaju \ {B}, tj. sigurno {B} , ali
moda i neki drugi element iz takoe ne pripada );

funkcija prelaza (obavlja pokrete, a odluka o pokretu se donosi na osnovu stanja upravljakog
bloka i simbola iznad kojeg se trenutno nalazi upisno-itajua glava, tj.
: ( ) ( \ {B}) {L, R});

q0 jedinstveno poetno stanje;

F skup zavrnih stanja.

Konfiguracija Tjuringove maine

Konfiguracija Tjuringove maine je ureena trojka (q, , i) i ona odreuje njeno ukupno stanje.
q trenutno stanje upravljakog bloka (tekue stanje)
aktuelna re na beskonanoj traci
i poloaj upisno-itajue glave, tj. njeno rastojanje od poetka aktuelne rei (redni broj slova iznad
kojeg se glava nalazi).

Funkcija prelaza

Funkcija prelaza se zadaje kao skup pseudonaredbi oblika qa q ' a ' P . Ova pseudonaredba
odgovara notaciji (q, a) ( q ', a ', ) .
q, q ' K
a
a ' ( \ {})

{L, R}

6
Drugi nain za njihovo zadavanje (ne iskljuuje prvi) je u vidu funkcionalne sheme. To je tablica ije
vrste odgovaraju stanjima iz skupa K, kolone slovima spoljanjeg alfabeta , a elementi vrednostima
funkcije prelaza (ureene trojke ( q ', a ', ) ).

Osnovna teza teorije algoritama sa stanovita Tjuringovih maina kae:


Svaki algoritam moe se zadati u obliku funkcionalne sheme specijalne Tjuringove maine, tj. svaki
algoritam je jedna Tjuringova maina.

Univerzalne Tjuringove maine


Univerzalna Tjuringova maina je Tjuringova maina koja moe da predstavi svaki algoritam. Ona
ima tu osobinu da ne slui za izvravanje jednog algoritma, ve za izvravanje svakog algoritma.
Funkcionalna shema se kodira, tako da i ona postaje deo ulaza.
Univerzalna Tjuringova maina ekvivalentna je specijalnoj, jer se na nju svodi kodiranjem.
Univerzalna Tjuringova maina ima dve beskonane trake. Na ulazu ima re koju treba obraditi
zajedno sa uputstvom za njenu obradu. U savremenim raunarima, ova uputstva zovemo programima.

Primer

Data je Tjuringova maina T = (, , , , q0, F).

= {S1, S2, S3} ulazni alfabet Funkcionalna shema ove Tjuringove maine je:

= {0, 1, , B} izlazni alfabet 0 1 B


S1 (S2, 0, R) (S2, 1, R) - -
= {0, 1} skup slova S2 (S2, 1, R) (S2, 0, R) - (S3, , R)
S3 - - - -
q0 = S1 poetno stanje

F = {S3} skup zavrnih stanja

Neka se na ulazu nalazi 11100.

konfiguracija pseudonaredba
(S1, 11100, 1) S11 > S21R
(S2, 11100, 2) S21 > S20R
(S2, 10100, 3) S21 > S20R
(S2, 10000, 4) S20 > S21R
(S2, 10010, 5) S20 > S21R
(S2, 10011, 6) S2B > S3R

S obzirom na to da je S3 zavrno stanje, rad se zaustavlja. Rezultat je 10011, to je efektivno isto kao
10011, jer je prazno slovo.
7
Normalni algoritmi Markova

Ovo je najnoviji algoritamski sistem, izveden je iz BDA, 1954. godine.

Markovljevi normalni algoritmi tretiraju algoritme sa stanovita izvravanja. Njihov osnovni problem
je kako prikazati alfabetski operator G na neki standardan nain.

Kod zadavanja alfabetskog operatora postoje dve osnovne operacije:

o operacija obrade (proces) i


o operacija odluke (odluivanje).

Markovljevi algoritmi prikazuju se primenom ove dve operacije.

Operator obrade se, u optem sluaju, predstavlja kao smena nad tekuom rei.

Na poetku algoritma pojavljuje se poetna vrednost tekue rei na kojoj se izvrava strogo definisana
sekvenca smena na sledei nain:

U tekuoj rei locira se prva sleva pojava podrei i zatim se ona zameni sa . Ako podrei
nema, nita se nee dogoditi.
Ako smena ima vie, mora se voditi rauna o redosledu njihovog izvravanja. Tako intuitivno
podrazumevamo strogo ureen niz smena koje se primenjuju u tekuoj rei, jer razliiti nizovi smena
mogu da vode ka razliitim rezultatima.
Kod normalnih algoritama postoje zavrne smene, po ijem se izvoenju smatra da je procedura
zavrena. Njih oznaavamo tako to stavimo taku iza strelice. .

- prazan simbol (prazno slovo)

Proirivanje rei radi se tako to ispred tekue rei dodajemo .


Ova smena znai zamenu prvog sleva praznog slova slovom .

Definicija

Neka je i smena, a X re. Normalne algoritme Markova definiemo koristei sledee metaformule:

P(i, X) je predikat, ima vrednost ako je i primenljiva na re X, a u suprotnom;

X := i(X) znai transformisati re X primenom smene i, a izvrava se ako je i primenljiva na


re X, tj. ako predikat P(i, X) ima vrednost ;

K(i) je isto predikat, a pokazuje ako je i zavrna smena, tj. ako nije.

8
Opti oblik Markovljevih normalnih algoritama

Opti oblik (blok dijagram) Markovljevih normalnih algoritama prikazan je sledeom shemom:

poetak

ulaz:
X

DA NE
P(1, X) X := 1(X) K(1)

NE DA
1

DA NE
P(2,X) X := 2(X) K(2)

NE DA
1

DA NE
P(i, X) X := i(X) K(i)

NE DA
1
1

izlaz:
X

kraj

Osnovna teza teorije algoritama sa stanovita normalnih algoritama Markova kae:

Svaki algoritam moe se predstaviti kao normalni algoritam Markova.

9
Fundamentalne osobine algoritama

Fundamentalne osobine algoritama su diskretnost, rezultativnost (primenljivost), determinisanost i


masovnost.

Diskretnost je definiciona osobina, jer kontinualni algoritmi ne postoje. Algoritam se odvija u


diskretnim vremenskim intervalima, tzv. algoritamskim koracima.
Rezultativnost - algoritam je primenljiv na date podatke (ulazne veliine) ako nakon konanog
broja koraka generie (daje) rezultat (izlazne veliine). (diskutabilno deljenje)
Determinisanost - algoritam e uvek za iste ulazne podatke dati isti rezultat. To vai samo za
deterministike algoritme. Pored njih postoje i sholastiki, koji nemaju ovu osobinu, pa ovo
nije esencijalna osobina algoritama.
Masovnost znai da je algoritam primenljiv na veliki broj ulaznih podataka. Tu postoje
odreeni problemi. Prvo, ne znamo ta znai veliki broj ulaznih podataka. Dalje, postoje
algoritmi koji nemaju ulazne podatke. Tree, neki algoritmi se piu za samo jedan tano
odreeni ulazni podatak.

10
Strukturirano programiranje

Strukturirano programiranje predstavlja metodologiju za razvoj softvera (skup postupaka, koji prate
razvoj softvera).
Pod strukturiranim programiranjem podrazumeva se skup tehnika za razvoj softvera, koje koriste
strogo definisane upravljake strukture i strukture podataka.

Sredstva za analizu algoritama

Osnovno sredstvo za analizu algoritma jeste graf toka programa (GTP). To je digraf (orjentisani
graf), koji pokazuje redosled izvravanja operacija u programu. Graf toka programa moemo definisati
i kao blok dijagram algoritma redukovan na najosnovnije elemente.

Graf toka programa sastoji se od tri elementa (vora):

1. funkcionalni vor (proces) operacija transformacije (obrade) podataka. Ima jedan


ulaz i jedan izlaz;
f

P
2. predikat ima jedan ulaz i dva izlaza;

3. kolektor ima dva ulaza i jedan izlaz.

Funkcionalni vor i predikat su radni elementi, dok je kolektor pomoni vor.


Broj ulaznih grana zovemo ulazni stepen, a broj izlaznih grana, izlazni stepen.

Pravilni programi
Klasa programa koja se razmatra kao ciljna klasa zove se pravilni program. Graf pravilnog programa
zadovoljava tri uslova:
1. ima tano jednu ulaznu granu

2. ima jednu izlaznu granu

3. kroz svaki vor prolazi najmanje jedan put od ulazne do izlazne grane.

Prva dva uslova nalau da ceo pravilni program moemo zameniti tano jednim vorom, a trei uslov
eliminie mogunost beskonanih ciklusa i izolovanih (nedostupnih) delova programa.

11
Primer

Pravilni potprogram
Pravilni potprogram je sastavni deo nekog programa, koji je takoe pravilan. Dobija se kad
iskljuimo ulazne i izlazne grane. Na datom primeru grafa toka programa zaokruen je jedan podgraf
koji je takoe i pravilan program.
Potprograme uvodimo zbog naina uoavanja dekompozicije programa na prostije delove.
Dekompoziciju vrimo dokle god je mogue potovati pravilnost potprograma. Dakle, pronalazimo
potprograme koji ne mogu da se dekomponuju na pravilne potprograme. Takvi potprogrami su prosti
potprogrami.
Prost program je pravilan program iji svaki pravilan potprogram ima tano jedan vor. Dakle, prost
program moe da sadri druge pravilne programe, ali to su samo procesi i nita vie.
Odavde vidimo da prosti programi predstavljaju neke od osnovnih naredbi jednog programskog jezika.

Analiza algoritama

Analiza algoritama direktno se bavi problemom koji iskazi treba da postoje u nekom programskom
jeziku. Izgraena je oko dva centralna pojma: pojma pravilnog programa i pojma prostog programa.

Ekvivalentni programi
Kao i dva algoritma, isto i dva programa mogu biti funkcionalno ekvivalentni (za isti ulaz generiu
isti izlaz) i ekvivalentni po izvravanju (imaju isti graf toka, tj. ulazne podatke obrauju na isti nain
do izlaznih).
Baza strukturiranih programa
Baza strukturiranih programa je skup prostih programa ijom se superpozicijom (kombinovanjem)
moe realizovati svaki pravilan program. Ona po definiciji nije minimalna, tj. ona moe da sadri i
viak prostih programa.
12
Strukturirani program je program sastavljen od prostih programa iz zadate baze. Dakle sledi da je
strukturiran program pravilan program, ali to ne znai da u njemu po definiciji nema skokova.
Pojam strukturiranog progama je relativan, jer se definie u odnosu na zadatu bazu. Tako je jedan
program u odnosu na jednu bazu strukturiran, ali ne mora biti strukturiran u odnosu i na neku drugu
bazu.
Kao kandidati za sastavljanje baze razmatraju se programi sa jednim, dva, tri i etiri vora, ali naravno
ne svi koji zadovoljavaju ovaj kriterijum (npr. oni koji nemaju funkcionalne vorove nisu od interesa
za bazu, jer ne rade nita).
Ovakvih programa ima sedam:

1. f funkcionalni vor

2. f g sekvenca

3. f
T
IF-THEN
P

4. f
T WHILE-DO
P

5.

T REPEAT-UNTIL
f P

6. T f

P IF-THEN-ELSE
g

7. g T

DO-WHILE-DO
f P

Programi 3 i 6 su programi selekcije, a 4, 5 i 7 iteracije (repeticije). Ovi prosti programi predstavljaju


osnovne naredbe svih strukturiranih programskih jezika, tj. preslikavaju se u naredbe tih programskih
jezika. Odavde vidimo da je skup naredbi u Pascalu teorijski zasnovan.
Primetimo da meu ovih sedam prostih programa ne postoji ekvivalent paskalske naredbe case. To je
zbog toga to case nije prost program, jer ga moemo zameniti pomou if-then-else strukture. Razlog
za uvoenje case naredbe je taj to nam je tako programiranje olakano.
Takoe primetimo da u realizaciji ovih sedam struktura ne postoje skokovi.
13
Strukturna teorema i programiranje bez goto

Izdvaja se jedna posebna baza strukturiranih programa. Nju ine sekvenca, iteracija tipa while-do i
selekcija tipa if-then-else. Pomou ove baze moe se izvesti svaki program i na osnovu nje pravimo
druge baze koje su nam potrebne.
Godine 1966. C. Boehm i G. Jacopini izveli su strukturnu teoremu koja pokazuje da se svaki pravilan
program moe ostvariti superpozicijom ove tri strukture, tj. da se moe ostvariti bez upotrebe skokova,
to je bilo kljuno za reavanje problema koji su traili uvoenje strukturiranih programa.
Za dokaz teoreme uzeemo jedan pravilan program prikazan sledeim grafom toka programa:
Na cilj je da definiemo program funkcionalno ekvivalentan ovom
0 koji se moe sastaviti upotrebom samo pomenute tri strukture.
Uoiemo redosled izvravanja vorova sa GTP i pokazaemo da se
1
moe obezbediti mehanizam za odreivanje sledeeg vora koji e
A
biti izvren, a da taj mehanizam sadri samo tri date strukture.
2 3 Da bismo to postigli, prvo emo na GTP proizvoljnim simbolima
T obeleiti vorove (na primeru, uzeti su celi nenegativni brojevi).
P B
Okolinu (ono to se na grafu nalazi pre ulaza i posle izlaza) isto
0 obeleavamo proizvoljnim simbolom (uzeta je 0). Kolektore ne
oznaavamo, jer su to pomoni simboli GTP. Oznaavanjem
vorova se u stvari omoguava da svaka ta oznaka bude argument pomenutog mehanizma iji je
rezultat takoe oznaka vora.
Zatim, definiemo matricu prelaza koja ini osnovu za odreivanje koji e se vor sledei izvriti. To
je kvadratna matrica koja ima onoliko vrsta i kolona koliko ima oznaka vorova ukljuujui i oznaku
okoline. Realizujemo je kao logiku matricu, tako to je popunjavamo po vrstama. Za svaki vor u
nekoj vrsti upisujemo i . upisujemo u onoj koloni koja odgovara voru koji neposredno sledi
voru iz date vrste. Zbog toga u svakoj vrsti postoji samo jedno .
Poto dva vora mogu da slede neki predikat (ili jedan ili drugi, ne oba) u odgovarajue kolone
neemo staviti oznake i , ve stavljamo P i P , od kojih opet samo jedna moe biti tana i ona
nam pokazuje koji se vor sledei izvrava.
Matrica prelaza za gornji graf toka programa izgleda ovako:
0 1 2 3

2 P P

14
Sada, definiemo funkciju next, koja preslikava skup oznaka vorova na samog sebe:
function next(n: integer): integer;
begin
j := 0;
while not L[n, j] do j := j + 1;
next := j;
end;

Sad moemo napraviti prelaznu strukturu koja vodi krajnjoj strukturi. Koristiemo jo jednu teoremu,
to je teorema o kanonikoj formi. Ona kae:
Za svaki pravilan program postoji ekvivalentan program koji se sastoji od jedne iteracije while-do
unutar koje se nalazi struktura case sa onoliko paralelnih grana koliko ima procesa i predikata u
grafu toka programa.
Dakle, kanonika forma za na primer je:
begin
n := 1; {oznaka prvog vora koji se izvrava}
while n <> 0 do {0 je oznaka okoline}
case n of
1: begin {obraditi n}; n := next(n) end;
2: begin {obraditi n}; n := next(n) end;
...
k: begin {obraditi n}; n := next(n) end;
end
end;

Sada moemo formulisati strukturnu teoremu:


Svaki pravilan program moe se transformisati u ekvivalentan formalno strukturiran program uz
korienje tri osnovne upravljake strukture: sekvence, iteracije tipa while-do i selekcije tipa if-then-
else.
Primetimo da se case ne uklapa u ovu teoremu, ali tu strukturu vrlo lako zamenjujemo ugneenom
strukturom if-then-else.

Minimalna baza strukturiranih programa


Baza koja se sastoji od sekvence, iteracije while-do i selekcije if-then-else nije minimalna. Moemo
iskljuiti strukturu if-then-else (tj. zameniti je strukturom while-do) i onda opet prikazati pravilne
programe pomou struktura iz ove, sada minimalne baze.
If-then-else moemo zameniti sa while-do na sledei nain:

q : p; r : not p;

if P then A else B while q do begin A, q : not q end;
while r do begin B, r : not r end;

q = p; r p;

while (q) { A, q q ; }
while (r) { B, r r ; }

15
Uzroci nestrukturiranosti programa

Strukturiran program je relativan pojam, jer se odnosi na bazu. Ukoliko ne postoji referenca na neku
bazu, pojam strukturiranog programa odnosi se na programe koji su pisani bez upotrebe skokova ili
uopte koji se odnose na bazu izgraenu od sekvence, iteracije tipa while-do i selekcije tipa if-then-
else.
Postoji pet uzroka za nestrukturiranost programa, tj. postoji pet struktura takvih da ako se neka od njih
pojavi kao podgraf GTP onda je program nestrukturiran i mora se koristiti goto.

To su sledee strukture:

nepravilan put iza selekcije

iteracija sa vie izlaza

16
iteracija sa vie ulaza

iteracije koje se preklapaju

17
paralelne iteracije (ovo je inae i nepravilan program)

T T

Strukturiranje programa

Strukturiranje programa bavi se problemom eliminisanja skokova. Oni ostaju kao opcija jedino za
eventualno iskakanje iz nekog ciklusa. Skokove eliminiemo transformacijom programa, koji ih
koristi, u funkcionalno ekvivalentni, koji ih nema.
Postoje dva naina za ovu transformaciju: moemo napisati program iz poetka izbegavajui skokove
ili koristiti neku od metoda za transformaciju. Ovaj drugi metod je vie korien. Najpoznatija metoda
je metoda Aschroft-Manna i bazira se na dokazu strukturnih teorema.

Metoda Aschroft-Manna
Primer

Transformisaemo program dat sledeim GTP u funkcionalno ekvivalentan program.

0 To se radi na sledei nain:

prvo oznaimo vorove i okolinu;

A 1 uvodimo jednu upravljaku promenljivu, sukcesivnim proveravanjem


njene vrednosti izvrie se odgovarajui vor;

zbog ubrzanja procesa, vrednost idueg vora neemo traiti u matrici


2
T prelaza, ve se ta vrednost zadaje eksplicitno.
P

Ova metoda je izuzetno pogodna za automatizaciju.

3 B Bazira se na transformaciji nestrukturiranog programa (sa goto skokovima) u


program bez goto naredbi.
4 T
Q

18
Evo kako izgleda algoritam tog programa:

n1

T
n=1


A
n2

T T
n=2 P n1

n3

T
n=3


B
n4

T T
n=4 Q n2

n0


n=0
T

19
Pisanje programa bez upotrebe skokova

Ovo ostvarujemo hijerarhijskom (ili sukcesivnom) dekompozicijom programa. Najee se koristi top-
down razvoj programa, koji predstavlja vrlo prirodan nain za pisanje programa i uopte reavanje
kompleksnih problema. Program razbijamo na jednostavnija reenja koja se sukcesivno izvravaju.
Primer

Reiti sistem linearnih jednaina Ax = b reda n, Ax = b, n.

Sa teorijskog aspekta, jasno je da problem rastavljamo na problem unosa podataka, odreivanja


reenja i izdavanja rezultata. Naravno, svaki od ovih problema se moe dekomponovati na jo
jednostavnije problem, tako da dekompoziciju problema vrimo do nivoa naredbe programskog jezika.
Svaki od ovih nivoa, dok ne stignemo do naredbe, u stvari predstavlja komentar u programu koji
opisuje postupak reavanja problema.
REITI
Ax = b, n

ulaz: odrediti izlaz:


n, A, b reenja x

odrediti odrediti
A-1 x = A-1b

Reavanje sistema linearnih jednaina Ax = b, n.


U praksi, ulaz i izlaz neemo dekomponovati na jednostavnije probleme, jer su jasni sami po sebi.
Dodue, problem odreivanja reenja dekomponujemo na neke podkorake iji broj zavisi od toga kako
reavamo sistem. Na slici je dat jedan primer. Ispod ovog nivoa neemo ii kad je u pitanju ovaj
zadatak, jer su dalji postupci jednostavni.
Ovakav nain reavanja problema otvara mogunost paralelnog timskog rada, zbog toga to su poslovi
algoritamski nezavisni. Druga mogunost koja nam se otvara jeste korienje gotovog softvera.
Ova metoda vie nije toliko popularna, njen osnovni nedostatak je taj to je algoritamski orijentisana.

20
Strukture podataka

Pojam podatka
Najosnovniji pojam u raunarstvu uopte jeste pojam podatka. U memoriji raunara ne nalazi se nita
osim podataka (Van Neumann-ova koncepcija). Tu se misli na podatke u uem smislu rei (vrednosti
nekih promenljivih) i uputstva kako se ti podaci obrauju (programi). Pre konstruisanja ENIAC-a,
program je bio realizovan mehaniki.

Podaci odgovaraju diskretnim, zapisanim injenicama o fenomenima iz kojih se izvlae


informacije. Informacija je svako poveanje znanja.

Jedinice posmatranja zovemo entiteti. Entitet predstavlja stvar, subjekt, pojam ili dogaaj. Svaki
podatak vezuje se za neki entitet, pa podatak definiemo kao ureenu etvorku: (naziv entiteta, naziv
osobine, vrednost osobine, vreme). Na primer (Petar, teina u kg, 70, decembar 2002.).
Da bismo mogli manipulisati podacima, oni moraju biti ureeni. Podatke moemo definisati kao
skupove. Na primer, treba proveriti da li je data ulazna vrednost 10 elemenat skupa S = {-5, 10, 11, 12,
25}. Znai, treba kreirati odgovarajui algoritam koji e porediti datu vrednost sa elementima skupa,
tj. sa njegovim prvim, drugim itd. elementom. Postavlja se pitanje kako odrediti redosled elemenata,
ako znamo da je skup neureena struktura. Dakle, mora postojati bar jedno ureenje podataka. Ako
skup S snabdemo ureenjem, to vie nee biti skup. Ureen skup zove se struktura.
Bez strukture podataka nema programa.
Prvi programski jezici (Fortran, BASIC, Cobol) su bili prilino siromani strukturama podataka.
Strukture podataka i tipovi podataka su vrlo bliski pojmovi.
U Pascalu, Wirth je izjednaio po znaaju algoritamski i deklarativni deo (u kojem su date strukture
podataka). On je pokazao da je struktura podataka potpuno ravnopravna u odnosu na algoritam i da je
to stabilniji deo programa.

A1 A2 Ai An

Odnos algoritma i strukture podataka


Ako posmatramo gornju emu gde su prikazani algoritmi A1, A2, ..., An koji svi pristupaju nekoj
strukturi podataka S, jasno je da izmena nekog od algoritama Ai verovatno nee imati uticaj na drugih
n-1 algoritama. Ali svaka izmena strukture S e gotovo sigurno izazvati izmene u skoro svim
algoritmima.

21
Znaaj struktura podataka

Znaaj struktura podataka ilustrovaemo na primeru. Tu se jasno vidi koliki je uticaj struktura
podataka na algoritam.
Treba napisati Pascal program za manipulaciju sa matricama. Program treba da omogui pristup
elementima matrice, obradu tih elemenata, brisanje, dodavanje novih itd.
Postavlja se pitanje koju strukturu podataka e koristiti na program. Uzeemo da je matrica
definisana kao izvedeni pascalski tip array:
var A: array[1..m, 1..n] of <tip>;

U ovom sluaju, pristup elementima reen je na nivou programskog jezika:


A[i, j] := t;
m := A[k, l];

A takoe i obrada elemenata:


for i := 1 to m do for j := 1 to n do Obradi(A[i,j]);

Postavlja se pitanje, kako manipulisati matricom ako su m i n veliki brojevi. Npr, ako su m i n 1000,
naa matrica ima milion elemenata, to trai prilino velik memorijski prostor za smetanje tih
elemenata. Takoe, pristup i obrada elemenata moe trajati prilino dugo. Dakle, uiniemo znatno
ozbiljniji zahvat i razmotriemo druge naine za realizaciju strukture podataka.
U inenjeriji je vrlo est sluaj da u matricama sa velikim brojem elemenata, vrednost najveeg broja
tih elemenata je nula. Takve matrice se zovu retke matrice. Zato onda ne bismo obratili panju samo
na one elemente ija je vrednost razliita od nule?
Prvo, memorisaemo samo one ija je vrednost razliita od nule. Time smo matricu pretvorili u niz
slogova (p je mnogo manje od m i n.):
var B: array[1..p] of record
vrednost: T;
vrsta, kolona: integer
end;

Sada obraujemo samo elemente od B:


for k := 1 to p do obradi(B[k].vrednost);

Ovim smo smanjili trokove memorije i vreme obrade, ali sada pristup elementima A vie nije
jednostavan. Pristup elementu A[i,j] moemo reiti na primer na sledei nain:
k := 1; nadjen := false;
while (k <= p) and (not nadjen) do
if (B[k].vrsta = i) and (B[k].kolona = j) then
nadjen := true
else k := k + 1;
if nadjen then x := B[k].vrednost else x := 0;

Jo je komplikovaniji postupak za dodavanje novog elementa u A.

22
Definicija strukture podataka

Postoji mnogo definicija strukture podataka, od onih intuitivnih do sloenih, strogo matematikih
definicija (npr. ureen skup podataka).
Elemente jedne strukture podataka ine:

pre svega, skalari;

neke druge strukture podataka;

relacije kojima su povezani elementi date strukture.

Ureeni par (p, ) jeste skalar, gde je p podatak, a relacija. Poto je p izolovan podatak, ova relacija
jeste prazna relacija.
Relacije kojima su meusobno povezani elementi strukture mogu biti sasvim jednostavne ili pak vrlo
sloene. Na primer, niz je ureen relacijom susedstva definisanom izmeu dva elementa na sledei
nain {(xi, xi+1) | i = 1, 2, ..., n 1 }. Sloena relacija je na primer relacija predmet-nastavnik, gde jedan
predmet moe da predaje vie razliitih nastavnika, a sa druge strane svaki nastavnik moe da predaje
vie razliitih predmeta.
U daljem razmatranju posmatraemo relaciju elemenata nekog niza. Uzeemo da je ova relacija
netranzitivna. Definisaemo neposredno susedstvo kao (xi, xi+1) ili posredno kada je xi prethodnik xi+1 i
xi+1 je sledbenik xi.

Skalar je struktura podataka. Ako su S1 , S2 , ..., Sk strukture podataka i ako je


S S1, S2 , ..., Sk , tada je ureena n 1 -orka S , r1 , r2 , ..., rn struktura podataka, gde
su r1 , r2 , ..., rn relacije reda dva ili veeg u skupu S. U optem sluaju, ova n 1 -orka je
promenljiva u vremenu.

Grafovi
Za grafiko prikazivanje struktura podataka koriste se grafovi. Graf je skup
snabdeven jednom binarnom relacijom, tj. ureeni par (S, r). Sastoji se od
a1 a2
vorova (elementi skupa S). Relacije meu tim vorovima se prikazuju tako
to ih povezujemo granama koje ne moraju biti orjentisane. Orjentisan graf
zove se digraf (directed graph).
a3 a4
Digrafi su modeli jedne velike klase struktura podataka. Ne svih, jer se ne
mogu sve strukture prikazati na ovaj nain. U matematici, vorove grafa
oznaavamo kruiima, dok je kod struktura podataka uobiajeno da se za
oznake koriste pravougaonici. Za svaki vor na digrafu definie se ulazni Digraf
stepen vora, a to je broj grana koje ulaze u vor, i izlazni stepen vora, tj.
broj grana koje izlaze iz njega.

X1 X2 X3 ... Xn-1 Xn

Graf niza
23
Operacije nad strukturama podataka

Definicije ovih operacija nisu obuhvaene definicijom strukture podataka, jer ih intuitivno
pridruujemo toj definiciji. Razlog zbog ega podatke stavljamo u strukturu (strukturiramo ih,
ureujemo) je da bismo nad njima vrili neke operacije.
Postoje tri grupe operacija:

1. primitivne operacije su sasvim proste operacije i uglavnom se pojavljuju u sastavu drugih


operacija, tj. retko se pojavljuju kao izolovane. One se softverski esto svode na itanje
adrese. Treba spomenuti logiku operaciju Empty, koja vraa vrednost true ako je struktura
podataka prazna, tj. nema elemenata. Druga bitna je logika operacija Full, koja pokazuje
da li je memorijski prostor namenjen uvanju neke strukture podataka popunjen.
Treba primetiti da ove dve operacije nisu dualne, jer je Empty vezana za definiciju neke
strukture podataka, a Full sa neposrednom realizacijom te strukture u memoriji. Poto se jedna
struktura moe realizovati na vie naina, Full u jednom sluaju moe da ima smisla, a u
drugom ne;

2. osnovne operacije su najbitnije i slue za meusobno razlikovanje struktura podataka koje


imaju isti digraf. Postoje tri grupe ovih operacija: operacije pristupa, uklanjanja i
dodavanja. Ove operacije ulaze u definiciju strukture podataka.
Osnovne operacije su:
a. pristup to su semantiki jednostavne operacije. Svode se na uoavanje
(izdvajanje) nekog elementa iz strukture podataka radi itanja ili izmene podatka
(informacionog dela, tj. sadraja elementa). Izdvojeni element zove se tekui
element i postoji mehanizam za izmenu tekueg elementa.
Treba definisati kriterijum pristupa nekom podatku. To je predikat koji daje za tano
jedan element iz strukture. Ako se takav element moe nai u datoj strukturi, pristup je
uspean. U suprotnom, traenog elementa nema.
Postoje tri naina pristupa u okviru strukture podataka od kojih su svi ravnopravni, ali
nejednako zastupljeni. Kod pojedinih struktura podataka neki od ovih naina nisu
mogui ili jednostavno nemaju upotrebni znaaj. Nain pristupa moe biti:
i. prema poziciji: Kriterijum je mesto elementa. Odvija se na bazi zadate
pozicije elementa u strukturi podataka. Moe biti eksplicitan i implicitan
(pozicija se podrazumeva). (npr. indeksiranje niza)
ii. prema informacionom sadraju (asocijativni pristup, traenje): Kao
argument traenja daje se deo informacionog sadraja elementa i to takav
deo da potpuno definie dati element (jednoznano). Tada se algoritamski
proverava da li takvog elementa ima u datoj strukturi. Ako on postoji,
traenje je uspeno i na raspolaganje se stavlja ostatak informativnog
sadraja elementa. Deo informativnog sadraja koji jednoznano definie
svaki element naziva se klju;
iii. navigacija: Ovaj nain pretraivanja izgraen je oko pojma tekueg
elementa. Tekui element uvek postoji i njemu se implicitno pristupa;
b. uklanjanje se vri tako to se izvue traeni element iz strukture i potom se
auriraju veze, kako bi se uklonile sve prema sada nepostojeem elementu;

24
c. dodavanje se izvodi slino kao uklanjanje, jedina razlika je to se novi element
umee u strukturu, a veze se auriraju kako bi se i novi element naao rasporeen
na pravo mesto.
Sve tri osnovne operacije mogu biti definisane sa odreenim ogranienjima, a uklanjanje i
dodavanje uopte ne moraju biti definisane za neku strukturu.

3. sloene operacije su:


a. pretraivanje razlika izmeu ove i operacije traenja je u tome to rezultat ove
operacije moe biti vie od jednog elementa. Postupak se obavlja na bazi nekog
drugog dela elementa, koji se ne definie jednoznano.
b. sortiranje ureivanje (po pravilu) linijske strukture podataka po nekom
kriterijumu
c. kopiranje pravljenje kopije svih ili nekih elemenata strukture podataka
d. spajanje proces objedinjavanja dve ili vie struktura u jednu;
e. razlaganje proces rastavljanja jedne strukture podataka na dve ili vie.

Fizika realizacija struktura podataka

Neposredna fizika realizacija jedne strukture podataka moe biti:


o sekvencijalna i
o spregnuta.

Kod sekvencijalne realizacije neke strukture, zauzima se kompaktan memorijski prostor u koji se
smetaju elementi strukture.
Spregnuta realizacija neke strukture podataka izvodi se tako to se sprega izmeu elementa te strukture
i mesta njihovog smetanja u memoriji ostvaruje pokazivaima. Dakle elementi jedne strukture se
mogu smestiti na razliitim lokacijama u memoriji.
Jasno je da je kod sekvencijalne realizacije neke strukture maksimalni broj elemenata te strukture
ogranien, dok kod spregnute ista struktura teoretski moe imati neogranien broj elemenata. (U
stvarnosti nas ograniava samo koliina raspoloive memorije.) Sa druge strane, osnovne operacije se
obavljaju mnogo bre na strukturama koje su realizovane sekvencijalno, nego na onim realizovanim
spregnuto.
Svaka struktura podataka snabdevena je jednom dopunskom strukturom, koja sadri podatke o toj
osnovnoj strukturi i naziva se deskriptor. Deskriptore najee kreira kompajler, a ako oni ne postoje
u programskom jeziku, kreira ih sm programer.

25
Klasifikacija struktura podataka

Klasifikacija struktura podataka vri se na etiri osnovna naina:

o prema nivou apstrakcije

o prema mestu memorisanja

o prema tipu relacije

o prema ogranienjima u izvoenju osnovnih operacija.

Klasifikacija struktura podataka prema nivou apstrakcije


Prema nivou apstrakcije, strukture delimo na:

- logike pojavljuje se u modelu i nezavisna je od raunara, programa i memorije

- fizike predstavlja neposrednu realizaciju strukture u raunaru.

Nije isto kako logiki definiemo neku strukturu i kako je posle realizujemo u memoriji raunara. Za
jednu logiku strukturu moe da postoji vie naina njene fizike realizacije.
Primer

Uzeemo primer strukture matrice. Njena logika struktura sastoji se od vrsta i kolona. Sa druge
strane, memorija raunara je po svojoj prirodi jednodimenzionalna (linijska) struktura. Zbog toga
moramo smisliti odreeni nain kako da dvodimenzionalnu strukturu transformiemo u
jednodimenzionalnu i kasnije tu jednodimenzionalnu opet u dvodimenzionalnu. U Fortranu, na primer,
to je bilo reeno tako to se matrica razdvajala na vrste i onda su one upisivane sekvencijalno jedna iza
druge u memoriju.

a b c d
e f g h a b c d e f g h i j k l
i j k l

Primer logike i fizike strukture matrice

Klasifikacija struktura podataka prema mestu memorisanja


Prema mestu memorisanja strukture podataka delimo na

- operativne uvaju se u operativnoj memoriji raunara (npr. RAM)

- masovne uvaju se u masovnoj memoriji (npr. Hard Disc)

Izmeu operativnih i masovnih memorija postoje kvalitativne i kvantitativne razlike. (razlike u


veliini, brzini i permanentnosti)
26
Operativne strukture su manjeg kapaciteta, ali im se bre pristupa. ivot operativnih struktura je samo
dok traje program.
Masovne strukture su veeg kapaciteta, ali im se sporije pristupa. One su permanentne.

Klasifikacija struktura podataka prema tipu relacije


Ova klasifikacija je karakteristina samo za strukure podataka tipa (S, r), tj. za one iji je skup
snabdeven samo jednom binarnom relacijom. Ovakvih struktura ima mnogo i za sve se moe
konstruisati odgovarajui digraf.
Postoje tri vrste struktura i to su:

1. linearne strukture imaju digraf, koji zadovoljava dva uslova: svi vorovi osim tano
jednog imaju ulazni stepen jedan i svi osim tano jednog imaju izlazni stepen jedan.
Drugaije reeno, svaki element osim jednog ima tano jednog prethodnika i svaki element
osim jednog ima tano jednog sledbenika. Ovaj odnos prethodnik-sledbenik je
fundamentalan za linearne strukture podataka.
Posebna varijanta linearnih struktura su tzv. cirkularne strukture, gde svi vorovi imaju ulazni
stepen jedan i izlazni stepen jedan.

2. strukture tipa stabla njihov digraf zove se stablo. U stablu postoji tano jedan vor s
ulaznim stepenom nula. U sve ostale vorove ulazi tano jedna grana. Takoe, ovaj digraf
je slabo povezan, to znai da su svaka dva vora povezana nekim putem bez obzira na
orjentaciju grana. Bitna karakteristika je da svaki element strukture osim jednog (korena)
ima tano jednog prethodnika, a svaki (osim listova) ima jednog ili vie sledbenika. Dakle,
prethodnik jeste funkcija, dok sledbenik nije.

3. mrene strukture podataka svaki element ima proizvoljan broj prethodnika i


sledbenika. vorovi mrenih struktura su slabo povezani.

Klasifikacija operativnih struktura (prema ogranienjima u izvoenju osnovnih


operacija)
Pojedine strukture podataka ne omoguavaju neke osnovne operacije (uklanjanje, dodavanje, pristup).
Prema ovim ogranienjima strukture podataka mogu biti:
statike ne postoji uklanjanje i dodavanje

poludinamike definisane su sve osnovne operacije, uz specifian pristup

dinamike definisane su sve osnovne operacije, ali na raun brzine.

27
Statike strukture podataka
Nizovi

Nizovi mogu biti statiki i dinamiki. Ovde se govori o statikim nizovima.


- najstarije i najznaajnije strukture podataka
- zovu se i viedimenzionalne strukture
Niz iji su elementi skalari jeste vektor, a niz iji su elementi vektori je matrica.

Nizovi su jedinstvene linearne strukture. Oznaavamo ih kao ureen par A = (S(A), r(A)),
gde je S(A) skup, a r(A) binarna relacija definisana nad tim skupom.

Uklanjanje i dodavanje nisu definisani, dok je pristup dozvoljen svakom elementu niza. Pristup
elementima je fleksibilan i brz, jer je pozicija elementa unapred poznata. Mogue su sve tri vrste
pristupa. Pristup prema poziciji je najznaajniji i ostvaruje se prema indeksu pozicije.

Kod nizova postoji podgrupa koja se naziva multi-indeksna (vieindeksna) struktura i nju
definiemo rekurzivno na sledei nain:

Vektor je multi-indeksna struktura reda jedan. Multi-indeksna struktura reda k je niz


Nk S N , r N , u kojem su elementi skupa S N
k k k multi-indeksne strukture reda
k 1.

Fizika realizacija
Niz se u programskim jezicima realizuje sekvencijalno.
Deskriptor niza moe da sadri indikator tipa strukture, naziv tog niza i tip elementa, a mora da sadri
adresu poetka niza, opseg niza i veliinu jednog elementa niza u osnovnoj adresnoj jedinici.
X: array[-5..4] of char;
V X
adr(X[-5])
x[-5] x[-4] ... x[3] x[4]
-5 4
Realizacija niza u memoriji char 1
Deskriptor niza

28
Neka je niz B definisan na sledei nain:
B: array[p..k] of T; (p je najmanja, a k najvea vrednost indeksa niza)

Adresa elementa kojem pristupamo u optem sluaju odreuje se tako to se sabere adresa poetka
niza sa proizvodom rastojanja tekueg elementa od poetka niza i veliine jednog elementa.
adr(B[i])=adr(B[p])+adr(i-p)*l(T).

Pristup elementima multi-indeksne strukture moe se ubrzati ako je adresa unapred poznata. Za to se
koriste dve metode, metoda linearizacije i metoda Iliffe-ovih vektora.
Metoda linearizacije svodi se na seenje matrice na vrste ili kolone. Ovaj metod predvia da se
primeni jedna formula, koja nam odmah daje adresu elementa.

Neka je M niz definisan na sledei nain:


M: array[p1..k1, p2..k2, ..., pn..kn] of T;

onda bi se adresa niza raunala na sledei nain:


n
adr M j1 ,..., jn adr M p1 ,..., pn l T jm p m Dm
m 1

Prvi nain za izraunavanje D m je ako seemo matricu na vrste:


Dm = (km + 1 pm + 1 + 1) Dm + 1, Dn = n, m = n1, n2, ..., 1 rekurzija unazad.

Drugi nain je ako matricu seemo na kolone:


Dm = (km 1 pm 1 + 1) Dm 1, D1 = 1, m = 2, 3, ..., n rekurzija unapred.

Metodu Iliffe-ovih vektora koristimo ako elimo veliku brzinu obrade, a pri tom to to ova struktura
trai neto vie memorije ne predstavlja problem. Ovu strukturu programer mora sam da realizuje, jer
nije sastavni deo nijednog programskog jezika.
X: array[2..3, -1..1, -2..-1] of T;

Iliffe-ovi vektori se retko programiraju na Pascalu, ve na nekom drugom programskom jeziku tipa
Assemblera. To se radi, na primer, na C-u koji ima brzinu priblinu brzini Assemblera. C nudi i tu
prednost to se za donji indeks niza podrazumeva 0, a ne 1 kao kod Pascala.
Kao i nizovi, Iliffe-ovi vektori najee imaju dve dimenzije, a retko kad vie od tri. Jedina razlika u
odnosu na strukturu niza je u tome to Iliffe-ovi vektori ne sadre adrese, ve samo vrednosti
elemenata.
Za svaki nivo indeks se odvaja jedan Iliffe-ov vektor koji se svaki stvara na bazi raspona indeks.
Ako nivo indeks ne obuhvata nulu, stvaraju se pseudoelementi u kojima ne postoji nita. Za svaki
sledei nivo indeksa formiramo skup Iliffe-ovih vektora. Za poslednji nivo, ovaj se skup opet
dopunjava do nule.

29
deskriptor 0
1 a2 = a1 + 3l(T)
a1 2
3 x[3, 1, -2]

-1 -1 a3 = a2 + 1l(T)
0 0
1 1

2 2 2 2 2 2 3 3 3 3 3 3
x[2, -1, -2] -1 -1 0 0 1 1 -1 -1 0 0 1 1
-2 -1 -2 -1 -2 -1 -2 -1 -2 -1 -2 -1

Shema Iliffe-ovog vektora

Slogovi

- podseaju na nizove, svaki skalar moemo shvatiti kao slog sa jednim elementom.
- vrlo retko se pojavljuju izolovani, najee su elementi neke druge sloenije strukture.

Bitne osobine slogova su:

o semantika konvergencija element sloga sam za sebe nema semantiku. Postoji takva
meuzavisnost elemenata sloga, da oni samo zajedno imaju znaenje. Zbog te
meuzavisnosti, elemente sloga drugaije zovemo polja.
o pitanje relacije relaciju meu elementima sloga treba definisati tako da slog oslikava realni
model. Na primer, ako relaciju definiemo kao binarnu, a uzmemo da slog opisuje
taku u Dekartovom koordinatnom sistemu dolazi do neslaganja sa modelom. Ime
take je u relaciji sa apscisom, ali ne i sa ordinatom (ili obrnuto).

Slog R je ureeni par (S(R), r(R)), gde je S(R) skup polj, a r(R) relacija koja se sastoji od jedne
ureene n-torke u koju ulaze svi elementi iz S(R).
r( R) {( x1, ..., xn )}, n S ( R) (xi , x j S ( R)) i j xi x j
.

Dodavanje i uklanjanje elemenata nisu definisani, dok je pristup omoguen svakom elementu.
U optem sluaju, polja sloga su razliitog tipa.
Pristup poljima je definisan kao pristup po poziciji, dok druga dva pristupa nema. U skupu pozicija ne
postoji ureenje. Pristup prema poziciji obavlja se putem oznake pozicije. Ostvarujemo ga bijektivnim
preslikavanjem naziva polja nekog sloga na poziciju.
30
Fizika realizacija
Mogue su obe fizike realizacije. Sekvencijalna realizacija je osnovna. Jedina fizika realizacija,
podrana direktno od programskog jezika jeste sekvencijalna. Tipian primer izolovanog spregnuto
realizovanog sloga jeste deskriptor.

Sekvencijalna

Za sekvencijalnu realizaciju vezuje se problem razliitih vrsta polja u jednom slogu, pa na primer
polja mogu da imaju razliite duine. Dakle, svako polje se opisuje na razliit nain, pa se zato svako
opisuje posebno. Zbog ovoga je deskriptor sloga znatno sloeniji od deskriptora bilo koje druge
strukture podataka. Programski jezici po pravilu direktno podravaju strukturu sloga, tako da
programer najee ne dolazi u dodir sa deskriptorom.
Tipian deskriptor sadri podatke na nivou celog sloga. Na primer, moe da sadri indikator tipa
strukture (koji pokazuje da se radi o slogu), naziv sloga, adresu poetka memorijskog prostora
rezervisanog za skladitenje sloga, moe da sadri ukupnu duinu sloga, ali mora da sadri broj polja u
slogu.
A0 A0 + 30 A0 + 40 A0 + 42 A0 + 44
prezime ime indeks god_upisa god_studija

R STUDENT 5 A0
Informacije o svakom polju memoriu se posebno i to: indikator tipa
polja, duina u osnovnim adresabilnim jedinicama, naziv i adresa S 30 prezime 0
S 10 ime 30
polja. Adresa se moe dati relativno (u odnosu na poetak I 2 indeks 40
memorijskog prostora odvojenog za slog) ili apsolutno. Ako je tip I 2 god_upisa 42
nekog od polja slog, onda se ceo deskriptor tog sloga smeta u opis I 2 god_studija 44
datog polja. Ovo vai za svako polje.

Spregnuta

Kod spregnute realizacije, u opisu polja ne stoje adrese tih polja u memoriji, ve pokazivai na
dinamiku memoriju.
Kad se u programu trai pristup polju, prevodilac za dato ime polja pregleda deskriptor, trai opis
odgovarajueg polja, i tu proita njegovu adresu. Ako je ona data apsolutno, vraa njenu vrednost ili
rauna poetnu adresu polja, ako je adresa data relativno.

Primena
Primena sloga je kranje iroka i teko je izdvojiti neku za koju se moe rei da preovladava. Slogovi
su najee upotrebljavana struktura podataka. Pojavljuju se na svim nivoima obrade podataka, od
operativnih sistema do baza podataka. ak se i datoteka izvodi iz koncepta sloga.

31
Tabele
Struktura tabele predstavlja niz iji su elementi slogovi. Ova struktura ima posebne primene, jer
objedinjuje slogove.
Zavisno od tipa niza, tabela moe biti statika ili dinamika.
Tipine obrade su sortiranje i traenje na osnovu zadatog kljua (dakle pristup je po informacionom
sadraju). Traenje moe biti od prvog na dalje ili neka specifina vrsta traenja.

32
Poludinamike strukture podataka

Stek

- nareana gomila, drugi naziv LIFO red (Last In First Out)


- najvanija i najjednostavnija poludinamika struktura
- ima je svaki program, svi programski jezici imaju stek implicitno.

Stek je linearna struktura, tj. ureeni par L = (S(L), r(L)), gde je r(L) binarna relacija
definisana nad skupom S(L).

x , x i 1, 2, n 1 n 2
S L x1, x2 , ..., xn r L i 1 i
n2

Digraf steka:

Xn Xn-1 ... X1

o vrh steka (Xn) element bez prethodnika (u smislu relacije prvi)


o apsolutno dno steka (X1) element bez sledbenika (u smislu relacije poslednji)

Funkcije definisane za stek:


- Empty(L) pokazuje da li je neka struktura prazna
- Prvi(L) oitava prvi element strukture (oitava adresu vrha iz deskriptora steka)
- Full(L) proverava da li je stek prepunjen (vrh=Amax)

Definisane su sve tri osnovne operacije i vre se iskljuivo na vrhu (poslednje upisanom elementu).
Osnovne operacije:
- Top pristup
- Pop uklanjanje
- Push dodavanje
Sloene operacije:
- operacija pranjenja steka uklanjanje svih elemenata, dok Empty ne pokae true.
- funkcija za odreivanje broja elemenata

33
Fizika realizacija
Fizika realizacija obavlja se na oba standardna naina, i sekvencijalno i spregnuto.

Sekvencijalna

Osnovni nain realizacije je sekvencijalni, jer je bri to se i najvie oekuje od steka. Ovaj nain
uvodi ogranienje maksimalnog broja elemenata na steku. Podrazumeva se deskriptor koji se ne vidi.
Deskriptor sadri identifikator tipa strukture, naziv steka, najveu i najmanju adresu adresnog
prostora steka, adresu elementa na vrhu steka.
ST L
Amin vrh Amax
Amax Amin
vrh
Realizacija steka u memoriji opis elemenata
Deskriptor steka
Stek se protee od minimalne adrese do aktuelnog vrha.
Naini izvravanja operacija:
- Top proverava se da li je stek prazan (vrh<Amin) i ako nije, pomou primitivne funkcije
Prvi(L) pristupi se elementu na vrhu i on se oita. ( Empty(L), Prvi(L) )
- Pop proverava se da li je stek prazan i ako nije, vrh se umanji za veliinu jednog elementa
steka
- Push vrh se povea za veliinu jednog elementa steka, a zatim se upie sadraj novog
elementa

Overflow stanje kada se pokua upis u popunjen stek


Underflow stanje kada se pokua oitavanje ili uklanjanje elementa iz praznog steka

Spregnuta

Spregnuta fizika realizacija koristi se samo ako je neophodno da se izbegne overflow stanje. Ovakva
realizacija steka zove se fizika lista. Deskriptor mora da sadri adresu vrha, a elementi su
pokazivaima spregnuti po listi. Sve tri osnovne operacije su sporije.
S1

Primena S2
S3
Stek se primenjuje gde god se pojavljuje neka vrsta rekurzije. Na primer
kod prevoenja izraza na mainski jezik, izrazi se prvo prevode iz
infiksne (a+b) u postfiksnu (ab+) ili prefiksnu (+ab) notaciju (najee
u postfiksnu, jer je taj zapis izraza najsliiniji onom na mainskom
jeziku). Kod poslednje dve, za naznaavanje redosleda izvravanja
operacija, nisu potrebne zagrade. Standardni algoritam za prevoenje S3
izraza iz jedne u drugu notaciju ne moe da funkcionie bez steka. S2
S1
34 stek
Prilikom rekurzije, potprogramu se mora proslediti tzv. adresa povratka (na koju se upisuje rezultat
tog potprograma). Bez obzira koliko se duboko zalazi u rekurziju, da bi se vratili na prethodni nivo
uvek se koristi poslednja upisana adresa koja se potom ukloni. Zbog toga se koristi stek.
Dakle, druga veoma vana primena steka jeste razmena podataka meu programima i potprogramima.
Skup podataka, koji sadri stvarne parametre, i adresa povratka smetaju se na stek, odakle ih ita
potprogram. On rezultate obrade upisuje na stek, a povratni parametar na datu adresu.

potprogram A'
A A
A' P A' param.

kd
program param. program potprogram
A'

stek

Pascalski i fortranski nain razmene podataka izmeu programa i potprograma


Ranije se postupak razmene podataka odvijao u zaglavlju potprograma. Standardni fortranski nain
razmene parametara jeste da se adresa na kojoj se nastavlja izvravanje glavnog programa posle
zavretka potprograma upie na nultu relativnu adresu memorijskog prostora predvienog za
potprogram. Iza tog podatka bi se nalazili stvarni parametri, a tek potom instrukcije potprograma.
Ovaj nain razmene parametara bio je nefleksibilan i naruavao je princip da program i potprogram
budu relativno nezavisne celine. Takoe, rekurzija nije bila mogua, jer se nije moglo upisati vie
povratnih adresa.
Sada svi programski jezici predviaju iskljuivo stek za prenos parametara i zbog toga je stek jedna od
najvanijih struktura podataka.

Red

- drugi naziv red ekanja ili FIFO red (First In First Out)
- vrlo vana struktura podataka, formalno veoma lii na stek, ali je primena potpuno drugaija.

Red je linearna struktura, tj. ureeni par F = (S(F), r(F)) gde je S(F) skup, a r(F) binarna
linearna relacija definisana nad tim skupom.

x , x i 1, 2,, n 1 n 2
S F x1 , x2 , ..., xn r F i i 1
n2

Digraf reda:

Xn Xn-1 ... X1

Za element X1 kae se da je na poetku reda, a za element Xn da je na njegovom kraju.


35
Funkcije definisane za red:
- Empty(F)
- Prvi(F)
- Poslednji(F) vraa adresu poslednjeg elementa reda
Definisane su sve tri osnovne operacije. Pristup i uklanjanje vre se na prvom elementu, dok se
dodavanje uvek izvrava iza poslednjeg elementa.
Osnovne operacije:
- Front pristup prvom elementu
- Pop uklanjanje
- Push dodavanje
Sloene operacije:
- operacija pranjenja reda
- odreivanje broja elemenata u redu, tzv. duine reda

Fizika realizacija
Fizika realizacija obavlja se na oba standardna naina, i sekvencijalno i spregnuto.

Sekvencijalna

Osnovni nain realizacije je sekvencijalni, jer je bri to se i najvie oekuje od reda. Ovakvom
realizacijom izdvaja se kompaktan memorijski prostor, koji e sluiti za smetanje elemenata reda.
Deskriptor sadri identifikator tipa strukture, naziv reda, najveu i najmanju adresu adresnog prostora
reda, adrese elemenata na poetku i na kraju reda.

Amin poslednji prvi Amax RD F


Amax Amin
prvi
Realizacija reda u memoriji poslednji
opis elemenata
Deskriptor reda
Red se nalazi izmeu adrese prvog i poslednjeg elementa. Oba kraja reda su pokretna, tako da nastaje
problem lane prepunjenosti reda.
x

Uzeemo za primer red sa prethodne slike koji sadri jedan element x. Posle izvravanja operacije
umetanja Push(F,a) red sadri dva elementa, i novi element a se nalazi levo od elementa x.
Izvriemo Pop(F) ime smo uklonili element x. Izvriemo Push(F,b), pa Pop(F) i ako bismo sad
hteli da izvrimo Push(F,c) poto se nalazimo na poslednjoj raspoloivoj adresi element c ne moe da
se upie u red. Ispada da je red popunjen, a oigledno da sadri samo jedan element.
b

36
Zbog toga pribegavamo reenju da novi element upiemo na poetak reda. To obezbeuje mehanizam
za neometano pomeranje reda, koji se naziva cirkularna realizacija reda. Red moe da krui po
memorijskom prostoru, bez opasnosti da dodje do lane prepunjenosti. Na ovaj nain smo reili
problem lane prepunjenosti, ali pojavio se novi problem.
Za njegovo ilustrovanje, definisaemo funkciju Prethodni(x,F) na sledei nain:

x l (F) x A min
Prethodni ( x, F)
A max x A min

Ponimo da sukcesivno uklanjamo elemente iz reda sve dok ne bude Prvi(F) = Poslednji(x,F). Sada
red sadri jedan element i ako jo jednom izvrimo Pop(F) red e postati prazan. Sada je
Prethodni(Poslednji(F),F) = Prvi(F).
Ukoliko uradimo suprotno, tj. u red upisujemo nove elemente jedan za drugim dok ga ne popunimo,
opet emo dobiti da je Prethodni(Poslednji(F),F) = Prvi(F), ali u ovom sluaju to znai da je red pun.
Dakle, sada postoji nemogunost razlikovanja potpuno praznog od potpuno punog reda. Postoji
nekoliko naina da se rei ovaj problem.
1. U deskriptoru emo u svakom momentu memorisati aktuelni broj elemenata. Ovaj nain
usporava operacije, jer je posle svakog upisa ili brisanja elementa potrebno pristupiti
deskriptoru i aurirati broj elemenata. Dodue ova operacija nam omoguava da nam je u
svakom momentu na raspolaganju informacija o aktuelnoj duini reda.
2. U deskriptor se smeta statusno polje S koje moe da ima dve vrednosti, 0 i 1. Ako je S = 0 red
je prazan, u suprotnom red nije prazan. Tako statusno polje i funkcija Prethodni(x,F) zajedno
daju informaciju o tome da li je red prazan ili ne. Ovaj nain takoe usporava obradu reda, jer
se polje S mora aurirati posle svakog upisa ili brisanja.
3. Ovaj nain predvia da se upis onemogui na jednu memorijsku lokaciju koja se uvek nalazi
iza lokacije Poslednji(F). Ako se ta lokacija zove Prazna, onda je Prethodni(Poslednji(F),F) =
Prazna. Ukoliko sada elimo da ispraznimo niz, elemente briemo dokle god se
Prethodni(Poslednji(F),F) ne poklopi sa lokacijom Prvi(F). U red moemo dodavati elemente
sve dok Prethodni(Prazna,F) nije Prvi(F), tj. Prethodni(Prethodni(Poslednji(F),F),F) nije prvi.
Ovo znai da je red pun.

Spregnuta

Kod spregnute realizacije ne postoji problem prepunjenosti reda. Red se spregnuto realizuje u
deskriptoru, a elementi su meusobno povezani pokazivaima. Sve tri osnovne operacije su sporije.

Primena
Primena redova vrlo je iroka. Prilikom prenosa poruka na daljinu veoma je bitno da one stiu istim
redom kojim su poslate. Na raunaru redovi postoje kod ulaznih ureaja (npr. bafer tastature i mia),
red ekanja za tampa. Jo neki primeri su alteri sa redovima ekanja i benzinske pumpe sa
redovima automobila.

37
Dek

- red sa dva kraja.


- objedinjava osobine steka, reda i slinih struktura podataka. Ima linearnu strukturu.

Digraf deka:

...

Definisane su sve tri operacije i to na oba kraja, pa su krajevi ravnopravni. Oznaavamo ih kao levi i
desni kraj.

Fizika realizacija
Moe se realizovati i sekvencijalno i spregnuto.

Sekvencijalna

Kod sekvencijalne realizacije nastaju problem lane prepunjenosti deka, kao i nemogunost
razlikovanja potpuno praznog od potpuno punog deka. Dek cirkulie u oba smera.

Spregnuta

Osnovna realizacija deka je spregnuta realizacija, jer tada krajevi nisu ravnopravni, ve se kretanje
vri u jednom smeru. Kod spregnute realizacije nastaje problem uklanjanja krajnjeg elementa. Dok je
levi lako ukloniti, da bismo uklonili desni moramo proi kroz celu strukturu kako bismo doli do
njega.
Logika struktura deka je strogo simetrina, dok fizika nije. Kretanje se vri pomou dva pokazivaa,
a u sprezi su dva susedna elementa.

Sekvenca

- linijska struktura

Sekvenca je linearna struktura, tj. ureeni par D = (S(D), r(D)), gde je S(D) skup, a r(D)
binarna relacija.

Definisane su sve tri osnovne operacije. Pristup je dozvoljen svakom elementu, a uklanjaju se samo
svi elementi od jednom ili svi elementi poev od zadate pozicije. Dodavanje se uvek vri iza
poslednjeg elementa.
Definisane su sve tri vrste pristupa, ali najvie se koristi navigacija. Sekvenca uvek ima definisan
tekui element.
38
Dinamike strukture podataka

Jednostruko spregnuta lista

- drugaiji naziv linearna lista ili lanac


- najprostiji i najvaniji predstavnik dinamikih struktura podataka
- krajnje je fleksibilna

Jednostruko spregnuta lista je ureeni par P = (S(P), r(P)), gde je r(P) binarna relacija
definisana na skupu S(P).

Logika struktura jednostruko spregnute liste:

...

Element bez (neposrednog) prethodnika nazivamo prvi, a element bez (neposrednog) sledbenika,
poslednji u listi.

Funkcije definisane za jednostruko spregnutu listu:


- Prvi(P)
- Poslednji(P)
- Sledei(P,x)
Definisane su sve tri osnovne operacije. Pristup je dozvoljen svakom elementu, ukloniti se moe bilo
koji element i dodati se moe bilo gde.
Definisane su sve tri vrste pristupa. Pristup po poziciji je sporiji, jer za pristup k-tom elementu, mora
se pristupiti redom svakom do tog k-tog. Pristup prema informacionom sadraju isto zahteva da se
poe od prvog elementa dok se ne nae traeni.
Uklanjanje elementa x, ako je taj element na:
- prvoj poziciji zajedno sa x uklanja se i veza izmeu njega i njegovog sledbenika.
- poslednjoj poziciji zajedno sa x uklanja se i veza izmeu njega i njegovog prethodnika.
- nekoj drugoj poziciji po brisanju elementa x, uklanja se njegova veza sa prethodnikom i
sledbenikom, a za ova dva se uvodi nova veza.
Dodavanje elementa x na:
- prvo mesto tada se r(P) proiruje vezom (x,prvi element)
- poslednje mesto tada se r(P) proiruje vezom (poslednji element,x)
- neko drugo mesto (izmeu dva susedna elementa a i b) u r(P), veza (a,b) zamenjuje se vezama
(a,x) i (x,b)

39
Ako postoji sistem navigacije, kod uklanjanja i dodavanja treba voditi rauna o tekuem elementu.

Jo neke operacije vezane za jednostruko spregnutu listu:


- odreivanje broja elemenata
- formiranje kopije date liste
- spajanje dve ili vie lista u jednu
- dekompozicija liste na dve ili vie
- sortiranje liste prema sadraju elemenata

Jednostruko spregnuta lista mora se projektovati, tj. moramo imati u vidu za ega e se koristiti. Ako
napravimo jednu listu za vie namena, lista e biti sporija.

Fizika realizacija
Iskljuivo je spregnuta.

Primena
Upotrebljavaju se u najrazliitijim oblastima raunarskih nauka, od operativnih sistema do aplikativnih
programa. Mnogi redovi ekanja sa prioritetima (koriste se u operativnim sistemima) imaju strukturu
liste.

Dinamiki niz

- veoma fleksibilne strukture


- obuhvataju u sebi osobine jednostruko spregnutih listi i statikih nizova.
Imaju sve osobine statikih nizova, ali su uklanjanje i dodavanje definisani za bilo koji element.
Dakle, imaju sve osobine liste, s tim to je pristup po poziciji znatno bri, jer se pozicija moe lako
izraunati unapred.

Fizika realizacija
Iskljuivo je sekvencijalna. Moe doi do prepunjenosti.
Posle svakog uklanjanja i dodavanja moramo aurirati pozicije elemenata (iza ukonjenog ili dodatog
elementa), kako bismo imali pristup po poziciji kao i kod statikog niza. Zbog toga su ove dve
operacije relativno spore.

Primena
Najvanija primena vezana je za mehanizme rukovanja tekstom u programskim jezicima. Tip
podataka string ima osobine dinamikog niza.

40
Dvostruko spregnute liste

- zovu se i simetrine liste


- mogu se pojaviti i u cirkularnom obliku
- ova struktura nije linearna, omoguene su veze u oba smera

Dvostruko spregnuta lista je ureeni par: DP = (S(DP), r(DP)), gde r nije linearna relacija,
r r1 r2 , r1 r2 i a, b r 1 b, a r2 . Vidimo da su (S, r1) i (S, r2) jednostruko
spregnute liste.

Logika struktura dvostruko spregnute liste:

...

Fizika realizacija
Iskljuivo je spregnuta, pa se svaki element proiruje sa dva pokazivaa.

Treba voditi rauna da dvostruka lista (tj. lista sa dve relacije) nije isto to i dvostruko spregnuta lista.
Poto se relacija uspostavlja na bazi nekog kriterijuma, kod ovih drugih, jedna relacija je taj kriterijum,
a druga suprotan kriterijum. Kod dvostruke liste, jedan i drugi kriterijum ne moraju imati nikakve
veze.

Viestruko spregnuta lista


- multilista
- skup jednostruko spregnutih lista koje su formirane po razliitim kriterijumima. Kriterijumi su
meusobno nezavisni, svaki od njih generie po jednu spregnutu listu. Postoji vie razliitih relacija
meu elementima.

Viestruko spregnuta lista je ureena n+1-orka VP = (S(VP), r1, r2, ..., rn) gde je svaki ureeni
par (S, ri) jednostruko spregnuta lista i Si S(VP).

Svaki element ima onoliko pokazivaa, kojeg je reda lista. Unapred se zadaje koliki je red.
Logika struktura viestruko spregnute liste:

Primena
Koriste se kada treba vriti pretraivanje prema nekom kriterijumu.
41
Stabla

- drvo
- vana struktura podataka.
- modelira vie fundamentalnih odnosa iz realnog sveta (hijerarhijski odnosi, odnos opte-pojedinano,
postupak dekompozicije itd.).

Osnovna osobina stabla je da ono nije linearno. Stablo kao digraf zadovoljava sledee osobine:

postoji tano jedan vor ulaznog stepena nula;

u svaki vor osim jednog ulazi po jedna grana (svaki ima tano jednog prethodnika) i

digraf stabla je slabo povezan.

Element u stablu ulaznog stepena nula zove se koren stabla. vorovi digrafa iz kojih ne izlazi nijedna
grana zovu se listovi. Put u stablu je ureena n-torka (x1, x2, ..., xn), gde su xi vorovi. Duina puta
jednaka je broju grana (n-1). Visina stabla odgovara broju vorova na najduem putu (n). Dakle,
visina stabla je duina najdueg puta uveana za jedan. U stablu postoji tano jedan put od korena do
bilo kog vora, tj. koren je povezan sa svim vorovima tano jednim putem. Najdui put u stablu uvek
poinje od korena i zavrava se u listu. Nivo vora jeste udaljenje vora od korena. Za stabla se ne
koriste termini prethodnik i sledbenik, ve nadreeni i podreeni. Red stabla odgovara najveem
broju podreenih u stablu. Podstablo ini vor sa svim svojim
podreenim vorovima.
1
Za ovo stablo koren je element 1, a listovi su elementi 3, 4, 5, 6 i 7. Jedan
2 3 4 od puteva ine elementi 1, 2 i 5, duina ovog puta je 2 i ovo je jedan od
najduih puteva. Visina stabla je 3. Nivo korena je 0, nivo elemenata 2, 3
5 6 7 i 4 je 1, a nivo elemenata 5, 6 i 7 je 3. Red ovog stabla je 3.
Postoje dva specijalna stabla, to su puno i kompletno stablo. Kompletno stablo reda n je takvo da svi
vorovi stabla (osim listova) imaju izlazni stepen n. Kod punog stabla su svi putevi od korena do
nekog lista iste duine. Ove dve osobine niti ukljuuju niti iskljuuju jedna drugu, tj. nisu ni u kakvoj
korelaciji. Najbolje je da je stablo tako konstruisano da je to blie punom i kompletnom stablu. Tada
je operacija pristupa najbra.
Stablo koje pokazuje dobre osobine (tj. priblino je puno i kompletno) zove se balansirano stablo. Za
bilo koja dva vora istog nivoa balansiranog stabla vai da se broj elemenata u njihovim podstablima
razlikuje najvie za jedan element. Postoje algoritmi za balansiranje stabla i oni zavise od konkretnog
stabla. Primenom ovih algoritama ubrzavamo pristup elementima stabla.

Stablo kao struktura podataka


Stablo ne moemo odmah precizno definisati, jer se meu stablima nalaze raznorodne strukture.
Jedina zajednika osobina im je da imaju digraf tipa stabla. Dodavanja i uklanjanje su u naelu svuda
dozvoljeni, ali ipak postoje ogranienja koja zavise od sluaja do sluaja. Npr. postoji ogranienje reda
iznad kojeg se ne moe ii.
42
Karakteristike stabla su:
1. digraf je tipa stabla;

2. dozvoljen je pristup svakom elementu i

3. dodavanje i uklanjanje mogui su kod svakog stabla, ali su definisani u skladu sa


specifinim osobinama datog stabla.

Teorijski, pristup stablu mogu je na sva tri naina. Meutim, pristup po poziciji je specifian i redak,
jer stablo nije linearna struktura. Zbog toga se koristi pristup po informacionom sadraju ili
navigacija.
Najee se elementima stabla pristupa po informacionom sadraju i ovaj se pristup obavlja po kljuu.
Poinje se od korena i na bazi argumenta traenja (kljua) i informacionog sadraja elementa odluuje
se kojem se sledeem elementu pristupa. Sutinski problem koji se ovde javlja je taj da podreeni
elementi istog nivoa ine skup koji nije ureen i ne moemo odrediti prvi, drugi itd. element. Dakle,
ne moe se formirati algoritam koji bi proverio da li se u tom skupu nalazi dati klju.
Zbog toga u strukturi podataka mora postojati ureenje skupa podreenih nekog elementa. Ovo
ureenje moe biti eksplicitno i tada je definisano na nivou logike strukture podataka i moe biti
implicitno kada se definie na nivou fizike realizacije. Na osnovu ove osobine stabala, vri se njihova
osnovna podela. Eksplicitno ureenje imaju tzv. n-arna stabla, a implicitno tzv. generalisana
(uoptena) stabla. Jedina zajednika osobina za ove dve vrste je ve pomenuti digraf tipa stabla.

n-arna stabla
n-arna stabla reda n su ona gde svaki element ima tano nula ili n podreenih. U svakom trenutku,
postoji n mesta rezervisanih za smetanje podreenih elemenata nekog elementa, ali ta mesta ne
moraju biti uvek popunjena (mogu biti nezauzeta). Zbog toga skup podreenih nivoa n ima osobine
statikog niza.

n-arna stabla imaju dve karakteristike:


1. ureenje u skupu podreenih postoji ve na logikom nivou
2. imaju zadati red najvei dozvoljeni red podreenih

X X X

A B B A A B C

Prva dva stabla su binarana i razlikuju se po rasporedu elemenata, a tree je ternarno, ali pozicija C
nije zauzeta

Ureenje postoji da bi se mogao formirati algoritam prolaska kroz stablo. Kod definisanja reda stabla
mora se rei koliko je n.

43
Iz ovih definicionih osobina sledi definicija n-arnog stabla.

n-arno stablo je ureena n+1-orka Tn = (S(Tn), r1, r2, ..., rn) sledeih karakteristika: (S(Tn), r1
r2 ... rn) ima osobine digrafa stabla i [(a,b) ri (a,c) ri] (b = c), i = 1, 2, ..., n.

Iz prve osobine vidimo da grane koje vode iz istog nadreenog u podreene su rasporeene u n
relacija.
Druga osobina n-arnih stabala govori da razliiti podreeni ne mogu biti u istoj relaciji sa jednim
nadreenim, tj. sve relacije n-arnog stabla su funkcije. Tako je samim zadavanjem relacije za svaki
element odreen njegov podreeni.
Pristup je u svakom trenutku dozvoljen svakom elementu. Nema pristupa prema poziciji. Najvanija
vrsta pristupa je prema informacionom sadraju. Dodavanje i uklanjanje mogu uvek da se izvre, s tim
to kada se dodaje, mora se voditi rauna da je broj podreenih manji od n. Slino vai i kod
uklanjanja.
Meu n-arnim izdvajaju se binarna stabla.

Binarna stabla
Binarna stabla su posebna vrsta n-arnih, to su n-arna stabla reda dva. Broj pristupa je log2 n . Za ova
stabla postoji jedna vrlo karakteristina izvedena operacija. To je obilazak binarnog stabla.
A

B C

D E F

G H I

Logika struktura jednog binarnog stabla

Obilazak binarnog stabla


Prilikom obilaska stabla pristupa se svakom njegovom elementu u cilju obrade. Postoji vie naina da
se to uradi.
Moe se pristupati redom elementima na svakom nivou. Na primer, za dato stablo redosled bi bio
ABCDEFGHI. Ovakav nain pristupa nije est, jer je prilino komplikovan za izvoenje.

Za obilazak, u principu, postoji est algoritama od kojih su po dva dualna. Svaka od ovih metoda jeste
rekurzivna i svaka se rekurzija bazira na tri stavke:
1. pristup datom elementu;

2. njegovom levom podstablu i

3. njegovom desnom podstablu.

44
Poto je redosled stavki proizvoljan, dobijamo est algoritama.
Obilazak sleva udesno izvodi se tako to se prvo pristupa levom podstablu (2), zatim elementu (1), pa
desnom podstablu (3). Proces uvek poinje od korena. Dakle, pristupa se korenu, ali se ovaj element
ne obrauje, ve se memorie u neku strukturu L (za nae stablo, memorie se A). Zatim se prelazi u
levo podstablo i opet se izvravaju koraci 2, 1 i 3. (Sada se memorie B, a u sledeem koraku D). Kada
smo stigli do elementa koji nema levo podstablo (G), obraujemo ga. Zatim obraujemo element koji
je poslednji memorisan u strukturi L (to je D za na primer). Obraujemo desno podstablo tog
elementa. (Posle ovog koraka potpuno je obraeno podstablo D.) Nastavimo li ovim algoritmom,
potpuno emo obraditi celo stablo. Dakle, redosled obrade je sledei: GDHBAECIF.
Oigledno je da je pomenuta struktura L LIFO red, tj. stek. Njega moemo kreirati sami (sporiji
nain) ili se ono kreira implicitno, zbog rekurzija.
Obilazak sa vrha ka dnu pretpostavlja da je redosled obrade: element, levo podstablo, desno
podstablo. Za na primer, elemente obraujemo sledeim redosledom: ABDGHCEFI.
Obilazak sa dna ka vrhu se vri na sledei nain: levo podstablo, desno podstablo, element. Na
primeru, redosled je: GHDBEIFCA.

Fizika struktura
Poto je logika struktura stabla data na bazi fizike, fizika struktura stabla je odreena definicijom.
Zbog nelinearnosti, n-arna stabla realizujemo iskljuivo spregnuto. Svi elementi imaju isti oblik i
svaki od njih proirujemo sa tano n pokazivaa. Deskriptor stabla, izmeu ostalog, mora sadrati
adresu korena. Za realizacuju binarnog stabla koristi se specijalna tehnika proivki (niti).

B C

D E F

G H I

Fizika struktura binarnog stabla sa prethodne slike


U specijalnom sluaju, stablo moemo realizovati sekvencijalno. Takvo stablo mora biti binarno i ne
sme biti veliko.

Tehnika proivki (niti)


Tehnika proivki je specijalna tehnika koja nije deo standardne realizacije. Ona ubrzava proces
obilaska binarnog stabla. Primenjuje se za sluaj da se procenjuje est obilazak binarnog stabla
(intenzivan obilazak). Svrha upotrebe niti je da se eliminie stek i jo vie ubrza obilazak. Postoje dve
varijante ove tehnike, tj. proivke mogu biti jednostruke ili dvostruke.

45
Kod jednostrukih niti bira se jedan od pokazivaa pridruenih elementu (npr. desni). Ako taj
pokaziva ima vrednost (pokazuje na neki podreeni element), ostavlja se kakav jeste. Ako je njegova
vrednost NULL (ne pokazuje ni na ta, na slici oznaeno *) onda se koristi za obilazak i u njega se
upie adresa sledeeg kojem treba pristupiti. Dakle, prilikom obilaska prate se pokazivai i proivke.
A

B * C

D * E * F *

* G * * H * * I *

Stablo sa pokazivaima i jednostrukim nitima


Da nam proivke ne bi pravile probleme prilikom obrade (tada se mora znati koji je element
nadreeni, a koji podreeni i to nam govore iskljuivo pokazivai), svaki element proirujemo
statusnim bajtom. On pokazuje da li je u pitanju pokaziva ili proivka (ima vrednost 1 kada je u
pitanju pokaziva, a drugu kada je proivka).
Kod tehnike dvostrukih niti koriste se oba pokazivaa (ako su slobodni). Ovaj drugi se koristi za
obilazak u obrnutom smeru, tj. pokazuje na prethodni. Dvostruke proivke koristimo samo pod
pretpostavkom da se koriste oba smera obilaska, tj. da algoritam obilazi strukturu stabla u oba smera.

Sekvencijalna fizika realizacija


Kao to je ve reeno, ovako se realizuju iskljuivo binarna stabla koja nisu velika i nepromenjiva su, i
to iskljuivo kada je stablo neka pomona struktura.
Kao i za druge sekvencijalno realizovane strukture, odvaja se odreen memorijski prostor sa
relativnim adresama. Koren se smeta u relativnu adresu 1. Za ostale elemente vai da ako je taj
element na relativnoj adresi k, njegov levi podreeni se smeta na adresu 2k, a desni na 2k+1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
A B C D E F G H I
Sekvencijalna realizacija stabla iz primera
Prednost ovakve realizacije je u tome to se adresa elementa moe izraunati unapred, pa je pristup
direktan.
Ovakav nain realizacije koristi se za statina stabla ili za ona koja se vrlo malo proiruju (zbog vrlo
lakog prepunjavanja memorije).
Binarna stabla se retko realizuju samostalno, ve kao pomona struktura nekih algoritama (npr.
algoritma sortiranja).

46
Binarno stablo pristupa
Binarno stablo pristupa obezbeuje brz pristup prema informacionom sadraju (svi elementi imaju
klju).
Definiciona karakteristika je da za svaki element vai:
U njegovom levom podstablu su elementi sa kljuem manjim od njegovog, a u desnom su oni sa
kljuem veim od njegovog.

Primer binarnog stabla pristupa, gde su kljuevi prirodni brojevi


Svaki pristup poinje od korena (klju 13). U svakom trenutku, na osnovu elementa i njegovog kljua,
zna se kojim putem treba nastaviti traenje. Ako traimo element sa kljuem 25, on sigurno nije u
levom podstablu, jer je broj 25 vei od 13, tako da traimo u desnom.

Dodavanje se vri na mestu lista i novododati element je uvek list (postaje list). Ako element ve
postoji u stablu, dodavanje se ili zabranjuje ili se izvri neki alternativni postupak. Element 24 bi bio
dodat u levo podstablo broja 25.

Uklanjanje je mogue za svaki element, ali ne sme doi do prevezivanja grana. Ako bismo uklonili
element 19, moemo ga samo iskljuiti, jer ne moemo prevezati 17 i 25 na 13. Za uklanjanje postoje
dve metode:

1. logiko brisanje svaki element se snabdeva binarnim statusnim poljem vai - ne vai. Broj
elemenata ne moe da opada bez dodatnih mehanizama funkcije, koja ponovo formira stablo

2. fiziko brisanje treba uoiti 3 mogue situacije kod uklanjanja:

1) uklanja se list element se pronae i ukloni, a pokaziva nadreenog se stavi na NULL

2) element koji se uklanja ima 1 podreeni tada se izvodi prevezivanje

3) element koji se uklanja ima oba podreena pronae se element koji treba da se ukloni, u
prvoj fazi pree se u njegovo levo podstablo, a onda se prate desni pokazivai sve dok je to
mogue i sadraj elementa koji sigurno nema desni pokaziva, njegov sadraj se prepie u
onaj koji treba da se ukloni, a on se izbacuje iz strukture (dualno, kada se pree u njegovo
desno podstablo).

Fizikim brisanjem struktura se zaista smanjuje, pa su njene prednosti to to nema nevaeih


elemenata, utroak memorije je smanjen i brzina pristupa je velika, ali zato se javlja potreba da
povremeno izvrimo algoritam za balansiranje stabla (zbog novih dodavanja).

47
Uoptena (generalisana) stabla

Uopteno stablo je struktura podataka G ( S (G), r(G)) sa sledeim karakteristikama:

- digraf uoptenog stabla je stablo


- osnovne operacije: Dodavanje i uklanjanje elementa mogue je na bilo kojem mestu.

Navigacija je osnovna vrsta pristupa.


Dozvoljeno je ukloniti svaki element. U praksi
uklanjanje se vri tako to se ukloni vor i svi
njegovi podreeni. Element se moe dodati
bilo gde. U praksi se najee dodaje na mesto
lista novododati element postaje list.
Skup podreenih elemenata istog elementa nema ureenje na nivou logike strukture.
U fizikoj realizaciji takvo ureenje postoji.

Fizika realizacija

Postoji 2 naina fizike realizacije:


1. Prirodna realizacija

Svaka veza iz logike strukture direktno modeluje pokazivaima. Format elementa bi bio promenjiv,
to predstavlja problem. Reenje je da se ogranii broj pokazivaa. Unutar jednog elementa, svaki
element realizujemo sekvencijalno. Do overflow-a moe da doe na nivou svakog elementa (ako smo
stavili mali broj pokazivaa. Prirodna realizacija obezbeuje bre realizacije nego binarna, ali to nije
dovoljan razlog da se u praksi opredelimo za nju.

2. Binarna realizacija

Binarna realizacija po cenu neto sporijih operacija eliminie problem prekoraenja. Jednostruko
spregnuta lista reava taj problem (skup podreenih se organizuje u listu). Svaki element ima dva
pokazivaa. Osnovna ideja binarne realizacije je obezbediti pristup listi polazei od nadreenog.
Nadreeni se proiri jednim pokazivaem na listu svojih podreenih i drugim, koji pokazuje na listu
podreenih kojoj taj element pripada. U ovom sluaju pristup je neto sporiji, jer se svaki put mora
proi kroz celu listu podreenih.
48
Testiranje programa

Testiranje programa je jedna od najvanijih i najskupljih aktivnosti u toku ivotnog ciklusa programa.
Netestirani program nije zavren.
Pod testiranjem programa podrazumevaju se dve meusobno nezavisne delatnosti:
1. provera usklaenosti implementacije (realizacije) programa sa njegovom specifikacijom
2. provera ponaanja programa u eksplatacionim uslovima

Specifikacija je dokument u kome pie ta program treba da radi.


Prva stavka povezuje se sa osobinom korektnosti programa. Korektnost programa je mera u kojoj
program zadovoljava specifikaciju.
Druga stavka povezuje se sa robustnou programa. Robustnost programa podrazumeva imunost na
razne poremeaje, a pogotovo na neregularne, pa i neoekivane, ulazne podatke.
Korektnost i robustnost su ortogonalne osobine, tj. ne uslovljavaju jedna drugu.

Greka (error) predstavlja aktivnost unoenja koda koji je pogrean. Rezultat greke je defekt (fault)
pogrean kod. Izvravanje pogrenog koda vodi ka otkazu (failure). Otkaz moe, a ne mora da se
manifestuje. Manifesetacija otkaza zove se incident. Sve ovo zajedno zove se greka (bug).

Postoje dva pristupa za testiranje programa:


1. konstruktivno testiranje cilj je dokazati da program nema greaka
2. destruktivno testiranje cilj je dokazati da program ima greaka

Program se pokree odreenim skupom ulaznih podataka, koji nazivamo testna stavka (test case).
Prilikom testiranja od svih moguih testnih stavki biramo jedan skup kojim proveravamo program i
njega nazivamo test skup (test set).

Destruktivno testiranje

Postoji 3 strategije destruktivnog testiranja:


1. analiza programa bez primene raunara
2. strategija bele kutiije strukturno testiranje
3. strategija crne kutije funkcionalno testiranje

Druga i trea strategija baziraju se na korienju raunara.


49
Analiza programa bez primene raunara
Ovaj postupak obavljaju ljudi bez primene raunara. Radi se o analizi izvornog koda, ime se
otkrivaju oiglednije greke. Prednost analize programa je u tome to se istovremeno sa otkrivanjem,
greke i lociraju. Ova strategija je i prilino jeftina. Nedostatak je teko otkrivanje suptilnih greaka.
Moe da se vri na dva naina (metode):
a) analiza programskih segmenata (code inspection)
b) simulacija izvravanja programa (walkthrough)

Kod analize programskih segmenata program delimo prema nekom kriterijumu na logiki zaokruene
celine. Obavlja se timski, po sesijama. Tim ine 4 osobe: moderator (priprema i vodi sesije), autor
programa i dva iskusna programera (vre testiranje). Testiranje sopstvenog programa treba izbegavati.
Kod metode simulacije izvravanja programa, proveravaju se trase izvravanja programa. Obavlja se
timski, a tim ine 3 do 5 lanova: moderator, sekretar (vodi evidenciju), izvoa testa i jo eventualno
dva iskusna programera. Jedan lan tima je i autor programa.

Strategija bele kutije


Strategija bele kutije bazira na izvornom kodu. Na osnovu njega dolazimo do testnih stavki. Strategija
bele kutije obezbeuje relativno veliku verovatnou za nalaenje greaka (vie nego strategija crne
kutije), ali je tee doi do testnih stavki.
Postoji 5 metoda:
1. prekrivanje naredbi formirati testne stavke tako da svaka naredba (funkcionalni vor) bude
bar jednom izvrena.
2. prekrivanje odluka testne stavke se projektuju da svaka odluka pojedinano treba da bude
izvrena jednom sa DA i jednom NE.
3. prekrivanje uslova testne stavke se projektuju tako da svaki uslov jednom proe sa DA,
jednom sa NE. Pod uslovom se podrazumeva svaki potpredikat u odlukama.
4. prekrivanje odluka-uslova svaka odluka treba da proe jednom sa DA, jednom sa NE i svaki
uslov jednom sa DA, jednom sa NE.
5. prekrivanje viestrukih uslova predvia da se ulaznim podacima izazove prekrivanje svih
kombinacija potpredikata u svim odlukama ponaosob. Ovo se postie kreiranjem
istinitosnih tablica za svaku odluku i izborom takvih ulaza da sve mogue kombinacije
iz tablica budu ostvarene

Primer
if ( (A>1) && (B==0) ) X=X/A;

if ( (A==2) || (X>1) ) X+=1;

50
Blok dijagram algoritma:

Test skup:
1. A=2 B=0 X proizvoljno

2. A=0 X=0 B proizvoljno


A=2 B=0 X proizvoljno
3. A=1 B=0 X=3
A=2 B=1 X=0
4. A=2 B=0 X=3
A=1 B=1 X=1
5
A=2 B=0 X=3 A>1 B=0 A=2 X>1
A=2 B=1 X=1 ne ne ne ne
ne da ne da
A=1 B=0 X=3 da ne da ne
A=1 B=1 X=1 da da da da
Istinitosna tablica

Strategija crne kutije


- crna kutija naziv za sistem ije detalje ne znamo.
Analiza crne kutije bazira na specifikaciji. Iz nje se formiraju testne stavke. Izvodi se tako to se
analizira ulaz i analizira reakcija sistema na taj ulaz.
Postoje dve metode:
1. testiranje metodom graninih vrednosti
2. testiranje metodom klasa ekvivalencije

51
Testiranje metodom graninih vrednosti

Ova metoda izgraena je na empirijski utvrenoj injenici da je verovatnoa greke najvea na


graninim vrednostima ulaznih podataka, odnosno u njihovoj okolini. Uslov testiranja je da svaka
ulazna promenljiva bude u opsegu od minimalne do maksimalne vrednosti. Cilj je da se smanji test
skup.
Postoji 4 varijante ove metode:
1. totalni test graninih vrednosti
2. parcijalni test graninih vrednosti
3. totalni test robustnosti
4. parcijalni test robustnosti
Glavna prednost ove metode je jednostavan algoritam za izbor testnih stavki, koji se lako moe
automatizovati. Njeni nedostaci su slabija efikasnost (na izlazu nisu svi ishodi pokriveni) i to to
nemamo nikakav stepen slobode prilikom izbora konkretnih ulaznih vrednosti.

Kod testa graninih vrednosti (1. i 2.) svrha je da se umanji test skup. Za svaku ulaznu promenljivu
izdvajaju se 5 karakteristinih vrednosti:
1) ymin najmanja vrednost
2) ymin+ vrednost koja je vea od ymin, ali joj je bliska sa dozvoljene strane
3) ynom nominalna vrednost (ima ulogu neutralne vrednosti)
4) ymax vrednost koja je manja od ymax, ali joj je bliska sa dozvoljene strane
5) ymax najvea vrednost
Totalni test graninih vrednosti podrazumeva da se svakoj od ulaznih promenljivih dodeli ovih 5
vrednosti. Ukupan broj testnih stavki za svaku promenljivu iznosi 5 n, gde je n broj promenljivih. Ako
je ovo preveliko predvien je parcijalni test graninih vrednosti. On podrazumeva da se uoi jedna
promenljiva, koja dobija svih 5 vrednosti, dok preostale n-1 imaju nominalnu vrednost. Ovo se ponovi
za svaku promenljivu. Svaka od promenljivih kad proe kroz ovih 5 vrednosti generisae 5 stavki.
Ukupan broj testnih stavki je 5n(n1)=4n+1 (izbacujemo sluajeve kada su sve vrednosti nominalne,
tj. n1 sluaj, dok jedan ostaje).

Test robustnosti (3. i 4.) slian je testu graninih vrednosti, s tim to podrazumeva i dva invalidna
ulazna podatka (u blizini granice, ali sa nedozvoljene strane).
1) ymin-
2) ymin
3) ymin+
4) ynom
5) ymax-
6) ymax
7) ymax+
Totalni test robustnosti ima 7n testnih stavki, dok parcijalni test robustnosti ima 6n+1 testnu stavku.
52
Primer
Na ulazu se zadaju tri vrednosti (a,b,c), koje su celobrojne i u rasponu od 1 do 100. Proveriti da li one
ine trougao i kakav.
1 a, b, c 100 Postoji 4 mogua izlaza: jednakostranini, jednakokraki, raznostrani, nije trougao.
redni broj t.s. a b c rezultat

1 1 50 50 jednakokraki
2 2 50 50 jednakokraki
3 50 50 50 jednakostranini
4 99 50 50 jednakokraki
5 100 50 50 nije trougao
6 50 1 50 jednakokraki
7 50 2 50 jednakokraki
8 50 99 50 jednakokraki
9 50 100 50 nije trougao
10 50 50 1 jednakokraki
11 50 50 2 jednakokraki
12 50 50 99 jednakokraki
13 50 50 100 nije trougao

Dokumentacija uz test parcijalnih graninih vrednosti

Testiranje metodom ekvivalencije


Ova metoda omoguuje da mi biramo ulazne n-torke. Cilj je smanjenje test skupa.
Poznato je da e bilo koja ulazna n-torka, ije su vrednosti iste, proi kroz istu trasu (trasa je jedan od
moguih puteva izvravanja programa). Ideja ove metode je lociranje takvih skupova testnih stavki za
koje se program jednako ponaa (klase ekvivalencije) i testirati samo po jednog predstavnika svake
klase. Svi elementi iste klase izazivaju prolazak kroz istu trasu. Test skup formiramo tako to uzmemo
po jednu n-torku iz svake klase. Najvei problem je postaviti kriterijume za odreivanje ovih skupova.

Postoji 3 varijante ove metode:


1. totalni test klasa ekvivalencije
2. parcijalni test klasa ekvivalencije
3. test robustnosti (klasina metoda klasa ekvivalencije)

Metoda klasa ekvivalencije je monija, ali i komplikovanija za primenu, tj. nedostatak je to klase
ekvivalencije mogu da se formiraju na mnogo naina (ne postoji jedinstven algoritam za ovaj
postupak).

Neka je V skup ulaznih promenljivih, a X(V) skup njihovih moguih vrednosti. X(V) se deli na klase i
bira se po jedan predstavnik, tj. ureena n-torka promenljivih.

53
Primer
V={p, q, r, z, i, j}
X(V) generie sve mogue vrednosti ovih 6 promenljivih.
Neka p, q i r generiu tri klase ekvivalencije: X1,X2 i X3, z generie etiri: Y1,Y2,Y3 i Y4, a i i j dve: Z1
i Z2. U odnosu na ureenu trojku (p,q,r) program se moe ponaati trojako, u odnosu na z na etiri
naina i u odnosu na par (i,j) na dva naina. Iz svake klase izdvojimo po jednog predstavnika i
program pokreemo sa svih 6 vrednosti.

U parcijalnom testu posmatramo promenljivu koja ima najvie vrednosti. Broj testnih stavki jednak je
najveem broju predstavnika.
redni
br. y x z

1 y1 x1 z1
2 y2 x2 z2
3 y3 x3 z1
4 y4 x1 z2

Test plan za parcijalni test

Totalni test metodom klasa ekvivalencije podrazumeva korienje Dekartovog proizvoda predstavnika
klasa, tako da bi se test skup sastojao od stavki iz skupa {x1, x2 , x3} { y1, y2 , y3 , y4} {z1, z2} .

Kod testa robustnosti testne stavke formiraju se primenom dva pravila:


sastaviti validne ulaze kombinovanjem predstavnika klasa ekvivalencije tako da broj testnih
stavki bude to manji
za svaku od vrednosti kada ih kombinujemo samo jedna vrednost sme da bude invalidna, a sve
ostale validne.

Primer
Na ulazu se zadaju tri vrednosti (a,b,c), koje su celobrojne i u rasponu od 1 do 100. Proveriti da li one
ine trougao i kakav. 1 a, b, c 100 Postoji 4 mogua izlaza.
I kriterijum:
U ovoj varijanti kreemo od rezultata (pokrijemo sve izlaze). Kriterijum za formiranje ovog test skupa
je rezultat. Broj kriterijuma nije ogranien, jedino treba voditi rauna da ti kriterijumi budu nezavisni.
redni br. a b c rezultat

1 9 2 3 nije trougao
2 20 20 20 jednakostranini
3 70 50 50 jednakokraki
4 6 7 8 raznostrani

54
II kriterijum:
Obavlja se analizom ulaza i izlaza, odnosno definiemo relacije koje se mogu uspostaviti izmeu
komponenata trojke (a,b,c), a imajui u vidu mogue izlaze.
F1 {( a, b, c ) | a b c}
F2 {(a, b, c ) | a b c}
F3 {( a, b, c ) | a b c}
F4 {(a, b, c ) | a c b}
F5 {( a, b, c ) | a b c}

Testiranje sloenih programa

Program koji je modularno izveden, mora se i modularno testirati. Naravno, ako je svaki od modula
ispravan, to ne znai da e biti i ceo sistem. Posebno se mora testirati razmena podataka meu
modulima, koja je izuzetno podlona grekama.
Program se nikada ne testira kao celina, jer je postupak izuzetno komplikovan. Takoe, ako neka od
destruktivnih metoda ustanovi greku, nju je prilino teko locirati.

Osnovi problem kod testiranja sloenih programskih sistema je redosled testiranja pojedinih modula.
Pri tom, za testiranje svakog modula, potrebno je imati na raspolaganju:
1. modul (module) iz kojih se poziva testirani modul
2. modul (module) koje testirani modul poziva

Posmatrajmo program ija je modularnost prikazana na sledeem dijagramu:

Primer modularnog programa

Da bismo testirali modul A, moramo imati testirane module P, D i E. Za testiranje P potrebni su nam
testirani A, B i C. Iz ovoga izgleda da program treba testirati kao celinu, to naravno ne treba raditi.
Reenje je pisanje pseudomodula (zamena za module), koji oponaaju rad stvarnih modula. Na
primer, pseudomodul P za testiranje modula A (PA) razlikuje se od pseudomodula P za testiranje
modula B (PB). PA ima maskirane pozive za B i C, a PB za A i C.

55
Pseudomoduli moraju biti jednostavni (kako bi se izbegle eventualne greke u pseudomodulu) i
moraju verno oponaati rad odgovarajuih modula u delu koji je relevantan za testiranje.

Za testiranje sistema sa slike, potrebno je dopisati 14 pseudomodula, i to:

za testiranje P, potrebne su zamene AP, BP i CP


za testiranje A, potrebne su zamene PA, DA i E A
za testiranje B, potrebna je zamena PB
za testiranje C, potrebne su zamene PC, FC i GC
za testiranje D, potrebna je zamena AD
za testiranje E, potrebna je zamena AE
za testiranje F, potrebna je zamena CF
za testiranje G, potrebna je zamena CG

Postupak se moe pojednostaviti primenom inkrementiranog testiranja. Ove metode koriste


injenicu da ve testiran modul moe pod odreenim uslovima da bude iskorien za testiranje njemu
nadreenih i podreenih modula.

Postoje dve metode inkrementiranog testiranja:


- inkrementirano testiranje sa vrha ka dnu testiranje poinje od glavnog modula i izvodi se u
redosledu od nadreenih modula ka podreenim
- inkrementirano testiranje sa dna ka vrhu testiranje poinje od modula najnieg nivoa i
sprovodi se u redosledu od podreenih ka nadreenim modulima.

Za testiranje sistema sa slike, testiranje s vrha ka dnu izgledalo bi na sledei nain:

za testiranje P, potrebne su zamene AP, BP i CP


za testiranje A, potreban je modul P, zamene BP i CP i zamene DA i EA
za testiranje B, potreban je modul P i zamena AP i CP
za testiranje C, potreban je modul P, zamene AP i BP i zamene FC i GC
za testiranje D, potreban je modul A i zamena EA
za testiranje E, potreban je modul A i zamena DA
za testiranje F, potreban je modul C i zamena GC
za testiranje G, potreban je modul C i zamena FC

Prednosti metode testiranja s vrha ka dnu su u tome to se u ranim fazama raspolae skeletom
programa, to moe da poslui u demonstracione svrhe i to to se tokom testiranja sve vreme ima uvid
u globalno ponaanje programa. Glavni nedostatak je to je izrada zamena za nadreene (zbog
postojanja maskiranih poziva drugih modula) tea od izrade zamena za podreene.

56
Za testiranje sistema sa slike, testiranje s dna ka vrhu izgledalo bi na sledei nain:

za testiranje D, potreban je pseudomodul AD


za testiranje E, potreban je pseudomodul AE
za testiranje F, potreban je pseudomodul CF
za testiranje G, potreban je pseudomodul CG
za testiranje A, potrebni su moduli D i E i pseudomodul PA
za testiranje B, potreban je pseudomodul PB
za testiranje C, potrebni su moduli F i G PC
za testiranje P, potrebni su moduli A, B i C

Prednost ovog naina testiranja je u tome to je interakcija izmeu modula i njegovog nadreenog
pseudomodula relativno jednostavna, naroito zato to je broj nadreenih obino 1. Nedostatak metode
lei u injenici da se programski sistem kao celina pojavljuje tek na kraju testiranja.

57

You might also like