You are on page 1of 282

Predrag S.

Stanimirovi

Osnove programiranja

1. OSNOVNI ELEMENTI PROGRAMSKIH JEZIKA....................................................5


1.1. Pseudojezik kao opti model viih programskih jezika................................................................................5 1.2. Azbuka jezika....................................................................................................................................................6 1.3. Identi ikatori i rezervisane re!i......................................................................................................................." 1.#. $onstante.........................................................................................................................................................% 1.5. Promenljive.......................................................................................................................................................& 1.6. $omentari.........................................................................................................................................................& 1.". 'truktura programa.......................................................................................................................................1( 1.7.1. Struktura programa u Pascal-u.................................................................................................................10 1.7.2. Struktura programa u C............................................................................................................................10

2. TIPOVI PODATAKA................................................................................................11
Statika i dinamika tipi acija......................................................................................................................1! 2.1. $on)ept slabih tipova....................................................................................................................................13 2.2. $on)ept jakih tipova podataka.....................................................................................................................1# 2.3. *kvivalentnost tipova.....................................................................................................................................15 2.#. *lementarni tipovi podataka.......................................................................................................................15 2.".1. Celo#rojni tipovi $%nteger ili int&..............................................................................................................1' 2.".2. (ealni tip $)loat ili real&............................................................................................................................17 2.".!. *ogiki tip podataka.................................................................................................................................17 2.".". +nakovni tipovi........................................................................................................................................17 2.".,. -a#rojivi tip podataka..............................................................................................................................1. 2.".'. %ntervalni tip podataka..............................................................................................................................20 2.5. *lementarni tipovi podataka u nekim jezi)ima...........................................................................................2( 2.,.1. /ipovi podataka u je iku C.......................................................................................................................20 Celo#rojni tipovi u C....................................................................................................................................21 (ealni tipovi podataka u C...........................................................................................................................22 /ip c0ar.........................................................................................................................................................2! 1onver ija tipova podataka i kast.................................................................................................................2" 2rste konver ije tipova.................................................................................................................................2, 1onstante......................................................................................................................................................2, Si eo) operator..............................................................................................................................................2' Osnovne aritmetike operacije ....................................................................................................................2' Operacije pore3enja i logike operacije.......................................................................................................24 2.,.2. Standardni tipovi podataka u Pascal-u.....................................................................................................2. Celo#rojni tip $%nteger&.................................................................................................................................2. /ip realni0 #rojeva $(eal&.............................................................................................................................!0 +nakovni tip podataka $C0ar&.......................................................................................................................!0 2.6. +iskretni tipovi podataka u programskim jezi)ima..................................................................................31 2.'.1. -a#rojivi tipovi u programskim je icima.................................................................................................!1 Pascal............................................................................................................................................................!1 Programski je ik C.......................................................................................................................................!1 2.'.2. Podintervalni tipovi..................................................................................................................................!1

Predrag S. Stanimirovi

Osnove programiranja

2.". Anonimni tipovi..............................................................................................................................................31 2.%. ,potreba t-pede iskaza u ..........................................................................................................................32

3. ULAZ I IZLAZ PODATAKA.....................................................................................32


3.1. ,laz i izlaz u jeziku PA'.A/........................................................................................................................32 3.2. ,laz i izlaz podataka u jeziku .....................................................................................................................35 !.2.1. 5unkcije print)$& i scan)$&.........................................................................................................................!, !.2.!. 6irektive pretprocesora u C......................................................................................................................!4

4. OSNOVNE UPRAVLJAKE STRUKTURE..........................................................39


#.1. 'ekven)a naredbi i blok.................................................................................................................................#( ".1.1. 7lo#alne i lokalne promenljive................................................................................................................"1 #.2. 'truktura selek)ije.........................................................................................................................................#2 ".2.1. %)-t0en struktura........................................................................................................................................"! ".2.2. %)-t0en-else struktura................................................................................................................................"" ".2.!. Operator uslovnog prela a u C.................................................................................................................". #.3. 'truktura viestruke selek)ije.......................................................................................................................5( ".!.1. 2i8estruka selekcija u Pascal-u.................................................................................................................,2 ".!.2. 2i8estruka selekcija u C............................................................................................................................,! #.#. Programske petlje...........................................................................................................................................56 ".".1. Programske petlje u Pascal-u....................................................................................................................,. ".".2. Programske petlje u C .............................................................................................................................'2 90ile nared#a u C........................................................................................................................................'2 Primena :0ile ciklusa u o#radi teksta u C...................................................................................................', 6o-:0ile nared#a u C...................................................................................................................................'' 5or nared#a u C............................................................................................................................................'' #.5. 0ormaliza)ija repetitivnih iskaza..................................................................................................................6& #.6. 1asilni prekidi )iklusa...................................................................................................................................."1 #.". 1aredbe za bezuslovno grananje.................................................................................................................."2 ".7.1. O nake $la#ele&.........................................................................................................................................72

5. POTPROGRAMI....................................................................................................75
5.1. 0unk)ije..........................................................................................................................................................."" ,.1.1. 5unkcije u je iku Pascal...........................................................................................................................77 ,.1.2. Po iv i de)inicija )unkcija u C..................................................................................................................74 (eturn nared#a..............................................................................................................................................7. Prototip )unkcije...........................................................................................................................................40 ,.1.!. ;akroi u je iku C.....................................................................................................................................4" 5.2. Pro)edure........................................................................................................................................................%5 ,.2.1. Procedure u je iku Pascal.........................................................................................................................4, *iste parametara............................................................................................................................................4' 5.3. Prenos argumenata.........................................................................................................................................%" ,.!.1. Prenos po vrednosti $Call #< 2alue&.........................................................................................................47 Po iv po vrednosti u C..................................................................................................................................44

Predrag S. Stanimirovi

Osnove programiranja

,.!.2. Prenos po re ultatu $Call #< (esult&.........................................................................................................4. ,.!.!. Prenos po vrednosti i re ultatu $Call #< 2alue-(esult&............................................................................4. ,.!.". Prenos po re)erenci $Call #< (e)erence&..................................................................................................4. (e)erence $upuivai&....................................................................................................................................1 Po iv po adresi pomou poka ivaa u C.......................................................................................................2 Prenos po re)erenci koristei re)erence u C==.............................................................................................., 2raanje vi8estruki0 vrednosti.......................................................................................................................' 2raanje vi8estruki0 vrednosti po re)erenci...................................................................................................4 Predavanje po re)erenci> #og e)ikasnosti...................................................................................................... 5.#. 2lobalne promenljive kao parametri potprograma..................................................................................1(5 Primeri........................................................................................................................................................104 5.5. 3ekurzivni potprogrami..............................................................................................................................11( ,.,.1. Primeri rekur ivni0 )unkcija u C............................................................................................................11! 5.6. Implementa)ija potprograma......................................................................................................................116 5.". ')ope rules 4domen va5enja6.......................................................................................................................11% 5.%. 7emorijske klase u ....................................................................................................................................11& ,.4.1. ?ivotni vek o#jekata.........................................................................................................................121 ,.4.2. 2rste o#jekata po @ivotnom veku.....................................................................................................121 Statiki i automatski o#jekti.......................................................................................................................121

6. STRUKTURNI TIPOVI PODATAKA.....................................................................122


6.1. Polja u programskim jezi)ima....................................................................................................................122 6.1.1. Anonimne de ini)ije strukturnih tipova..................................................................................................123 Pimeri upotre#e ni ova u Pascalu...............................................................................................................12" 6.2. 8ednodimenzionalni nizovi u ....................................................................................................................132 6.3. 9eza izme:u nizova i pointera u ...............................................................................................................136 '.!.1. Pointerska aritmetika..............................................................................................................................1!4 6.#. 9iedimenzionalna polja..............................................................................................................................13& '.".1. 2i8edimen ionalni ni ovi u Pascal-u......................................................................................................1!. '.".2. 2i8edimen ionalni ni ovi u C.................................................................................................................1"! '.".!. Poka ivai i vi8edimen ionalni ni ovi u C............................................................................................1". 6.5. ';3I12<9I ................................................................................................................................................15( '.,.1. Stringovi u Pascal-u................................................................................................................................1,0 Operacije nad stringovima u Pascalu..........................................................................................................1,1 '.,.2. Stringovi u C...........................................................................................................................................1'! %nicijali acija i o#rada stringova.................................................................................................................1'! /estiranje i konver ija nakova..................................................................................................................1'" Aitavanje i ispis stringova........................................................................................................................1'' Standardne )unkcije a rad sa stringovima u C..........................................................................................1'. 6.6. =apisi.............................................................................................................................................................1"1 6.". 'trukture i nabrojivi tipovi u )...................................................................................................................1"" '.7.1. Blanovi strukture....................................................................................................................................177 '.7.2 Strukturni tipovi i poka ivai u C...........................................................................................................17. '.7.!. 6e)inicija strukturni0 tipova pomou t<pede)........................................................................................142 '.7.". Anije.......................................................................................................................................................1.0

Predrag S. Stanimirovi

Osnove programiranja

6.%. 1abrojivi tip podataka u )...........................................................................................................................1&1 6.&. =apisi sa varijantama...................................................................................................................................1&3 '...1. -ared#a :it0 u Pascal-u.........................................................................................................................1.4 6.1(. 'kupovi........................................................................................................................................................1&& 6.11. +atoteke.......................................................................................................................................................2(# '.11.1. 6atoteke u je iku Pascal.......................................................................................................................20, 6atoteni tipovi podataka...........................................................................................................................20, Pove ivanje datotene promenljive sa datotekom......................................................................................20' 1reiranje datoteka.......................................................................................................................................20' 1reiranje datoteka.......................................................................................................................................207 /ekstualne datoteke.....................................................................................................................................21' Standardne datoteke %-PA/ i OA/PA/....................................................................................................220 6irektni pristup datotekama.......................................................................................................................220 '.11.2. Pristup datotekama u c..........................................................................................................................22' Otvaranje i atvaranje datoteka..................................................................................................................22' 5unkcije )getc$& i )putc$&.............................................................................................................................224 )putc............................................................................................................................................................224 5unkcije )print)$& i )scan)$&.........................................................................................................................2!0 5unkcija )eo)$&............................................................................................................................................2!1 )close> C)closeall.........................................................................................................................................2!" )eo)..............................................................................................................................................................2!" Dinarne datoteke.........................................................................................................................................2!" 6irektni pristup datotekama.......................................................................................................................2!'

7. DINAMIKE STRUKTURE PODATAKA..............................................................236


".1. 'tati!ke i dinami!ke strukture podataka...................................................................................................236 ".2. Pokaziva!i u jeziku Pas)al..........................................................................................................................23" 7.2.1. 6inamike promenljive..........................................................................................................................2!7 7.2.2. Poka ivake promenljive........................................................................................................................2!7 ".3. +inami!ke strukture podataka u jeziku Pas)al........................................................................................23% ".3. +inami!ke strukture podataka u .............................................................................................................261 4.!.1. -i ovi i dinamika alokacija memorije u C...........................................................................................2'2 7.!.2. Eednostruko pove ane liste.....................................................................................................................2'7 7.!.!. Stekovi....................................................................................................................................................2'4 7.!.". Are3ene pove ane liste...........................................................................................................................27" 4.!.,. 2a@nija svojstva poka ivaa...................................................................................................................27, 7.!.,. Dinarno sta#lo.........................................................................................................................................27. ".#. Pointeri na unk)ije u ................................................................................................................................2%1 /iteratura.............................................................................................................................................................2%2

Predrag S. Stanimirovi

Osnove programiranja

1. Os !" # $%$&$ '# ()!*)+&s,#- .$/#,+


1.1. Ps$01!.$/#, ,+! !(2'# &!1$% "#2#- ()!*)+&s,#- .$/#,+
+a de)iniciju pseudoje ika kao op8teg modela vi8i0 programski0 je ika neop0odno je o#u0vatiti sledee etiri )undamentalne komponenteF $1& /ipovi i strukture podataka koje pseudoje ik podr@avaF - statiki skalarni tipovi> - statiki strukturirani tipovi> - dinamiki tipovi sa promenljivom veliinom> - dinamiki tipovi sa promenljivom strukturom. $2& Osnovne kontrolne strukture koje se primenjuju u pseudoje ikuF - sekvenca> - selekcije> - ciklusi> - skokovi. $!& Operacije ula a i i la a podatakaF - ula Gi la podataka a ula no-i la ne ure3aje i datoteke> - konver ija tekstualnog i #inarnog )ormata podataka. $"& /e0nike modulari acije programaF - ne avisne )unkcije i procedure> - interne )unkcije i procedure> - rekur ivne )unkcije i procedure. (a ni tipovi podataka neop0odni su u programskim je icima da #i podra@avali ra ne tipove o#jekata koje sreemo u matematikim modelima. Podaci mogu #iti skalarni ili strukturirani. Podatak je strukturiran ukoliko se sastoji od vi8e komponenti koje se nala e u preci no de)inisanom odnosu. Primer strukturiranog o#jekta je pravougaona matrica realni0 #rojeva kod koje svaki element predstavlja komponentu koja se nala i u odre3enom odnosu sa ostalim komponentama. Podatak je skalaran ukoliko se ne sastoji od jednostavniji0 komponenti. Eedan od skalarni0 tipova podataka na svim programskim je icima je celo#rojni tip podataka. *ako je uoiti da a svaki tip podataka postoje operacije koje a nji0 va@e> a ne va@e a druge tipove podataka. /ako je na primer inver ija matrice operacija koja se ne primenjuje na celo#rojne skalare> na isti nain kao 8to se operacija celo#rojnog deljenja dva skalara ne mo@e primeniti na matrice. Osnovne kontrolne strukture su i u etno va@na komponenta svakog programskog je ika. Pomou nji0 se odre3uje redosled i vr8avanja operacija koje raunar o#avlja. Osnovni tipovi kontrolni0 struktura su sekvenca kod koje se instrukcije o#avljaju onim redosledom kojim su napisane u programu> i strukture sa grananjima> ciklusima i skokovima. 7rananja se koriste a i #or jednog od vi8e paralelni0 programski0 segmenata> ciklusi reali uju ponavljanje nekog ni a instrukcija> a skokovi slu@e a kontrolisani i la i petlji> i programa $kraj rada& i a reali aciju pojedini0 osnovni0 kontrolni0 struktura.

Predrag S. Stanimirovi

Osnove programiranja

6a #i se omoguilo komuniciranje raunara sa spoljnim svetom potre#ne su instrukcije ula a i i la a podataka. Pri tome podaci mogu da se uitavaju sa tastatura ili i datoteka i da se prenose na ekrane> 8tampae> ili u datoteke. Pod datotekom $file& podra umevamo osnovnu organi aciju podataka koja o#u0vata proi voljan #roj manji0 jednoo#ra no strukturirani0 celina koje se na ivaju apisi. Svaki apis sadr@i podatke o jednoj jedinici posmatranja. -a primer> apis mo@e sadr@ati strukturirane podatke o motornom vo ilu $tip> godina proi vodnje> snaga motora> vlasnik> itd.&> dok skup veeg #roja ovakvi0 apisa predstavlja datoteku motorni0 vo ila. Hl)anumeriki podaci $slova> ci)re i specijalni naci& se uvaju u tekst datotekama> a numeriki podaci mogu da se uvaju #ilo u tekstualnoj #ilo u kompaktnoj #inarnoj )ormi. +a sve podatke postoji )ormat kojim se odre3uje nji0ova struktura> a pri nekim prenosima podataka mo@e se automatski vr8iti i konver ija )ormata. Hko #i programi #ili )ormirani kao neprekidni ni ovi instrukcija> onda #i kod veliki0 programa #ilo nemogue ra umevanje naina rada celine> i na taj nain #ilo #l natno ote@ano odr@avanje programa. +#og toga su me0ani mi modulari acije programa od vitalnog naaja a uspe0 nekog programskog je ika. Pod modulari acijom programa podra umevamo ra #ijanje programa na manje $naje8e ne avisne& celine kod koji0 su preci no de)inisani ula ni i i la ni podaci> kao i postupak kojim se na osnovu ula ni0 podataka do#ijaju i la ni podaci. A ovu grupu spadaju nerekur ivne i rekur ivne )unkcije i procedure. Prilikom de)inicije je ika pola i se od osnovnog skupa nakova> a #uke je ika koja sadr@i sve avr8ne sim#ole $terminalne sim#ole& je ika. -ad a #ukom je ika de)ini8u se ostali elementi je ika> konstante> re ervisane rei> identi)ikatori od koji0 se dalje grade druge slo@ene sintaksne kategorije kao 8to su na primer opisi> upravljake nared#e i slino.

1.2. A/30,+ .$/#,+


H #uka je ika predstavlja osnovni skup sim#ola $ nakova& od koji0 se grade sve sintaksne kategorije je ika. Droj nakova a #uke se o#ino ra likuje od je ika do je ika i kree se od najmanje "4 do .0 nakova. H #uka programskog je ika o#ino o#u0vata skup veliki0 i mali0 slova engleske a#ecede> skup dekadni0 ci)ara i odre3eni skup specijalni0 nakova. 6ok je kod stariji0 programski0 je ika #ilo uo#iajeno da se koriste samo velika slova $na primer 5O(/(H- %2&> danas se skoro redovno do voljava i ravnopravno kori8enje mali0 slova a#ecede. H #uke programski0 je ika se najvi8e ra likuju po skupu specijalni0 nakova koje o#u0vataju. -aredni0 nekoliko primera a #uka programski0 je ika to ilustruje. Azbuka jezika Pas)al>
slovoF IHI J I D I J I C I J I 6 I J IKIJ I 5 I J I 7 I J I LI J I l I J I E I J I 1 I J I*I J I;I J I-I J IOI J IPI J IMI J I(I J ISI J I/I J IAI J I2I J I9I J INI J IOIJ I+IJ IaI J I#I J IcI J IdI J IeI J I)I J IgI J I0I J IiI J IjI J IkIJ IlI J ImI J InI J IoI J IpI J IPI J IrI J IsI J ItI J IuI J IvI J I:I J IQI J I<I J I I J ci)raF I0I J I1I J I2I J I!I J I"I J I,I J I'I J I7I J I4I J I.I specijalni nakF I=I J I-I J IRI J IGI J ISI J ITIJ IUIJ IVIJ IWI J I.I J I>I J IXI J IFI J IYI J I$I J I&I J IZI J ITUI J ITSI J IUSI J IFSI J I. .I J re ervisana reF IH-6I J IH((HOI J IDK7%-I J ICHSKI J ICO-S/I J I6%2IJ I6O9-/OI J 6OI J IK*SKI J IK-6I J I 5 % * KI J I 5O (I J I5A -C/%O-I J I7O/OI J I %5I J I%-I J I*HDK*I J I;O6I J I-%*I J I-O/I J IO5I J IO(I J IPHC1K6I J IP(OCK6A(KI J IP(O7(H;I J I(KCO(6I J I(KPKH/I J ISK/I J I/LK-I J I/OI J I/OPKI J IA-/%*I J I2H(I J I9L%*KI JI9%/LI

Azbuka jezika .
velika slovaF H J DJ C J 6J KJ 5J7JLJ%JEJ1J*J;J-J0J PJMJ (JSJ/JAJ2J9JNJOJ+ ci)reF 0 J1 J2J!J"J,J'J7J4J. specijalni naciF = J - J R J G JS J $ J & J [ \ ] \ V J W \ T J U J Z J I J ^ J _ J \ J ` J a J J J J C J Y J b J c \ > \ X J F J d nak #lanko mala slovaF a J # J c J d J eJ )JgJ0J iJ jJ kJlJmJnJoJpJPJrJsJ tJuJ vJ:JQJ<J

Predrag S. Stanimirovi

Osnove programiranja

Azbuka jezika Ada


velika slovaF H J DJ C J 6J KJ 5J7JLJ%JEJ1J*J;J-J0J PJMJ (JSJ/JAJ2J9JNJOJ+ ci)reF 0 J1 J2J!J"J,J'J7J4J. specijalni naciF I J _ J a J Z J $ J & J R J = J > J - J G J F J X J T J S J U J C J G nak #lanko mala slovaF a J # J c J d J eJ )JgJ0J iJ jJ kJlJmJnJoJpJPJrJsJ tJuJ vJ:JQJ<J drugi specijalni naciF ^ J e J ` J f J V J W JYJ Z J [ J ] J c

6anas se o#ino skup specijalni0 nakova a #uke programskog je ika standardi uje i svodi na skup nakova me3unarodnog standardnog koda %SO7 $HSC%% kod&.
# J ^ J I J e J ` J a J Z J $ J & J R J = J > J - J . J G J F J X J T J S J U J d J f J V J W J \ J Y ili C J g J [ J ] J c

Be8to se pored osnovnog skupa specijalni0 nakova koriste i slo@eni sim#oli> o#ino dvo naci> kao na primerF J RR J US J TS J SU J ST J TT J TU J UT J FS J -U J GR J RG J A nekim programskim je icima $5O(/(H-&> #og nedovoljnog #roja odgovarajui0 nakova umesto specijalni0 nakova koriste se pose#ne sim#olike o nake .KM.> .-K.> .7/.> .7K.> .*/.> .*K.> kojima se o naavaju relacije jednako> ra liiti> vee> vee ili jednako> manje i manje ili jednako> redom.

1.3. I1$ '#4#,+'!)# # )$/$)"#s+ $ )$5#


%denti)ikatori su uvedene rei kojima se imenuju konstante> promenljive> potprogrami> programski moduli> klase> tipovi podataka i slino. A svim programskim je icima postoji slina konvencija a pisanje identi)ikatora. %denti)ikatori su ni ovi koji se o#ino sastoje od slova i ci)ara i o#ave no apoinju slovom. Ovo ogranienje omoguava jednostavniju implementaciju leksikog anali atora i ra dvajanje identi)ikatora od drugi0 sintaksni0 kategorija $numeriki0 i nakovni0 konstanti na primer&. A nekim je icima do voljeno je da se i neki specijalni naci pojave u okviru identi)ikatora. -aje8e je to crtica a pove ivanje ICI kojom se posti@e pove ivanje vi8e rei u jedan identi)ikator. -a primer> u je iku C crtica a pove ivanje se mo@e koristiti na isti nain kao i slova> 8to nai da identi)ikator mo@e da apone ovim nakom. Slede primeri neki0 identi)ikatoraF
ALFA A B1223 Max_vrednost PrimerPrograma

A je iku C velika i mala slova se ra likuju. Programski je ik PHSCH* ne ra likuje velika i mala slova. 6o#ra je programerska praksa da ident)ikatori predstavljaju mnemonike skraenice. -i ovi nakova a #uke koji u programu imaju odre3eni smisao na ivaju se lekseme. *eksema mo@e da #ude i samo jedan nak. (e je ika ije je naenje utvr3eno pravilima tog je ika na iva se rezervisana re. (e ervisane rei mogu da #udu a#ranjene> kada se ne mogu koristiti kao identi)ikatori u programu. /akav je sluaj u programskom je iku C. ;e3utim> i u je icima u kojima je to do voljeno ne preporuuje se kori8enje kljuni0 rei kao identi)ikatora jer mo@e da smanji preglednost programa> a u nekim sluajevima da dovede i do o #iljni0 gre8aka u programu. Po nat je> na primer> sluaj gre8ke sa 6O nared#om koji je doveo do pada letilice i satelitskog programa 7emin< 1.. A programu a upravljanje letilicom stajala je 6O nared#a napisana kaoF
DO 10 I = 1. 10

umesto ispravnog koda


DO 10 I = 1, 10.

7re8ka pri prevo3enju me3utim nije otkrivena jer je leksiki anali ator ovu liniju khda protumaio kao nared#u dodeljivanja
D010I = 1.10

Predrag S. Stanimirovi

Osnove programiranja

u kojoj se promenljivoj 6010% dodeljuje vrednost 1.10. 7re8ka je otkrivena tek u )a i i vr8avanja programa kada je prou rokovala pad letilice. 3ezervisane re!i jezika .>
auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, voatile, while.

A pore3enju sa ostalim programskim je icima> C poseduje mali #roj slu@#eni0 rei. 1od neki0 programski0 je ika $CODO*& postoje kategorije o#ave ni0 rei i kategorija neo#ave ni0 rei. O#ave ne rei ne smeju da #udu i ostavljene i nared#e u kojoj je po sintaksi de)inisana nji0ova upotre#a i na osnovu nji0 kompilator anali ira i prevo3i nared#u> dok neo#ave ne rei imaju samo dokumentacioni karakter i upotre#ljavaju se da dopune nared#u i njen tekst pri#li@e govornom je iku. (a motrimo sledei primer de)inicije nared#e (KH6 kojom se ita slog datotekeF
READ ime datoteke !"E#$% RE&'RD !("$' ime podatka% A$ E"D iskaz

(ei (KH6> -KN/> %-/O i K-6 su o#ave ne prilikom pisanja odgovarajui0 delova nared#e> njima je odre3ena sintaksa nared#e> odnosno koristi i0 sintaksni anali ator pri prevo3enju nared#e. (ei (KCO(6 i H/ su neo#ave ne> ali se mogu koristiti da #i se poveala jasnoa nared#e.

1.4. K! s'+ '$


Dilo koji ni nakova u programu> posmatran ne avisno od njegovog logikog naenja> nad kojim se mogu i vr8avati odre3ena dejstva $operacije& na iva se podatak. 6eo podatka nad kojim se mogu i vr8avati elementarne operacije na iva se element podatka. Klementu podatka u matematici pri#li@no odgovara pojam skalarne veliine. Podatak je ure3eni ni nakova kojim se i ra@ava vrednost odre3ene veliine. 2eliina koja u toku i vr8avanja programa uvek ima samo jednu vrednost> koja se ne mo@e menjati> na iva se konstanta. 1ao o naka konstante koristi se ona sama. A nekim programskim je icima $Pascal> Hda> C& postoji mogunost imenovanja konstante. 1onstantama se dodeljuju imena koja se u programu koriste umesto nji0. -a taj nain nastaju simbolike konstante. /ipovi konstanti koje se mogu koristiti u odre3enom programskom je iku odre3eni su tipovima podataka koje taj je ik predvi3a. A je iku C se koristi vi8e vrsta konstanti i to suF - celo#rojne konstanteX - relane konstanteX - karakteriF ZaZ> Z#Z> ... X - stringoviF sekvence karaktera i me3u navodnika. Osim ovi0 tipova konstanti> u je iku Pascal se mogu koristiti i logike konsatnte. Slede neki primeri ra liiti0 vrsta konstantiF Celo#rojne dekadne konstanteF 1
!0 1!3 "!! #!! #.31$ ".31$

(ealne konstante u )iksnom are uF 3.1$ (ealne konstante u pokretnom are uF


3.1$%0 3.1$D0 #0.31$%1 #3,1$D1 #.31$%"0 ".31$D2

3.0

#0.31$

".31$%#2

$5O(/(H-> Pascal> Hda> C& $5O(/(H-&

(ealne konstante dvostruke tanostiF 1ompleksne konstanteF

Predrag S. Stanimirovi

Osnove programiranja

&3.1$, 0.13' &0, #23' 3.1$"0.13 I

$5O(/(H-& $;H/LK;H/%CH&
0)!3 010$ 0*AA 0*11

Oktalne konstante $C&F 0!() *ong konstante $C&F 123L *ogike konstanteF tr+e
../0%.

Leksadecimalne konstante $C&F 0*1F


,a-se .FAL1%. 2B2

!2)L 321L "1$)L

$Pascal> Hda& $5O(/(H-& $Pascal> Hda> C& $Pascal> C& $CODO*& $;H/LK;H/%CH& $;H/LK;H/%CH&

+nakovne konstanteF 2A2

String konstanteF 3Beograd3 Sim#olike konstanteF 4%/O


Pi, %

3A-,a 13 4%/O1 1PA5%

(acionalni #rojeviF 263

#$6!

Po nate sim#olike konstante u paketu ;H/LK;H/%CH imaju svoja pose#na> re ervisana imenaF Pi !.1"1,. * e2.71424 +egree G140F )aktor konver ije stepena u radijane I iS 1 In init-

1.5. P)!&$ %.#"$


2eliine ije se vrednosti menjaju u toku i vr8avanja programa na ivaju se promenljive. Promenljivoj se u programu dodeljuje ime> i u svakom trenutku ona je de)inisana svojom vredno8u. 1a@emo da je svaka promenljiva u programu pove ana sa tri pojmaF imenom - identi)ikatorom promenljive. re)erencom - poka ivaem koji odre3uje mesto promenljive u memoriji i vredno8u - podatkom nad kojim se i vr8avaju operacije. 2e a i me3u imena> re)erence i vrednosti promenljive mo@e se predstaviti sledeim dijagramomF

ime re)erenca vrednost Ovaj dijagram u sluaju imenovane konstante do#ija o#likF

ime

vrednost

-a primer nared#u dodeljivanja *7=3.1$1!82 itamoF X do#ija vrednost !.1"1,.2> pri emu imamo u vidu da je X sim#oliko ime memorijske lokacije gde se u toku i vr8avanja programa pamti vrednost !.1"1,.2. Pri tome je potre#no imati na umu sledee pojmoveF i vrednost !.1"1,.2> koja predstavlja vrednost promenljive X> i adresu memorijske lokacije u kojoj se pamti vrednost !.1"1,.2> i ime promenljive X> identi)ikator koji se u datom programu koristi kao ime promenljive koja ima datu #rojnu vrednost.

1.6. K!&$ '+)#


A svim programskim je icima postoji mogunost pro8irenja i vr8nog koda programa komentarima kojima se kod dodatno poja8njava. Ovi komentari se u toku prevo3enja programa ignor8u od strane
9

Predrag S. Stanimirovi

Osnove programiranja

kompilatora i ne ula e u sastav i vr8nog koda koji se generi8e prevo3enjem programa. ;e3utim komentari su veoma va@an deo programa kojim se pode8ava njegova dokumentarnost> i #itno utiu na e)ikasnost anali e programa. 1onvencija a apisivanje komentara se ra likuje od je ika od je ika. Slede primeri komentara u nekim programskim je icimaF
9:omentari se + Pas;a-#+ <a=is+>+ i<me?+ ve-i@iA <agrada.B ## :omentari + >e<i@+ Ada <a=oCin>e sa dve ;rti;e i mog+ ## da se na?+ Di-o gde + =rogram+. 6E Ovo >e =rimer @omentara + >e<i@+ 5 E6 66 :rata@ 5 @omentar + o@vir+ >ednog reda &E :omentar + PA15AL#+ i >e<i@+ MA.F%MA.I5A E'

1.7. S')0,'0)+ ()!*)+&+


7lo#alna struktura programa avisi od toga da li je ik a0teva deklaraciju tipova promenljivi0 kao i da li su u je iku astupljeni stariji koncepti sa implicitnim de)inicijama tipova promenljivi0 ili je astupljen noviji koncept sa eksplicitnim de)inicijama.

1.7.1. S')0,'0)+ ()!*)+&+ 0 P+s6+%70


Programi u Pascal-u se sastoji i sledei0 elemenata> redomF - odeljak deklaracija o#ele@ja> - odeljak de)inicija konstanti> - odeljak de)inicija tipova> - odeljak deklaracija promenljivi0> - odeljak deklaracija procedura iGili )unkcija> i - i vr8ni deo programa o#u0vaen i me3u begin i end. Primer. Struktura programa u Pascal-u>
program Primer &in=+t, o+t=+t' 94ag-av->e =rogramaB const n = 10 9O=is @onstantiB type 9De,ini;i>e ti=ovaB Ge@tor = arrayH-..10I of integer var 9De@-ara;i>e =romen->iviAB a, D 7 integer v 7 Ge@tor begin 9PoCeta@ te-a samog =rogramaB 9...B end. 9:ra> g-avnog =rogramaB

1.7.2. S')0,'0)+ ()!*)+&+ 0 8


Programi pisani u C je iku imaju strukturu #loka> ali se a ograniavanje #loka koriste vitiaste agrade umesto agrada begin i end. +astupljen je tako3e stariji koncept #loka> po nat i je ika Hlgol '0 i P*G1> gde se opisi elemenata koji pripadaju jednom #loku nala e unutar agrada [ i ]> a ra liku od novijeg koncepta koji smo imali u primerima i Pascal-a> kod koji0 opisi elemenata #loka pret0ode agradi begin kojom se otvara #lok. Svaki #lok u C-u tako3e mo@e da sadr@i opise promenljivi0 i )unkcija. C program se mo@e nala iti u jednom ili vi8e )ajlova. Samo jedan od ti0 )ajlova $glavni programski modul& sadr@i )unkciju main kojom apoinje i vr8enje programa. A programu se mogu koristiti )unkcije i standardne #i#lioteke. A tom sluaju se mo@e navesti direktiva pretprocesora o#lika
Jin;-+de KimeL.

10

Predrag S. Stanimirovi

Osnove programiranja

esta je direktiva o#lika _includeTstdio.0U kojom se ukljuuju )unkcije i )ajla stdio.h $standard inputGoutput 0eader&. 7lavni program> main)*, tako3e predstavlja jednu od )unkcija. Opis svake )unkcije se sastoji i aglavlja i tela )unkcije. A ovom sluaju> aglavlje )unkcije je najjednostavnije> i sadr@i samo ime )unkcije i agrade &'. % a aglavlja se navodi telo )unkcije koje se nala i i me3u agrada [ i ]. % me3u ovi0 agrada se nala e operatori koji o#ra uju telo )unkcije. Svaki prost operator se avr8ava nakom ZXZ a slo@eni operator se pi8e i me3u agrada [ i ]. A je iku C sve promenljive moraju da se deklari8u. Op8ti o#lik jednostavnog programa jeF
void main)* + ,deklaraci-e. ,naredbe. /

2. TIPOVI PODATAKA
Eedan od naj naajniji0 pojmova u okviru programski0 je ika je pojam tipa podataka. Htri#ut tipa odre3uje skup vrednosti koje se mogu dodeljivati promenljivima> )ormat predstavljanja ovi0 vrednosti u memoriji raunara> skup osnovni0 operacija koje se nad njima mogu i vr8avati i ve e sa drugim tipovima podataka. -a primer> promenljivoj koja pripada celo#rojnom tipu mogu se kao vrednosti dodeljivati samo celi #rojevi i odre3enog skupa. -ad tako de)inisanim podacima mogu se i vr8avati osnovne aritmetike operacije sa#iranja> odu imanja> mno enja> deljenja> stepenovanja> kao i neke speci)ine operacije kao 8to je odre3ivanje vrednosti jednog #roja po modulu drugog. 1oncept tipova podataka prisutan je> na neki nain> ve kod sim#oliki0 asem#lerski0 je ika gde se a de)iniciju tipa koriste implicitne de)inicije preko skupa specijalni0 nakova kojima se odre3uju podaci ra liitog tipa. -eka je adat skup sainjen od n proi voljni0 apstraktni0 o#jekataF FS[v1>...>vn]> nU1. Akoliko su svi o#jekti istorodni> u smislu da se u okviru nekog programskog je ika na nji0 mo@e primenjivati jedan odre3eni skup operatora> onda se na iva tip podataka> Hko a promenljive ! i " uvek va@i ! i " onda su one tipa . /o u okviru programa )ormalno de)ini8emo iska om
DE0("E x, y 1 $.

9rednost je #ilo koji entitet kojim se mo@e manipulisati u programu. 2rednosti se mogu evaluirati> apamtiti u memoriji> u imati kao argumenti> vraati kao re ultati )unkcija> i tako dalje. (a liiti programski je ici podr@avaju ra liite tipove vrednosti. Eedna od klasi)ikacija osnovni0 tipova podataka prika ana je na slici.

11

Predrag S. Stanimirovi

Osnove programiranja

/ipovi podataka su podeljeni u dve osnovne grupeF stati!ki tipovi i dinami!ki tipovi. Pod statikim tipovima $ili tipovima sa statikom strukturom podra umevamo tipove podataka kod koji0 je unapred i )iksno de)inisana unutra8nja struktura svakog podataka> a veliina $t.j. memorijska apremina& )iksno se de)ini8e pre $ili u vreme& i vr8avanja programa koji koristi podatke statikog tipa. Statiki tipovi podataka o#u0vataju skalarne i strukturirane podatke. Pod skalarnim tipovima podra umevamo najprostije tipove podataka ije su vrednosti skalari> odnosno takve veliine koje se tretiraju kao elementarne celine i a koje nema potre#e da se dalje ra la@u na komponente. A tom smislu realne i kompleksne #rojeve tretiramo kao skalare u svim programskim je icima koji i0 tretiraju kao elementarne celine $neki je ici nemaju tu mogunost pa se tada kompleksni #rojevi tretiraju kao struktura koja se ra la@e na realni i imaginarni deoX na slian nain mogao #i se realni #roj ra lo@iti na normali ovanu mantisu i eksponent&. Pod strukturiranim tipovima podataka podra umevamo sve slo@ene tipove podataka koji se reali uju pove ivanjem neki0 elementarni0 podataka u preci no de)inisanu strukturu. A ulo i elementarni0 podataka o#ino se pojavljuju skalari ili neke jednostavnije strukture. 1ompo itna vrednost ili struktura podataka $data structure& jeste vrednost koja je komponovana i jednostavniji0 vrednosti. 1ompo itni tip jeste tip ije su vrednosti kompo itne. Programski je ici podr@avaju mno8tvo kompo itni0 vrednostiF strukture> slogove> ni ove> alge#arske tipove> o#jekte> unije> stringove> liste> sta#la> sekvuencijalni )ajlovi> direktni )ajlovi> relacije> itd. Skalarni tipovi podataka mogu #iti linearno ure:eni ili linearno neure:eni. *inearno ure3eni tipovi podataka su tipovi kod koji0 se vrednosti osnovnog skupa preslikavaju na jedan interval i ni a celi0 #rojeva> t.j. a svaki podatak ! na se redni #roj podatka. Stoga svaki podatak i u ev poetnog ima svog pret0odnika u ni u> i slino tome> svaki podatak i u ev krajnjeg ima svog sled#enika u ni u. Pod dinami!kim tipovima podataka podra umevamo tipove podataka kod koji0 se veliina iGili struktura podataka slo#odno menja u toku o#rade. 1od dinamiki0 tipova sa promenljivom veliinom podra umevamo da je struktura podataka )iksna> ali se nji0ova veliina dinamiki menja tokom o#rade tako da se saglasno tome dinamiki menjaju i memorijski a0tevi. -a primer> dopisivanjem novi0 apisa u sekvencijalnu datoteku veliina datoteke raste u nei menjenu strukturu. 1od dinamiki0

12

Predrag S. Stanimirovi

Osnove programiranja

tipova sa promenljivom strukturom unapred je )iksno de)inisan jedino princip po kome se )ormira struktura podataka dok se sama konkretna struktura i koliina podataka u memoriji slo#odno dinamiki menjaju.

S'+'#5,+ # 1# +&#5,+ '#(#/+6#.+


Pre i vr8enja #ilo koje operacije> moraju se proveriti tipovi operanada da #i se spreila gre8ka u tipu podataka. -a primer> pre i vr8enja operacije mno@enja dva cela #roja> o#a operanda moraju #iti proverena da #i se osiguralo da oni #udu celi #rojevi. Slino> pre i vr8enja neke and ili or operacije> o#a operanda moraju #iti proverena da #i se osiguralo da oni #udu tipa boolean. Pre i vr8enja neke operacije indeksiranja ni a> tip operanda mora da #ude arra" $a ne neka prosta vrednost ili slog&. Ovakva provera se na iva proverom tipa $type checks&. Provera tipa mora da #ude i vr8ena pre i vr8enja operacije. ;e3utim> postoji i vestan stepen slo#ode u vremenu provereF provera tipa se mo@e i vr8iti ili u vremenu kompilacije $compile-time& ili u vremenu i vr8enja programa $at run-time&. Ova mogunost le@i u osnovi va@ne klasi)ikacije programski0 je ika na stati!ki tipizirane $staticall< t<ped& i dinami!ki tipizirane $d<namicall< t<ped&. A nekom ststiki tipi iranom je iku> svaka varija#la i svaki i ra imaju )iksni tip $koji je ili eksplicitno postavljen od strane programera ili i veden od strane kompajlera&. Svi operandi moraju #iti proverenog tipa $t<pe-c0ecked& u vremenu kompilovanja programa $at #ompile$time&. A dinamiki tipi iranim je icima> vrednosti imaju )iksne tipove> ali varija#le i i ra i nemaju )iksne tipove. Svaki put kada se neki operand i raunava> on mo@e da proi vede vrednost ra liitog tipa. Prema tome> operandi moraju imati proveren tip posle nji0ovog i raunavanja> ali pre i vr8enja neke operacije> u vremenu i vr8enja programa $at r%n$time&. ;nogi je ici visokog nivoa su statiki tipi irani. S;H**/H*1> *%SP> P(O*O7> PK(*> i PO/LO- jesu primeri dinamiki tipi irani0 je ika. S druge strane> moderni )unkcionalni je ici $kao ;*> LHS1K**> ;H/LK;H/%CH& u dr@avaju se od takvi0 ogranienjaF oni omoguavaju da sve vrednosti> ukljuujui i )unkcije> imaju slinu o#radu. -a osnovu toga kako je postavljen koncept tipova podataka> programski je ici mogu da se svrstaju u dve grupeF na programske je ike sa slabim tipovima podataka i na je ike sa jakim tipovima podataka.

2.1. K! 6$(' s%+3#- '#(!"+


A sluaju je ika sa sla#im tipovima podataka in)ormacija o tipu promenljive koristi se> i korektna je samo na ma8inskom nivou> u )a i i vr8enja programa. Ovako postavljen koncept podra umeva sledee mogunostiF $1& Operacija koja se od strane kompilatora pri0vati kao korektna> na nivou i vornog koda programa> mo@e da #ude potpuno nekorektna. (a motrimo sledei primerF
char c2 c 3 42

Promenljiva # de)inisana je da pripada tipu #&ar> 8to podra umeva da joj se kao vrednosti dodeljuju naci kao podaci. ;e3utim umesto korektnog dodeljivanja # S Z"Z> promenljivoj # je dodeljena vrednost #roja " kao konstante celo#rojnog tipa. 1od je ika sa sla#im tipovima podataka kompilator ne otkriva ovu gre8ku i in)ormaciju o tipu koristi samo na ma8inskom nivou kada promenljivoj # dodeljuje vrednost jednog #ajta memorijske lokacije u kojoj je apisana konstanta ". Oigledno je da ovako postavljen koncept tipova mo@e da dovede do veoma o #iljni0 gre8aka u i vr8avanju programa koje se ne otkrivaju u )a i kompilovanja programa. $2& 1oncept sla#i0 tipova podra umeva odre3eni automati am u trans)ormaciji tipova podataka u sluaju kada se elementi ra liiti0 tipova nala e u jednom i ra u ija se vrednost dodeljuje promenljivoj odre3enog tipa. (a motrimo sledei primerF
float x, y2 int i, -, k2

13

Predrag S. Stanimirovi i 3 x2 k3 x-2

Osnove programiranja

Promenljive ! i " su realne $tipa float&> a i> ' i k celo#rojne $tipa int&. -ared#om i=xX vr8i se dodeljivanje vrednosti tipa float promenljivoj celo#rojnog tipa. 1od je ika sa sla#im tipovima ovo dodeljivanje je do voljeno iako se pri tome ! svodi na drugi )ormat i pravi gre8ka u predstavljanju njegove vrednosti. 1od ovako postavljenog koncepta tipova> da #i se napisao korektan program potre#no je tano po navati me0ani me trans)ormacije tipova. A drugoj nared#i i primera $k S !-'X& od #roja ! koji je tipa )loat tre#a odu eti #roj '> tipa int i re ultat operacije dodeliti promenljivoj tipa int. 6a #i smo #ili sigurni u korektnost re ultata potre#no je da namo redosled trans)ormacija koje se pri tome i vr8avaju> odnosno da li se prvo ! prevodi u int i onda i vr8ava odu imanje u skupu celi0 #rojeva i vrednost re ultata dodeljuje promenljivoj tipa int ili se ' prevodi u tip float> i vr8ava odu imanje u skupu realni0 #rojeva> a atim re ultat prevo3i u tip int i dodeljuje promenljivoj k. 1oncept sla#i0 tipova podataka dopu8ta puno slo#ode kod apisivanja i ra a u nared#ama dodeljivanjaX me3utim cena te slo#ode je nejasan program sa skrivenim trans)ormacijama> #e mogunosti kontrole i kori8enja in)ormacije o tipu u )a i kompilovanja programa.

2.2. K! 6$(' .+,#- '#(!"+ (!1+'+,+


1oncept jaki0 tipova podataka o#u0vata nekoliko osnovni0 principaF i /ip podataka odre3uju sledei elementiF - skup vrednosti> - )ormat registrovanja podataka> - skup operacija koje se nad podacima mogu i vr8avati> - skup )unkcija a uspostavljanje ve a sa drugim tipovima podataka. i Sve de)inicije tipa moraju da #udu javne> eksplicitne. -isu do voljene implicitne de)inicije tipova. i i i i O#jektu se dodeljuje samo jedan tip. 6o voljeno je dodeljivanje vrednosti samo odgovarajueg tipa. 6o voljene su samo operacije o#u0vaene tipom. /ip je atvoren u odnosu na skup operacija koji o#u0vata. Ove operacije se mogu primenjivati samo nad operandima istog tipa. ;e8oviti i ra i nisu do voljeni. i 6odeljivanje vrednosti ra norodni0 tipova mogue je samo u javnu upotre#u )unkcija a trans)ormaciju tipa. A sledeim primerima date su nared#e koje po ovom konceptu nisu do voljeneF
var x7 reai7 integer ;7 ;Aar i 7= MAN ; 7= 10 9 9 9 9 x >e rea-nog ti=a B i >e ;e-oDro>nog ti=a B ; >e <na@ovnog ti=a B ne@ore@tno, =romen->ivo> ;e-oDro>nog ti=a dode->+>e se <na@ovna vrednost B 9 ne@ore@tno, =romen->ivo> <na@ovnog ti=a dode->+>e se ;e-oDro>na vrednost B

1oncept jaki0 tipova poveava pou danost> dokumentarnost i jasnou programa. 1ako se a0teva eksplicitna upotre#a operacija a trans)ormaciju tipa> onda je nedvosmisleno jasno da je odre3ena trans)ormacija na nekom mestu namerna i potre#na. Ovaj koncept omoguava da se in)ormacija o tipu mo@e koristiti u )a i kompilovanja programa i na taj nain postaje )aktor pou danosti programa. % #or i me3u statike i dinamike tipi acije je pragmatianF i Statika tipi acija je e)ikasnija. 6inamika tipi acija a0teva $verovatno ponovljenu& proveru tipova u vremenu i vr8enja programa $run-time t<pe c0ecks&> 8to usporava i vr8enje programa. Statika tipi acija a0teva jedino proveru tipa u vremenu kompilacije programa $compile-time t<pe c0ecks&>

14

Predrag S. Stanimirovi

Osnove programiranja

ija je cena minimalna $i i vr8ava se jedanput&. Osim toga> dinamika tipi acija primorava sve vrednosti da #udu etiketirane $tagged& $da #i se omoguila provera u vreme i vr8enja&> a ovakvo o naavanje poveava upotre#u memorijskog prostora. Statika tipi acija ne a0teva ovakvo o naavanje. i Statika tipi acija je sigurnijaF kompajler mo@e da proveri kada program sadr@i gre8ke u tipovima. 6inamika tipi acija ne omoguava ovakvu sigurnost. i 6inamika tipi acija o#e #e3uje veliku )leksi#ilnost> 8to je neop0odno a neke aplikacije u kojima tipovi podataka nisu unapred po nati. A praksi vea sigurnost i e)ikasnost statike tipi acije imaju prevagu nad veom )leksi#ilno8u dinamike tipi acije u velikoj veini aplikacija. 2eina programski0 je ika je statiki tipi irana.

2.3. E,"#"+%$ ' !s' '#(!"+


jta ekvivalentnost tipova o naava avisi od programskog je ika. $Sledea diskusija podra umeva da je je ik statiki tipi iran.& Eedna mogua de)inicija ekvivalentnosti tipova jeste strukturna ekvivalentnost $structural equivalence&F 1 k 2 ako i samo ako 1 i 2 imaju isti skup vrednosti. Strukturna ekvivalentnost se tako na iva ato 8to se ona mo@e proveriti pore3enjem struktura tipova 1 i 2. $-epotre#no je> a u op8tem sluaju i nemogue> da se pre#roje sve vrednosti ovi0 tipova.& 1ada kompilator je ika sa jakim tipovima podataka tre#a da o#radi nared#u dodeljivanja o#likaF
x 13 izraz

on vr8i dodeljivanje samo u sluaju ekvivalentnosti tipa promenljive sa leve strane dodeljivanja i re ultata i ra a na desnoj strani nared#e> osim u sluaju kada je na desnoj strani celo#rojni i ra a na levoj strani promenljiva nekog realnog tipa. Primer. Sledei program u PHSCH*-u je korektanF
=rogram =rimer var i7integer +7reaDegin read-n&i' +7=i end.
2 i = 2

Orite-n&2i = 2,i,2 + = 2,+'

-a primer> a vrednost 2 promenljive i do#ija seF


+ = 2.0000000000%"00

Prilikom kompilovanja sledeeg programa prijavljuje se sintaksna gre8ka t"pe mismat#&.


=rogram =rimer var i7integer +7reaDegin read-n&+' end.

i7=+

Orite-n&2i = 2,i,2 + = 2,+'

*kspli)itnom ekvivalentno?u tipova posti@e se vea pou danost je ika. A ovom sluaju nisu potre#ne pose#ne procedure po kojima #i se ispitivala strukturna ekvivalentnost. ;e3utim> kada je potre#no vrednost promenljive ili i ra a dodeliti promenljivoj koja mu ne odgovara po tipu ovaj koncept a0teva kori8enje )unkcija a trans)ormisanje tipova.

2.4. E%$&$ '+) # '#(!"# (!1+'+,+


A okviru svakog programskog je ika> sistem tipova podataka asniva se na skupu osnovni0 tipova podataka nad kojima se dalje de)ini8u i vedeni tipovi> podtipovi> strukturni tipovi i speci)ini apstraktni tipovi podataka. Skup osnovni0 tipova podataka se o#ino svodi na tipove podataka a rad

15

Predrag S. Stanimirovi

Osnove programiranja

sa elementarnim numerikim podacima $celi i realni #rojevi&> nakovnim podacima $pojedinani naci HSC%% koda& i logikim vrednostima $tr%e i false&.

2.4.1. 8$%!3)!. # '#(!"# 9I '$*$) #%# # ':


$ardinalni tip podataka 4tip .A3+I1A/6
Podaci kardinalnog tipa pripadaju jednom intervalu nenegativni0 celi0 #rojeva $cardinals ili unsigned integers&F FS[0>1>...>m] 1od b-#itni0 #inarni0 ma8ina podra umeva se da je m S 2b-1> a kod d-ci)reni0 decimalni0 ma8ina na slian nain se podra umeva m S 10d -1. -a primer> kod 1' #itni0 #inarni0 ma8ina / FS [0> 1>...> ',,!,]. 1ardinalni tip podataka se primenjuje u sluajevima kada se @eli spreiti pojava i upotre#a negativni0 #rojeva. Podra umeva se da se kod tipa CH(6%-H* mogu koristiti aritmetiki i ra i koji o#u0vataju operacije => -> R i G pod uslovom da su svi argumenti tipa CH(6%-H*.

.elobrojni tip podataka 4tip I1;*2*36


Podaci celo#rojnog tipa pripadaju jednom lntervalu celi0 #rojeva koji o#u0vata po itivne i negativne #rojeve i koji se o#ino o naava na sledei nainF
. 7= 9minint, minint"1, ... , #1, 0, 1, ,.. , maxint#1, maxint B .

Ovde je najmanji #roj o naen sa minint> a najvei sa ma!int $od engl. maQimum integer i minimum integer& pri emu ove veliine nisu )iksne ve avise od implementacije i prema tome variraju od raunara do raunara. Od nekoliko naina #inarnog kodiranja celi0 #rojeva i dvojiemo metod potpunog komplementa koji se naje8e sree u praksi. 1od ovog postupka #rojevi se #inarno predstavljaju pomou sledee n#itne reiF
n$1 ( ! 2 1 0

Dit najstarijeg ra reda o naen sa ( $sign& predstavlja pred nak #roja. Hko je (S0 onda je je #roj nenegativan> a ako je (S1 onda je #roj negativan. -ula se o naava sa nulama u svim #itovimaF 0000 0000 0000 0000 O#ino postoji osnovni $standardni& tip %-/K7K( ili int> koji se avisno od reali acije odnosi na odre3eni opseg celi0 #rojeva. -ekad je to opseg koji odgovara )ormatu jedne polurei ili )ormatu jedne rei. A odnosu na ovaj osnovni celo#rojni tip e8to postoji mogunost de)inisanja i drugi0 celo#rojni0 tipova koji se odnose na neki krai ili pro8ireni )ormat. A sledeoj ta#eli je opisan tip %-/K7K( u Pascal-u. ;ip opera)ije <pera)ija <perator R G mod div = = T TS U US S TU mno@enje ;ultiplikativne deljenje ostatak deljenja operacije celo#rojno deljenje Hditivne sa#iranje operacije odu imanje

Anarne operacije

(elacije

plus minus manje manje ili jednako vee vee ili jednako 16 jednako nejednako

Predrag S. Stanimirovi

Osnove programiranja

2.4.2. R$+% # '#( 94%!+' #%# )$+%:


Promenljive ovi0 tipova u imaju a svoje vrednosti podskupove skupa realni0 #rojeva. A programskim je icima postoji vi8e vrsta podataka realnog tipa> koji se ra likuju po tanosti predstavljanja podataka. (ealni tip podataka o#u0vata jedan konaan podskup racionalni0 #rojeva ograniene veliine i tanosti. -aravno> mo@e se odma0 postaviti pitanje #og ega se koriste na ivi Irealni tipI i Irealni #rojI a ne8to 8to u op8tem sluaju nije u stanju da o#u0vati ni iracionalne #rojeve ni #eskonane periodine racionalne #rojeve. %pak> to je terminologija koja je pri0vaena u praksi i opravdava se time 8to je (KH* tip podataka koji se naj#li@e pri#li@ava pojmu realnog #roja. Sa druge strane> lako je ra umeti da su sve memorijske lokacije konane du@ine> pa stoga i #rojni podaci koji se u nji0 sme8taju moraju #iti konane du@ine i tako po prirodi stvari otpadaju iracionalni #rojevi. Potre#e prakse nisu na ovaj nain ni malo ugro@ene jer se dovoljna tanost re ultata mo@e postii i sa veliinama konane du@ine. /ip (KH* naje8e o#u0vata #rojne vrednosti i sledei0 podintervala #rojne oseF
-maQreal -minreal 0 minreal maQreal

Ovde minreal o naava najmanju apsolutnu vrednost veu od nule> koja se mo@e predstaviti na raunaru> a ma!real predstavlja najveu apsolutnu vrednost koja se mo@e predstaviti na raunaru. (ealni #rojevi i intervala $-minreal> minreal& se aokru@uju i prika uju kao 0> realni #rojevi i intervala $- > -maQreal& i $maQreal> = & ne mogu se predstaviti u memoriji raunara> a - i = se kodiraju specijalnim kodovima.

2.4.3. L!*#5,# '#( (!1+'+,+


*ogiki tipovi podataka postoje kao osnovni tipovi podataka u svim novijim je icima. O#ino nose na iv *O7%CH* $5O(/(H-& ili DOO*KH- $Pascal> Hda&. O#u0vataju samo dve vrednosti tr%e i false> nad kojima su de)inisane osnovne logike operaclje not, and, or i xor. /ako3e> va@i i ure3enost skupa vrednosti ovog tipa tako da je false T tr%e. % ra i u kojima se primenjuju logike promenljive i konstante na ivaju se logiki i ra i. Hko se logike konstante o naavaju sa false i tr%e onda podra umevamo da svi i ra i moraju #iti sainjeni striktno od logiki0 veliina. La primer> i ra FS $!U0& and $ $"S1& or $"T0& & je korektan pri emu se podra umeva da su ! i " celo#rojne ili realne veliine> a z je veliina logikog tipa. Podra umeva se i da su neispravni me8oviti i ra i u kojima se koriste veliine tr%e i false pome8ane sa numerikim konstantama i aritmetikim operacijama. -a primer> nije de)inisan i ra "R)a1se = 2Rtrue = true> ali i ra "R$!U0& = 2R$"U0& = $zU0& > koji je tako3e #esmislen kod logiki0 konstanti )alse i true> u sluaju numerikog kodiranja /S[0>1] redovno ima i smisla i upotre#nu vrednost kao generator veliina 0>1>2>!>">,>'>7.

2.4.4. Z +,!" # '#(!"#


1orisnik raunara komunicira sa raunarom preko ula ni0 i i la ni0 ure3aja i tu je #itno da se pojavljuju podaci u )ormi koja je itljiva a oveka. /o nai da se komuniciranje o#avlja pomou nakova i odre3ene a #uke koja redovno o#u0vata a#ecedno pore3ana velika i mala slova> ci)re>

17

Predrag S. Stanimirovi

Osnove programiranja

specijalne nake i kontrolne nake. Pod specijalnim nacima se podra umevaju svi oni naci koji se javljaju na tastaturama i mogu od8tampati> ali nisu ni slova ni ci)re $na tastaturi sa kojom je pisan ovaj tekst specijalni naci su ^ _ S ` a R$&C-=SFIX ZTUd>G.&. Pod kontrolnim nacima podra umevaju se naci koji se ne mogu od8tampati $ili prika ati na ekranu terminala&> ve slu@e a upravljanje radom ula noGi la nog ure3aja $na primer 8tampaa&. A ovu grupu spadaju specijalni naci a pomeranje papira> nak koji i a iva vuni signal na terminalu i drugi&. 6a #i se naci ra likovali od sim#oliki0 na iva promenljivi0 o#ino se umeu i me3u apostro)a $na nekim programskim je icima umesto apostro)a se koriste naci navoda&. /ako se> na primer> podra umeva da ) predstavlja sim#oliki na iv promenljive> dok Z)Z predstavlja #inarno kodirano prvo slovo a#ecede. A praksi se primenjuje nekoliko metoda a #inarno kodiranje nakova. -ajpo natiji metod je ameriki standard HSC%% $Hmerican Standard Code )or %n)ormation %nterc0ange&. Ovim smenama su neki manje va@ni naci i skupa HSC%% nakova amenjeni sa speci)inim jugoslovenskim nacima $na pr.> umesto HSC%% nakova \ J [ ] V W c f i Y u jugoslovenskoj varijanti se pojavljuju naci l 3 8 8 m @ ? i B&. -eki terminali imaju mogunost podesivog i #ora skupa nakova tako da korisnik mo@e po potre#i i a#ratl ameriku ili jugoslovensku varijantu skupa HSC%% nakova. Prva !2 naka u HSC%% skupu su kontrolni naci. -ekl od njl0 imaju jedinstvenu interpretaciju kod svi0 ure3aja> a kod neki0 interpretacija se ra likuje od ure3aja do ure3aja. Ovde pominjemo sledeeF DK* *5 55 C( KSC $Dell& S vuni signal $*ine 5eed& S prela ak u naredni red $5orm 5eed& S prela ak na narednu stranu $Carriage G(eturn& S povratak na poetak reda $Kscape& S prela ak u komandni re@im

KSC nak je pose#no naajan. 2eina savremerii0 terminala i 8tampaa predstavljaju male raunare sa lokalnom memorijom i procesorom> sposo#ne da se prilago3avaju #rojnim adacima i radnim re@imima. 1ada u ni u nakova koje raunar 8alje u pravcu terminala ili 8tampaa nai3e KSC $#inarno 0011011& onda dotini peri)erni ure3aj to interpretira kao nak da slede neke komande koje pode8avaju parametre ure3aja ili i a ivaju neke druge e)ekte> a ne naci koje tre#ja prika ati. Stoga komande koje se u toku rada dostavljaju peri)ernim ure3ajima imaju o#lik sekvence nakova koja poinje sa KSC i ima a svaku komandu tano odre3enu du@inu. /akva komandna sekvenca se u @argonu na iva Iescape sekvencaI. O#lici komandni0 sekvenci i nji0ova upotre#a opisani su u prirunicima a upotre#u svakog peri)ernog ure3aja. A ovoj o#lasti a sada nema standardi acije. Skup HSC%% nakova je #a iran na sedmo#itnim nacima> pa prema tome o#u0vata ukupno 124 nakova. 1ako se radi o linearno ure3enom skupu svaki nak ima svoj redni #roj i ti #rojevi su u opsegu od 0 do 127. 5unkcija koja a svaki nak daje njegov redni #roj $ordinal num#er& o naava se sa ord. Hrgument ove )unkcije je tipa CLH(HC/K(> a vrednost )unkcije je tipa CH(6%-H*. +a sluaj HSC%% skupa imamo da va@i sledeeF ord$Z0Z& S "4> ord$Z)Z& S ',. ord$ZaZ&S.7. %nver na )unkcija )unkciji ord> koja od rednog #roja naka )ormira nak> $c0aracter& je )unkcija #&rF c0r$"4& S Z0Z> c0r$',& S Z)Z> c0r$.7& S ZaZ . Hko je # promenljiva tipa CLH(HC/K(> a n promenljiva tipa CH(6%-H* onda va@i c0r$ord$#& & S # > ord$c0r$n& & S n . /re#a jasno uoiti ra llku i me3u ci)re 0 i naka Z0Z. Ci)ra 0 je u sistemu sa punim komplementom i na 1'-#itnoj ma8ini kodirana sa 0000 0000 0000 0000> dok je nak Z0Z sedmo#itnl podatak koji se u HSC%% skupu kodira sa 0110000. Hko nije drugalje dogovoreno podra umeva se da se sa promenljivima nakovnog tipa ne mogu o#avljati aritmetike operacije. ;e3utim> mogua je primena relacioni0 operatora. +a nakovne promenljive ili konstante cl i c2 se podra umeva da va@i cl T c2 onda i samo onda ako ord$cl& T ord$c2&X umesto operatora T mo@e se koristiti i #ilo koji drugi relacioni operator.

18

Predrag S. Stanimirovi

Osnove programiranja

A programima kojima se vr8i o#rada tekstova esto se primenjuju sledei i ra iF ord$c& n ord$Z0Z & c0r$n =ord$Z0Z&& ord$#& - ord$ZfZ & c0r$ord$#& - ord$ZaZ& - ord$Z)Z&& c0r$ord$#& - ord$ZaZ& = ord$Z)Z&& nak koji odgovara ci)ri # redni #roj velikog slova u a#ecedi malo slovo koje odgovara velikom slovu # veliko slovo koje odgovara malom slovu # #rojna vrednost numerikog naka #

2.4.5. N+3)!.#"# '#( (!1+'+,+


-a#rojivim tipom podataka de)ini8e se konaan linearno ure3en skup proi voljni0 meduso#no ra liiti0 o#jekata. Svaki o#jekt mo@e pripadati samo jednom na#rojivom tipu podataka. A de)iniciji ovog tipa mora se eksplicitno navesti lista koja sadr@i identi)ikatore svi0 o#jekata poreWane onim redom kojim su o#jekti linearno ure3eni. Pored toga tre#a na naiti da je u pitanju speci)ian tip> pa se to posti@e speci)ikatorom /OPK kao u sledeim primerimaF
.PP% g-as = &Das,Dariton,tenor,a-t,me<<o_so=ran,so=ran' .PP% tem=o = &-argo,adagio,andante,moderato,a--egro,viva;e,=resto' .PP% g+daC@i_instr+inent = &@ontraDas,Ce-o,vio-a,vio-ina ' .PP% mese; = &>an,,eD,mar,a=r,ma>,>+n,>+-,a+g,se=,o@t,nov,de;' .PP% dan = &=on,+to,sre,Cet,=et,s+D,ned' .PP% Do>a = &;rno, De-o'

+a svaki od navedeni0 primera va@i sledea linearna uredenost> na primerF #as T #ariton T tenor T alt T me oCsopran T sopran > ord$#as& S 0> ord$#ariton& S 1> ... > ord$sopran& S , > succ$#as& S #ariton > pred$tenor& S #ariton > Prika ani tip #oja sadr@i samo dva elementa> pa to sugeri8e da #i se i logiki tip podataka mogao de)inisati sa /OPK logical S [)alse> true]. ;e3utim> #og rasprostranjenosti primene promenljivi0 logikog tipa podra umeva se da je tip *O7%CH* prede)inisan> t.j. automatski ukljuen u spisak raspolo@ivi0 tipova podataka. Prema tome> ostaje da se na#rojivi tip podataka koristi u sluajevima kada je potre#no de)inisati speci)ine tipove podataka. 6e)inicija promenljivi0 nestandardnog tipa )ormuli8e se u programima pomou uo#iajenog 6K5%-K iska a> na primerF 6K5%-K m1>m2>m! F mesecX d1>d2 F danX #>c>d F #oja . /re#a uoiti da se u sluajevima programski0 je ika kod koji0 ne postoji na#rojivi tip podataka mogu )ormirati ekvivalentna programska re8enja #a irana na nekom od postojei0 tipova podatakaX na pr.> dani u nedelji se mogu kodirati kardinalnim #rojevima 1>2>!>">,>'>7 i sa njima se mogu o#avljati tra@ene operacije. -a#rojivi tip podataka> kao i svaki speci)ini tip podataka> ima dve prednosti u odnosu na re8enja #a irana na kodiranju pomou nekog drugog tipa podataka. Pre svega> podaci se ne moraju kodirati $i kasnija dekodiratil ve se o naavaju svojim originalnim identi)ikatorijna> pa su programska re8enja #li@a pro#lemu koji se re8ava> t.j. itljiva su i ra umljiva. 6ruga pogodnost se ogleda u tome 8to se u svaki tip podataka podra umeva da postoje ugra3eni me0ani mi a8tite koji u svim etapama rada sa datim podacima proveravaju da li su podaci ispravnog tipa> da li su unutar ili i van do voljenog opsega podataka> da li su operatori koji se na nji0 primenjuju regularni> da li u i ra ima me8ovitog tipa uestvuju ispravne kom#inacije veliina ra liitog tipa i tome slino. Svi ovi me0ani mi doprinose preglednosti> #e #ednosti i op8tem kvalitetu programa> ali oigledno nisu uvek nei ostavno potre#ni> jer se nji0ovo dejstvo mo@e simulirati i skromnijim sredstvima.

19

Predrag S. Stanimirovi

Osnove programiranja

2.4.6. I '$)"+% # '#( (!1+'+,+


+a svaki linearno ure3eni tip podataka mo@e se de)inisati pose#an tip podataka koji predstavlja jedan interval u ni u kojim je de)inisan posmatrani osnovni linearno ure3eni tip. Pri tome osnovni linearno ure3eni tip mo@e #iti prede)inisan ili pose#no de)inisan kao speci)ini tip. Sintaksno se interval o naava sa poetnim i krajnjim elementom ra dvojenim sa dva naka takeF
$56E naziv7intervala 3 po8etni7element .. kra-n-i7element

Droj elemenata o#u0vaeni0 intervalnim tipom je - S 1 = ord$krajnjiCe1ement& - ord$poetniCelement&. 1arakteristini primeri intervalnog tipa podataka su sledeiF /OPK /OPK /OPK /OPK /OPK #ajt S 0 . . 2,, ci)ra S Z 0Z . . Z.Z velikoCslovo S ZHZ .. Z+Z ma1oCs1ovo S Z aZ .. Z Z radniCdan S pon .. pet %nterval osnovnog tipa CH(6%-H* %nterval osnovnog tipa CLH(HC/K( %nterval osnovnog tipa CLH(HC/K( %nterval osnovnog tipa CLH(HC/K( %nterval osnovnog tipa dan.

Osnovni ciljevi uvo3enja intervalnog tipa podataka su u8teda memorije $na pr. tip #ajt se stvarno mo@e smestiti u jedan osmo#itni #ajt umesto da se koristi nekoliko #ajtova koliko au imaju veliine tipa CH(6%-H* ili %-/K7K(&> a tako3e i uvo3enje kontrole opsega vrednosti i ispravnosti operatora u vreme i vr8avanja programa.

2.5. E%$&$ '+) # '#(!"# (!1+'+,+ 0 $,#& .$/#6#&+


%ako skoro svi programski je ici podr@avaju tipove Doolean> C0aracter> %nteger> i 5loat tipove mogu se uoiti neke ra nolikostiF i 1e razlikuju svi programski jezi)i tip @oolean . -a primer> C== poseduje tip koji se na iva bool> ali su njegove vrednosti u stvari mali integeriX usvojena je konvencija da 0 predstavlja false a svaka druga celo#rojna vrednost predstavlja. Ovakva konvencija je uvedena u C. i 1e razlikuju svi programski jezi)i tip .hara)ter. -a primer> C> C==> i EH2H imaju tip #&ar> ali su njegovevrednosti upravo mali integeriX ne pravi se ra lika i me3u nekog karaktera i njegove unutra8nje repre entacije. i 1eki jezi)i podr5avaju ne jedanA ve? nekoliko )elobrojnih tipova podataka. -a primer> programski je ik EH2H podr@ava tipove b"te [o124>...>=127]> s&ort [o!2 7'4>...>=!2 7'7]> int [o21"7"4!'"4>...>=21"7"4!'"7]> i long [o.22!!720!'4,"77,404>...>=.22!!720!'4,"77,407]. C i C== tako3e poseduju ra nolikost celo#rojni0 tipova> ali su oni de)inisani u implementaciji. i 1eki jezi)i podr5avaju ne jedanA ve? nekoliko realnih tipova podataka. -a primer> C> C==> i EH2H o#e #e3uju tipove float i do%ble> od koji0 drugi o#e #e3uje vei opseg i preci nost.

2.5.1. T#(!"# (!1+'+,+ 0 .$/#,0 8


Programski je ik C se svrstava u je ike sa sla#im tipovima podataka iako su eksplicitne de)inicije tipa o#ave ne. ;ogu se koristiti samo unapred de)inisani tipovi podataka u mogunost da im se daju pogodna korisnika imena i na taj nain povea dokumentarnost programa. ;e0ani am tipa je op8ti i odnosi se i na )unkcije i na promenljive. /ipovi podataka u je iku C mogu se glo#alno podeliti na osnovne i slo@ene $struktuirane&. Osnovni tipovi podataka su celo#rojni $int&> realni $)loat&> nakovni $c0ar&> na#rojivi $enumerated& i pra an $void&. Ovi tipovi podataka se koriste u gra3enju slo@eni0 tipova $ni ova> struktura> unija> itd.&. A sledeoj ta#eli su prika ani osnovni tipovi podataka ovog je ika sa napomenom o nji0ovoj uo#iajenoj primeni.

20

Predrag S. Stanimirovi

Osnove programiranja

T#( char signed char enum int unsigned int short int long unsigned long float double long double

M$&!)#.+ 0 3+.'!"#&+ 9 9 ; ; ; ; 4 4 4 = 9:

O(s$* : do ;<< 9;= do 9;> @;.>A= do @;.>A> @;.>A= do @;.>A> : do A<.<@< @;.>A= do @;.>A> ;.94>.4=@.A4= do ;.94>.4=@.A4> : do 4.;F4.FA>.;F< @.4G9: @= do @.4G9:@= 9.>G9: @:= do 9.>G9:@:= @.4G9:
4F@;

N+&$ + 6& skup znakova i mali bro-evi A?&(( skup znakova i veoma mali bro-evi BreCeni skup vrednosti Dali bro-evi, kontrola petl-i Eeliki bro-evi i petl-e Dali bro-evi, kontrola petl-i Eeliki bro-evi Astronomska rasto-an-a "au8ne aplika8i-e )ta8nost na A decimala* "au8ne aplika8i-e )ta8nost na 9A decimala* "au8ne aplika8i-e )ta8nost na 9F decimala*

do @.4G9:

4F@;

A C-u postoji skup operatora a rad sa #inarnim sadr@ajima koji su prika ani u ta#eli koja sledi.
O($)+'!) HH JJ K .. ,, L Z +5$ .$ Iogi8ka ( operaci-a )A"D* Iogi8ka (I( operaci-a )'R* (skl-u8ivo (I( )#'R* 6omeran-e udesno 6omeran-e ulevo Momplement

A sluaju me8oviti0 i ra a u kojima se pojavljuju ra liiti operatori tako3e va@e implicitna pravila kojima je de)inisan prioritet operacija. -a#rojaemo osnovnaF i Anarni operatori $na pr. ==& su uvek vi8eg prioriteta u odnosu na sve #inarne. i Hritmetike operacije su vi8eg prioriteta u odnosu na relacije pore3enja. i Operatori poredenja TS i US $manje ili jednako i vee ili jednako& su vi8eg prioriteta u odnosu na jednako i nejednako. i Pore3enja su uvek vi8eg prioriteta u odnosu na operatore kojima se manipuli8e #itovima. i Operatori a manipulisanje #itovima su vi8eg prioriteta u odnosu na sve logike operatore. i *ogiko % $aa& je vi8eg prioriteta u odnosu na logiko %*% $ J J &.

8$%!3)!. # '#(!"# 0 8
Celo#rojni tipovi su #rojaki tipovi i javljaju se kao o naeni ili neo naeni. Celo#rojne vrednosti o#u0vataju celo#rojne konstante> celo#rojne promenljive> i ra e i )unkcije. Celo#rojne konstante predstavljaju podskup skupa celi0 #rojeva iji opseg avisi od deklaracije ali i od konkretne implementacije. A C je iku celo#rojne konstante se predstavljaju kao niske ci)ara. %spred koje mo@e da stoji nak Z=Z a po itivne> a o#ave an je nak Z-Z a negativne vrednosti. Promenljivoj osnovnog celo#rojnog tipa int o#ino se dodeljuje memorijski prostor koji odgovara IosnovnojI jedinici memorije. -a taj nain> opseg vrednosti tipa int u /A(DO C na 1'-#itnim raunarima je V-!27'4> =!27'7W S V-21,>21,-1W> a na !2-#itnim raunarima je V-21"7"4!'"4> =21"7"4!'"7W S V-2!1>2!1-1W. Ditno je napomenuti da se mogu koristiti ! #rojna sistema> i toF dekadni $#a a 10&> oktalni $#a a 4&X 0eksadekadni $#a a 1'&. Leksadecimalni #rojevi poinju sa 0Q ili 0N. 6o voljene ci)re su 0> 1>..> . i slova a* b* #* d* e* f $ili )> +> ,> -> .> /&. Oktalni #rojevi poinju sa 0 a ostale ci)re mogu #iti 0> 1> ..7. -a primer> 012 je dekadno 10> 07' je dekadno '2. /ako3e> 0Q12 je dekadni #roj 14> 0Q2) je dekadno "7> 0NH! je dekadno 1'!. Celo#rojne konstante koje ne poinju sa 0 su oktalne. Opseg celi0 #rojeva se mo@e menjati primenom kvali)ikatora long i s&ort. 1vali)ikator long mo@e
21

Predrag S. Stanimirovi

Osnove programiranja

da povea opseg vrednosti celo#rojni0 promenljivi0 tipa int. Opseg vrednosti tipa long int $ili skraeno long& je V-21"7"4!'"4> =21"7"4!'"7W S V-2!1>=2!1-1W. /ip long int $ili long& garantuje da promenljive tog tipa nee au imati manje memorijskog prostora od promenljivi0 tipa int. Celo#rojne konstante koje su prevelike da #i #ile sme8tene u prostor predvi3en a konstante tipa int tretiraju se kao long konstante. Ove konstante se do#ijaju dodavanjem naka * $ili l& na kraj konstante> kao na primer 12',!74*. Hko program ne koristi velike cele #rojeve ne preporuuje se deklarisanje promenljivi0 sa long> jer se time usporava i vr8enje programa. 1vali)ikator s&ort int $ili skraeno s&ort& smanjuje opseg celo#rojni0 promenljivi0. Opseg promenljivi0 tipa s&ort uvek je V-21,>21,-1W> tj. one se uvek sme8taju u 2 #ajta. Apotre#om promenljivi0 ovog tipa ponekad se posti@e u8teda memorijskog prostora. ;e3utim> upotre#a ovi0 promenljivi0 mo@e da uspori i vr8avanje programa> jer se pre kori8enja u aritmetikim i ra ima ove promenljive trans)ormi8u u tip int. Hko smo sigurni da su vrednosti celo#roni0 promenljivi0 nenegativne> one se mogu deklarisati na jedan od sledei0 nainaF
unsigned int )skraNeno unsigned*, unsigned short int )skraNeno unsigned short*, unsigned long int )skraNeno unsigned long*.

/ime se interval po itivni0 vrednosti pro8iruje> jer #it a registrovanje naka gu#i to naenje. Promenljive tipa %nsigned int $skraeno %nsigned& mogu u imati samo po itivne celo#rojne vrednosti. Promenljive tipa %nsigned imaju rang V0> 28irinaCrei-1W. Prema tome> na 1'-#itnim raunarima opseg promenljivi0 tipa %nsigned int je V0>',,!,WSV0>21'-1W> a na !2-#itnim raunarima je V0>2!21WSV0>="2.".'72.,W. 1onstante tipa long se mogu cpeci)icirati eksplicitno dodajui su)iks * ili l posle #roja. -a primer> 777* je konstanta tipa long. Slino 0 ili % se mo@e koristiti a konstante tipa unsigned. -a primer> !A je tipa unsigned> a !A* je tipa unsigned long. A sluaju gre8ke integer overflov> program nastavlja da radi> ali sa nekorektnim re ultatom. Promenljive celo#rojnog tipa se deklari8u navo3enjem imena promenljivi0 i a imena nekog celo#rojnog tipa. %mena promenljivi0 se me3uso#no ra dvajaju are ima> a i a spiska se navodi ZXZ. A operatorima opisa je do voljeno i vr8iti inicijali aciju deklarisani0 promenljivi0. Primer. -avedeno je nekoliko deklaracija promenljivi0 celo#rojni0 tipova.
-ong int x sAort int Q +nsigned int <,v,O

1ljuna re int se mo@e i ostaviti u deklaracijama> pa se mo@e pisati


-ong x sAort Q, @=10 +nsigned <

R$+% # '#(!"# (!1+'+,+ 0 8


Promenljive ovi0 tipova u imaju a svoje vrednosti podskupove skupa realni0 #rojeva. A je iku C postoje tri vrste podataka realnog tipa> koji se ra likuju po tanosti predstavljanja podatakaF float $ a jednostruku tanost&> do%ble $ a dvostruku tanost& i long do%ble. A /A(DO C vrednosti tipa )loat se pamte u " #ajta $!2 #ita&> a dou#le u 4 #ajtova $'" #ita&. K)ekat je da vrednosti tipa )loat au imaju ' decimalni0 mesta> a dou#le 1' decimalni0 mesta. 2rednosti tipa long do%ble se sme8taju u 40 #itova. A /A(DO C> po itivne vrednosti a float su i opsega V!."R10-!4> !."R10!4W> dok su po itivne vrednosti a do%ble i opsega V1.7R10-!04>1.7R10=!04W. Po itivne vrednosti tipa long do%ble u imaju vrednosti i opsega V!."R10-".!2>1.1R10=".!2W.

22

Predrag S. Stanimirovi

Osnove programiranja

+a vrlo velike i vrlo male #rojeve mo@e se koristiti eksponencijalni apis> koji se sastoji i sledei0 delovaF celo#rojnog dela - ni ci)ara> decimalne take> ra lomljenog dela - ni ci)ara> naka a eksponent e ili K> eksponenta koji je adat celo#rojnom konstantom. Primeri realni0 #rojeva suF ",.> 1.2!",> 1.!.!4e-11> 2.2e=!.

Promenljive realnog tipa deklari8u se navo3enjem liste imena promenljivi0 i a imena tipa. Primer. 6eklaracije promenljivi0 realni0 tipovaF
,-oat x,Q do+D-e < ,-oat ==2.)1e#3$

T#( 6-+)
/ip c0ar je jedan od )undamentalni0 tipova podataka u je iku C. 1onstante i promenljive ovog tipa se koriste a repre entaciju karaktera. +nakovni tip $tip #&ar& de)ini8e ure3en skup osnovni0 nakova je ika C. /akav skup o#ra uje skup HSC%% nakova. /o nai da nakovnom tipu pripadaju i naci koji nemaju gra)iku interpretaciju. Svaki karakter se sme8ta u raunaru u jednom #ajtu memorije. Hko je #ajt i gra3en od 4 #itova> on mo@e da pamti 24S2,' ra liiti0 vrednosti. Promenlijve i konstante tipa c0ar u imaju a svoje vrednosti karaktere odnosno cele #rojeve du@ine jednog #ajta. /o nai da se nak u memoriji registruje u jednom #ajtu. Promenljive ovog tipa se deklari8u pomou kljune rei #&ar. Hko ispred deklaracije #&ar stoji re ervisana re signed> tada se speci)icira interval kodni0 vrednosti V-124>127WX ako je ispred #&ar navedeno unsigned> tada se speci)icira interval V0>2,,W. Primer. %ska om
;Aar ;a, ;D, ;;

promenljive ca> c#> cc deklari8u se kao promenljive tipa c0ar. 1arakter konstanta se pi8e i me3u apostro)a> kaoF ZaZ> Z#Z> ZcZ... A /ur#o C se koriste HSC%% kodovi karaktera> i oni predstavljaju nji0ovu numeriku vrednost. Promenljive tipa c0ar se mogu inicijali ovati na mestu deklarisanja. -a primer> mo@emo pisati
;Aar ;=2A2, s=2A2, x int i=1

5unkcije print)$& i scan)$& koriste R; a )ormat karaktera. Primer.


=rint,&3R;3, 2a2' =rint,&3R; R; R;3, 2A2, 2B2, 252' 6E AB5 E6

/ako3e> konstante i promenljive tipa c0ar se mogu tretirati kao mali integeri. Primer.
=rint,&3Rd3, 2a2' 6E 8) E6 =rint,&3R;3,8)' 6E a E6

-eke nakovne konstante se moraju speci)icirati kao ZZescapeZZ sekvence> tj. moraju se navesti ajedno sa nakom \ $#ackslas0&. Kscape sekvence se koriste pri kreiranju i la ni0 i ve8taja u cilju speci)iciranja upravljaki0 nakova. Z\nZ prela ak na novu liniju u ispisuX Z\tZ 0ori ontalni ta# $pomera kursor a , ili 4 po icija&X Z\rZ #arriage ret%rn $pomeranje kursora na poetak linije&X

23

Predrag S. Stanimirovi

Osnove programiranja

Z\#Z Z\aZ Z\ZZ Z\\Z

vraa kursor a jednu po iciju $povratnik> #ackspace&X alarmX apostro)X #ackslas0.


6E 3AB53 E6

Primer.
=rint,&3S3AB5S33' =rint,&32AB523'

A stringu je single Puote o#ian karakterF


6E 2AB52 E6

1arakter konstante se tako3e mogu prika ati pomou jednoci)rene> dvoci)rene ili troci)rene sekvence. -a primer Z\007Z> Z \07Z ili Z\7Z predstavlja #ell $alarm&. +a ula i i la karaktera se mogu koristiti )unkcije get#&ar$& i p%t#&ar$&. Ovi makroi su de)inisani u )ajlu stdio1&. +a uitavanje karaktera sa tastature koristi se get#&ar$&> dok se p%t#&ar$& koristi a prika ivanje karaktera na ekran. C o#e #e3uje standardni )ajl #t"pe1& koji sadr@i skup makroa a testiranje karaktera i skup prototipova )unkcija a konver iju karaktera. Oni postaju dostupni pomou preprocesorske direktive
Oinclude ,ctype.h.

;akroi u sledeoj ta#eli testiraju karaktere> i vraaju vrednosti true $0& i )alse $S0&. makro
isalpha)c* isupper)c* islower)c* isdigit)c* isxdigit)c* isspace)c* isalumn)c* ispunkt)c* isprint)c* iscntrl)c*

vrednost ( se vra?a za c je slovo c je veliko slovo c je malo slovo c je #roj c je 0eksadecimalan #roj c je #lanko c je slovo ili #roj c je interpunkcijski nak c je terminalni karakter c je kontrolni karakter

/ako3e> u standardnoj #i#lioteci Tct<pe.0U ukljuene su i )unkcije toupper$c& i tolo:er$c& a odgovarajuu konver iju karaktera. Ove )unkcije menjaju vrednost argumenta c koja je sme8tena u memoriji.
toupper)c* men-a c iz malog u veliko slovo2 tolower)c* men-a veliko slovo u malo2 toascii)c* men-a c u A?&(( kod2

K! "$)/#.+ '#(!"+ (!1+'+,+ # ,+s'


;nogi je ici visokog nivoa imaju strogu tipi aciju /akvi je ici nameu tokom prevo3enja slaganje tipova podataka koji su upotre#ljeni u aritmetikim operacijama> operacijama dodeljivanja i po ivima )unkcija. A je iku C se mogu pisati operacije u kojima se koriste ra liiti tipovi podataka $me8ovite operacije&. Svaki aritmetiki i ra poseduje vrednost i tip. /ip re ultata aritmetiki0 i ra a avisi od tipova operanada. Hko su kod #inarni0 aritmetiki0 operatora o#a operanda istog tipa> tada je tip re ultata jednak tipu operanada. 1ada to nije ispunjeno> vr8i se automatska konver ija operanda ni@eg 0ijerar0ijskog nivoa u tip operanda vi8eg nivoa. Osnovni tipovi podataka imaju sledei 0ijerar0ijski nivo
char,int,long,float,double.

1ori8enjem re ervisani0 rei %nsigned i long povi8ava se 0ijerar0ijski rang> tako da je detaljniji pregled 0ijerar0ijski0 nivoa sledeiF
char, int ,unsigned ,long , unsigned long ,float , double , long double.

24

Predrag S. Stanimirovi

Osnove programiranja

-a primer> ako su o#a operanda tipa int> svaki aritmetiki i ra koji je i gra3en od nji0 u ima vrednost tipa int. Hko je jedna od promenljivi0 tipa s&ort> ona se automatski konvertuje u odgovarajuu vrednost tipa int. Hutomatska konver ija tipova se javlja i pri dodeljivanju vrednosti. 1od operatora dodeljivanja vrednosti> uvek se vrednost i ra a sa desne strane konvertuje u vrednost prema tipu promenljive sa leve strane operatora dodeljivanja. Hko je promenljiva d tipa dou#le> a i ra i tipa int> tada se pri dodeljivanju dSi vrednost promenljive i konvertuje u odgovarajuu vrednost tipa do%ble. Hko je i promenljiva tipa int> a d je neki i ra tipa dou#le> tada u i ra u iSd> prevodilac vrednost i ra a d konvertuje u odgovarajuu vrednost tipa int> pri emu se gu#e vrednosti decimalni0 po icija. Osim ve pomenute automatske konver ije tipova podataka mo@e se i vr8iti i eksplicitna konver ija tipova. Kksplicitna konver ija se posti@e operatorom kast $#ast&> o#lika $tip&Ti ra U. Postoje situacije kada je konver ija tipova po@eljna> iako se ne i vr8ava automatska konver ija. /akva situacija nastaje na primer pri deljenju dva cela #roja. A takvim sluajevima programer mora eksplicitno da na nai potre#ne konver ije. /akve konver ije su neop0odne da #i se i ra tao i raunao. Primer. Hko je promenljiva i tipa int> tada se i ra om &do+D-e'i njena vrednost prevodi u odgovarajuu vrednost tipa dou#le. Operator kast je istog prioriteta i asocijativnosti kao i ostali unarni operatori. 1ast operator se mo@e primenjivati na i ra e. Primer.
)float*iP@ je ekvivalentno sa ))float*i*P@ )double*x3>> je ekvivalentno sa ))double*x*3>>

/ako3e> mo@emo pisati


x3)float*))int*yP9* )double*)x3>>*

Posle i ra a x3)int*;.@P)int*4.; vrednost a ! postaje '.

V)s'$ ,! "$)/#.$ '#(!"+


1onver ija tipa mo@e #itiF - standardna n ugra3ena u je ik ili - korisnika n de)ini8e je programer a svoje tipove. Standardne konver ije su> na primerF - konver ije i tipa int u tip float> ili i tipa #&ar u tip int i slino. 1onver ija tipa mo@e #itiF - implicitna n prevodilac je automatski vr8i> ako je do voljena> - eksplicitna n a0teva programer. Eedan nain a0tevanja eksplicitne konver ije sastoji se u upotre#i operatora kast $cast& u je iku C. Ovaj operator se primenjuje pomou i ra a o#lika )tip*izraz. Ee ik C== uvodi " speci)ina kast operatora. Postoji i drugi me0ani am konver ije $konver ioni konstruktor&.

K! s'+ '$ 1onstantni tip je i vedeni tip. 6o#ija se i nekog osnovnog tipa pomou speci)ikatora #onst. 1onstantni tip adr@ava sve oso#ine osnovnog tipa> samo se podatak ne mo@e menjati. - PrimeriF ;onst ,-oat =i=3.1$ ;onst ;Aar =-+s=2"2 1onstanta mora da se inicijali uje pri de)inisanju. Prevodilac esto ne odvaja memorijski prostor a konstantu. 1onstante mogu da se koriste u konstantnim i ra ima koje prevodilac tre#a da i rauna u toku prevo3enja. -a primer> konstante mogu da se koriste u i ra ima koji de)ini8u dimen ije ni ova.

25

Predrag S. Stanimirovi

Osnove programiranja

Amesto sim#oliki0 konstanti koje se uvode sa _define preporuka je koristiti tipi irane
konstante koje se uvode sa #onst. 6osledno kori8enje konstanti u programu o#e #e3uje podr8ku prevodioca u spreavanju gre8aka.

S#/$!4 !($)+'!)
Anarni operator si<eo,&' daje a re ultat #roj #ajtova potre#ni0 a sme8tanje svog argumenta. 2rednost i ra a si<eo,&oD>' se i raunava a vreme kompilovanja. Hrgument mo@e #iti ime promenljive> ime tipa ili i ra . Hko je ob' ime promenljive> tada je vrednost i ra a si<eo,&oD>' #roj #ajtova potre#ni0 a registrovanje te promenljive u memoriji. Hko je operand ob' ime tipa> tada je vrednost i ra a si<eo,&oD>' du@ina tog tipa> odnosno #roj #ajtova potre#ni0 a registrovanje elemenata tog tipa. Hko je argument neki tip> ime tog tipa se mora navesti i me3u agrada. -ared#a sizeof se koristi kada se generi8e khd koji avisi od veliine tipa.

Os !" $ +)#'&$'#5,$ !($)+6#.$


Osnovne aritmetke operacije suF = sa#iranje> - odu imanje> R mno@enje> G deljenje> Hko su o#a operanda operacije deljenja G celi #rojevi tada se i realnog #roja koji predstavlja nji0ov kolinik od#acuje decimalna taka i ra lomljeni deo. -a primer> 1,G2S7> 2G"S0> -7G2S-!> 1,`2S1> 7.G"S1.7". Operacija - mo@e #iti i unarna> i tada se koristi a promenu naka svog argumenta $unarni minus&. Sve operacije poseduju prioritet i asocijativnost $redosled&> kojima se determini8e postupak evaluacije i ra a. Hko u i ra u postoje operacije ra liitog nivoa prioriteta> operacije se i vr8avaju po opadajuem nivou prioriteta. Prioritet se mo@e promeniti upotre#om agrada. Hsocijativnost odluuje o redosledu i vr8avanja operacija istog prioriteta. *evoasocijativne operacije se i vr8avaju s leva na desno a desnoasocijativne s desna na levo. -ajvi8i priorirtet ima operacija promene naka> atim levoasocijativni multiplikativni operatori R> G i `> dok su najni@eg nivoa prioriteta levoasocijativni aditivni operatori = i -. Operacija inkrementiranja $uveanja& == i operacija dekrementiranja $umanjenja& -- su unarne operacije sa asocijativno8u s desna na levo. A ta#eli prioriteta operatori au imaju sledee mestoF najvi8eg prioriteta su unarni operatori -X ==> --X ni@eg prioriteta su multiplikativni R> G> `X dok su najmanjeg prioriteta aditivni operatori => -. Operacije == i -- se mogu pisati ispred argumenta $pre)iksno& ili i a argumenta $post)iksno&. ;ogu se primenjivati nad promenljivima a ne mogu na konstantama ili i ra ima. Primer. ;o@e se pisati ==i> i==> ##cnt> cnt-- a ne mo@e 777==> ==$aR#-1& . Svaki od i ra a ==i> i==> --i> i-- ima odre3enu vrednost. % ra i ==i> i== u rokuju inkrementiranje vrednosti promenljive i u memoriji a 1> dok i ra i --i> i-- u rokuju dekrementiranje njene vrednosti a 1. % ra om ==i vrednost a i se inkrementira pre nego 8to se upotre#i> dok se sa i== vrednost a i inkrementira posle upotre#e te vrednosti. Slina pravila va@e a i ra e ##i> i##> samo 8to se radi o dekrementiranju te vrednosti. Operatori == i -- ra likuju se od operatora => #> R> G> ` po tome 8to menjaju vrednosti varija#le u memoriji> tj. operatori == i ## poseduju #oni e)ekat.

;#3%#!'$5,$ +)#'&$'#5,$ 40 ,6#.$

26

Predrag S. Stanimirovi

Osnove programiranja

6eo C je ika jesu standardne #i#lioteke koje sadr@e esto kori8ene )unkcije. Di#lioteka mat0.0 sadr@i deklaraciju )unkcija i matematike #i#lioteke. Sadr@aj ove datoteke se ukljuuje u program nared#om
Oinclude,math.h..

-eke od )unkcija i ove #i#lioteke su date u nastavku. Po nate su )unkcije sin&x'> ;os&x', tan&x'> ex=&x'> -og&x'> -og10&x'> sTrt&x'> ,aDs&x'SJQJ. Sledi opis najva@niji0 )unkcija i ove #i#ilioteke.
;ei-&x'> re ultat je najmanja celo#rojna vrednost ne manja od Q $pla)on od Q&.

(e ultat )unkcije ,-oor&x' je najvea celo#rojna vrednost ne vea od ! $pod od Q&.


=oO&x,Q'=QY<. Hko je !S0 mora da #ude "U0. Hko je !T0 tada " mora da #ude ceo #roj. asin&x' vrednost )unkcije arcsin$Q&> QV-1>1W.

arccos$Q&> QV-1>1W. atan&x' vrednost )unkcije arctg$Q&> QV-G2> G2W. atan2&x,Q' vrednost )unkcije arctg$QG<&> QV->W. -e mo@e istovremeno da #ude QS<S0. sinA&x' vrednost )unkcije s0$Q&. ;osA&x' vrednost )unkcije c0$Q&. tanA&x' vrednost )unkcije t0$Q&. mod,&x,UQ' vrednost )unkcije je ra lomljeni deo realnog #roja ! sa pred nakom tog #roja. A argumentu "> kao #oni e)ekat> daje se celo#rojni deo #roja Q sa pred ankom tog #roja. Hrgumenti ! i " su tipa do%ble.
a;os&x' vrednost )unkcije ,mod&x,Q' vrednost )unkcije je ostatak realnog deljenja !G" sa pred nakom argumenta !. Standard ne

preci ira re ultat u sluaju "S0. Hrgumenti ! i " su tipa do%ble. -a primer> )mod$".7>2.!& S 0.1. A #i#lioteci Tstdli#.0U nala e se )unkcije ra liite namene. -avedene su neke od nji0. aDs&n' apsolutna vrednost> gde su vrednost argumenta i )unkcije tipa int> -aDs&n' apsolutna vrednost> gde su vrednost argumenta i )unkcije tipa long> rand&' vrednost )unkcije je pseudosluajni #roj i intervala V0>(H-6CmaQW> gde (H-6CmaQ sim#olika konstanta ija vrednost avisi od raunara i nije manja od !27'7>
srand&n' postavlja poetnu vrednost sekvence pseudosluajni0 #rojeva koju generi8e rand&'.

Podra umevana poetna vrednost je 1. /ip argumenta je %nsigned int. Ova )unkcija ne daje re ultat. ova )unkcija vr8i konver iju realnog #roja i ni a HSC%% ci)ara $karaktera& o#lika cc....cc... u #inarni ekvivalent. Hrgument s je string a re ultat je tipa do%ble. Pre konver ije se #ri8u poetne pra nine. 1onver ija se avr8ava kod prvog naka koji ne mo@e da #ude deo #roja.
ato,&s'
Eee

ova )unkcija vr8i konver iju celog #roja i ni a HSC%% ci)ara $karaktera& o#lika cc... u #inarni ekvivalent. Hrgument s je string a re ultat je tipa int. Poetne pra nine se ignori8u. 1onver ija se avr8ava kod prvog naka koji ne mo@e da #ude deo #roja.
atoi&s' ato-&s' ova )unkcija vr8i konver iju celog #roja i ni a HSC%% ci)ara $karaktera& o#lika cc... u

#inarni ekvivalent tipa long. Hrgument s je string a re ultat je tipa long. Poetne pra nine se ignori8u. 1onver ija se avr8ava kod prvog naka koji ne mo@e da #ude deo #roja.

O($)+6#.+ 1!1$%.#"+ .+ 0 8
A C je iku se operator S tretira kao operator dodeljivanja. -jegov prioritet je manji od prioriteta do sada ra matrani0 operacija> a njegova asocijativnost je ggs desna na levoZZ. % ra dodeljivanja vrednosti je o#lika
,promenl-iva. 3 ,izraz.2

na ijoj je desnoj strani proi voljan i ra . 1ompletan i ra je avr8en sa X $semicolon&. 2rednost i ra a na desnoj strani se dodeljuje promenljivoj sa leve strane. Hko su tipovi promenljive i i ra a ra liiti>

27

Predrag S. Stanimirovi

Osnove programiranja

vr8i se konver ija vrednosti i ra a u odgovarajuu vrednost saglasno tipu promenljive. 2rednost i ra a dodeljivanja jednaka je vrednosti i ra a sa njegove desne strane. Primer. Sledea sekvenca i ra a
Q=2 <=3 x=Q"<

mo@e se e)ikasnije apisati u o#liku


x=&Q=2'"&<=3'

Primer. +#og desne asocijativnosti operatora S je i ra QS<S S0 ekvivalentan i ra u


x=&Q=&<=0''.

Primer. Operator <SQ==X je ekvivalentan sledeoj sekvenci operatoraF <SQX QSQ=1X Operator <S##Q je ekvivalentan sledeim operatorima QSQ#1X <SQX Posle i vr8avanja operatora
x=Q=1 <=&x"&""Q''E3

do#ijaju se sledee vrednosti promenljivi0F


x=1, Q=2, <=&1"2'E3=8.

Operatori
x=Q=1 x=Q=1 <=&x"&Q""''E3 t=&x"Q""'E3

daju sledee vrednosti promenljivi0F


x=1, Q=2, <=&1"1'E3=(, t=&1"1'E3=(.

Primer.

Operatori slo@enog dodeljivanja suF S> =S> -S> RS> GS> `S> JJS> aS>YS> JS Svi ovi operatori imaju isti prioritet i asocijativnost s desna na levo. Hko su l i r proi voljni i ra i> tada je i ra -Ko=L=r jednak -=-Ko=L r. -a primer> Q=S2X je ekvivalentno sa QSQ=2X Q`S2X je ekvivalentno sa QSQ`2X

O($)+6#.$ (!)$<$ .+ # %!*#5,$ !($)+6#.$


A je iku C postoje samo numeriki tipovi. -e postoji ak ni logiki tip podataka. +a predstavljanje logiki0 vrednosti koriste se celo#rojni podaci tipa int. 2rednost 0 se tumai kao logika neistina $)alse&> a #ilo koja vrednost ra liita od nule tumai se kao logika istina $true&.

<pera)ije pore:enja
Operacije pore3enja suF T> TS> U> US> SS> ^S. (e ultat i vr8enja ovi0 operacija je 1 ako je ispunjeno pore3enje> a inae je 0. Ove operacije se i vr8avaju s leva na desno. Operacije pore3enja su ni@eg prioriteta od aritmetiki0 operacija. Anutar operacija pore3enja> operacije T> TS> U> US su vi8eg prioriteta od operacija SS i ^S.

28

Predrag S. Stanimirovi

Osnove programiranja

-a primer> QU<=! je ekvivalentno sa QU$<=!&.

*ogike operacije
Postoje tri logike operacijeF V je operacija negacije> UU je konjunkcija> i WW predstavlja opreaciju disjunkcije. (e ultat primene ovi0 operacija je 0 ili 1. Operacija negacije ^ je unarna> i daje re ultat 1 ako je vrednost operanda 0> a vrednost 0 ako je vrednost operanda 1. Operacija konjunkcije aa je #inarna> i daje 1 ako su o#a operanda ra liita od 0> a 0 u suprotnom. Hko je levi operand jednak 0 pri i vr8enju operacije konjunkcije desni operand se ignori8e. Operacija disjunkcije JJ je #inarna> i daje 1 ako je #ar jedan operand ra liit od 0> a 0 inae. Hko je vrednost levog operanda jednaka 1 pri i vr8enju operacije disjunkcije desni operand se ignori8e. -ajvi8i prioritet ima operacija negacijeX sledeeg nivoa prioriteta je operator konjunkcije> dok je najni@eg nivoa prioriteta operator disjunkcije. Prema tome>
=WWT UU r xK=Q UU r

je isto sa =WW&T UU r', je isto sa &xK=Q'UU r.

Primer. -apisati operatore dodeljivanja kojima se reali uje sledeeF a& Promenljivoj p se dodeljuje vrednost 1 ako se od odseaka !> "> z mo@e konstruisati trougao> a inae 0.
p3))xPy.z* HH )xPz.y* HH )yPz.x**2

#& Promenljivoj p se dodeljuje vrednost 1 ako se pravougaonik sa stranicama a i b mo@e ceo smestiti u pravougaonik sa stranicama # i d> a inae 0.
p3))a,c*HH )b,d* JJ )a,d*HH )b,c**2

2.5.2. S'+ 1+)1 # '#(!"# (!1+'+,+ 0 P+s6+%70


Pascal je primer programskog je ika kod kojeg je astupljen koncept jaki0 tipova podataka koji a0teva eksplicitne de)inicije tipova i podra umeva tipove atvorene u odnosu na operacije koje se na njima mogu i vr8avati. Standardni tipovi podataka u Pascal-u su 2nteger> 3eal> +oolean i ,&ar.

8$%!3)!. # '#( 9I '$*$):


Celo#rojni tip se koristi a rada sa celim #rojevima. A standardnom Pascal-u predvi3a se postojanje samo jednog celo#rojnog tipa iji je opseg #rojeva odre3en implementacijom na konkretnom sistemu. +a pristup graninim vrednostima postoji konstanta ;HN%-/> tako da je opseg #rojeva odre3en granicama -;HN%-/ i ;HN%-/. A okviru celo#rojnog tipa do voljene su sledee operacijeF = sa#iranje # odu imanje R mno@enje 6%2 celo#rojno deljenje ;O6 ostatak celo#rojnog deljenja. Ovde su speci)ine operacije 6%2 i ;O6. K)ekti ovi0 operacija ilustrovani su sledeim primerimaF
< D(E ; < D'D @ A D'D @ 3 ; )a ne ;.<* 3; 3:

29

Predrag S. Stanimirovi
> D'D @ 39

Osnove programiranja

A slo@enim i ra ima operacije R> 6%2 i ;O6 su vi8eg prioriteta u odnosu na = i -. Postoje tako3e etiri standardne )unkcije koje daju re ultat celo#rojnog tipaF
AQ? )#* ?RR)#* $RB"&)#* R'B"D )#*

% raunava apsolutnu vrednost #roja X. % raunava X2. Odseca se celo#rojni deo argumenta X koji tre#a da #ude realan #roj. Hrgument X> koji tre#a da #ude realan #roj> aokru@uje se na ceo #roj primenom pravilaF
$RB"&)#P:.<*, #:, #,:.

R'B"D )#* 3 $RB"&)# :.<*,

T#( )$+% #- 3)!.$"+ 9R$+%:


Standardni tip a rad sa realnim #rojevima u Pascal-u je tip 3eal. O#u0vata #rojeve a ije se predstavljanje koristi standardni )ormat pokretne take> a do voljene su standardne aritmetike operacijeF = sa#iranjeX odu imanjeX R mno enjeX G deljenje.

Standardne )unkcije HDS$N& i SM($N& u sluaju argumenata tipa 3eal daju re ultat tipa 3eal> dok su re ultati standardni0 )unkcijaF S%-$N&> COS$N&> /H-$N&> KNP$N&> H(C/H-$N& i SM(/$N& tipa 3eal a #ilo koje vrednosti argumenta.

Z +,!" # '#( (!1+'+,+ 98-+):


Prema standardu je ika Pascal nakovni tip podataka kao vrednosti o#u0vata pojedinane nakove i nekog skupa nakova koji je odre3en samom implementacijom je ika. A praksi se naje8e javljaju implementacije kod koji0 je to skup nakova HSC%% koda. 1onstante nakovnog tipa )ormiraju se tako 8to se pojedinani naci o#u0vate apostro)ima> kao na primerF Z H Z > Z D Z > Z , Z > Z _ Z . A skupu nakova ,&ar tipa va@i ure3enost koja odgovara ure3enosti u kodnoj ta#lici koja se koristi. 2a@iF
ZHZ T ZDZ T ZCZT Z6Z T ZKZT p T Z+Z T Z0ZT Z1Z T Z2Z T Z!Z T Z"Z T ... T Z.Z

6ve standardne )unkcije omoguavaju preslikavanje skupa nakova u skup prirodni0 #rojeva i o#rnuto. Pri tome se koristi ure3enost same kodne ta#lice na osnovu koje je de)inisan skup nakova tipa ,&ar. /o su )unkcijeF
'RD ) & * &SR) ( *

- daje redni #roj naka C u ure3enom skupu nakova tipa ,&ar. - daje nak koji je i-ti u skupu nakova.

Ove dve )unkije su pove ane sledeim relacijamaF CL($O(6$C&&& S C i O(6$CL($%&& S %. 2rednosti tipa C0ar se mogu porediti. ;ogu se koristiti standardni operatori pore3enja S> TU> T> TS> U> US. Hko sa f o naimo #ilo koju od ovi0 operacija> a sa CL1 i CL2 promenljive tipa C0ar> onda va@i relacija CL1fCL2 ako je O(6$CL1&fO(6$CL2&. A Pascalu> vrednost )unkcije mo@e da #ude neka primitivna vrednost ili pointer> ali ne i neka kompo itna vrednost. Ovo ogranienje esto puta ini kodiranje nelagodnim. -a primer> @elimo da napi8emo )unkciju koja ima neki slog a svoj re ultatX tada smo prinu3eni da pi8emo pogodnu proceduru sa promenljivim parametrom odgovarajueg tipa> koja ne mo@e da #ude po vana unutar nekog i ra a.

30

Predrag S. Stanimirovi

Osnove programiranja

2.6. D#s,)$' # '#(!"# (!1+'+,+ 0 ()!*)+&s,#& .$/#6#&+


7rupa diskretni0 tipova o#u0vata sve tipove podataka sa konanim> diskretnim skupom vrednosti. A takvom skupu vrednosti je de)inisana relacija poretka. 6iskretnost i ure3enost skupa vrednosti omoguava de)inisanje intervala i upotre#u neki0 op8ti0 ajedniki0 )unkcija i atri#uta u ovoj grupi tipova. A diskretne tipove podataka svrstavaju se svi celo#rojni tipovi podataka> kao i svi drugi elementarni tipovi sa diskretnim skupom vrednosti kao 8to su nakovni i logiki tipovi. Pose#no naajni u grupi diskretni0 tipova su tipovi na#rajanja $enumerated t<pes& i intervalni tipovi neki0 je ika.

2.6.1. N+3)!.#"# '#(!"# 0 ()!*)+&s,#& .$/#6#&+


1oncept diskretni0 tipova podataka se sa slinim karakteristikama javlja u mnogim programskim je icima sa ra likama koje se uglavnom odnose na sintaksu de)inicija.

P+s6+%
1oncept tipova na#rajanja se prvi put pojavljuje #a8 u je iku Pascal. /o je #ila jedna od va@ni0 novina ovog je ika. -ave8emo neke de)inicije diskretni0 tipova podatakaF
'=($ Q'TE 3 )crvena,bela,zelena,plava*2 DA"( 3 )ponedel-ak,utorak,sreda,cetvrtak,petak,subota,nedel-a*2 U'D 3 )-an,feb.mar,apr,rna-,-un,-ul,avg,sep,okt,nov,dec*2 ?$A$B? 3 )'",'00*2 6RAE&( 3 )sever,-ug,istok,zapad*2

P)!*)+&s,# .$/#, 8
A programskom je iku C se u okviru de)inicija tipova na#rajanja eksplicitno koristi re en%m. 7ore datim tipovima podataka u ovom je iku odgovaraju sledee de)inicijeF
$ $ $ $ $ 0& Q'TE +crvena,bela,zelena,plava/2 0& DA"( +ponedel-ak,utorak,sreda,cetvrtak,petak,subota,nedel-a/2 0& DE?E&( +-an,feb,mar,apr,ma-,-un,-ul,avg,sep,okt,nov,dec/2 0& ?$A$B? +'",'00/2 0& 6RAE&( +sever,-ug,istok,zapad/2

2.6.2. P!1# '$)"+% # '#(!"#


A je iku Pascal> tip mo@e #iti de)inisan kao podinterval #ilo kog pret0odno de)inisanog rednog tipa. (edni tip i koga je i veden podintervalni tip predstavlja o#u0vatajui tip podintervalnog tipa. 6e)inicija podintervala na naava najmanju i najveu vrednost> pri emu donja granica intervala ne sme #iti vea od gornje. -ije do voljen podinterval od tipa koji nije rednog tipa n na primer od tipa (eal. -a primer> a deklaraciju
var A1 9..9:2 Q1:..@:2 &1;:..@:2

o#u0vatajui tip jeste integer. /ako3e> tip de)inisan sa


RadniDani 3 6on..6et2

je podinterval rednog tipa


Dani 3 )6on,Bto,?re,&et,6et,?ub,"ed*2

2.7. A ! #& # '#(!"#


1od je ika sa jakim tipovima podataka o#ino postoji i mogunost anonimni0 de)inicija tipova podataka> kao koncept kojim se sla#e akoni eksplicitne ekvivalentnosti tipova podataka i omoguava strukturna ekvivalentnost. /o je koncept koji do voljava da se promenljive de)ini8u #e eksplicitnog

31

Predrag S. Stanimirovi

Osnove programiranja

navo3enja imena tipa podataka kome pripadaju ve se tip de)ini8e samo strukturno> anonimno #e imena. -a primer> umesto de)inicijeF
'=($ MITB& )on, off*2 (.T 1 MITB&2

mo@e se pisatiF
(,T 1 )on,off*2

Ovaj koncept je op8ti a sve korisnike tipove podataka u je icima koji do voljavaju uvo3enje korisniki0 tipova. -a primer> u ;oduli 2 mogui su sledei opisi promenljivi0 preko anonimni0 de)inicija intervalni0 tipova podatakaF
EAR (ndex 1 !9 .. 9::%2 Raz 1 ! 9 .. 9%2

Odgovarajue deklaracije u Pascal-u su


EAR (ndex 1 9.. 9::2 Raz 1 9..92

2.>. U(!')$3+ '=($1$4 #s,+/+ 0 8


1ljuna re typedef do voljava dodeljivanje alternativni0 imena postojeim tipovima podataka> kao i de)inisanje novi0 tipova podataka. Primer. %ska om
typedef int celi2

de)ini8e se ime #eli kao ekvivalentno kljunoj rei int. Sada se mo8e pisati
celi i, -, n2

% ra
typedef double vektor!;:%2

de)ini8e tip vektor kao ni od 20 elemenata tipa double. Hnalogno> tip matri#a kao dvodimen ionalni ni elemenata tipa dou#le mo@e se de)inisati na sledei nainF
typedef double matrica!9:%!9:%2

-akon ovi0 de)inicija tipova se imena vektor i matrica mogu koristiti kao tipovi podataka.

3. ULAZ I IZLAZ PODATAKA


A programskim je icima postoji vei #roj )unkcija a uno8enje i i davanje podataka. Pomou nared#i ula a i i la a program do#ija neop0odne podatke i prika uje do#ijene re ultate. Ove )unkcije se koriste a standardni ula i i la podataka preko tastature i monitora. Postoje varijante ovi0 )unkcija koje se mogu koristiti a pristup datotekama.

3.1. U%+/ # #/%+/ 0 .$/#,0 PAS8AL


+a ula i i la podataka u je iku PHSCH* koriste se standardne procedure ula a $read& i i la a $:rite& koje operi8u sa standardnim )ajlovima $datotekama& input i output. -a standardnim input i output )ajlovima in)ormacije se ra #ijaju na linije nakova koje se me3uso#no ra dvajaju o#ele@jem kra'a lini'e1 /akve linije su linije na ekranu monitora> ili 0artiji na stampau. 1raj )ajla se tako3e o naava specijalnom o nakom $markerom& koja avisi od implementacije. $A /A(DO PHSCH*-u kraj linije se o naava sa C(-Cerriage (eturn> a do#ija se

32

Predrag S. Stanimirovi

Osnove programiranja

pritiskom na taster K-/K( ili (K/A(-. 1od ovog naka je 1! i nema gra)iku interpretaciju. O#ele@je kraja )ajla se do#ija istovremenim pritiskom na C/(* i +&. -ared#e ula a suF a& read 4a1A a2A...A an6 - reali uje itanje n vrednosti i standardnog input )ajla> i dodeljuje uitane vrednosti promenljivima a1> a2>...>an> redom. /ip ula ni0 promenljivi0 mora odgovarati tipu ula ni0 podataka. -a primer> ako celo#rojnim promenljivim )> +> ,> - tre#a dodeliti vrednosti 2>17>" i .> u program tre#a uneti nared#uF read$)> +> ,> -&> i u ula ni )ajl uneti vrednostiF 2 17 " . #& readln4a1A a2A...A an6 - reali uje itanje i standardnog input )ajla ni a od n vrednosti> dodelu redom promenljivima a1> a2> ... an> i propu8tanje preostali0 vrednosti do poetka sledee linije input )ajla. -a primer> ako #i realnim promenljivim )> +> ,> - tre#alo dodeliti vrednosti 2.!> -,.2> 4.!" i ,.,,> u program tre#a uneti nared#uF readln 4AA BA CA D6> i u ula ni )ajl uneti vrednostiF 2.! -,.2 4.!" ,.,, $u /A(DO PHSCH*-u i a poslednjeg #roja tre#a o#e #editi o#ele@je kraja linije pritiskom tastera K-/K(&. A sluaju da su i a etvrtog ula nog podatka ispisane neke vrednosti> nji0 #i nared#a readln ignorisala. c& readln - reali uje propu8tanje linije inp%t )ajla do poetka sledee linije. Pri uitavanju in)ormacija vr8i se nji0ovo pretvaranje i spolja8njeg o#lika u unutra8nji o#lik> koji avisi od tipa promenljive. Odgovarajue vrednosti promenljivi0 mogu pripadati celo#rojnom> realnom ill nakovnom tipu. -edo voljena je upotre#a promenljivi0 logikog tipa. -ared#e read i readln pri itanju vrednosti promenljivi0 celo#rojnog i realnog tipa anemaruju pra nine koje pret0ode #roju. ;e3utim> u sluaju nakovni0 promenljivi0 pra nine se ne ignori8u> ve se tretiraju kao ravnopravni nakovi linije i dodeljuju odgovarajuim nakovnim promenljivim. -a primer> ako je u odeljku a opis promenljivi0 datoF
var rea-Dro>7rea;eoDro>7integer <-,<27;Aar

i u odeljku nared#iF readln4realbrojA z1A z2A )eobroj6 tada e u sluaju #ilo koje od sledei0 ula ni0 linijaF a& !20.0HD707 #& !2K1HD 707 c& =!.2K = 02HD 707 d& !20.0HD 707 21! !", promenljive realbrojA z1A z2A )eobroj do#iti iste vrednosti> i to !20.0> ZHZ> ZDZ> 707. Sledi nekoliko o#lika nared#e i la aF a6 Brite4a1A a2A ...> an6 - prika uje vrednosti promenljivi0 a1> a2>...> an u jednu liniju standardnog o%tp%t )ajlaX b6 Briteln4a1A a2A...> an6 - prika uje vrednosti promenljivi0 a1> a2> ...> an u jednu liniju i posle ispisa poslednje vrednosti prela ak na poetak sledee linije o%tp%t )ajlaX )6 Briteln - reali uje propu8tanje linije o%tp%t )ajla i prela ak na poetak sledee linije. Promenljive a1A a2>...> an i liste nared#e i la a mogu pripadati celo#rojnom> realnom> nakovnom ili logikom tipu. Primer.
=rogram +-a<i<-a<&in=+t, o+t=+t'

33

Predrag S. Stanimirovi

Osnove programiranja

var x,Q,<7integer Degin read-n&x,Q' &Edode-a vrednosti =romen->ivim x i Q i< >edne +-a<ne -ini>e i =re-a<a@ na =o;eta@ s-ede;e -ini>e E' read-n &E=ro=+stan>e -ini>e =ri ;itan>+ E' read-n&<' &E dode-a vrednosti =romen->ivo> < i =re-a<a@ na s-ede;+ -ini>+ E' Orite-n&x' &Eis=is vrednosti x i =re-a<a@ na s-ede;+ -ini>+ E' Orite-n &E=ro=+stan>e te@+;e -ini>e i =re-a<a@ na s-ede;+E' Orite-n&Q' &E is=is vrednosti Q i =re-a<a@ na s-ede;+ -ini>+ E' Orite-n&<' &E is=is vrednosti < i =re-a<a@ na s-ede;+ -ini>+ E' end.

Hko se na ula u unesu sledede vrednostiF


#11 !! $!2 2! 3! 3$

na i la u se do#ijaF
#11 2! $!2

jirina i la nog polja> odnosno prostora re ervisanog a prika ivanje jednog podatka> avisi od implementacije je ika. O#lik ispisa promenljive u i la nom polju odgovara tipu promenljiveF celo#rojne promenljive se ispisuju kao cell #rojevi> realne promenljive - kao realni #rojevi sa pokretnom decimalnom takom i normali ovanom mantisom> logike promenljive kao logike konstante true ili )alse> nakovne promenljive kao nak. jirina i la nog polja a svaku promenljivu se mo@e adati eksplicitno u nared#i i la a. -a primer> nared#om 4rite$aF4& se a ispis promenljive a odvaja i la no polje od osam po icija. A nared#i Orite&a7 i<-a<no=o->e' 8irina i la nog polja a a se de)ini8e konstantom i la nopolje. Hko promenljiva au ima manje po icija nego 8to joj do voljava 8irina polja> tada se suvi8ne po icije popunjavaju pra ninama sa leve strane. Hko 8irina polja nije dovoljna a ispis promenljive> tada se polje pro8iruje a potre#an #roj po icija. (adi ispisa promenljivi0 realnog tipa u o#liku sa )iksnom decimalnom takom adaje se 8irina m polja i #roj ci)ara i a decimalne take n. /ada nared#a i la a ima sledei o#likF Orite&x7m7n'. Hko se ne ada #roj naajni0 ci)ara i a decimalne take> tada se realna promenljiva i daje u o#liku sa pokretnom decimalnom takom. Hko je radi ispisa logike promenljive u nared#i i la a dat #roj po icija> to se suvi8ne po icije popunjavaju pra ninama ispred tr%e ili false. Pri ispisu promenljivi0 nakovnog tipa> ako je 8irina polja vea od jedan> to se suvi8ne po icije ispunjavaju pra ninama levo od naka koji se ispisuje. Prvi nak u listi nared#e i la a 4rite slu@i a adavanje intervala i me3u i la ni0 linijaFZ =Z - #e propu8tanja linijeX pra nina - propu8tanje jedne linijeX Z0Z -propu8tanje dve linijeX Z1Z - prela ak na poetak sledee stranice. Primer. % vr8avanjem programaF
program i<-a<&o+t=+t' const a=23! x=#$(1!.$!1 Q=22.38%2 T=tr+e begin Orite-n&a7X' Orite-n&x71073' Orite-n&Q711' Orite-n&T7!,;7!' end. ;=2D2

do#ija se sledei i ve8taj u o%tp%t )ajluF 2!,

34

Predrag S. Stanimirovi

Osnove programiranja

-"'1,.",1
2.2!.K=0! true # Primer. % raunati o#im i povr8inu upisanog kruga kao i uglove trougla u radijanima.
PROGRAM tro+gao&in=+t,o+t=+t' CONST =i=3.1$1!8 ste=en=1X0 VAR a,D,;,=,ri, aa,DD,;;,st7reaB G!N read-n&a, D, ;' =7=&a " D " ;'62 st7=sTrt&= E &=#a' E &=#D' E &=#;'' ri7=st6= aa7=2Este=en6=iEar;tan&ri6&=#a'' DD7=2Este=en6=iEar;tan&ri6&=#D'' ;;7=2Este=en6=iEar;tan&ri6&=#;'' Orite-n&2@r+g7 oDim= 2, 2E=7(72,2 =ovrsina = 2,st7 (72' Orite-n&2 =o-+=re;ni@ = 2, ri7(72' Orite-n&2+g-ovi a=2,aa7(72,2 D=2,DD7(72,2 ;=2,;;7(72' N".

3.2. U%+/ # #/%+/ (!1+'+,+ 0 .$/#,0 8


3.2.1. ?0 ,6#.$ ()# '49: # s6+ 49:
5unkcija printf$& se koristi a )ormati ovani i la podataka> a s#anf$& a )ormati ovano uitavanje podataka. Ove )unkcije se nala e u standarnoj #i#lioteci stdio1&. 6atoteka stdio1& sadr@i podake neop0odne a pravilno )unkcionisanje ula no-i la ni0 )unkcija. -jen sadr@aj se ukljuuje u program nared#om
Oinclude,stdio.h..

5unkcija printf$& se po iva i ra om o#lika


printf)Bpravl-acki7string !, Arg9,Arg;,...%*2

*ista argumenata mo@e da se i ostavi. /ada je jedini argument )unkcije printf$& upravljaki string koji se ispisuje na ekran. A op8tem sluaju> )unkcija printf$& se primenjuje na listu argumenata koja se sastoji i dva dela. Prvi argument )unkcije printf$& je kontrolni ili konver ioni string $upravljaki string&> a drugi je lista i la ni0 podataka ije se vrednosti ispisuju. 1onver ioni string odre3uje )ormat a 8tampanje liste i la ni0 podataka. -ajprostija speci)ikacija )ormata poinje karakterom Z`Z> a avr8ava se konver ionim karakterom $)ormatom ili konver ionom speci)ikacijom&. A sledeoj ta#eli su prika ani konver ioni karakteri konverzioni karakter
; d + o x, * -d -o -x , -, e, % g, Y

konverzija izlaznog niza karakter c0ar ceo #roj int ceo dekadni #roj #e naka oktalni #roj int 0eksadekadni #roj int dug ceo #roj long int dug oktalni #roj long int dug 0eksadekadni #roj long int )iksni are a )loat dou#le pokretni are a )loat i dou#le krai apis a ) ili e

35

Predrag S. Stanimirovi s =

Osnove programiranja

string vrednost pointera

1onver ija g i 5 su jednake konver ijama e i . ukoliko je eksponent prika anog #roja manji od -" ili je vei ili jednak preci nosti o#u0vaene speci)ikacijom d. Op8ti o#lik konver ione speci)ikacije jeF
V!PJ J %!sirina%!.tacnost%konverzioni7karakter

gdeF - konverzioni6karakter de)ini8e konver iju. - +nak $ uka uje da se argument poravnava na levoj strani adate 8irine polja. - +nakom = se kod numeriki0 konver ija o naava da ispred po itivni0 vrednosti tre#a da se napi8e pred nak =. - +nak ra maka o naava da je pred nak pra nina umesto =. De ovi0 parametara konver ije> po itivne vrednosti se prika uju #e pred naka. - Parametar sirina adaje minimalnu 8irinu polja. Polje se pro8iruje a potre#an #roj po icija ako i la na vrednost a0teva vi8e po icija nego 8to je speci)icirano parametrom sirina. Hko speci)ikacija 8irine polja poinje nulom> tada se polje umesto pra ninama popunjava nulama u neiskori8enim po icijama ako je poravnanje po desnoj margini. - Parametar ta#nost se koristi a realne #rojeve $float ili do%ble& i odre3uje #roj decimala i a decimalne take. Primer. $a& Posle i ra a
=rint,&3Danas >e sreda SDSDSDSDSD =eta@ Sn 3'

na ekranu se ispisuje tekst


Danas >e =eta@.

$#& =rint,&3Grednost <a x = R,Sn3, x' $c& =rint,&3n = Rd x = R, R,Z Rd=R-,Sn3, n,x,x,n,=oO&x,n'' 5unkcija s#anf$& ima a prvi argument kontrolni string koji sadr@i )ormate koji odgovaraju ula nim veliinama. 6rugi argument jeste lista adresa ula ni0 veliina.
scanf)Bpravl-acki7string ,Adresa9!,Adresa;,...%*2

Apravljaki string sadr@i konver ione speci)ikacije koje odgovaraju ula nim veliinama. *ista adresa sadr@i adrese promenljivi0 u koje se sme8taju uitane i konvertovane vrednosti. Operator adrese se predstavlja sim#olom 7. Hdresa promenljive se )ormira tako 8to se ispred imena promenljive pi8e operator adresiranja 7. -a primer> u i ra u s;an,&3Rd3, Ux' )ormat Rd u rokuje da se ula ni karakteri interpretiraju kao ceo #roj i da se uitana vrednost sme8ta u adresu promenljive !. -eka su deklarisane celo#rojne promenljive i> '> k. /ada se tri celo#rojne vrednosti mogu dodeliti ovim promenljivim preko tastature pomou operatora
s;an,&3RdRdRd3, Ui,U>,U@'

+a ra dvajanje ula ni0 polja u )unkciji s#anf$& koriste se sledei nakoviF pra nina $#lank&> ta#ulator $tab& i prela u novi red $enter& $t v. #eli naci&. % u etak se ini u sluaju ako neki od ula ni0 nakova odgovara konver ionom karakteru `#> kojim se uitava sledei nak ak i kada je on nevidljiv. Pri ula noj konver iji op8te pravilo je da podatak ini ni nakova i me3u dva #ela naka. Odavde sledi da jednim po ivom )unkcije s#anf mogu da se uitavaju podaci i vi8e redova. 2a@i i o#rnuto> vei #roj po iva )unkcije scan) mo@e da u itava u astopne podatke i istog reda.

36

Predrag S. Stanimirovi

Osnove programiranja

+naci koji se pojavljuju u upravljakom stringu a nisu konver ioni moraju se pri uitavanju pojaviti na odre3enom mestu i ne uitavaju se. -a primer> ako se unese ula ni red o#lika 1F2!F",' tada se operatorom scan)$I`dF`dF`dI> ai>aj>ak&X celo#rojnim promenljivim i> ' i k dodeljuju vrednosti 1> 2! i ",'> redom. Op8ti o#lik konver ione speci)ikacije jeF
V!G%!sirina%konverzioni7karakter

gde jeF - nak R o naava da se o#ele@eno ula no polje preskae i ne dodeljuje odgovarajuoj promenljivoj. - sirina adaje maksimalnu 8irinu polja. Hko je 8irina polja vea od navedene u konver ionoj speci)ikaciji> koristi se onoliko nakova koliko je adato maksimalnom 8irinom.

konverzioni6karakter je jedan od konver ioni0 nakova i sledee ta#eleF konverzioni karakter


; A d -d, o -o, x -x, , -,, e -e, s

D O * F %

tip argumenta poka iva na c0ar poka iva na s0ort poka iva na int poka iva na long poka iva na int poka iva na long poka iva na int poka iva na long poka iva na )loat poka iva na dou#le poka iva na )loat poka iva na dou#le poka iva na string

Primer. $i& -eka je i celo#rojna i ! realna promenljiva. Hko je ula na linija o#lika ,7 7'. .4. tada se operatorom
s;an,&3R2dREdR,3,Ui,Ux'

promenljivim i i ! dodeljuju redom vrednosti ,7 i .4.0. $ii& Hko su i> '> k celo#rojne promenljive i ako se unese ula na linija 12! ",' 74.> posle primene operatora
s;an,&3R2dR3dR2d3,Ui,U>,U@'

promenljive i> '> k u imaju vrednosti 12> !> ",. Primer. Eednostavan C program koji demonstrira komentare i poka uje nekoliko promenljivi0 i nji0ove deklaracije.
Jin;-+de Kstdio.AL void main&' 9 int i, > 6E ;Aar ; ,-oat x i = $ 6E > = i " ) ; = 2A2 6E x = 8.0X) 6E x = x E $.! 6E

Ove 3 -ini>e de@-ari[+ $ =romen->ive E6 i, > ima>+ =ridr+\ene ;e-oDro>ne vrednosti E6 :ara@teri s+ o@r+\eni a=ostro,ima E6 x <aAteva ne@+ rea-n+ vrednost E6 Promena vrednosti + x E6

37

Predrag S. Stanimirovi 6E Pri@a< vrednosti =romen->iviA na e@ran E6 =rint,&3Rd Rd R; R,3, i, >, ;, x' B

Osnove programiranja

3.2.3. D#)$,'#"$ ()$'()!6$s!)+ 0 8


Sim#olika konstanta je konstanta kojoj je pridru@en identi)ikator. A programu se kasnije koristi identi)ikator> a ne vrednost konstante. Sim#olike konstante u je iku C se de)ini8u kori8enjem direktiva pretprocesora. Ovakva de)inicija poinje pretprocesorskom direktivom 8define $sve pretprocesorske direktive poinju nakom _&. % a direktive pretprocesora se navodi sim#oliko ime konstante a atim konstantna vrednost koja predstavlja vrednost te konstante. 2rednost konstante se mo@e adati na sledei nainF - pomou imena ve de)inisane konstanteX - konstantom $celo#rojnom> realnom> nakovnom> logikom&X - konstantnim i ra om. % a ove direktive ne koristi se nak ZXZ jer pretprocesorske direktive ne pripadaju je iku C. Pretprocesorske direktive se moraju navesti pre prvog kori8enja imena konstante u programu. A praksi se direktive naje8e pi8u na poetku programa. 6irektive 8define mora da se pi8e u pose#nom redu. Eednom nared#om mo@e da se de)ini8e samo jedna konstanta. +ajedno sa nekom ovakvom direktivom ne smeju da #udu druge nared#e. Eedino je do voljen komentar na kraju reda. %denti)ikatori sim#oliki0 konstanti pi8u se velikim slovima da #i se ra likovali od identi)ikatora promenljivi0 koji se o#ino pi8u malim slovima. Ovo pravilo nije nametnuto sintaksom je ika C ve stilom koji se ustalio u praksi. Primer. 6e)inisanje sim#oliki0 konstanti.
Jde,ine Jde,ine Jde,ine Jde,ine Jde,ine Jde,ine Jde,ine PI 3.1$1!82 ] 100 ]MI] #] PI*2 &PIE2' LIM. ! B%LL 2S00)2 PO/0:A 34dravo3

;ogunost da se konstanta de)ini8e pomou pretprocesorski0 direktiva omoguuje da se vrednost konstante jednostavno api8e i promeni na jednom mestu. 1ori8enje konstanti u programu navo3enjem nji0ovi0 imena umesto odgovarajue vrednosti poveava itljivost programa. /ako3e> mo@e da se uvede promenljiva kojoj se dodeljuje vrednost konstante. Primer. Amesto i ra a
Jde,ine PO/%4 1!

mo@e se pisati
,-oat PO/%4=1!

;etod koji koristi promenljive je nee)ikasan> jer se pri svakom kori8enju vrednosti promenljive vr8i o#raanje memoriji a i raunavanje njene vrednosti> ime se usporava i vr8enje programa. Ovde se radi o smeni u ZZvreme i vr8avanjaZZ> a ra liku od pretprocesorske direktive kojom se vr8i smena ZZu toku kompilacijeZZ. P)#&$)# 0 .$/#,0 8 Primer. +#ir dva #roja u je iku C.
Jin;-+de Kstdio.AL main&' 9 int x, Q =rint,&30nesi dva ;e-a Dro>a3'

38

Predrag S. Stanimirovi s;an,&3Rd Rd3, Ux, UQ' =rint,&3]>iAov <Dir >e R!dSn3,x"Q' B

Osnove programiranja

Primer. Proi vod dva #roja tipa long.


Jin;-+de Kstdio.AL main&' 9 -ong x=23$!()X, Q=()X80 =rint,&3]>iAov =roi<vod >e R-dSn3,xEQ' B

Primer. +adavanje i prika ivanje karaktera.


Jin;-+de Kstdio.AL main&' 9 ;Aar ;=2A2 =rint,&3R;RdSn3,;,;' B

Primer. (ad sa odre3enim #rojem decimala.


Jin;-+de Kstdio.AL void main&' 9,-oat x=23.$!()XXXX, Q=).X8)()X8 =rint,&3]>iAov =roi<vod >e7R,,R0.1(,,R0.20,Sn3, xEQ,xEQ,xEQ' B

Primeri. -apredno kori8enje _de)ine. Primer .


Jin;-+de Kstdio.AL Jde,ine ve;i&*,P' *LP Jde,ine @vad&*' *E* Jde,ine @vadrat&*' &&*'E&*'' void main&' 9=rint,&3.o s+ Rd Rd Rd RdSn3, ve;i&3,2',@vad&!',@vad&!"!',@vadrat&!"!'' B

Primer.
Jin;-+de Kstdio.AL Jde,ine MA* 23 Jde,ine A@o i, Jde,ine Onda Jde,ine InaCe e-se main&' 9 int n=2$ A@o &MA* L n' Onda =rint,&3ve;iSn3' InaCe =rint,&3man>iSn3' B

4. OSNOVNE UPRAVLJAKE STRUKTURE


Svaki program sadr@i nared#e dodeljivanja kojima se i raunavaju vrednosti odre3eni0 i ra a i pamte $dodeljuju& kao vrednosti odgovarajui0 promenljivi0. %pak> veoma retko se #ilo koji program sastoji samo od jedne sekvence nared#i dodeljivanja kao i nared#i ula aGi la a. ;nogo se e8e a0teva postojanje vi8e ra liiti0 tokova u avisnosti od odre3eni0 uslova ili mogunost vi8estrukog

39

Predrag S. Stanimirovi

Osnove programiranja

i vr8avanja dela programa. -ared#e koje omoguavaju de)inisanje toka programa na ivaju se upravlajke nared#e. Apravlajke nared#e u prvom imperativnom programskom je iku 5O(/(H- #ile su i vedene i osnovni0 ma8inski0 nared#i. /o je period kada metodologija programiranja tek poinje da se ra vija tako da jo8 nije de)inisan neki osnovni skup upravljaki0 nared#i. Poetkom sedamdeseti0 9irt de)ini8e metodologiju strukturnog programiranja i programski je ik Pascal sa skupom upravljaki0 struktura kojima se implementiraju osnovne algoritamske strukture. Ovaj koncept je 8iroko pri0vaen> tako da danas vi8i programski je ici i grupe proceduralni0 je ika o#ino raspola@u skupom upravljaki0 struktura kojima se upravlja tokom i vr8enja programa u skladu sa konceptima strukturnog programiranja. %ako se od je ika do je ika ovaj skup upravljaki0 struktura donekle ra likuje> mo@e se rei da su ipak me3u njima u ovom domenu male su8tinske ra like. Smatra se da je skup nared#i kojima se upravlja tokom programa dovoljan ako o#e #e3uje sledee tri osnovne upravlajke struktureF $1& Strukturu selekcije> koja omoguava i #or jedne od dve mogunosti. A Pascal-u se o#ino implementira i ra om o#likaF
I4 Q '-$ ?t $%s$ ?f 2

Struktura selekcije odre3ena je if$t&en i if$t&en$else i ra ima. $2& Strukturu vi8estruke selekcije> koja omoguava i #or jedne i me3u vi8e ponu3eni0 grana. A Pascal-u se koristi #ase i ra o#likaF
6+s$ @ !4 xa 1 ?a2 xb 1 ?bA $ 12

$!& Strukturu iteracije> koja omoguava vi8estruko i vr8avanje nekog #loka nared#i. A je iku Pascal se koristi 4&ile do petlja o#likaF
B-#%$ Q 1! ?A

Apravljake strukture jednog proceduralnog je ika #i tre#alo da ispunjavaju sledee oso#ineF i smisao nared#i mora da #ude jasan i jedno naanX i sintaksa nared#e tre#a da #ude tako postavljena da do voljava 0ijerar0ijsko ugra3ivanje drugi0 nared#i> 8to mora da #ude jedno nano de)inisano i jasno i samog teksta programaX i potre#no je da postoji mogunost lake modi)ikacije nared#i.

4.1. S$,"$ 6+ +)$13# # 3%!,


Sekvenca nared#i je jedan od osnovni0 koncepata u strukturnim je icima> uveden radi lak8e implementacije drugi0 upravljaki0 struktura. Prvi put se javlja u je iku Hlgol '0> u kome se na iva i slo@ena nared#a> a de)inisan je kao ni nared#i ogranien agradama begin i endF
3$*# naredba792 WWW. naredba7n $ 1

Sekvenca nared#i se u Hlgol-u '0 mo@e pojaviti svuda gde je sintaksom do voljena nared#a. /ime ovaj koncept postaje jako sredstvo apstrakcije nared#e. A Hlgol-u '0 se prvi put javlja i koncept #loka kao uop8tenje koncepta sekvence nared#i. Dlok je po de)iniciji upravljaka struktura koja sadr@i opise lokalni0 promenljivi0 i sekvencu nared#i. 1ao i sekvenca> atvara se agradama begin i end.
3$*# deklaraci-a792

40

Predrag S. Stanimirovi
WWW. deklaraci-a7m2 naredba792 WWW. naredba7n $ 1

Osnove programiranja

4.1.1. G%!3+% $ # %!,+% $ ()!&$ %.#"$


7lo#alna promenljiva $global variable& je takva promenljiva koja je deklarisana a upotre#u kro ceo program. /rajanje glo#alne varija#le je celokupno vreme i vr8enja programaF varija#la se kreira kada program startuje> i uni8tava se kada se program avr8i. *okalna promenljiva $local variable& je takva promenljiva koja je deklarisana unutar nekog #loka> a upotre#u samo unutar tog #loka. /rajanje lokalne varija#le je aktivacija #loka koji sadr@i deklaraciju te varija#leF varija#la se kreira na ulasku u #lok> i uni8tava se na i lasku i #loka. Dlok $block& je programska konstrukcija koja ukljuuje lokalne deklaracije. A svim programskim je icima> telo neke procedure jeste #lok. -eki je ici tako3e imaju #lok komande> kao na primer qq[ 1 1 1 ]rr u C> C==> ili EH2H> ili qqde)lare 1 1 1 begin 1 1 1 endXrr u H6H. aktivacija $activation& nekog #loka je vremenski interval u kome se taj #lok i vr8ava. Partikularno> aktivacija procedure je vreme interval i me3u po iva i vraanja vrednosti. A toku jednog i vr8enja programa #lok mo@e #iti aktiviran nekoliko puta> tako da lokalna promenljiva mo@e imati nekiliko trajanja. Promenljive opisane u jednom #loku su lokalne promenljive tog #loka> a glo#alne a sve #lokove sadr@ane u njemu. Akoliko se u nekom #loku prede)ini8u promenljive ve de)inisane u spolja8njem #loku> u unutra8njem #loku va@e te nove de)inicije kao lokalne de)inicije #loka. 2an #loka prestaje dejstvo lokalni0 de)inicija unutra8njeg #loka. (a motrimo sledei primer> koji je konstruisan sa idejom da ilustruje dejstvo lokalni0 i glo#alni0 de)inicija. Primer. 7lo#alne i lokalne promenljive.
A1 3$*# real a2 ... 6a2 Q1 3$*# real b2 ... 6b $ 12 &1 3$*# real c2 .. 6&2 D1 3$*# real d2 . .. 6d $ 12 E1 3$*# real e2 ... 6e $ 12 $ 12 01 3$*# real f2 .. 6f2 U2 3$*# real g2 ... 6g $ 12 $ 12 $ 12

A ovom primeru postoji sedam #lokova $o naeni o nakama )F> +F> ,F> -F> .F> /F i 5F& i u svakom od ovi0 #lokova opisana je po jedna promenljiva. Sledea ta#ela daje podatke o svim #lokovima u programu. Slovo 9 o naava da je promenljiva lokalna> a 5 da je glo#alna. Promenljiva H a * # c d e ) g D 7 * C 7 * @lok 6 K 7 7 7 * 7 * * 7 * 5 7 7 7

A sledeem primeru dat je ilustrovan pojam #loka kao i pojam lokalni0 i glo#alni0 promenljivi0.
Primer. 6oseg i sakrivanje.

41

Predrag S. Stanimirovi int x=0 void , &' 9 int Q=x, x=Q x=1 77x=! 9 int x x=2 B x=3 B int E==Ux Primer. Dlok u je iku C. 66 g-oDa-no x 66 66 66 66 66 66 -o@a-no -o@a-no =rist+= =rist+= -o@a-no =rist+= Q, g-oDa-no x x, sa@riva g-oDa-no x -o@a-nom x g-oDa-nom x x, sa@riva =retAodno x dr+gom -o@a-nom x

Osnove programiranja

66 =rist+= =rvom -o@a-nom x 66 +<iman>e adrese g-oDa-nog x

_includeTstdio.0U
void main&' 9 ,-oat a,D,;,d a=1.0 D=2.0 ;=3.0 d=$.0 =rint,&31=o->asn>i D-o@ a=R, D=R, ;=R, d=R,Sn3,a,D,;,d' 9 ,-oat ;,d,e,, ;=a"10 d=D"20 e=;"30 ,=d"$0 =rint,&30n+trasn>i D-o@ a=R, D=R, ;=R, d=R, e=R, ,=R,Sn3, a,D,;,d,e,,' B =rint,&31=o->asn>i D-o@ a=R, D=R, ;=R, d=R,Sn3, a,D,;,d' B

A ovom primeru postoje dva #lokaF prvi u kome se de)ini8u promenljive a> b> # i d i drugi u kome su promenljive # i d prede)inisane i promenljive e i f prvi put de)inisane. 1ako je drugi #lok unutar prvog dejstvo ovi0 de)inicija je sledeeF i a> b> # i d su lokalne promenljive prvog #loka. i #> d> e i f su lokalne promenljive drugog #loka. i a i b va@e i u drugom #loku> ali kao glo#alne promenljive. i # i d su opisane i u prvom i u drugom #loku pa se u svakom od ovi0 #lokova mogu koristiti ne avisno od nji0ove namene u drugom #loku. i e i f se mogu koristiti samo u drugom #loku> dok su u prvom nede)inisane. 1ao posledicu ovako postavljeni0 de)inicija promenljivi0 nared#om a 8tampanje u umetnutom #loku 8tampaju se #rojevi 1.0> 2.0> 11.0> 22.0> "1.0 i '2.0> dok nared#a a 8tampanje u spolja8njem #loku dajeF 1.0> 2.0> !.0 i ".0. 1ako dejstvo lokalni0 promenljivi0 prestaje po i lasku i #loka> kod ponovnog ulaska u isti #lok one su nede)inisane i potre#no je da im se ponovo dodele neke inicijalne vrednosti. Sekvenca nared#i je u istom ovom o#liku astupljena i u Pascal-u> dok je struktura #loka i ostavljena. A C postoje o#a koncepta ali su begin i end amenjeni agradama [ i ]. /o ilistruje sledei primer. 1od noviji0 je ika kod koji0 je astupljen koncept kljuni0 rei kojima se otvaraju i atvaraju delovi upravlajke strukture> sekvenca nared#i ne postoji kao odvojena struktura ve je sastavni deo drugi0 upravljaki0 struktura.

4.2. S')0,'0)+ s$%$,6#.$


Struktura selekcije omoguava de)inisanje vi8e mogui0 tokova programa i jedno je od osnovni0 sredstava a pisanje )leksi#ilni0 programa. Strukture selekcije dele se u dve osnovne grupe. Eednoj pripadaju tako vane if-selekcije> a drugoj vi8estruka selekcija.

42

Predrag S. Stanimirovi

Osnove programiranja

%)-selekcije se o#ino javljaju kao if$t&en i if$t&en$else struktura> pri emu prva omoguava i #or pose#nog toka u avisnosti od odre3enog uslova> a druga i #or jedne ili druge alternative u avisnosti od toga da li je odre3eni uslov ispunjen.

4.2.1. I47'-$ s')0,'0)+


-a sledeoj slici prika an je dijagram toka koji ilustruje gra)iki prika ove strukture na nivou algoritma.
uslov )alse true ni nared#i

2f$t&en struktura se o#ino implementira kao pose#an> jednostavniji sluaj if$t&en$else strukture. Eedino kod neki0 stariji0 je ika $DHS%C> 5O/(H-& ona postoji kao ase#na upravljaka struktura. A 5O(/(H--u se if$t&en struktura na iva logikom %5 nared#om i ima sledeu )ormuF
(0 )(ogi8ki izraz* naredba

-ared#a koja sledi i a logikog i ra a i vr8ava se samo ako je vrednost logikog i ra a jednaka 30.> inae se tok programa prenosi na sledeu nared#u. 2e je reeno da je jedan od pro#lema u primeni if nared#e implementacija sluaja kada se i vr8ava vei #roj nared#i u jednoj ili t&en ili else grani. A programskim je icima koji ne podr@avaju koncept sekvence nared#i> ova struktura se implementira koristei 5: : nared#u. Ao#iajeni nain kori8enja ove nared#e u 5O(/(H--u %2 ilustruje sledei primer. Primer. *ogika 2/ nared#a u 5O(/(H--u. A nared#i je sa 0slov o naena logika promenljiva.
IF &.]O.. 0s-ov' YO .O 20 I=1 ^=2 :=3 5O].I]0%

20

A ovom primeru> ako je vrednost promenljive 0slov jednaka /)9(. program se nastavlja od nared#e sa o nakom 20. +a vrednost 30. iste promenljive program se nastavlja nared#om %S1 koja sledi neposredno i a nared#e 2/. Apotre#a 5: : nared#e je #ila neop0odna s o# irom na nepostojanje sekvence nared#i u 5O(/(H-u %2. Avo3enjem koncepta sekvence nared#i> i)-t0en nared#a u Hlgol-u do#ija drugaiju sintaksu> onakvu kakvu po najemo u savremenim proceduralnim je icima. A op8tem sluaju njena struktura je de)inisana na sledei nainF
if )logi8ki izraz* then 3$*# naredba792 ... naredba7n $ 12

Sekvenca nared#i> o#u0vaena agradama begin i endA je sastavni deo if nared#e. /a sekvenca nared#i se i vr8ava a vrednost tr%e logikog i ra a. +a vrednost false sekvenca nared#i se preskae i program nastavlja sa prvom nared#om koja sledi i a agrade end. Primer. 2f$t&en nared#a u Hlgol-u '0.
if &+s-ov' t#en begin i7=1 >7=2 43

Predrag S. Stanimirovi @7=3 end$

Osnove programiranja

%)-t0en struktura se javlja u ra liitim o#licima u mnogim je icima iji su koreni u Hlgol-u '0> ukljuujui i 5O(/(H- 77 i 5O(/(H- .0. A 5O(/(H--u se mo@e koristiti %5-/LK- struktura> prema sledeoj sintaksiF
(0)uslov* naredba E"D (0

Aoimo da se u ovom je iku koriste kljune rei kojima se otvaraju i atvaraju pojedini delovi strukture. A je iku Pascal je if$t&en struktura preu eta i Hlgol-a. A je iku C se umesto rei begin i end koriste agrade [ i ]> redom.

4.2.2. I47'-$ 7$%s$ s')0,'0)+


6ijagram toka if$t&en$else strukture koji ilustruje smisao ove strukture na nivou algoritma prika an je na slici.
)alse else-grana uslov true t0en-grana

Ova upravljaka struktura se prvi put javlja u Hlgol-u '0 i to u o#likuF


#4 )logi8ki7izraz* '-$ naredba $%s$ naredba2

-ared#a koja sledi i a kljune rei t&en predstavlja t&en granu programa> a nared#a i a else predstavlja njenu else granu. 1ada je vrednost logikog i ra a tr%e i vr8ava se t&en grana> a kada je vrednost false - else grana programa. Ova upravljaka struktura postoji u svim proceduralnim je icima sa odre3enim varijacijama u sintaksi. A Pascal-u je pri0vaena sintaksa i Hlgol-a. Sledei primer ilustruje mogunosti njene primene. Primer.
#4 )bro- 3 :* '-$ res 13 : $%s$ res 13 92

Ovako de)inisana if$t&en$else struktura ima ni nedostataka koji pose#no dola e do i ra@aja kada se if nared#e ugra3uju jedna u drugu. -a primer u Pascal-u je mogue napisati sledeu sekvencu nared#iF
#4 )sum 3 :* '-$ #4 )bro- 3 :* '-$ res 13 : $%s$ res 13 92

Ova sekvenca nared#i mo@e da #ude protumaena na dva ra liita naina u avisnosti od toga da li else grana pripada prvoj ili drugoj if nared#i. A Pascal-u> kao i u vi8e drugi0 je ika koji koriste isti koncept a ra re8avanje ovakvi0 situacijaF primenjuje se semantiko pravilo da se else grana uparuje sa naj#li@om neuparenom t&en granom. Oigledno je da u ovakvim sluajevima mo@e da do3e do pogre8nog tumaenja pojedini0 segmenata programa. A Hlgol-u se ovaj pro#lem ra re8ava na sintaksnom nivou. -aime> u Hlgol-u nije do voljeno u#acivanje if nared#i u t&en granu ve se

44

Predrag S. Stanimirovi

Osnove programiranja

nadove ivanje if nared#i mo@e vr8iti samo po else grani. 1ada je neop0odno da se po t&en grani vr8i dalje grananje o#ave na je upotre#a agrada kojima se nared#a koja se u#acuje trans)ormi8e u tako vane proste nared#e koje se jedino mogu nai u t&en grani. Pret0odni primer #i> u Hlgol-u> #io napisan kao u sledeem primeru. Primer. Ametanje i) nared#i u Hlgol-u.
#4 sum 3 : '-$ 3$*# #4 bro- 3 : '-$ res 13 : $%s$ res 13 9 $ 1A

Hko u pret0odnom primeru else grana tre#a da #ude sastavni deo prve if nared#e dati deo programa tre#a da #ude napisan kao u primeru koji sledi. Primer. Ametanje if nared#i u Hlgol-u $druga ver ija&.
#4 sum 3 : '-$ 3$*# #4 bro- 3 : '-$ res 13 : $ 1 $%s$ res 13 92

Po nat je jo8 jedan koncept kojim se re8ava pro#lem nadove ivanja if nared#i. On se asniva na upotre#i kljuni0 rei kojima se otvaraju i atvaraju delovi strukture. A sluaju if$t&en$else nared#e> uslov se otvara sa if> a atvara sa t&en. &en ujedno otvara t&en #lok koji se atvara pomou klune rei else> dok se else #lok otvara sa else> a atvara pose#nom kljunorn rei kojom se ujedno avr8ava i cela upravljaka struktura. A sluaju 5O(/(H--a 77> if$t&en i if$t&en$else strukture se avr8avaju sa .;- 2/> dok se u mnogim je icima koristi end. Struktura 2/$ <.;$.9(. u 5O(/(H--u poseduje sledeu sintaksuF
(0)uslov* $SE" naredba EI?E naredba E"D (0

Primer. Apotre#a if nared#e u 5O(/(H--u 77.


(0 )bro- 3 :* $SE" res 3 : EI?E res 3 9 E"D (0

Primer. Ametanje if nared#i u 5O(/(H--u 77.


(0 sum 3 : $SE" (0 )bro- .ER. :* $SE" res 3 : EI?E res 39 E"D (0 E"D (0

A 5O(/(H--u se if nared#a koja je u#aena u else granu smatra sastavnim delom pola ne if nared#e> dok se if nared#a u t&en grani mora atvoriti svojom .;- 2/ agradom. Primer. -adove ivanje %5 nared#i po else grani.
IF s+m = 0 .F%] res = 0 %L1%

45

Predrag S. Stanimirovi IF&Dro> %L1% %]D IF = 0' .F%] res =10 res = 2

Osnove programiranja

Primeri u ..
Primer. -apisati program kojim se dati #rojevi !> "> z udvostruuju ako je !US "US z> a u protivnom menjaju nak.
main&' 9 ,-oat x,Q,< =rint,&34adati x,Q,<7Sn3' s;an,&3R,R,R,3,Ux,UQ,U<' i,&&xL=Q' UU &QL=<'' 9 xE=2 QE=2 <E=2 B e-se 9 x=#x Q=#Q <=#< B =rint,&3x=R, Q=R, <=R,3, x,Q,<' B

1od else$if iska a je va@no da re ervisana re else odgovara pret0odnom slo#odnom if> ukoliko to nije drugaije odre3eno velikim agradama. Primer. % raunati "S -,> !=2> !!-1> 2!> !T0> 0TS!T1> 1TS!T,> !US,.

void main&' 9 ,-oat x,Q s;an,&3R,3,Ux' i,&xK0' Q=#! e-se i,&xK1' Q=x"2 e-se i,&xK!' Q=3Ex#1 e-se Q=2Ex =rint,&3Q= R,Sn3, Q' B

Primer. Arediti tri adata realna #roja u poredak ! T " T z.


Jin;-+deKstdio.AL main&' 9 ,-oat x,Q,<,= s;an,&3R,R,R,3,Ux,UQ,U<' i,&xLQ' 9 ==x x=Q Q== B i,&xL<' 9 ==x x=< <== B i,&QL<' 9 ==Q Q=< <== B =rint,&3x= R, Q= R, <= R,Sn3,x,Q,<' B

Primer. 6ata su tri realna #roja u poretku ! T " T z. Ametnuti realni #roj t tako da me3u njima #ude odnos ! T " T z T t.
void main&' 9 ,-oat x,Q,<,t,= s;an,&3R,R,R,R,3,Ux,UQ,U<,Ut' i,&tKx' 9 ==t t=< <=Q Q=x x== B i,&tKQ' 9 ==t t=< <=Q Q== B i,&tK<' 9 ==t t=< <== B =rint,&3x= R, Q= R, <= R, t= R,Sn3,x,Q,<,t' B

46

Predrag S. Stanimirovi

Osnove programiranja

Primer. 6iskutovati re8enje sistema linearni0 jednaina a1 ! = b1 " S #1 a2 ! = b2 " S #2.

void main&' 9 ,-oat a1,D1,;1,a2,D2,;2,d,dx,dQ,x,Q =rint,&3:oe,i;i>enti =rve >edna;ine_3' s;an,&3R,R,R,3,Ua1,UD1,U;1' =rint,&3:oe,i;i>enti dr+ge >edna;ine_3' s;an,&3R,R,R,3, Ua2,UD2,U;2' d=a1ED2#a2ED1 dx=;1ED2#;2ED1 dQ=a1E;2#a2E;1 i,&dV=0'9x=dx6d Q=dQ6d =rint,&3x=R, Q=R,Sn3,x,Q' B e-se i,&d==0 UU dx==0 UU dQ==0' 9 =rint,&31istem >e neodre?en 3' =rint,&3resen>e >e oD-i@a *,&R,#R,*'6R,Sn3,;1,a1,D1' B e-se =rint,&31istem >e nemog+;Sn3' B

Primer. (e8avanje jednaine a!2=b!=#S0 u je icima Pascal i C.


=rogram :vadratna_^edna;ina var a,D,;,D,x1,x2,x,/e,Im7reaDegin read-n&a,D,;' i, aKL0 tAen Degin D7=sTr&D'#$EaE; i,&DL0' tAen Degin x17=&#D"sTrt&D''6&2Ea' x27=&#D#sTrt&D''6&2Ea' Orite-n&2x1= 2,x17073,2 x2= 2,x27073' end e-se i, D=0 tAen Degin x17=#D6&2Ea' Orite-n&2x1= 2,x17073,2 x2= 2,x17073' end e-se Degin /e7=#D6&2Ea' Im7=sTrt&#D'6&2Ea' Orite&/e7073,2"iE2,Im7073' Orite-n&2 2,/e7073,2#iE2,Im7073' end end e-se i, DKL0 tAen Degin x17=#;6D Orite-n&x17073' end e-se i,&;KL0' tAen Orite-n&2^edna;ina nema resen>a2' e-se Orite-n&2Identitet2' end. Jin;-+deKstdio.AL Jin;-+deKmatA.AL void main&' 9 ,-oat a,D,;,D,x1,x2,/e,Im s;an,&3R,R,R,3,Ua,UD,U;' i,&a' 9 D=DED#$EaE; i,&DL0' 9 x1=&#D"sTrt&D''6&2Ea' x2=&#D#sTrt&D''6&2Ea' =rint,&3x1= R, x2= R,Sn3,x1,x2' B e-se i,&D==0' 9 x1=#D6&2Ea' =rint,&3x1= R, x2= R,Sn3,x1,x1' e-se 9 /e=#D6&2Ea' Im=sTrt&#D'6&2Ea'

47

Predrag S. Stanimirovi =rint,&3R,"iER,, R,#iER,Sn3,/e,Im,/e,Im'

Osnove programiranja

B e-se i,&D' 9 x1=#;6D =rint,&3R,Sn3,x1' B e-se i,&;' =rint,&3^edna;ina nema resen>aSn3' e-se =rint,&3IdentitetSn3'

Primer. A gradu ) se nala i ali0a goriva od = $0 T = T 2000000000& litara> od koje kamion-cisterna tre#a da dostavi 8to je mogue veu koliinu u grad +1 Od grada > do gada + ima tano d $0 T d 2000& kilometara. Cisterna tro8i litar na jedan kilometar> a mo@e da primi ukupno , $0 T , ,000& litara a prevo i potro8nju. -apisati program koji a date => d> ,> ispisuje koliko najvi8e goriva mo@e da se dostavi i ) u +> i koliko P(% /O;K najvi8e mo@e ostati u ). Cisterna mo@e ostati u gradu koji daje povoljniji is0od. /est primerF
2000 100 1000 1)00 0 Jin;-+de Kstdio.AL void main &' 9 -ong G, d, 5, A, B =rint,&30nesi @o-i;in+ + grad+ A7 3' s;an, &3R-d3,UG' =rint,&30nesi rasto>an>e i<me?+ gradova7 3' s;an, &3R-d3,Ud' =rint,&30nesi @a=a;itet ;isterne7 3' s;an, &3R-d3,U5' A=G B=0 i,&&5Ld' UU&GL=5'' 9 i,&5L2Ed' 9 A=GR5 B=&5#2Ed'E&G65' i,&AK=d' B=B"d e-se 9 i,&A#dLd'9B=B"A#d A=0 B e-se B=B"d B B e-se 9A=G#5 B=5#d B y B < =rint, &3A= R-d B= R-dSn3, A, B' B

Primer. %spisana je sledea spirala #rojeva oko ami8ljenog koordinatnog sistemaF


9A 9>
<

9< 4 < A ;9

94 @ : > ;;

9@ ; 9 = ;@

9; 99 9: F ;4 ;<
<

9= 9F ;:

+a proi voljan prirodan #roj n odrediti njegove koordinate u tom koordinatnom sistemu.
%PASCA&' < P/OY/AM s=ira-a&in=+t,o+t=+t' GA/ n, r, x, Q 7integer B%YI] read&n' r 7= tr+n;&&sTrt&n' " 1'62' IF nK=$EsTr&r' # 2 E r .F%] B%YI]

48

Predrag S. Stanimirovi x7=r Q7=n # &$ E sTr&r' # 3 E r' %]D %L1% IF n K=sTr&r' .F%] B%YI] Q7=r x 7= &$EsTr&r' #r' # n %]D %L1% IF nK=$EsTr&r' " 2 E r .F%] B%YI] x7=#r Q7=&$EsTr&r' " r' # n %]D %L1% B%YI] Q7=#r x7= n # &$EsTr&r' " 3 E r' %]D `/I.% &2n = 2,n,2x = 2, x,2Q = 2, Q' %]D. %C' Jin;-+deKstdio.AL Jin;-+deKmatA.AL main&' 9 int n,r,x,Q s;an,&3Rd3, Un' r=&sTrt&n'"1'62 i,&nK=$ErEr#2Er' 9 x=r Q=n#&$ErEr#3Er' B e-se i,&nK=$ErEr' 9 Q=r x=$ErEr#r#n B e-se i,&nK=$ErEr"2Er' 9 x=#r Q=$ErEr"r#n B e-se 9 Q=#r x=n#&$ErEr"3Er' B =rint,&3Sn 4a n=Rd @oordinate s+ x=Rd Q=RdSn3,n,x,Q' B

Osnove programiranja

4.2.3. O($)+'!) 0s%!" !* ()$%+/+ 0 8


Operator uslovnog prela a dF je neo#ian. Pre svega> to je ternarni operator> jer u ima tri i ra a a svoje argumente. -jegova op8ta )orma je
exp9 X exp; 1 exp@2

Prvi argument je pre naka pitanja ZdZ. 6rugi argument je i me3u ZdZ i ZFZ> a trei posle ZFZ. Semantika ovakvog i ra a je sledea. Prvo se i raunava i ra e!p1. Hko je njegova vrednost ra liita od 0 $tj. ako je jednaka tr%e&> tada se evaluira i ra e!p2> i njegova vrednost je vrednost celog i ra a. Hko je vrednost i ra a e!p1 nula $false&> tada se evaluira i ra e!p!> i njegova vrednost se vraa kao re ultat. -a taj nain> ovaj i ra predstavlja amenu a if$t&en$else nared#u. Primer. Amesto i ra a
if)y,z* x3y2 else x3z2

kojim se i raunava QSmin[<> ]> mo@e se pisati


x3)y , z* X y1z2

+agrade se mogu i ostaviti. Prioritet operatora uslovnog prela a je vei od prioriteta operatora dodeljivanja> a njegova asocijativnost je ZZs desna na levoZZ. Primer. 2rednost i ra a
&(L2'_172

jednaka je 1> dok je vrednost i ra a


&(K2'_172

jednaka 2. Hko je i ra posle ZFZ tako3e uslovni i ra > do#ijamo else-i) operator.

Primeri.

49

Predrag S. Stanimirovi

Osnove programiranja

1. 2rednost i ra a sS mo@e -1> Q T 0> Q R Q> QUS0 se i raunati pomou


s=&x K 0' _ #1 7 xEx

2. 2rednost s S sgn$bro'& se mo@e i raunati pomou i ra a sS$#roj T 0& d -1 F $$#rojSS0& d 0 F 1&X !. De kori8enja operatora if napisati program koji a adate !> " i raunava S min [Q><]> <US 0> maQ [Q2><2]> <T0.
<=&QL=0' _ &&xKQ' _ x7Q' 7 &&xExLQEQ' _ xEx 7 QEQ'

4.3. S')0,'0)+ "#2$s')0,$ s$%$,6#.$


Struktura vi8estruke selekcije omoguava i #or jedne od vi8e mogui0 nared#i ili grupa nared#i u avisnosti od vrednosti odre3enog uslova. Struktura vi8estruke selekcije se koristi kao amena a komplikovane upravljake strukture sledeeg o#lika> u kojima se )unkcija if mnogo puta ponavlja.

)alse )alse true )alse true

true

7ra) na sledeoj slici ilustruje ovu upravljaku strukturu na nivou algoritma.

1ako se svaka vi8estruka selekcija mo@e simulirati o#inim if$t&en$else grananjem> na sledeoj slici prika an je dijagram toka koji odgovara vi8estrukom grananju.

50

Predrag S. Stanimirovi

Osnove programiranja

Ova struktura koja je u svom ra voju pretrpela mnogo i mena do jednog modernog o#lika koji se danas u manje-vi8e slinim varijantama javlja u svim programskim je icima. -eki aeci ove strukture nala e se u aritmetikoj 2/ nared#i 5O(/(H--a koja u su8tini predstavlja pose#an sluaj nared#e a vi8estruko grananje koja je ograniena na tri grane> koje odgovaraju sluajevima kada je aritmetiki i ra postavljen kao uslov grananja manji od nule> jednak nuli ili vei od nule. Hritmetika 2/ nared#a ima sledei o#likF
(0 )aritmeti8ki izraz* "9, ";, "@

gde su -l> -2 i -! o nake nared#i $u 5O(/(H--u su to prirodni #rojevi& na koje se prenosi upravljanje u sluaju kada je vrednost i ra a manja od nule> jednaka nuli ili vea od nule> respektivno. Primer. Program a i raunavanje )unkcije < u 5O(/(H--u. -!2> !T0 "S 0> ! S 0 !2> !U0.

10 20 30 $0

IF&x' 10, 20, 30 Q = #&xEx' YO.O $0 Q = 0 YO.O $0 Q = xEx ....

A 5O(/(H--u se kasnije pojavljuju jo8 dve varijante nared#e a vi8estruko grananje> po nate kao i raunata 5: : nared#a i dodeljena 5: : nared#a. % raunata 5: : nared#a ima sledeu )ormuF
U'$' )oznaka79, oznaka7;, W ,oznaka7k*, izraz

% ra u ovoj nared#i mora da ima celo#rojnu vrednost. Od vrednosti i ra a avisi kojom e se nared#om nastaviti i vr8enje programa. +a vrednost 1 i vr8ava se nared#a programa o naena prvom o nakom $oznakaC1& u listi o naka> a vrednost 2 drugom o nakom i tako redom> a vrednost k> k-tom o nakom. A sluaju da vrednost i ra a i la i i opsega od 1 do k u programu se ni8ta ne dogada. A ovu nared#u nije ugra3ena reakcija na ovakve gre8ke u programu. 6ruga nared#a 5O(/(H--a> po nata kao dodeljeno 7O/O> ima sledei o#likF
U'$' celobro-na7promenl-iva )oznaka79, oznaka7;, ..., oznaka7k*

51

Predrag S. Stanimirovi

Osnove programiranja

Celo#rojna promenljiva navedena u nared#i pamti vrednost o nake sa kojom se program nastavlja. -joj se vrednost dodeljuje eksplicitno nared#om HSS%7- o#likaF
A??(U" oznaka $' celobro-na7promenl-iva

O naka koja se dodeljuje promenljivoj mora da #ude de)inisana u samom programu $u glavnom programu ili potprogramima koje po iva&. 1orene koncepta vi8estrukog grananja koji se danas najvi8e sree u programskim je icima postavili su 9irt i Loare 1.''. godine u je iku Hlgol-9. Sve grane koje se daju kao alternative o#u0vaene su jednom strukturom koja ima jedan ula i jedan i la . 1raj strukture je ujedno i kraj svake od alternativa. Op8ti o#lik ove nared#e de)inisan je na sledei nainF
6+s$ celobro-na7promenl-iva !4 3$*# naredba792 naredba7;2 W naredba7k2 $ 1

1oja e se od nared#i u ovoj strukturi i vr8iti avisi od vrednosti i ra a. +a vrednost 1 i vr8ava se prva nared#a> a vrednost 2 druga itd. a vrednost k k-ta.

4.3.1. V#2$s')0,+ s$%$,6#.+ 0 P+s6+%70


Struktura vi8estruke selekcije 4.ase struktura& au ima svoje pravo mesto u programskim je icima sa pojavom Pascal-a. A Pascal-u ona ima sledei o#likF
6+s$ izraz !4 lista7konstanti791 naredba792 CC lista7konstanti7k1 naredba7k2 $ 1

% ra naveden u nared#i mora #ude diskretnog tipa $ 2nteger> +oolean> ,&ar ili tip na#rajanja&. -ared#a se i vr8ava tako 8to se i raunava vrednost i ra i poredi sa konstantama u listi konstanti. 1ada se prona3e konstanta ija je vrednost jednaka vrednosti i ra i vr8ava se odgovarajua nared#a $ona koja je ve ana a listu konstanti kojoj pripada na3ena konstanta&. Po avr8etku i a#rane nared#e program se nastavlja sa prvom nared#om i a #ase strukture. Oigledno je da lista konstanti mora po tipu da odgovara i ra u na osnovu kojeg se vr8i selekcija. Eedna konstanta ne mo@e se pojavljivati u vi8e grana iste #ase strukture. /ako3e> sve vrednosti opsega kome pripada aritmetiki i ra ne moraju #iti navedene u listama konstanti. A prvoj de)iniciji ove nared#e jednostavno je ignorisan sluaj kada u spisku alternativa ne postoji alternativa a odre3enu vrednost i ra a> odnosno kada se dogodi da i ra ima vrednost koja nije navedena u spisku konstanti. Pro#lem koji se pri tome javlja #io je naprosto ignorisan. Podra umevalo se korektno kori8enje strukture. 1asnijim H-S%G%KKK Pascal standardom ovaj pro#lem je stro@e sagledan> pa se taj sluaj tretira se kao gre8ka na koju sistem reaguje u )a i kompilovanja programa. Primer. ,ase struktura u Pascal-u.
6+s$ index !4 9,@1 3$*# nep 13 nep P 92 sumnep 13 sumnep P index $ 1A ;,41 3$*# par 13 par P 92 sumpar 13 sumpar P index $ 1A $%s$ B)#'$% )YUreska, sluca-1 index 3 Z, index* $ 1A

52

Predrag S. Stanimirovi

Osnove programiranja

;noge savremene ver ija Pascal-a imaju mogunost da se u pose#noj grani u #ase strukturi de)ini8e 8ta se doga3a u sluaju kada vrednost i ra a nije navedena u spisku konstanti. Pret0odni primer ilustruje tako de)inisanu #ase nared#u u Pascal-u. A sluaju kada inde! i la i i opsega od 1 do " 8tampa se poruka o gre8ki u programu> inae i raunava se pose#no #roj parni0 i #roj neparni0 indeksa i odgovarajue sume.

4.3.2. V#2$s')0,+ s$%$,6#.+ 0 8


A programskom je iku C nared#a a vi8estruko grananje ima dosta astarelu koncepciju. /o je s4it#& nared#a koja u op8tem sluaju ima sledei o#likF
switch)izraz* + case vrednost991 !case vrednost9;1 W % operator99 ...... break2 case vrednost;91 !case vrednost;;1 W% operator;9 ...... break2 ...... case vrednostn91 !case vrednostn;1 W% operatorn9 ...... break2 default1 operator:9 ...... break2 / sledeNa naredba2

Semantika ove nared#e je sledeaF i raunava se vrednost i ra a izraz> koji se na iva selektor. 2rednost i ra a izraz mora da #ude celo#rojna $ili nakovna> koja se automatski konvertuje u odgovarajuu celo#rojnu vrednost&. 6o#ijena vrednost se upore3uje sa vrednostima vrednost11> vrednost12> 111> koji moraju da #udu celo#rojne konstante ili celo#rojni konstantni i ra i. Ove vrednosti se mogu posmatrati kao o#ele@ja a odre3enu grupu operatora. Hko je prona3eno o#ele@je ija je vrednost jednaka vrednosti i ra a izraz> i raunavaju se operatori koji odgovaraju toj vrednosti. 1ljuna re break predstavlja kraj jedne #ase grane> odnosno kraj grupe operatora sadr@ani0 u nekoj #ase grani. Hko nije prona3ena vrednost u #ase granama jednaka vrednosti i ra a izraz> i raunavaju se iska i u defa%lt graniX ako je i ostavljena alternativa defa%lt> nee se i vr8iti ni jedna od alternativa operatora s4it#&. % ra prema kome se vr8i selekcija i konstante u pojedinim granama tre#a da #udu integer tipa. -ared#e u granama mogu da #udu o#ine ili slo@ene nared#e i #lokovi. %ako na prvi pogled ova nared#a lii na ono 8to imamo u Pascal-u> radi se o nestrukturnoj nared#i koja se i vr8ava tako 8to se i #orom grane odre3uje samo mesto odakle nared#a poinje> a i a toga se nastavlja njen sekvencijalni tok. /o konkretno nai da se nared#a u defa%lt grani i vr8ava uvek kao i to da se nared#a u k-toj grani i vr8ava uvek kada je selektovana neka od pret0odni0 grana. 6a #i se prekinulo upravljanje pod dejstvom ove nared#e kada se i vr8i selektovana grana> odnosno da #i se postigla semantika #ase strukture u Pascal-u> potre#no je da se na kraju svake grane upravljanje eksplicitno prenese na kraj cele s4it#& nared#e. A te svr0e u C-u se koristi nared#a break koja predstavlja i la ak i s4it#& nared#e. 1hdom i primera u C-u je reali ovano vi8estruko grananje i pret0odnog primera gde je kori8ena #ase struktura i Pascal-a. Primer. Program kojim se simulira digitron. Aitavaju se dva operanda i aritmetiki operator. % raunati vrednost unetog i ra a.

53

Predrag S. Stanimirovi void main&' 9 ,-oat o=1, o=2 ;Aar o= =rint,&30nesite i<ra< Sn3' s;an,&3R, R; R,3, Uo=1, Uo=, Uo=2' sOit;A&o=' 9 case 2"27 =rint,&3R,Sn3, o=1"o=2' Drea@ case 2#27 =rint,&3R,Sn3, o=1#o=2' Drea@ case 2E27 =rint,&3R,Sn3, o=1Eo=2' Drea@ case 2627 =rint,&3R,Sn3, o=16o=2' Drea@ de,a+-t7 =rint,&3]e=o<nat o=eratorSn3' B B

Osnove programiranja

Operator break se koristi u okviru s4it#& operatora $kasnije i u 4&ile> do> for operatorima& da #i se o#e #edio i la neposredno na nared#u i a s4it#& strukture. Akoliko se i a neke grupe operatora u s4it#& operatoru ispusti break operator> tada se u sluaju i #ora te grupe operatora i vr8avaju i sve preostale alternative do pojave break operatora ili do kraja s4it#& operatora. Primer. Posmatrajmo sledei program.
void main&' 9 int o;ena s;an,&3Rd3,Uo;ena' sOit;A&o;ena' 9 case !7 =rint,&3Od-i;anSn' Drea@ case $7 =rint,&3Gr-o doDarSn3' case 37 =rint,&3DoDarSn3' case 27 =rint,&3Dovo->anSn3' Drea@ case 17 =rint,&3]edovo->anSn3' Drea@ de,a+-t7 =rint,&3]e@ore@tna o;enaSn73' B B

Akoliko je o#ena S " ispisuje se sledei re ultatF


Erlo Dobar Dobar Dovol-an

Operator s4it#& se mo@e reali ovati pomou veeg #roja if operatora. ;e3utim> programi napisani pomou s4it#& operatora su pregledniji. Primer. +a adati redni #roj meseca ispisati #roj dana u tom mesecu.
void main&' 9 int mese; ;Aar ;A 6E Da -i >e godina =rest+=na E6 =rint,&30nesi redni Dro> mese;a7 3' s;an,&3Rd3, Umese;' sOit;A&mese;' 9 case 17case 37case !7case )7case X7case 107case 127 =rint,&331 danSn3' Drea@ case $7 case (7 case 87 case 117 =rint,&330 danaSn' Drea@ case 27 =rint,&3Da -i >e godina =rest+=na_ 3' s;an,&3R;R;3,U;A,U;A' 6E =rvo +;itavan>e >e ,i@tivno, +<ima enter E6 i,&&;A==2D2' WW &;A==2d2'' =rint,&328 danaSn' e-se =rint,&32X danaSn3'

54

Predrag S. Stanimirovi Drea@ de,a+-t7 =rint,&3]e@ore@tan redni Dro>Sn3' B B

Osnove programiranja

Primer. Odrediti sutra8nji datum.


void main&' 9+nsigned int d,m,g,=rest+=na =rint,&30nesi dat+m + oD-i@+ ddmmgg7St3' s;an,&3R2dR2dR$d3,Ud,Um,Ug' i,&dK1 WW dL31 WW mK1 WW mL12' 9 =rint,&3]e=ravi-an dat+mSn3' exit&0' B =rest+=na=&&gR$==0' UU &gR100V=0'' WW &&gR100==0' UU &gR$00==0'' i,&m==2 UU dL2X"=rest+=na' 9 =rint,&3]e=ravi-an dat+mSn3' exit&0' B sOit;A&d' 9 case 317 sOit;A&m' 9 case 17case 37case !7case )7case X7case 107 d=1 m"" Drea@ case 127 d=1 m=1 g"" Drea@ de,a+-t7 9 =rint,&3R2d. mese; ne mo<e imati 31 danSn3,m' exit&0' B B Drea@ case 2X7 i,&V=rest+=na UU &m==2'' 9 d=1 m=3 B e-se d=28 Drea@ case 287 i,&=rest+=na UU &m==2'' 9 d=1 m=3 B e-se d=30 Drea@ case 307 sOit;A&m' 9 case $7 case (7 case 87 case 117 d=1 m"" Drea@ case 27=rint,&3FeDr+ar ne mo<e imati 30 anaSn3' exit&0' de,a+-t7d=31 B Drea@ de,a+-t7d"" B =rint,&31-ede;i dan ima dat+m7StR2dStR2dStR$dSn3,d,m,g' B

Operator s4it#& se mo@e koristiti umesto if operatora. -a primer> umesto operatora


if)a.b* max3a2 else max3b2

mo@e se pisati
switch)a.b* + 6+s$ :1 max3b2 break2 6+s$ 91 max3a2 /

Oigledno da ovo nije praktino.

55

Predrag S. Stanimirovi

Osnove programiranja

4.4. P)!*)+&s,$ ($'%.$


A svakom programskom je iku o#ino postoje upravljake strukture kojima mo@e da se de)ini8e vi8estruko ponavljanje odre3ene sekvence nared#i na istim ili ra liitim podacima. /o su programske petlje ili strukture iteracije. Ciklusi omoguavaju da se skupovi srodni0 podataka koji se odnose na isti pojam o#ra3uju na isti nain. Prema jednoj podeli> programske petlje se mogu podeliti naF s #rojake i s iterativne. 1od #rojaki0 petlji se unapred mo@e rei koliko puta se ponavlja telo petlje. 1od iterativni0 programski0 ciklusa> nije unapred po nato koliko puta se i vr8ava telo petlje. 1od ovakvi0 ciklusa> kriterijum a nji0ov avr8etak je ispunjenje odre3enog uslova. Prema drugoj podeli> programske petlje se dele naF s petlje sa preduslovom i s petlje sa postuslovom. 1od petlji sa preduslovom> i la ni kriterijum se proverava pre nego 8to se i vr8i telo petlje> dok se kod petlji sa postuslovom prvo i vr8i telo petlje pa se atim proverava i la ni kriterijum. A savremenim programskim je icima skoro #e i u etaka postoje nared#e a de)inisanje petlji sa unapred odre3enim #rojem prola a. /o su t v. #rojake petlje kod koji0 postoji #roja $indeks petlje& kojim se upravlja i vr8avanjem petlje. Struktura #rojake petlje u Pascal-u je prika ana na sledeoj slici.
)or %FS po#etni to kra'n'i ni nared#i

A ovoj petlji se nared#e u telu petlje i vr8avaju a sve vrednosti #rojake promenljive 2 i me3u vrednosti i ra a po#etni i vrednosti i ra a kra'n'i. Sa pri0vatanjem strukturnog programiranja u novijim je icima se pojavljuje i logiki kontrolisana petlja kojom se reali uje 4&ile $4&ile$do& struktura. Ova struktura predvi3a ponavljanje i vr8avanja tela petlje sve dok uslov u aglavlju petlje ima vrednost tr%e. 1od ovakvi0 petlji nije unapred po nat #roj i vr8avanja tela petlje. +a ove petlje se esto koristi i termin pretest petlje> jer se ispitivanje uslova vr8i pre svakog i vr8avanja petlje.

uslov da ni nared#i

ne

Strukturnim programiranjem de)inisana je i %ntil struktura $do$4&ile struktura& koja predvi3a posttest uslova> odnosno ispitivanje uslova posle i vr8enja tela petlje. 3epeat$%ntil struktura je prika ana na sledeoj slici.

ni nared#i

ne

uslov
da 56

Predrag S. Stanimirovi

Osnove programiranja

Pose#an o#lik petlji sa postuslovom je do$4&ile nared#a u C. Ovakva struktura sa postuslovom se avr8ava kada uslov nije ispunjen. Prvi put se nared#e a de)inisanje programski0 petlji pojavljuju u programskom je iku 5O(/(H%. /aj koncept je prene8en i u 5O(/(H- %2 da #i #io i menjen tek sa standardom a 5O(/(H- od 1.77. godine. -a primeru ove nared#e mo@e se sagledati ra voj jednog koncepta kako i je ika u je ik tako i u okviru jednog je ika. A 5O(/(H--u %2 se a de)inisanje #rojaki0 petlji koristi -: nared#a> koja u op8tem o#liku ima sledeu sintaksuF
D' oznaka var 3 pocetni, kra-n-i !, korak%,

O nakom navedenoj u -: nared#i tre#a da #ude o naena poslednja nared#a u petlji. 1orak petlje mo@e da #ude i ostavljen> kada se podra umeva da je jednak 1. Promenljiva koja se koristi a upravljanje petljom mora da #ude celo#rojna i mogu joj se dodeljivati samo po itivne vrednosti. 6ijagram toka prika an na slici ilustruje tok i vr8avanja ove nared#e.

2H(T-POCK/-%

telo petlje 2H(T-2H( = 1O(H1 2H(TS 1(HE-E% ne

da

A je iku 5O(/(H- 77 je adr@ana ista -: nared#a> ali generalisana u nekoliko aspekata. -a primer> promenljiva petlje mo@e da #ude integer> real ili do%ble pre#ision tipa. 7ranice petlje mogu da #udu po itivne ali i negativne. Ovaj koncept se implementira tako 8to se a od#rojavanje prola a kro petlju koristi pose#an #roja> a ne sama promenljiva petlje. Ovaj #roja se i raunava prema sledeoj )ormuliF
($ERA&('"(7QR'TA[ 3 int))kra-n-i pocetni*\korakP9*.

6ijagram toka prika an na slici ilustruje implementaciju ove nared#e.


%-%C%EH*-HC2(K6-OS/ %-%C%EH*-%C%+(H+ % raunaj %/K(HC%O-%CD(OEHB 1O(H1 2K*%B%-HC1O(H1HC%+(H+ 2H( %-%C%EH*-HC2(K6-OS/

%/K(HC%O-%CD(OEHB U 0 2H( 2H( = 1O(H1 %/K(HC%O-%CD(OEHB %/K(HC%O-%CD(OEHB - 1 telo petlje

netano

57

Predrag S. Stanimirovi

Osnove programiranja

Eedan praktian detalj dodat je sintaksi same nared#e. Po novom konceptu> i a o nake se pi8e are tako da se umesto 6O 10 1 S 1>10 pi8e 6O 10> 1 S 1>10 Ova i mena spreava da se ni nakova koji se nala i levo od naka S protumai kao ime promenljive na levoj strani nared#e dodeljivanja. Po nate su #ile gre8ke u praksi> nastale kao posledica pravila da se pra nine u 5O(/(H--u ne tretiraju kao separatori i me3u leksema kao i da u 5O(/(H--u ne postoje re ervisane kljune rei. A standardu a 5O(/(H- .0 adr ana je 6O nared#a i 5O(/(H--a 77 i pridodati su joj neki novi elementi. -jena sintaksa je de)inisana saF
!ime% D' promenl-iva 3 poctni, kra-n-i !, korak% C E"D D' !ime%

-ovina u ovoj de)iniciji je to 8to se nared#a eksplicitno atvara sa K-6 6O> ime je i #egnuta potre#a a o naavanjem adnje nared#e petlje. Ovim je postignuta vea dokumentovanst i struktuiranost programa. +a de)inisanje iterativni0 ciklusa u 5O(/(H--u 77 i 5O(/(H--u .0 postoji samo 9L%*K nared#a> ija je sintaksa de)inisana sa
`FIL%&+s-ov'DO naredDa_... naredDa_@ %]D DO

Primer. $Primena ?<29. nared#a u 5O(/(H--u&. % raunati 1=1G2 = 1G! =p gde se sumiranje prekida kada vrednost 1Gi #ude manja od adate tanosti 53.
Y/ = 0.0001 10M = 0. I = 1 `FIL% &1.06I .Y.. Y/' DO 10M = 10M " 1.06I I = I " 1 %]D DO

A programskom je iku Hlgol '0 uvedena je )or nared#a koja na neki nain predstavlja generali aciju -: nared#e i 5O(/(H--a. ;e3utim to je i primer koji poka uje kako se istovremeno sa nastojanjem da se postigne vea )leksi#ilnost nared#e poveava i kompleksnost je ika a time gu#i na jednostavnosti i preglednosti. Sinatksa )or nared#e data je saF
,for7naredba. 113 4!) "+) 13 ,lista7elemenata. + , , lista7elemenata. / 1! ,naredba. ,lista7elemenata. 113 ,izraz. J ,izraz. s'$( ,izraz. 0 '#% ,izraz. J ,izraz. B-#%$ ,Qoole ov7izraz.

Sintaksom nared#e predvidene su tri vrste upravljanja. Sve vrste upravljanja su ilustrovane sledeim primerimaF
for index 13 9,;,@,4,<,A,>,=,F,9: do vektor!index% 13 :

8to je ekvivalentno sledeoj nared#iF

58

Predrag S. Stanimirovi
for index 13 9 step 9 until 9: do vektor!index% 13 :

Osnove programiranja

odnosno sledeojF
for index 13 9 indexP9 while )index ,3 9:* do vektor!index% 13 :

Ono 8to je najinteresantnije to je da je ovde do voljeno kom#inovanje upravljanja petljom> tako da se mo@e napisati petlja u kojoj se upravljanje menja i o#u0vata sva tri koncepta.
for index 13 9, 4, 9@, 49 s'$( ; 0 '#% 4>, @G index B-#%$ index , 9:::, @4, ;, ;4 do sum 13 sum P index

Ovom nared#om se na sumu dodaju sledee vrednostiF 1> "> 1!> "1> "!> ",> "7> 1"1> "2!> !"> 2> -2".

4.4.1. P)!*)+&s,$ ($'%.$ 0 P+s6+%70


1ako je ve reeno u Pascal-u postoje upravlajke strukture koje omoguavaju de)inisanje logiki0 petlji sa pred-uslovom i post-uslovom> odnosno 4&ile i repeat$%ntil strukture. Pored toga> postoji i mogunost de)inisanja petlje sa unapred odre3enim #rojem prola a o#likaF
4!) i 13 pocetni '!J1!B '! kra- 1! naredba2

%ska for na naava da se o#uu0vaena nared#a ponovno i vr8ava dok se ni u astopni0 vrednosti dodeljuje kontrolno' promenl'ivo' iska a for. 5or nared#a ima op8ti o#likF

1ontrolna promenljiva> koja se pojavljuje i a sim#ola for* mora #iti rednog tipa i deklarisana u istom #loku u kome se iska for pojavljuje. Poetna vrednost i krajnja vrednost moraju #iti rednog tipa koji je kompati#ilan sa kontrolnom promenljivom. 1omponentni iska ne sme da menja kontrolnu promenljivu. Ovo a#ranjuje njeno pojavljivanje kao promenljive na levoj strani pri dodeli vrednosti> u procedurama 3ead ili 3eadln> ili kao kontrolne promenljive u drugom iska u for> #ilo neposredno unutar iska a for #ilo unutar procedure ili )unkcije deklarisane u okviru istog #loka. Poetna i krajnja vrednost i raunavaju se samo jedanput. Hko je u sluaju to $do:nto& poetna vrednost vea $manja& od krajnje vrednosti> ne i vr8ava se komponentni iska . 1ontrolna promenljiva se ostavlja nede)inisanom nakon normalnog i laska i iska a for. K)ekat ove nared#e ilustruje sledei primer. Primer. Program koji i raunava ;-tu parcijalnu sumu 0armonijskog reda 1 1 1 n 1 < $ ; & = 1 + + + ... + = 2 ! n i =1 i upotre#ljavajuci iska for a iteraciju.
program ForPrimer&In=+t, O+t=+t' var I, ]7Integer F7/ea9resen>e @o>e @oristi o=;i>+ doOntoB

begin /ead&]' F 7= 0 ,or I 7 = ] doOnto 1 do F 7= F " 16I 59

Predrag S. Stanimirovi `rite-n&F' end.

Osnove programiranja

program 1+ma &In=+t,o+t=+t' 9resen>e @o>e @oristi o=;i>+ toB var i,n 7 integer 1+m 7 reabegin read&n' 1+m 7= 0 for i 7= 1 to n do 1+m 7= 1+m "16i Orite &1+m' end &1+ma'

Aslovne $iterativne& petlje u Pascal-u imaju sledeu sintaksuF


B-#%$ uslov 1! naredba2

i
)$($+' naredba792 C naredba7k 0 '#% )uslov*2

Sintaksnim dijagramima se ove petlje opisuju na sledei nainF -ared#a 4&ile ima o#likF %ska koji sledi i a sim#ola do ne i vr8ava se nijednom ili se i vr8ava vi8e puta. % ra koji kontroli8e ponavljanje mora #iti tipa +oolean. Pre nego sto se i vr8i iskaz i raunava se vrednost i ra aX iskaz se i vr8ava ako je i ra istinit> u protivnom> nared#a :0ile se avr8ava. S o# irom da se izraz i raunava pri svakoj iteraciji> tre#alo #i da #ude on #ude 8to jednostavniji. %ska 3epeat ima o#likF

Sled iska a i me3u sim#ola repeat i %ntil i vr8ava se najmanje jedanput. -akon svakog i vr8avanja sleda iska a i raunava se vrednost logikog i ra a. Ponovljeno i vr8avanje nastavlja se sve dok izraz ne postane istinit. 1ako se i ra i raunava pri svakoj iteraciji> morate pa iti da on #ude 8to jednostavniji. Aslovne petlje su pose#no pogodne kod iterativni0 i raunavanja kada je odre3eno i raunavanje potre#no ponavljati sve dok va@i neki uslov ili se ne ispuni neki uslov. Primer. ?&ile petlja u Pascal-u. Pret0odni primer mo@e da se de)ini8e tako da tre#a odrediti a koje n va@i sledei uslovF

i
i =1

>= 5ran>

gde je 5ran vrednost koja se unosi sa tastature. Ovaj adatak se mo@e re8iti pomou 4&ile i repeat$ %ntil petlje.
program 1+ma1&in=+t, o+t=+t' var i7 integer 1+m,Yran7 reabegin read&Yran' 1+m7= 0 i7= 0 (#i)e 1+m K Yran do begin i7=i"1 1+m 7= 1+m " 16i end$ Orite&1+m' 60

Predrag S. Stanimirovi end. 91+ma1B

Osnove programiranja

Primer. Primer sa repeat-until petljom u Pascal-u.


program 1+ma2 &in=+t,o+t=+t' var i7 integer 1+m,Yran7 reabegin read&Yran' 1+m 7= 0 i7= 0 repeat i7= i"1 1+m7* 1+m"16i +nti) 1+m ,* Yran Orite&1+m' end 91+ma2B

Primer. % raunati sumu

!k k = 0 k^
sa tano8u . Sumiranje prekinuti kada #ude ispunjen uslov n !k !nG$n^& T > k =0 k^ gde je adata tanost

P/OY/AM enax &in=+t, o+t=+t' GA/ i 7integer x, e=si-on, ;-an, <Dir 7 reaB G!N read&x, e=si-on' ;-an 7= 1 <Dir 7= 1 i 7= 1 `FIL% ;-an L= e=si-on E <Dir DO B G!N ;-an 7= ;-an E x6i <Dir 7= <Dir " ;-an N" Orite-n&<Dir' N".

i 7= i" 1

Primer. +a adati #roj n i raunati SS " 4 + 12 1' + ... + $ 1& n1 "n


=rogram @oren>e var i,n7integer s,<na@7reabegin re=eat Orite&24adati nL=1 2' read-n&n' Orite-n <na@7=1 ,or i7=1 to n#1 do <na@7=#<na@ s7=sTrt&$En' ,or i7=n#1 doOnto 1 do begin s7=sTrt&$Ei"<na@Es' <na@7=#<na@ end Orite-n&2/e<+-tat = 2,s72071X' +nti- ,a-se end.

Primer. Sledei program i raunava stepen realnog #roja X na stepen @> gde je @ nenegativni ceo #roj.

61

Predrag S. Stanimirovi

Osnove programiranja

=rogram 1te=enovan>e var %@s=onent, P 7 Integer Osnova, /e<+-tat, * 7 /eaDegin /ead&*, P' /e<+-tat 7= 1 Osnova 7= * %@s=onent 7= P OAi-e %@s=onent L 0 do Degin OAi-e not Odd&%@s=onent' do Degin %@s=onent 7= %@s=onent div 2 Osnova 7= 1Tr&Osnova' end %@s=onent7= %@s=onent#1 /e<+-tat 7= /e<+-tatEOsnova end `rite-n&/e<+-tat' end.

Primer. % raunavanje parcijalne sume 0armonijskog reda <$;& S 1=1G2 =1G! = ... = 1G;> koristei ?&ile iteraciju.
=rogram `Ai-ePrimer var ]7Integer F7/eaDegin /ead&]' F 7= 0 OAi-e ]L0 do Degin F 7= F"16] ] 7= ]#1 end Orite-n&F' end.

Primer. %sti primer> ura3en pomou 3epeat iteracije.


=rogram /e=eatPrimer var ]7 Integer F7 /eaDegin read&]' F 7= 0 re=eat F 7= F " 16] ] 7= ]#1 +nti- ] = 0 Orite-n&F' end.

7ornji program se pona8a ispravno a ;U0. (a motrite 8ta se de8ava ukoliko je ; TS 0. ?&ile-ver ija istog programa ispravna je a svako ;> ukljuujui i ; S 0. Aoite da iska (epeat i vr8ava sled iska aX ogra3ivaki par begin 111 end #io #i suvi8an $ali ne i pogre8an&.

4.4.2. P)!*)+&s,$ ($'%.$ 0 8


D-#%$ +)$13+ 0 8
Ovom nared#om se reali uju programski ciklusi sa nepo natim #rojem ponavljanja> avisno od odre3enog uslova. Operator 4&ile se koristi prema sledeoj sintaksiF
while)izraz* operator

K)ekat ove nared#e je da se telo 4&ile ciklusa> o naeno sa operator i vr8ava dok je vrednost i ra a i ra jednaka tr%e $nenula&. 1ada vrednost i ra a i ra postane false $nula&> kontrola se prenosi na sledeu nared#u. /elo ciklusa> o naeno sa operator> i vr8ava se nula ili vi8e puta. Operator mo@e #iti

62

Predrag S. Stanimirovi

Osnove programiranja

prost ili slo@en. Svaki korak koji se sastoji i provere uslova i i vr8enja operatora na iva se ZZiteracijaZZ. Hko odma0 po ulasku u ciklus izraz ima vrednost ZZnetanoZZ $nula&> operator se nee i vr8iti. Primer. ;aksimum n uneti0 #rojeva.
main&' 9 int i, n ,-oat max, x =rint,&3:o-i@o Dro>eva <e-ite_ 3' s;an,&3Rd3, Un' OAi-e &nK=0' 9 =rint,&3Yres@a, <aAtevan >e ;eo =o<itivan Dro>.Sn3' =rint,&30nesite nov+ vrednost7 3' s;an,&3Rd3, Un' B =rint,&3Sn 0nesite Rd rea-niA Dro>eva7 3, n' s;an,&3R,3, Ux' max = x i=1 OAi-e &iK=n' 9 s;an,&3R,3, Ux' i,&maxKx' max = x ""i B =rint,&3Sn Ma@sima-ni od +netiA Dro>eva7 RgSn3,max' B

Primeri u jeziku .
Primer. % raunati a prema iterativnoj )ormuli !0 S aG2X !i=1 S !i - $!i2 - a&G$2!i& S !i =1G2R$aG!i - !i& > i S 0> 1> ... %terativni postupak prekinuti kada se ispuni uslov J!i=1 - !iJT10-,.
Jin;-+de Kstdio.AL main&' 9 ,-oat a,x0,x1 s;an,&3R,3,Ua' x0=a62 x1=&x0Ex0#a'6&2Ex0' OAi-e&,aDs&x1#x0'K1%#!' 9 x0=x1 =rint,&3R,Sn3,x1' B

x1=&x0Ex0#a'6&2Ex0'

Primer. % raunati aritmetiku sredinu ni a #rojeva ra liiti0 od nule. Droj elemenata u ni u nije unpred po nat.
void main&' 9 int Dro>a;=0 ,-oat s+ma=0, sto=;ode=0, Dro> =rint,&3Da> ni< <na@ova <avrsen sa RdSn3,sto=;ode' s;an,&3R,3,UDro>' OAi-e&Dro> V= sto=;ode' 9 s+ma"=Dro> Dro>a;"" s;an,&3R,3,UDro>' =rint,&31redn>a vrednost= R,Sn3,s+ma6Dro>a;' B

Primer. 6ejstvo operatora == i $ $ u ciklusima.


Jin;-+de Kstdio.AL main&' 9 int i=0 =rint,&3Prva =et->a 7Sn3' OAi-e&iK!' 9 i"" =rint,&3R!d3,i' =rint,&3SnDr+ga =et->a 7Sn3' i=0 OAi-e&i""K!' =rint,&3R!d3,i' 6E 1 i=0 =rint,&3Sn.re;a =et->a 7Sn3' OAi-e&""iK!' =rint,&3R!d3,i' 6E 1

B 2 2 3 3

6E 1 $ $E6

2 !E6

!E6

63

Predrag S. Stanimirovi B

Osnove programiranja

Primer. Suma celi0 #rojeva uneti0 preko tastature.


Jin;-+de Kstdio.AL main&' 9 int x,s+m=0 OAi-e&s;an,&3Rd3,Ux'==1' s+m"=x =rint,&30@+=an <Dir >e RdSn3,s+m' B

Primer. %spitati da li je adati prirodan #roj n prost.


void main&' 9 int i,n,=rost s;an,&3Rd3,Un' =rost=&nR2V=0' WW &n==2' i=3 OAi-e&=rost UU &iK=n62' 9 =rost = nRiV=0 i"=2 B i,&=rost' =rint,&3Rd >e =rostSn3,n' e-se =rint,&3Rd ni>e =rostSn3,n' B

Primer. % raunati . Sumiranje prekinuti kada je apsolutna vrednost poslednjeg dodatog lana manja od adate tanosti e.
k =0

$1& k

! 2k
$2k &^

> ! < G2

1oristi se

ak =

!2
2k $ 2k 1&

a k 1

void main&' 9 do+D-e ;,a,e,x int @=0 s;an,&3R-,R-,3,Ux, Ue' OAi-e&,aDs&a'L=e' 9 @"" a=#&xEx6&2E@E&2E@#1'''Ea =rint,&3;os&R.2-,'=R.)-,3,x,;' B

;"=a

Primer. Leksadekadni #roj prevesti u dekadni. Ano8enje 0eksadekadnog #roja prekinuti kada se unese karakter koji ne pripada skupu karaktera Z0Z> ... > Z.Z> Z)Z> ... > Z/Z.
Jin;-+de Kstdio.AL void main&' 9int Dro>,+,@ ;Aar ;i, Dro>=0 +=1 =rint,&3+nesi Ae@sade@adni Dro>Sn3' s;an,&3R;3,U;i,' +=&&;i,K=2F2'UU&;i,L=202'' OAi-e &+' 9 i, &&;i,L=2A2'UU&;i,K=2F2'' @=;i,#!! e-se @=;i,#$X Dro>=Dro>E1("@ s;an,&3R;3,U;i,' +=&&;i,K=2F2'UU&;i,L=202'' B =rint,&3RdSn3,Dro>' B

Primer. -apisati program koji simulira rad d@epnog kalkulatora. Program uitava ni #rojni0 vrednosti ra dvojeni0 nakovima aritmetiki0 operacija => -> R> G kao i i raunavanje vrednosti i ra a koji je de)inisan na ovaj nain. Hritmetike operacije se i vr8avaju s leva na desno> #e po8tovanja

64

Predrag S. Stanimirovi

Osnove programiranja

nji0ovog prioriteta.
Jin;-+de Kstdio.AL void main&' 9 do+D-e res+-t, n+m ;Aar o= =rint,&3SnSn3' s;an,&3R-,3 , Un+m' s;an,&3R;3 , Uo=' res+-t = n+m OAi-e &o= V= 2=2' 9 s;an,&3R-,3 , Un+m' sOit;A &o=' 9 case 2"2 7 res+-t "= n+m Drea@ case 2#2 7 res+-t #= n+m Drea@ case 2E2 7 res+-t E= n+m Drea@ case 262 7 res+-t 6= n+m Drea@ B s;an,&3R;3 , Uo=' B =rint,&3/e<+-tat >e R.10-,.3 , res+-t' B

P)#&$ + B-#%$ 6#,%0s+ 0 !3)+1# '$,s'+ 0 8


Besto puta se pri radu sa tekstovima umesto )unkcija s#anf$& i printf$& koriste #i#lioteke )unkcije get#&ar$& i p%t#&ar$&. Pre kori8enja ovi0 )unkcija mora da se navede pretprocesorska direktiva Jin;-+deKstdio.AL. Ove )unkcije se koriste a ula i i la samo jednog karaktera. 5unkcija p%t#&ar$& ima jedan nakovni argument. Pri njenom po ivu potre#no je da se unutar agrada navede nakovna konstanta> nakovna promenljiva ili )unkcija ija je vrednost nak. Ovaj nak se prika uje na ekranu. 5unkcija get#&ar$& nema argumenata. (e ultat njenog po iva je nak preu et i tastaturnog #a)era. Ovom )unkcijom se ula ni nak unosi u program. Primer. % raunati koliko je u adatom tekstu uneto nakova ZaZ> ZbZ> ajedno Z#Z i Z,Z> kao i #roj preostali0 karaktera.
Jin;-+de Kstdio.AL void main&' 9 int ;, a_;o+nt=0, D_;o+nt=0, ;5_;o+nt=0, otAer_;o+nt=0 OAi-e&&;=get;Aar&'' V= %OF' sOit;A &;' 9 case 2a27 ""a_;o+nt Drea@ case 2D27 ""D_;o+nt Drea@ case 2;27 case 2527 "";5_;o+nt Drea@ de,a+-t7 ""otAer_;o+nt B =rint,&3SnR8sR!dSnR8sR!dSnR8sR!dSnR8sR!dSnR8sR!dSn3, 3a_;o+nt73, a_;o+nt, 3D_;o+nt73, D_;o+nt, 3;5_;o+nt73, ;5_;o+nt, 3otAer73, otAer_;o+nt, 3.ota-73, a_;o+nt"D_;o+nt";5_;o+nt"otAer_;o+nt' B

Primer. Anos teksta je avr8en prela om u novi red. Pre#rojati koliko je u unetom tekstu nakova u vika> nakova pitanja a koliko taaka.
Jin;-+de Kstdio.AL void main&' 9 ;Aar ; int +<v,+=t,i<> +<v=+=t=i<>=0 OAi-e&&;=get;A&''V=2Sn2' sOit;A&;' 9 case 2V27""+<v Drea@ 65

Predrag S. Stanimirovi case 2_27""+=t case 2.27""i<> Drea@ Drea@

Osnove programiranja

B =rint,&3Sn3' =rint,&30<vi;niA ima RdSn3,+<v' =rint,&30=itniA ima RdSn3,+=t' =rint,&3I<>avniA ima RdSn3,i<>'

1od organi acije :0ile ciklusa mora se voditi rauna o tome da telo ciklusa menja parametre koji se koriste kao preduslov a ciklus> tako da posle odre3enog #roja iteracija postane tnetaanu. A protivnom> ciklus e #iti #eskonaan.

D!7B-#%$ +)$13+ 0 8
-o$4&ile nared#a je varijanta :0ile nared#e. (a likuje se od :0ile nared#e po tome 8to je uslov na kraju ciklusaF
do operator while)izraz*2 sledeNa naredba2

/elo ciklusa je o naeno sa operator> i i vr8ava se jedanput ili vi8e puta> sve dok i ra ne do#ije vrednost 0 $false&. /ada se kontrola prenosi na sledeu nared#u.

Primeri
Primer. %spis celog #roja s desna na levo.
void main&' 9 -ong Dro> =rint,&30nesite ;eo Dro>3' =rint,&3Perm+tovani Dro>3' do 9 =rint,&3Rd3,Dro>R10' =rint,&3Sn3' B

s;an,&3R-d3,UDro>' Dro> 6= 10 B OAi-e&Dro>'

Primer. % raunati pri#li@no vrednost #roja S !.1"1,. koristei )ormulu G" S 1-1G!=1G,-1G7=p Sumiranje prekinuti kada apsolutna vrednost lana koji se dodaje #ude manja od adate vrednosti eps.
void main&' 9 int <na@=1 ,-oat ;-an,s+ma,e=s,i=1.0 s;an,&3R,3,Ue=s' ;-an=s+ma=1.0 do 9 ;-an=<na@6&2Ei"1' s+ma"=;-an OAi-e&16&2Ei"1'L=e=s' =rint,&3Bro> Pi=R,Sn3,$Es+ma' B

<na@=#<na@

i""

?!) +)$13+ 0 8
A le iku C> nared#a for je pove ana sa 4&ile nared#om. Preci nije> konstrukcija
for)pocetak2 uslov2 korekci-a* operator sledeNa naredba

ekvivalentna je sa
pocetak2 while)uslov* + operator korekci-a /

66

Predrag S. Stanimirovi

Osnove programiranja

pod uslovom da uslov nije pra an. Operator koji predstavlja telo ciklusa mo@e #iti prost ili slo@en. /or ciklus o#lika
for)2 uslov 2* operator

ekvivalentan je 4&ile ciklusu


while)uslov* operator

/ako3e> ekvivalentni su sledei #eskonani ciklusiF


for)22* operator

i
while)9* operator.

5or nared#a o#lika


for )pocetak2 uslov2 korekci-a* operator

mo@e se predstaviti sledeim dijagramom toka


pocetak

uslov TU 0 tano operator korekcija

netano

% ra i u aglavlju petlje mogu da #udu i i ostavljeni. -a primer> petlja #e drugog i ra a i vr8ava se kao da je njegova vrednost true> 8to nai kao #eskonana petlja. Hko su i ostavljeni prvi i trei i ra nema i vr8avanja petlje. A je iku C se a de)inisanje petlje sa unapred de)inisanim #rojem i vr8enja tela petlje mo@e koristiti for nared#a. ;e3utim> )or nared#a u C je mnogo )leksi#ilnija od odgovarajui0 nared#i u drugim je icima. -aime> i ra i u aglavlju petlje mogu da o#jedine vi8e nared#i. /o nai da se u okviru petlje mo@e istovremeno de)inisati vi8e uslova upravljanja ve ani0 a ra liite promenljive koje ak mogu da #udu i ra liiti0 tipova. (a motrimo sledei primer.

Primeri
Primer. Suma prvi0 n prirodni0 #rojeva se mo@e i raunati na vi8e ra liiti0 naina.
1. s+m=0 ,or&i=1 iK=n ""i' s+m "= i 2. s+m=0 i=1 ,or& iK=n ' s+m "= i"" !. ,or&s+m=0, i=1 iK=n s+m "= i, i""'

Primer. 5aktorijel prirodnog #roja ura3en na dva slina naina.


void main&' 9 int i,n -ong ,a@=1 =rint,&3Sn 0nesite Dro>3' s;an,&3 Rd3,Un' ,or&i=1 iK=n ""i' ,a@ E=i =rint,&3RdV = R-d Sn3,n,,a@' B void main&' 9 int i,n -ong ,a@=1

67

Predrag S. Stanimirovi =rint,&3Sn 0nesite Dro>3' s;an,&3 Rd3,Un' ,or&,a@=1,i=1 iK=n ,a@E=i,""i' =rint,&3RdV = R-d Sn3,n,,a@'

Osnove programiranja

Primer. % raunati 1^ = 2^ =p= n^.


void main&' 9 int i,n -ong ,a@t,s s;an,&3Rd3,Un' ,or&s=0, ,a@t=1, i=1 iK=n =rint,&31+ma=R-dSn3,s' B

,a@tE=i, s"=,a@t, i""'

%sti i ra se mo@e i raunati na sledei nain


void main&' 9 int n -ong s s;an,&3Rd3,Un' ,or&s=0 nL0 s=sEn"n##' =rint,&31+ma=R-dSn3,s' B

Primer. % raunati sve troci)rene )rmstrongove #rojeve.


void main&' 9 int a,D,;, i ,or&i=100 iK=888 i""' 9 a=iR10 D=iR100610 ;=i6100 i,&aEaEa"DEDED";E;E;==i' =rint,&3RdSn3,i' B B

Primer. Program a odre3ivanje savr8eni0 #rojeva do adatog prirodnog #roja. (avrAen #roj je jednak sumi svoji0 delitelja.
void main&' 9 int i,m,n,de-,s s;an,&3Rd3,Um' ,or&i=2 iK=m i""' 9 n=i s=1 ,or&de-=2 de-K=i62 de-""' i,&nRde-==0' s"=dei,&i==s' =rint,&3RdS3,i' B B

Primer. %spitati da li je dati prirodan #roj prost.


Jin;-+de KmatA.AL void main&' 9 int n,i=3 s;an,&3Rd3, Un' OAi-e& &iK=sTrt&n'' UU &nRi V= 0'' i"=2 i,&iLsTrt&n'' =rint,&3Bro> >e =rostSn' e-se =rint,&3Bro> ni>e =rostSn' B

Primer. /a#lica HSC%% kodova.


void main&' 9 signed ;Aar ; +nsigned ;Aar d ,or&;=#12X ;K=12) ;""' =rint,&3; = Rd R;Sn3,;,;' ,or&d=0 dK=2!! d""' =rint,&3d = Rd R;Sn3,d,d' B

68

Predrag S. Stanimirovi

Osnove programiranja

Primer. 4Pas)al6 % raunati


! 2k k = 0 $ 2 k &^ sa tano8u . Sumiranje prekinuti kada #ude ispunjen uslov J$!2k&$$2k&^&J T .

cos$!&

=rogram s+ma var x,e=s,a,s7rea@7integer Degin Orite-n&20nesite =romen->iv+ x i ta;nost 2' @7=0 a7=1 s7=a OAi-e aDs&a'L=e=s do Degin a7=sTr&x'6&&2E@"1'E&2E@"2''Ea s7=s"a end Orite-n&21+ma = 2,s707(' end.

read-n&x,e=s'

@7=@"1

4.5. ?!)&+%#/+6#.+ )$($'#'#" #- #s,+/+


-eka je + logiki i ra > a S iska . /adaF
OAi-e B do 1 $1&

o naava ponavljanje radnje de)inisane iska om ( sve dok i raunavanje i ra a + daje vrednost tr%e1 Hko je vrednost i ra a + jednaka false na samom poetku procesa o#avljanja radnje de)inisane sa $1&> iska ( nee #iti uop8te i vr8en. %ska $1& se gra)iki predstavlja na sledei nainF

$2&

K)ekat iska a OAi-e B do 1 mo@e se rigoro no de)inisati tako 8to se ka@e da je on ekvivalentan e)ektu iska aF
i, B tAen Degin 1 OAi-e B do 1 end.

$!&

$"&

Ovakva de)inicija nai da dijagrami $2& i $"& opisuju ekvivalentne procese i vr8enja $radnje&. Primer OAi-e B do 1 iska a dat je u programu $,&> koji i raunava sumu & $n& S 1=1G2= . . . =1Gn.

69

Predrag S. Stanimirovi var n 7 integer A 7 reaA 7=0 OAi-e nL0 do Degin A 7= A"16n n 7= na1 end.

Osnove programiranja

$,&

6rugi o#lik repetitivnog iska a jeF


re=eat 1 +nti- B, $'&

gde je ( ni iska a a + logiki i ra . %ska $'& de)ini8e sledeu radnjuF i vr8ava se iska (* a atim se i raunava i ra +1 Hko je re ultat i raunavanja i ra a + jednak false> ponovo se i vr8ava iska (> i tako dalje. Proces ponavljanja radnje de)inisane sa ( avr8ava se kada i raunavanje i ra a + da tr%e1 Struktura ovako de)inisanog repetitivnog iska a predstavlja se sledeim dijagramomF

$7&

Pore3enjem $2& i $7& akljuujemo da se u $7& iska ( mora i vr8iti #ar jednom> dok se u $2& on ne mora uop8te i vr8iti. 1ako se u prvom sluaju + i raunava pre svakog i vr8enja iska a (> a u drugom nakon svakog i vr8enja iska a (> ra lo i e)ikasnosti nala@u da + #ude u 8to je mogue prostijoj )ormi. (igoro na de)inicija radnje odre3ene iska om repeat ( until + daje se na taj nain 8to se ka@e da je ona ekvivalentna radnji koju odre3uje iska F
Degin 1 i, B tAen re=eat 1 +nti- B end.

$4&

$.&

Ovo nai da dijagrami $7& i $.& opisuju ekvivalentne radnje. 1ako se u $2& i $7& pojavljuju atvorene putanje ili petlje> o#a ova iska a se esto i na ivaju petljama. A njima se ( se na iva telom petlje. Primer re=eat iska a dat je u programu $10&> koji i raunava sumu &$n&S1=1G2= . . .= 1GnF
var n7 integer A7 rea-

70

Predrag S. Stanimirovi A7=0 re=eat A7= A"16n n7=n#1 +nti- not&nL0'.

Osnove programiranja

$10&

5undamentalni pro#lem ve an a repetitivnu kompo iciju iska a ilustrovaemo primerima $,& i $10&. Proces i vr8enja iska a $10& je konaan samo ako u poetku va@i nU0. +a nT0 $10& predstavlja #eskonanu petlju. S druge strane> program $,& se pona8a korektno> ak i ako je nT0> tj. proces njegovog i vr8avanja je konaan. 2idimo> dakle> da pogre8no koncipiran repetitivni iska mo@e opisivati radnju #eskonanog vremenskog trajanja.

4.6. N+s#% # ()$,#1# 6#,%0s+


Petlje ra matrane u pret0odnim primerima imaju ajedniku karakteristiku da se i petlje i la i ili na kraju> kada se avr8i sekvenca nared#i koja ini telo petlje> ili na samom poetku pre nego i apone ta sekvenca nared#i> avisno od vrste petlje i ispunjenja uslova. A takvim sluajevima> petlja se avr8ava na osnovu i la nog kriterijuma> koji je postavljen kao preduslov ili postuslov. ;e3utim> u odre3enim sluajevima pogodno je da programer sam odredi mesto i laska i petlje. A novijim programskim je icima> o#ino postoji jednostavan me0ani am a uslovni ili #e uslovni i la ak i petlje. A Hdi> 5O(/(H--u .0 i ;oduli 2 to je e!it nared#a> a u C-u i Pascal-u se takva nared#a na iva break. -apomenimo da se nared#e e!it o#ino koriste da se de)ini8e nastavak programa u sluaju pojave i u etka ili gre8ke u toku i vr8enja tela petlje. A programskom je iku C a #e uslovni i la ak i naj#li@e petlje koristi se nared#a break. /ada je njeno naenjem slino kao i kod s4it#& nared#e. Primer. -ared#a break a #e uslovni i la ak i petlje u C.
s+m=0 (#i)e &s+m K 2000' 9 s;an,&bRdc, U=odata@' i,&=odata@ K 0' Drea@ s+m * s+m - =odata@ B

A svakom prola u kro petlju u ovom primeru uitava se po jedan podatak i dodaje sumi. +aglavljem petlje je de)inisano da se sumiranje i vr8ava sve dok se sumiranjem ne dostigne vrednost 2000. ;e3utim> ukoliko se uita negativni podatak> petlja se prekida i program se nastavlja sa prvom nared#om i a petlje.

A je iku C postoji i nared#a #ontin%e koja se tako3e koristi a upravljanje tokom i vr8enja petlje. Ovom nared#om se samo preskae ostatak petlje i program nastavlja novim prola om kro petlju poev8i od prve nared#e petlje> K)ekat te nared#e na pret0odnom primeru dat je kao naredni primer. Primer. K)ekat nared#e #ontin%e u C.
s+m=0 (#i)e &s+m K 2000' 9 s;an,&bRdc, U=odata@'

71

Predrag S. Stanimirovi if &=odata@ K 0' contin+e s+m = s+m " =odata@ B

Osnove programiranja

A ovom sluaju> kada se uita negativni podatak preskae se nared#a a modi)ikovanje sume i program nastavlja ponovnim prolaskom kro petlju. /o nai da e u ovom sluaju petlja uvek da se avr8i kada se dostigne vrednost s%m US 2000> 8to u pret0odnom primeru nije uvek #io sluaj.

4.7. N+)$13$ /+ 3$/0s%!" ! *)+ + .$


+a #e uslovno grananje u programu koristi se 5: : nared#a. A su8tini> to je jedna od najmoniji0 nared#i koja u spre i sa nared#om selekcije omoguava da se implementiraju i najslo@eniji algoritmi. Pro#lem je jedino u tome> 8to tako de)inisan khd mo@e da #ude veoma nepregledan> a takvo programiranje podlo@no gre8kama. Po konceptu strukturnog programiranja 5: : nared#a je i #aena i upotre#e> jer se nastoji da se program de)ini8e umetanjem struktura jednu u drugu i da pri tome sve strukture imaju jedan ula i jedan i la . Postoji nekoliko je ika u kojima 5: : nared#a uop8te ne postoji> na primer ;odula 2. ;e3utim u mnogim je icima koji podr@avaju koncept strukturnog programiranja nared#a 5: : je adr@ana i ostaje pogodno sredstvo a re8avanje mnogi0 pro#lema.

4.7.1. O/ +,$ 9%+3$%$:


Skok $jump& prenosi kontrolu na speci)iciranu taku u programu. /ipina )orma #e uslovnog skoka je i ra qqgoto 9Xrr> ime se kontrola toka programa direktno prenosi na taku o naenu sa 9> 8to se na iva o#ele@je $label&. Primer. Sledei )ragment programa $u C-like je iku& sadr@i #e uslovni skokF
if &E1' C1 e)se 9 C2 goto * B C3 (#i)e &E2' 9 C$ *7 C! B

Ovde o#ele@je X o naava partikularnu taku programa> preci nije> poetak komande ,,. -a taj nain> skok qqgoto NXrr prenosi kontrolu na poetak komande ,,. Sledea slika prika uje dijagram toka koji odgovara ovom )ragmentu programa. -apomenimo da jedna komanda if i komanda 4&ile imaju prepo natljive poddijagrame> koji su o naeni. 5ragment programa> kao celina ima jedan ula i jedan i la > ali komanda if ima dva i la a> dok 4&ile komanda ima dva ula a.

72

Predrag S. Stanimirovi

Osnove programiranja

-eogranieni skokovi omoguavaju komande koje imaju vi8estruke ula e i vi8estruke i la e. Oni imaju tendenciju da produkuju qq8pagettirr khd> tako na van ato 8to je nji0ov dijagram toka amr8en. qqjpagettirr khd ima tendenciju da #ude te8ko ra umljiv. 2eina glavni0 programski0 je ika podr@ava skokove> ali su realno astareli u modenim je icima. Bak i u je icima koji podr@avaju skokove> nji0ova upotre#a je ograniena restrikcijom dometa svakog o#ele@jaF skok qqgoto 9Xrr je legalan samo unutar dosega 9. A C> na primer> doseg svakog o#ele@ja je najmanje o#u0vaen #lok komandom $qq[ 1 1 1 ]rr&. Prema tome> mogui su skokovi unutar #lok komande> ili i jedne #lok komande i van neke ogra3ene #lok komandeX me3utim> nemogu je skok unutar neke #lok komande od spolja> niti i jednog tela )unkcije u drugo. C skokovi nisu ogranieni da spree qq8pagettirr kodovanje. Skok unutar #lok komande je relativno jednostavan> dok je skok i van #lok nared#e komplikovaniji. /akav skok mora da uni8ti lokalne promenljive #loka pre nego 8to se trans)er prenese na destinaciju skoka. Primer. Skok i van #lok nared#e. Aoimo sledei $ve8taki& C kodF
Jin;-+deKstdio.AL void main&' 9 ;Aar sto= = 2.2,;A=2V2 do 9 ;Aar ;A ;A = get;Aar&' i, &;A == %OF' goto * =+t;Aar&;A' B OAi-e &;A V= sto=' =rint,&3done3' *7 =rint,&3R;Sn3,;A' B

Skok qqgoto NXrr prenosi kontrolu i van #lok komande [1 1 1]. Prema tome> on tako3e uni8tava lokalnu promenljivu #& i #loka. Po i lasku i ciklusa> prika uje se vrednost q^r kao vrednost promenljive #&. Skok i van tela procedure je jo8 komplikovaniji. /akav skok mora da uni8ti lokalne promenljive i da terminira aktivaciju procedure pre prenosa kontrole na takvu destinaciju. 2elike komplikacije nastaju kada je destinacija skoka unutar tela rekur ivne procedureF koje rekur ivne aktivacije se terminiraju kada se skok i vr8id Prema tome> povr8no su skokovi veoma jednostavni> dok u su8tini oni uvode ne@eljenu kompleksnost u semantiku je ika visokog nivoa.

73

Predrag S. Stanimirovi

Osnove programiranja

+a o naavanje nared#i> na koje se pod dejstvom 7O/O nared#e prenosi upravljanje> u programskim je icima se koristi koncept o naka $la#ela&. %ska 5oto je prost iska koji uka uje na to da dalju o#radu tre#a nastaviti u drugom delu programskog teksta> to jest sa mesta na kome je la#ela. A nekim je icima $C-u> Hlgol-u '0 na primer& koriste se identi)ikatori kao o nake. A drugim $5O(/(H- i Pascal na primer& to su neo naene celo#rojne konstante. A Hdi su o nake tako3e identi)ikatori> ali o#u0vaeni agradama TT i UU> dok se a ra dvajanje o naka od nared#i na koje se odnose u mnogim je icima koristi dvotaka $F&. Kvo neki0 primeraF Primer nared#e 7O/O a skok na o naenu nared#u u Hdi.
goto MRAT2 W ,,MRAT.. ?BD 13 ?BD P 6'DA$AM2

%sti primer napisan u C-u #io #i sledeeg o#likaF


goto kra-2 C sum 13 sum P podatak2

kra-1

A svim programskim je icima o#ino su de)inisana odre3ena pravila koja ograniavaju kori8enje nared#e 5: :. -a primer> u Pascal-u o nake moraju eksplicitno da #udu opisane u odeljku deklaracije nared#i. One se ne mogu prenositi kao argumenti potprograma niti modi)ikovati. 1ao deo 5: : nared#e mo@e da #ude samo neo naena konstanta> ali ne i i ra ili promenljiva koja do#ija vrednost o nake.

Svaka la#ela poseduje sledee oso#ineF 1. mora se pojaviti u odeljku deklaracija la#ela> pre svog pojavljivanja u #loku> 2. mora pret0oditi jednom i samo jednom iska u koji se pojavljuje u iska nom delu #loka. !. ima o#last va@enja u celokupnom tekstu tog #loka> iskljuujui sve ugnje@dene #lokove koji ponovo deklari8u tu la#elu. Primer. A #eskonanom ciklusu unositi dva realna #roja i raunati nji0ov proi vod.
=rogram mno<i +ses ;rt -aDe- 1 var a,D7reaDegin 17 Orite&2 Prvi Dro>_ 2' read-n&a' Orite&2 Dr+gi Dro>_ 2' Orite-n&2 ]>iAov =roi<vod >e 2' Orite-n&aED72070' goto 1 end.

read-n&D'

Primer. Primeri upotre#e 5oto nared#e $programski deo&F


-aDe- 1 9 D-o@ A B ... =ro;ed+re B 9 D-o@ B B -aDe- 3, ! Degin goto 3 3 7 `rite-n&MDoDar dan2' ! 7 i, P tAen Degin 1 goto ! end 9 OAi-e P do 1 B goto 1 9 ovo +<ro@+>e =revremen <avrseta@ a@tiva;i>e =ro;ed+re BB `rite-n&2Dovi?en>a2' end 9 D-o@ B B Degin

74

Predrag S. Stanimirovi B 17 `rite-n&M=rogram2' 9 3goto 33 ni>e do<vo->en + D-o@+ A ' end 9 D-o@ A B

Osnove programiranja

Skokovi i vana u strukturirani iska nisu do voljeni. Stoga su sledei primeri nepravilni. Primeri sintaksno nepravilni0 programaF
a' ,or I 7= 1 to 10 do Degin 11 37 12 end goto 3 D' i, B tAen goto 3 ... i, B1 tAen 3 7 1 ;' =ro;ed+re P =ro;ed+re d Degin ... 3 71 end Degin ... goto 3 end.

%ska 5oto tre#a sauvati a neuo#iajene ill retke situacije gde je potre#no ra #iti prirodnu strukturu algoritma. 6o#ro je pravilo da #i tre#alo i #egavati upotre#u skokova pri i ra@avanju pravilni0 ponavljanja i uslovni0 i vr8avanja iska a> jer takvi skokovi uni8tavaju odra strukture o#rade u tekstualnim $statikim& strukturama programa. jtavi8e> nedostatak slaganja i me3u tekstualne i o#radne $tj. statike i dinamike& strukture pogu#an je po jasnou progama i ini proveru ispravnosti programa mnogo te@om. Postojanje iska a 5oto u Pascal programu esto uka uje na to da programer jo8 nije nauio ImislitiI u Pascalu $jer je u nekim drugim programskim je icima 5oto neop0odna konstrukcija&.

5. POTPROGRAMI
A programiranju se esto javlja potre#a da se neki deo programa vi8e puta ponovi u jednom programu. /ako3e> esto puta se ista programska celina javlja u vi8e ra liiti0 programa. Ovakva nepotre#na ponavljanja se i #egavaju pomou potprograma. Potprogrami se uvek koriste sa idejom da se i #egne ponavljanje isti0 sekvenci nared#i u sluaju kada u programu a to postoji potre#a. ;e3utim> potprogrami su mnogo naajniji kao sredstvo a struktuiranje programa. Pri ra radi programa metodom dekompo icije odo go nani@e> svaka pojedinana aktivnost visokog nivoa mo@e da se ameni po ivom potprograma. A svakoj sledeoj etapi ide se sve ni@e i ni@e u tom procesu dekompo icije sve dok se re8enje kompleksnog programa ne ra #ije na jednostavne procedure koje se konano implementiraju. 1ako napredujemo u ve8tini raunarskog programiranja> tako programe pi8emo u ni u koraka preci iranja. Pri svakom koraku ra #ijamo na8 adatak u vi8e pod adataka> de)ini8ui tako vi8e parcijalni0 programa. 1oncepti procedure i )unkcije omoguavaju nam da i lo@imo pod adatke kao konkretne potprograme.

75

Predrag S. Stanimirovi

Osnove programiranja

;o@e se rei da su potprogrami osnovno sredstvo apstrakcije u programiranju. Potprogramom se de)ini8e skup i la ni0 veliina u )unkciji ula ni0 veliina. (eali acija ti0 avisnosti de)inisana je u potprogramu. Potprogrami se de)ini8u kao programske celine koje se atim po potre#i po ivaju i reali uju> #ilo u okviru istog programa u kome su i de)inisani> #ilo u drugim programima. %staknimo neke op8te karakteristike potprograma kakvi se naje8e sreu u savremenim programskim je icima. $1& Svaki potprogram ima jednu ula nu taku. % u etak od ovog pravila postoji jedino u 5O(/(H--u> gde je mogue de)inisati vi8e ra liiti0 ula a u potprogram. $2& Program koji po iva potprogram prekida svoju aktivnost sve dok se ne avr8i po vani potprogram. /o nai da se u jednom trenutku i vr8ava samo jedan potprogram. $!& Po avr8etku po vanog potprograma upravljanje se vraa programu koji ga je po vao> i to na nared#u koja sledi neposredno i a po iva potprograma. Potprogram karakteri8u sledei osnovni elementiF i ime potprograma> i lista imena i tipova argumenata $)iktivni argumenti&> i telo potprograma> i sredina $okru@enje& u kojoj potprogram de)inisan> i lokalni parametri potprograma. /ipian opis potprograma je sledeeg o#likaF
()!6$10)$E40 6'#! (me76otprograma )Iista fiktivnih argumenata*2 'pisi lokalnih promenl-ivih2 $elo potprograma $ 1 (me7potprograma2

Ime potprograma je uvedena re> odnosnoidenti)ikator> kojom se potprogram imenuje i kojim se vr8i njegovo po ivanje. /ista iktivnih parametara mo@e da sadr@i samo imena )iktivni0 argumenata> ime je odre3en nji0ov #roj i redosled navo3enja> 1od noviji0 programski0 je ika u listi argumenata se navode i atri#uti o tipu argumenata kao i o nainu preno8enja u potprogram. 5iktivnim argumentima de)ini8e se skup ula no-i la ni0 veliina potprograma. 1od po iva potprograma se )iktivni argumenti $parametri& amenjuju stvarnim argumentima. 5iktivni i stvarni argumenti moraju da se sla@u po tipu> dimen ijama i redosledu navo3enja u listi argumenata. /okalni parametri A samoj proceduri> u delu 'pisi lokalnih promenl-ivih> mogu da #udu de)inisani lokalni elementi procedure i to promenljive> konstante> o nake> a u nekim je icima i drugi potprogrami. ;elo potprograma ini sekvenca nared#i koja se i vr8ava nakon po iva potprograma. A telu potprograma se reali uje khd potprograma. <kolinu 4okru5enje6 potprograma predstavljaju vrednosti glo#alni0 promenljivi0 okru@enja u kome je potprogram de)inisan i koje se po me0ani mu glo#alni0 promenljivi0 mogu koristiti u potprogramu. A programskim je icima se o#ino sreu dva tipa potprogramaF i )unkcijski potprogrami $ unk)ije&> i potprogrami op8teg tipa $pro)edure&.

76

Predrag S. Stanimirovi

Osnove programiranja

5.1. ?0 ,6#.$
5unkcijski potprogrami po konceptu odgovaraju matematikim )unkcijama. *ista argumenata kod ovi0 potprograma se o#ino sastoji se samo od ula ni0 argumenata> na osnovu koji0 se u telu potprograma i raunava vrednost koja se prenosi u po ivajuu programsku jedinicu. Ala ne vrednosti se u )unkciji ne menjaju. A programskim je icima se standardno a opis )unkcija koristi re /0;, 2:;. A je icima Pascal i 5O(/(H- se a preno8enje vrednosti i potprograma u po ivajuu jedinicu koristi promenljiva koja se identi)ikuje sa imenom )unkcije. A telu takvi0 )unkcija mora da postoji #ar jedna nared#a dodele kojom se re ultat dodeljuje imenu )unkcije. 1a@e se da )unkcija prenosi vrednost u glavni program preko svog imena. A novijim programskim je icima o#ino postoji nared#a ret%rn kojom se eksplicitno navodi vrednost koja se i potprograma prenosi u glavni program. -ared#a return se koristi u je iku C. A je iku C se ne koristi re )unction> jer su svi potprogrami )unkcije. Hko )unkcija vraa jedan re ultat nared#om ret%rn ispred njenog imena se pi8e tip re ultata> inae se pi8e slu@#ena re void. 5unkcijski potprogrami se po ivaju slino matematikim )unkcijama> tako 8to se u okviru i ra a navede ime )unkcije sa imenima stvarni0 parametara umesto )iktivni0. 1oristei gore navedene primere> suma prvi0 ... celi0 #rojeva se mo@e i raunati po ivom )unkcije SA; na sledei nainF
?BDA 13 ?BD)FFF*

$Pascal& $C> 5O(/(H-&.

ili
?BDA 3 ?BD)FFF*

5unkcija se koristi u sluaju kada se vraa jedna veliina u re ultujuu programsku jedinicu.

5.1.1. ?0 ,6#.$ 0 .$/#,0 P+s6+%


/%nk#i'e su programski delovi koji sraunavaju pojedinanu rednu> realnu ill poka ivaku vrednost> koja se koristi pri i raunavanju i ra a. Po iv )unkcije odre3uje aktivaciju )unkcije i sastoji se od identi)ikatora koji o naava )unkciju i liste stvarni0 parametara. Parametri su promenljive> i ra i> procedure ili )unkcije i oni amenjuju odgovarajue )ormalne parametre. 6eklaracija )unkcije ima isti o#lik kao i program> u i u etak zaglavl'a f%nk#i'e koje ima o#likF

Sve la#ele u deklaracionom delu la#ela i svi identi)ikatori uvedeni u de)inicionom delu konstanti> de)inicionom delu tipova podataka> te deklaracionim delovima promenljivi0> procedura ili )unkcija jesu lokalni toj deklaraciji )unkcije> koja se na iva oblaAB% vaCen'a ovi0 o#jekata. Oni nisu po nati i van svoje o#lasti va@enja. 2rednosti lokalni0 promenljivi0 nede)inisane su na poetku iska nog dela. %denti)ikator naveden u aglavlju )unkcije imenuje )unkciju. /ip re ultata mora #iti prost ili poka ivaki tip. Anutar deklaracije )unkcije mora postojati i vr8ena dodela vrednosti $sa tipom re ultata& identi)ikatoru )unkcije. Ova dodela vrednosti IvraaI re ultat )unkcije. O nake )unkcije mogu se pojavljivati ispred deklaracije )unkcije ako postoji deklara#i'a %napred. Primer. -apisati )unkcijski potprogram koji i raunava n-ti stepen #roja ! koristei relaciju !n D 1> nS0 $!k&2> nD2k !$!k&2> nD2kE1

-apisati program a stepenovanje koji u a dati realan #roj ! i prirodan #roj n i i raunava !n.
=rogram 1te=enovan>e2 tQ=e PrirodniBro> = O..Maxint

77

Predrag S. Stanimirovi

Osnove programiranja

var Pi, Pi:vadrat 7 /ea,+n;tion 1te=en&Osnova7/ea- %@s=onent7PrirodniBro>'7 /eavar /e<+-tat7/eaDegin /e<+-tat 7= 1 OAi-e %@s=onent L 0 do Degin OAi-e not Odd&%@s=onent' do Degin %@s=onent 7= %@s=onent div 2 Osnova 7= 1Tr&Osnova' end %@s=onent7= %@s=onent#1 /e<+-tat 7= /e<+-tatEOsnova end 1te=en7=/e<+-tat end 9 1te=en B Degin Pi 7= Ar;.an&1.0'E$ `rite-n&2.07117(, )73, 1te=en&2.0,)' 7117(' Pi:vadrat 7= 1te=en&Pi,2' `rite-n&Pi7117(, 273, Pi:vadrat 7117(' `ritein&Pi:vadrat7117(, 273, 1te=en&Pi:vadrat, 2' 7117(' `rite-n&Pi7117(, $73, 1te=en&Pi,$' 7117(' end. % la F
2.000000 3.1$1!83 8.X(8(0! 3.1$1!83 ) 2 2 $ 12X.000000 8.X(8(0! 8).$08100 8).$08100

5.1.2. P!/#" # 1$4# #6#.+ 40 ,6#.+ 0 8


Program se sastoji i jedne ili vi8e )unkcija> pri emu se jedna od nji0 na iva main$&. 1ada programska kontrola nai3e na ime )unkcije> tada se po iva ta )unkcija. /o nai da se programska kontrola prenosi na po vanu )unkciju. 1ada se )unkcija avr8i upravljanje se prenosi u po ivajuu programsku jedinicu. % vr8enje programa poinje sa main$&. 5unkcije se dele u dve grupeF )unkcije koje vraaju vrednost u po ivajuu programsku jedinicu i )unkcije koje ne vraaju vrednost. +a svaku )unkciju moraju se de)inisati sledei elementiF - tip vrednosti koju )unkcija vraa> - ime )unkcije> - lista )ormalni0 parametara> - telo )unkcije. Op8ta )orma de)inicije )unkcija jeF
tip ime)lista7parametara* + deklaraci-e lokalnih promenl-ivih operator9 W operator" /

Sve 8to se nala i pre prve agrade Z[Z na iva se aglavlje )unkcijske de)inicije> a sve i me3u agrada se na iva telo )unkcijske de)inicije. /ip )unkcije avisi od tipa vrednosti koja se vraa. /ako3e> koristi se slu@#ena re void ako )unkcija ne vraa vrednost. Hko je tip re ultata i ostavljen podra umeva se int. Parametri su po sintaksi identi)ikatori> i mogu se koristiti u telu )unkcije $)ormalni parametri&. -avo3enje )ormalni0 parametara nije o#ave no> 8to nai da )unkcija mo@e da #ude #e )ormalni0 parametara.
78

Predrag S. Stanimirovi

Osnove programiranja

Po iv )unkcije koja daje re ultat reali uje se i ra om


ime)spisak7stvarnih7parametara*

koji predstavlja element drugi0 i ra a. A sluaju da )unkcija ne vraa re ultat> dopisuje nak gXZ> ime po iv )unkcije postaje operatorF
ime)spisak7stvarnih7parametara*2

% me3u )ormalni0 i stvarni0 parametara mora da se uspostavi odre3ena korespodencija po #roju> tipu i redosledu. 1ada se )ormalni parametri de)ini8u u aglavlju )unkcije> tada se a svaki parametar pose#no navodi tip. /ada je aglavlje )unkcije sledeeg o#likaF
tip ime)tip param9,...,tip paramn*

A programskom je iku C> )ormalni parametri se mogu deklaristati ispod aglavlja )unkcije. /ada se svi parametri istog tipa mogu deklarisati odjednom> koristei jedinstveno ime tipa.

R$'0)

+)$13+

;e3u operatorima u telu )unkcije mo@e se nala iti operator ret%rn> koji predstavlja operator povratka u po ivajuu )unkciju. Hko se operator ret%rn ne navede> )unkcija se avr8ava i vr8enjem poslednjeg operatora u svom telu. -ared#a ret%rn se koristi i dva ra logaF - 1ada se i vr8i nared#a return> kontrola toka programa se vraa u po ivajuu jedinicu. - Osim toga> ako neki i ra sledi i a kljune rei ret%rn> tj. ako se nared#a ret%rn koristi u o#liku ret+rn i<ra< ili ret+rn&i<ra<'> tada se vrednost i ra a izraz vraa u po ivajuu programsku jedinicu. Ova vrednost mora da #ude u skladu sa tipom )unkcije u aglavlju )unkcijske de)inicije. -ared#a ret%rn u je iku C ima jednu od sledee dve )ormeF
return2

ili
return)izraz*2 tj. return izraz2

-a primer> mo@e se pisati


ret+rn&3' ret+rn&a"D'

6o#ra je praksa da se i ra ija se vrednost vraa pi8e i me3u agrada. Primer. A mimo kao primer )unkciju a i raunavanje sume prvi0 n prirodni0 #rojeva. (adi pore3enja isti potprogram napisan je u ra liitim programskim je icimaF P+s6+%
f+nction 10M &n7 integer' 7 integer var i, POM 7 integer 9 O=is -o@a-niA =romen->iviA B begin 9 .e-o ,+n@;i>e B POM 7= 0 ,or i 7= 1 to n do POM 7= POM " i 10M 7= POM 9Grednost @o>a se =renosi + g-avni =rogramB end

?ORTRAN
I].%Y%/ F0]5.IO] 10M&]' I].%Y%/ ] DO 10 I = 1, ] 10M = 10M " I %]D P/OY/AM 10MA I].%Y%/ 1,]

10

79

Predrag S. Stanimirovi /%AD&E,10'] FO/MA.&I2' 1=10M&]' `/I.%&E,20'1 FO/MA.&I$' Jin;-+deKstdio.AL int 10M &int n' 9 int POM = 0 ,or&int i = 1 i K= n i""'POM = POM " i ret+rn POM B void main&' 9 int n s;an,&3Rd3,Un' =rint,&3RdSn3,10M&n'' B

Osnove programiranja

10 20

P)!'!'#( 40 ,6#.$
A tradicionalnom stilu C je ika> )unkcija se mo@e koristiti pre nego 8to je de)inisana. 6e)inicija )unkcije mo@e da sledi u istom ili u nekom drugom )ajlu ili i #i#lioteke. -epo navanje #roja argumenata odnosno tipa )unkcije mo@e da u rokuje gre8ke. Ovo se mo@e spreiti prototipom )unkcije> kojim se eksplicitno uka uje tip i #roj parametara koje )unkcija a0teva i tip re ultujueg i ra a. Op8ta )orma prototipa )unkcije je sledeaF
tip ime )lista7tipova7parametara*2

A ovom i ra u je lista7tipova7parametara lista tipova odvojeni0 are ima. 1ada je )unkcija po vana> argumenti se konvertuju> ako je mogue> u navedene tipove. -a primer> sintaksno su ispravni sledei prototipoviF
void poruka9)int*2 int min)int, int*2

/ako3e> prototip )unkcije mo@e da ukljui i imena parametara> ime se mo@e o#e #editi dodatna dokumentacija a itaoca. -a primer> mo@emo pisati
double max)duble x, double y*2

Primeri
Primer. % raunati minimum dva cela #roja. 5unkcija min$!>"& vraa re ultat tipa int> te se eksplicitno navo3enje tipa re ultata mo@e i ostaviti. A po ivajuoj )unkciji $u ovom sluaju je to )unkcija main$&& naveden je prototip )unkcije min.
Jin;-+deKstdio.AL void main&' 9 int min&int,int' int >,@,m =rint,&30nesi dva ;e-a Dro>a7 3' s;an,&3RdRd3,U>,U@' m=min&>,@' =rint,&3SnRd >e minim+m <a Rd i RdSnSn3, m,>,@' B min&int x,int Q' 9 i, &xKQ' ret+rn&x' e-se ret+rn&Q' B

Primer. ;inimum i maksimum sluajni0 #rojeva.


Jin;-+deKstdio.AL Jin;-+deKstd-iD.AL void main&' 9 int n void s-+;a>ni&int' =rint,&3:o-i@o s-+;a>niA Dro>eva_3'

s;an,&3Rd3,Un'

80

Predrag S. Stanimirovi s-+;a>ni&n'

Osnove programiranja

void s-+;a>ni&int @' 9 int i,r,mini,maxi int min&int, int', max&int, int' srand&10' r=mini=maxi=rand&' =rint,&3RdSn3,r' ,or&i=1 iK@ ""i' 9 r=rand&' =rint,&3RdSn3,r' mini=min&r,mini' maxi=max&r, maxi' B =rint,&3Minim+m7 R)dSn Maxim+m7R)dSn3, mini,maxi' B int min&int i, int >' 9 i,&iK>' ret+rn&i' e-se ret+rn&>' B int max&int i, int >' 9 i,&iL>' ret+rn&i' e-se ret+rn&>' B

Primer. % raunavanje #roja kom#inacija m-te klase od n elemenata po )ormuli n^ n = m m^$ n m&^
P+s6+% =rogram ,a@t1 var m,n7integer D@7-ongint ,+n;tion ,a@t&@7integer'7-ongint var i7integer =7-ongint Degin =7=1 ,or i7=2 to @ do =7==Ei ,a@t7== end Degin read-n&n,m' D@7=,a@t&n' div ,a@t&m' div ,a@t&n#m' Orite-n&2Bro> @omDina;i>a >e 2,D@' end. 8 Jin;-+deKstdio.AL void main&' 9 int m,n -ong D@ -ong ,a@t&int' s;an,&3RdRd3,Un,Um' D@=,a@t&n'6,a@t&m'6,a@t&n#m' =rint,&3Bro> @omDina;i>a >e R-dSn3,D@' B -ong ,a@t&int @' 9 int i -ong ==1 ,or&i=2 iK=@ i""' =E=i ret+rn&=' B P+s6+% 9II +5# : =rogram ,a@t2 var m,n7integer D@7-ongint 81

Predrag S. Stanimirovi

Osnove programiranja

,+n;tion @omD&=,T7integer'7-ongint ,+n;tion ,a@t&@7integer'7-ongint var i7integer =7-ongint Degin 9,a@tB =7=1 ,or i7=2 to @ do =7==Ei ,a@t7== end Degin 9@omDB @omD7= ,a@t&=' div ,a@t&T' div ,a@t&=#T' end Degin read-n&n,m' D@7=@omD&n,m' end.

Orite-n&2Bro> @omDina;i>a >e 2,D@'

8 9II +5# : Jin;-+deKstdio.AL void main&' 9 int m,n -ong D@ -ong @omD&int, int' s;an,&3RdRd3,Un,Um' D@=@omD&n,m' =rint,&3Bro> @omDina;i>a >e R-dSn3,D@' B -ong @omD&int =, int T' 9 -ong ,a@t&int' ret+rn ,a@t&='6,a@t&T'6,a@t&=#T' B -ong ,a@t&int @' 9 int i -ong ==1 ,or&i=2 iK=@ i""' =E=i ret+rn&=' B

Primer. % raunati
sin$ ! & = !

!!
!^

!,
,^

... + $1& n1

! 2 n 1
$2n 1&^

+ ...

Sumiranje prekinuti kada se ispuni uslov JaG(J TS > gde je adata tanost> ( predstavlja tekuu vrednost sume> dok a predstavlja vrednost lana koji se dodaje.
Jin;-+deKstdio.AL void main&' 9 do+D-e x,e=s do+D-e sin+s&' s;an,&3R-,R-,3,Ux,Ue=s' =rint,&31in+s >e R-,Sn3, sin+s&x,e=s'' B 6E a=so-+tna vrednost E6 do+D-e aDs&x' 9 ret+rn &xL0'_x7#x B

6E sin+s E6 do+D-e sin+s&do+D-e x, do+D-e e=s' 9 do+D-e s+m, ;-an int @ ;-an=x @=0 OAi-e&aDs&;-an'Le=sEaDs&s+m'' 9 @"=1 ;-anE=#&xEx'6&2E@E&2E@"1'' ret+rn&s+m' B

s+m=;-an s+m"=;-an B

82

Predrag S. Stanimirovi

Osnove programiranja

Primer. Svi prosti #rojevi do datog prirodnog #roja n.


Jin;-+deKstdio.AL Jin;-+de KmatA.AL int =rost&int @' 9 int i=3 i,&@R2==0' ret+rn&0' i,&@==3' ret+rn&1' OAi-e&&@RiV=0' UU &iK=sTrt&@''' i"=2 i,&@Ri==0' ret+rn&0' e-se ret+rn&1' B void main&' 9 int i,n int =rost&int' =rint,&3Do@-e_ 3' s;an,&3Rd3, Un' ,or&i=3 iK=n i""' i,&=rost&i'==1' B Jin;-+deKstdio.AL -ong ,a@t&int @' 9 -ong ,=1,i=1 ,or& iK=@ i""' ret+rn&,' B

=rint,&3RdSn3,i'

Primer. /roci)reni #rojevi jednaki sumi )aktorijela svoji0 ci)ara

,E=i

void main&' 9 -ong i +nsigned a,D,; ,or&i=100 iK=888 i""' 9 a=iR10 D=iR100610 ;=i6100 i,&,a@t&a'",a@t&D'",a@t&;'==i' =rint,&3RdSn3,i' B B

Primer. Anositi prirodne #rojeve dok se ne unese vrednost TS0. % raunati -+S uneti0 #rojeva.
void main&' 9int @,ns,n<s=0 s;an,&3Rd3, U@' i,&@K=0' =rint,&3RdSn3,n<s' e-se 9 ns=n<s=@ s;an,&3Rd3, U@' OAi-e&@L0' 9n<s=,+nn<s&ns,@' ns=n<s s;an,&3Rd3,U@' =rint,&3n<s = RdSn3,n<s' B B int ,+nn<s&int a, int D' 9 int n< i,&aLD'n<=a e-se n<=D OAi-e& &&n< R a' V=0' WW &&n< R D'V=0' ' n<"" ret+rn&n<' B

Primer. 6ekadni #roj i intervala V0> !000W prevesti u rimski #rojni sistem.
Jde,ine Jde,ine Jde,ine Jde,ine Jde,ine Jde,ine Jde,ine Ai =s st =d ds =e >e 2M2 2D2 252 2L2 2*2 2G2 2I2

void rim&int'

83

Predrag S. Stanimirovi void main&' 9 int n =rint,&30nesi =rirodan Dro> #L 3' s;an,&3Rd3, Un' =rint,&3SnOdgovara>+;i rims@i Dro> >e7 3' rim&n' =rint,&3Sn3' B

Osnove programiranja

void rim&int n' 9 OAi-e&nL= 1000' 9 =rint,&3R;3,Ai' n#=1000 B i,&nL=800' 9=rint,&3R;3,st' =rint,&3R;3,Ai' n#=800 B i,&nL= !00' 9 =rint,&3R;3,=s' n#=!00 B i,&nL=$00' 9 =rint,&3R;3,st' =rint,&3R;3,=s' n#=$00 B OAi-e&nL=100' 9 =rint,&3R;3,st' n#=100 B i,&nL=80' 9 =rint,&3R;3,ds' =rint,&3R;3,st' n#=80 B i,&nL= !0' 9 =rint,&3R;3,=d' n#=!0 B i,&nL=$0' 9 =rint,&3R;3,ds' =rint,&3R;3,=s' n#=$0 B OAi-e&nL= 10' 9 =rint,&3R;3,ds' n#=10 B i,&n==8' 9 =rint,&3R;3,>e' =rint,&3R;3,ds' n#=8 B i,&nL= !' 9=rint,&3R;3,=e' n#=! B i,&n==$' 9=rint,&3R;3,>e' =rint,&3R;3,=e' n#=$ B OAi-e&nL=1' 9 =rint,&3R;3,>e' n## B B

Primer. -aj#li@i prost #roj datom prirodnom #roju.


Jin;-+deKstdio.AL int =rost&int n' 9 int i=2,=rosti=1 OAi-e &&iK=&n62''UU&=rosti'' ret+rn&=rosti' B

9=rosti=&nRi'V=0

i"" B

void main&' 9int m,n,i=1,=rosti=1 int =rost&int n' =rint,&3Bro> <a @o>i se ra;+na na>D-i<i =rost Dro>3' s;an,&3Rd3,Um' i,&m==1' =rint,&3na>D-i<i =rost Dro> >e 2Sn3' e-se i, &=rost&m'' =rint,&3na>D-i<i =rost Dro> >eRdSn3,m' e-se 9 OAi-e &iK=&m#1'UU&=rosti'' 9 i, &=rost&m"i'' 9 =rosti=0 =rint,&3na>D-i<i =rost >eRdSn3,&m"i'' i,&=rost&m#i' UU &V=rosti'' 9=rosti=0 =rint,&3na>D-i<i =rost >e RdSn3,&m#i'' i"" B B get;A&' B

B B

5.1.3. M+,)!# 0 .$/#,0 8


;akro je ime kome je pridru@ena tekstualna de)inicija. Postoje dve vrste makroaF makro kao o#jekat $koji nema parametre& i makro kao )unkcija $koji ima parametre&. Primer. Primeri makroa kao o#jekata.
Jde,ine OP1%Y 3Yres@a7 0-a<ni =arametar van o=sega3

6e)inicija makroa mo@e da se napi8e u vi8e redova.

84

Predrag S. Stanimirovi

Osnove programiranja

Primer. 6e)inicija makroa u vi8e redova.


Jde,ine P/OMP. 3Pre stam=an>a i<vesta>a S =roverite da -i >e stam=a; s=reman S i =ritisnite ret+rn3

;akro kao )unkcija se de)ini8e i ra om o#lika


Odefine ime)lista7identifikatora* tekst7zamene

Pri de)iniciji makroa de)ini8e se lista njegovi0 )ormalni0 parametara> dok se prilikom po ivanja makroa koriste stvarni parametri. Primer. ;akro kojim se ispituje da li je njegov argument paran #roj.
Jde,ine ]%.A5]O 0 Jde,ine .A5]O 1 Jde,ine PA/A]&Dro>' Dro>R2 _ ]%.A5]O 7 .A5]O void main&' 9 int n1=33 i,&PA/A]&n1'' =rint,&3Rd >e =aranSn3,n1' e-se =rint,&3Rd >e ne=aranSn3,n1' B

A po ivu makroa paran$a=b& ispituje se parnost #roja a=b pomou i ra a a=b`2 umesto i ra a $a=b&`2. 6a #i se ovakve gre8ke i #egle> potre#no je da se )ormalni parametri pi8u i me3u agrada. A na8em sluaju> pravilnija je sledea de)inicija makroa G)3);F
Jde,ine PA/A]&Dro>' &&Dro>'R2' _ ]%.A5]O 7 .A5]O

5.2. P)!6$10)$
Procedurama se de)ini8u potprogrami op8teg tipa> kojima se mo@e reali ovati svaki algoritam koji sam a se#e ima odre3eni smisao. Procedurama se o#ino u glavni program prenosi jedan ili skup re ultata. Opis potprograma op8teg tipa o#ino ima sledeu strukturuF
()!6$10)$ (DE76R'&EDBRE )Iista argumenata* 'pisi lokalnih promenl-ivlh2 $elo procedure $ 1A

Opis poinje nekom kljunom rei kojom se eksplicitno navodi da de)ini8emo proceduru. A mnogim programskim je icima koristi se re pro#ed%re> mada ima i i u etaka> na primer u 5O(/(H--u se koristi (0+3:0 2;.. %denti)ikator 2H.6G3:,.-03. je uvedena re kojom se imenuje potprogram. %me potprograma se koristi a po iv potprograma. +a ra liku od )unkcija> lista argumenata kod procedura mo@e da sadr@i ula ne> i la ne i ula no-i la ne argumente. O#ino se a0teva da se u listi argumenata navede nji0ov tip i nain preno8enja vrednosti i me3u glavnog programa i potprograma. A Hdi na primer> argumenti mogu da #udu ula ni> i la ni i ula no-i la ni 8to se eksplicitno navodi reima in> o%t i ino%t u odgovarajue argumente. -eklara#i'a pro#ed%re slu@i da de)ini8e programski deo i da ga pridru@i identi)ikatoru> tako da se mo e aktivirati pro#ed%rnim iskazom1 6eklaracija ima isti o#lik kao i program> osim 8to apoinje aglavljem procedure umesto aglavljem programa.

5.2.1. P)!6$10)$ 0 .$/#,0 P+s6+%


6eklaracija procedure u Pascal-u ima o#lik

85

Predrag S. Stanimirovi

Osnove programiranja

L#s'$ (+)+&$'+)+
Besto je pri ra laganju pro#lema na potprograme neop0odno uvo3enje novi0 promenljivi0 radi predstavljanja argumenata i re ultata potprograma. A sluaju kada sekciji )ormalni0 parametara ne pret0odi slu@#ena re var> tada se a sve parametre ovog odeljka ka@e da su vrednosni parametri1 A ovom sluaju stvarni parametar mora biti izraz $gde je promenljiva njegov prosti o#lik&. Odgovarajui )ormalni parametar predstavlja lokalnu promenljivu u aktiviranoj proceduri. 1ao svoju poetnu vrednost> ova promenljiva prima trenutnu vrednost odgovarajueg stvarnog parametra $tj. vrednost i ra a u trenutku aktivacije procedure&. Procedura> atim> mo@e promeniti vrednost ove promenljive preko dodele vrednostiX ovo> me3utim> ne mo@e uticati na vrednost stvarnog parametra. Stoga> vrednosni parametar ne mo@e nikad predstavljati re ultat i raunavanja. Aoite da se datoteki parametri ili strukturirane promenljive sa datotekama kao komponentama ne mogu navesti kao stvarni vrednosni parametri> po8to #i ovo predstavljalo dodelu vrednosti. 6onja ta#ela #irno prika uje ispravne vrste parametara a liste )ormalni0 i stvarni0 parametara. vrednosni parametar promenl'ivi parametar ormalni parametar identi)ikator promenljive identi)ikator promenljive stvarni parametar i ra promenljiva

(a lika u delovanju vrednosni0 i promenljivi0 parametara prika ana je u programu koji sledi. Primer. (a lika i me3u vrednosni0 i promenljivi0 parametara.
=rogram Parametri var A, B 7Integer =ro;ed+re Doda>1&* 7 integer var P 7 integer' Degin * 7= *"1 P 7= P"1 `rite-n&*,N M, P' end 9 Doda>1 B Degin A 7= 0 B 7= 0 Doda>1&A,B' `rite-n&A,N M, B' end 9 Parametri B.
Rezultat1 9 : 9 9

Primer. 1ao primer kojim se ilustruje kori8enje potprograma u mimo program kojim se unosi i sumira ni celi0 #rojeva> koji se avr8ava nulom. -a kraju programa 8tampa se aritmetika sredina unetog ni a #rojeva. Program je napisan u Pascal-u.
program 1/%D]^A_G/%]O1. var x,1+m, @ 7 Integer 4adn>i 7 Boo-ean proced+re 1redina&Gred7Integer begin 4adn>i 7= Gred = 0 !f not 4adn>i t#en 1+m 7= 1+m " Gred end var 4adn>i7Boo-ean'

begin end

@ 7= @"1

9 :ra> o=isa =ot=rograma B

begin 1+m 7= 0 @ 7= 0 4adn>i 7= ,a-se (#i)e not 4adn>i do begin read&x' 1redina&x, 4adn>i' 9Po<iv =ot=rograma B end$

86

Predrag S. Stanimirovi Orite&1+m6@' end.

Osnove programiranja

5.3. P)$ !s +)*0&$ +'+


5unkcije i procedure se koriste tako 8to se tamo gde je potre#no u khdu programa> po ivaju sa spiskom stvarni0 argumenata. Pri tome stvarni argument amenjuju )iktivne. Prenos argumenata i me3u glavnog programa i potprograma mo@e da se ostvari na vi8e ra liiti0 naina. Semanticki posmatrano> to mo@e da #ude po jednom od tri semantika modela. Potprogram mo@e da primi vrednost od odgovarajueg stvarnog parametra $koji se stavlja na mesto ula nog parametra&> mo@e da mu preda vrednost $ako se postavlja na mesto i lanog )ormalnog parametra& ill da primi vrednost i preda re ultat glavnom programu $kada se stvarni parametar postavlja na mesto ula no-i la nog parametra&. Ova tri semantika modela na ivaju se in> o%t i ino%t> respektivno i prika ana su na slici. Sa druge strane> postoje dva konceptualna modela po kojima se ostvaruje prenos parametara i me3u glavnog programa i potprograma. Po jednom> vrednosti parametara se )i iki pre#acuju $i glavnog programa u potprogram ili u o#a smera&> a po drugom prenosi se samo in)ormacija o tome gde se nala i vrednost stvarnog parametra. -aje8e je to jednostavno poka iva $pointer& na memorijsku lokaciju parametra.

5.3.1. P)$ !s (! ")$1 !s'# 98+%% 3= V+%0$:


Sastoji se u tome 8to se pri po ivu )unkcije vrednosti stvarni0 argumenata kopiraju u pomone memorijske lokacije )iktivni0 argumenta koje su de)inisane u potprogramu. Sve promene vrednosti stvarni0 argumenata koje se odvijaju u lokacijama potprograma nedostupne su u glavnom programu. +#og toga se ova te0nika prenosa mo@e koristiti samo a prenos ula ni0 argumenata potprograma> a ne i a vraanje re ultata glavnom programu. (a motrimo situaciju koja nastane kada se potprogram GG sa argumentima ! i " po ove sa stvarnim argumentima p i I. /o nai imamo deklaraciju potprograma o#lika PP&x,Q7integer' i njegov po iv PP&=,T'. +a sme8taj vrednosti parametara ! i " u potprogramu su re ervisane memorijske lokacije promenljivi0 p i I> iji je sadr@aj u trenutku prevo3enja potprograma nede)inisan. A glavnom programu> sa druge strane> postoje memorijske lokacije a sme8taj stvarni0 vrednosti p i I. 2rednosti ovi0 memorijski0 lokacija moraju da #udu de)inisane pre po iva potprograma. 1ada se po ove potprogram> vr8i se kopiranje vrednosti i memorijski0 lokacija p i I u lokacije )iktivni0 argumenata ! i " u potprogramu> 8to je ilustrovano na slici. 7lavni program 5unkcija

87

Predrag S. Stanimirovi

Osnove programiranja

Osnovni nedostatak prenosa po vrednosti je u tome 8to se a )ormalne parametre potprograma re ervi8e memorijski prostor. A to i sama operacija kopiranja vrednosti mo@e da utie na e)ikasnost programa. Ovi nedostaci pose#no dola e do i ra@aja kada se prenose strukture podataka> kao na primer veliki vektori i matrice. O#ino se u okviru programski0 je ika implicitno ili eksplicitno navodi da se argumenti prenose po vrednosti. A Hlgolu se to posti@e pomou rei val%e> u Hdi sa in> dok se u Pascal-u ovaj nain podra umeva kada nije navedeno var u sekciju )ormalni0 argumenata. A 5O(/(H--u se argumenti prenose po vrednosti kada su stavljeni i me3u kosi0 crta. A je iku C se prenos po vrednosti podra umeva a sve parametre koji nisu poka ivai.

P!/#" (! ")$1 !s'# 0 8


5unkcija se mo@e po vati stavljajui posle njenog imena odgovarajuu listu stvarni0 argumenata i me3u agrada. Ovi argumenti se moraju slagati sa #rojem i tipom )ormalni0 parametara u de)iniciji )unkcije. Svaki argument se i raunava> i njegova vrednost se u ima umesto )ormalnog parametra. ;e3utim> vrednost stvarnog parametra ostaje nepromenjena u po ivajuoj programskoj jedinici. 1ada se koristi po iv po vrednosti> u momentu kada se koristi i ra kao stvarni argument )unkcije> pravi se kopija njegove vrednosti> i ona se koristi u )unkciji. Pretpostavimo da je v promenljiva> a f$& )unkcija. /ada po iv )unkcije f$v& ne menja vrednost promenljive v u )unkciji f> jer se koristi kopija vrednosti v u )unkciji f$&. Primer. Pronai sve #rojeve-#li ance do adatog #roja n. 6va #roja su #li anci ako su prosti i ra likuju se a 2.
Jin;-+deKstdio.AL Jin;-+deKmatA.AL void main&' 9 int n,i int =rost&int' s;an,&3Rd3,Un' ,or &i=3 iK=n i""' i, &&=rost&i'' UU &=rost&i#2''' =rint,&3Rd RdSn3,i#2,i' B int =rost&int @' 9 int i=2,=rosti=1 OAi-e&&iK=sTrt&@'' UU &=rosti'' ret+rn&=rosti' B

9 =rosti=&&@Ri'V=0'

i""

A nekim drugim programskim je icima $5O(/(H-&> takav po iv )unkcije mo@e da promeni vrednost a v. ;e0ani am i vr8en u tom sluaju se na iva po iv po adresi $#all b" 3eferen#e&. 6a #i se u C postigao e)ekat po iva po adresi moraju se koristiti pointeri promenljivi0 u listi parametara prilikom de)inisanja )unkcije> kao i adrese promenljivi0 koje su argumenti u po ivu )unkcije.

88

Predrag S. Stanimirovi

Osnove programiranja

5.3.2. P)$ !s (! )$/0%'+'0 98+%% 3= R$s0%':


Prenos po re ultatu je te0nika koji se primenjuje a prenos i la ni0 $ o%t& parametara u je iku Hda. 1ada se argumenti prenose po re ultatu> nji0ove vrednosti se i raunavaju u lokalnim memorijskim lokacijama )ormalni0 argumenata potprograma> pri emu nema prenosa vrednosti parametara i glavnog programa u potprogram. ;e3utim> pre nego 8to se upravljanje tokom i vr8enja prenese u glavni program> ove vrednosti se kopiraju u memorijske lokacije stvarni0 argumenata. Stvarni argumenti u ovom sluaju moraju da #udu promenljive. 1ao i kod prenosa po vrednosti> a )iktivne argumente potprograma re ervi8u se lokalne memorijske lokacije. 1od ovog naina prenosa mogui su i neki negativni e)ekti> kao 8to je na primer koli ija stvarni0 argumenata> koja nastaje u sluajevima kada se potprogram po iva tako da isti stvarni argument amenjuje vi8e )iktivni0 argumenata. (a motrimo sledei primer u kome se potprogram de)inisan kao procedure PP&x,y7rea-' po iva sa PP&=1,=1'.A ovom primeru pro#lem je u tome 8to se u potprogramu aktuelni parametar p1 do#ija vrednost i dve ra liite memorijske lokacije $koje odgovaraju )ormalnim parametrima ! i "&. -ije unapred po nato koju e od ovi0 vrednosti argument p1 imati po avr8etku potprograma. /o avisi od toga koja je vrednost poslenji put dodeljena stvarnom argumentu.

5.3.3. P)$ !s (! ")$1 !s'# # )$/0%'+'0 98+%% 3= V+%0$7R$s0%':


Prenos po vrednosti i re ultatu je nain prenosa ula no-i la ni0 $ino%t& argumenata. /o je u su8tini kom#inacija prenosa po vrednosti i prenosa po re ultatu. 2rednosti stvarni0 argumenta kopiraju se u memorijske lokacije )iktivni0 argumenata potprograma. /o su lokalne memorijske lokacije potprograma i sve i mene nad argumentima pamte se u ovim lokacijama. Pre vraanja upravljanja glavnom programu> re ultati potprograma se i ovi0 lokalni0 memorijski0 lokacija ponovo kopiraju u memorijske lokacije stvarni0 argumenata. Ovaj nain prenosa se esto na iva i prenos kopiranjem $#all b" #op"& jer se stvarni argumenti najpre kopiraju u potprogram> a atim ponovnim kopiranjem re ultati vraaju u glavni program. -edostaci i negativni e)ekti koji su prisutni kod prenosa po vrednosti i prenosa po re ultatu ostaju i kod ovog naina prenosa.

5.3.4. P)$ !s (! )$4$)$ 6# 98+%% 3= R$4$)$ 6$:


1od ovog naina prenosa nema kopiranja vrednosti parametara i glavnog programa u potprogram ill o#rnuto. A potprogram se samo prenosi re)erenca $o#ino samo adresa& memorijske lokacije u kojoj je sauvana vrednost stvarnog argumenta. K)ekat je kao da se re)erence stvarni0 argumenata preslikavaju u re)erence )iktivni0. Potprogam pristupa istim memorijskim lokacijama kojima i glavni program> nema re ervisanja memorijski0 lokacija a )iktivne argumente u okviru potprograma. Sve promene nad argumentima koje se i vr8e u okviru potprograma neposredno su vidljive i u glavnom programu. +#og toga je ovo nain prenosa koji se koristi a prenos ula no-i la ni0 argumenata. A mnogim programskim je icima to je osnovni nain prenosa argumenata i podra umeva se implicitno $Hlgol> 5O(/(H-&. A Pascal-u se koristi uvek kada u argumente stoji var. A je iku C se a prenos po re)erenci koriste poka ivai.
7lavni program 0unk)ija

89

Predrag S. Stanimirovi

Osnove programiranja

Prednosti prenosa po re)erenci su u njegovoj e)ikasnosti kako u pogledu vremena tako i u pogledu memorijskog prostora. -ema potre#e a dupliranja memorijskog prostora niti se gu#i vreme u kopiranju vrednosti argumenata i jedni0 memorijski0 lokacija u druge. ;e3utim> tre#a imati u vidu da se ovaj prenos implementira indirektnim adresiranjem pa se tu ipak ne8to gu#i na e)ikasnosti. /ako3e> mogui su i odre3eni #oni e)ekti u odre3enim pose#nim sluajevima po iva potprograma. (a motriemo neke od nji0. 1ao u sluaju prenosa po re ultatu i ovde je mogua koli ija i me3u stvarni0 argumenata. A mimo na primer potprogram GG u Pascal-u sa dva argumenta koji se prenose po vrednosti> ija je deklaracija o#lika
procedure 66)var x,y1 integer*2

Hko se ovaj potprogram po ove tako da se o#a )iktivna argumenta amene istim stvarnim parametrom> na primer sa GG$m> m&X > dola i do koli ije jer se o#a )iktivna argumenta re)erenciraju na istu memorijsku lokaciju stvarnog argumenta m. Primer. Procedura sa dva promenljiva )ormalna parametra po vana je koristei a o#a )ormalna parametra isti stvarni parametar. (e ultat nije korektanF iako su o#a )ormalna parametra inkrementirana jednom> nji0ova vrednost se poveava a 2. -a primer> u sluaju mS" do#ija se sledei ispisF
B potprogramu x3 A y3 A m3A

=rogram error var m7integer =ro;ed+re P-+s1&var x,Q7integer' var =7integer Degin x7=x"1 Q7=Q"1 Orite-n&2 0 =ot=rogram+ x= 2,x,2 Q= 2,Q' end Degin read-n&m' end. P-+s1&m,m' Orite-n&2m = 2,m'

/ako3e je mogua koli ija i me3u dva ili vi8e elementa istog ni a. -a primer pretpostavimo da se potprogram GG po iva i ra om
66)vek!i%, vek!-%*2

Hko se u ovom po ivu dogodi da iS'> tada ce doi do koli ije re)erenci o#a )iktivna argumenta> odnosno promene i jednog i drugog tre#a da se upisuju u istu memorijsku lokaciju. 6o koli ije dola i i u sluaju kada je jedan argument ceo ni koji se prenosi tako 8to se navodi njegovo ime> a drugi argument element istog tog ni a. -eka je potprogram GG1 de)inisan saF
procedure 669)var x1 integer2 var y1 +))+=!9..9:% !4 integer*2

i neka je po van saF


PP1&ve@HiI,ve@' .

A ovom sluaju dola i do koli ije jer prvi argument pristupa i-tom elementu ni a> a drugi svim elementima ni a pa i i-tom.

90

Predrag S. Stanimirovi

Osnove programiranja

1od prenosa po re)erenci koli ija mo@e da nastane i me3u elemenata programa koji se prenose kao stvarni argumenti potprograma i oni0 koji se prenose kao glo#alni parametri. (a motrimo sledei primer u Pascal-uF
=rogram Lo;a-Y-oDavar g-oDa-7 integer =ro;ed+re PPY&var -o;a-7 integer' Degin -o;a- 7= -o;a-"1 Orite-n&2g-oDa- = 2,g-oDa-' -o;a- 7= -o;a-"g-oDaend Degin g-oDa- 7= 2 end. PP1&g-oDa-' Orite-n&g-oDa-'

Posle po iva potprograma GG5 #ie od8tampana vrednost je '. +aista> vrednost 2 dodeljena promenljivoj global u potprogramu najpre koriguje nared#om -o;a-7=-o;a-"1 $posle ega je g-oDa-=3&, a atim i nared#om -o;a-7=-o;a-"g-oDa- $posle ega je -o;a-=g-oDa-=3&. Promenljiva global se u potprogramu koristi i kao glo#alna promenljiva i kao stvarni argument> pa se i promene argumenta potprograma i promene same promenljive global registruju u istoj memorijskoj lokaciji. -apomenimo da #i u ovom primeru prenos sa kopiranjem $call #< value-result& dao drugaiji re ultat. A tom sluaju> vrednost stvarnog argumenta global kopira se u memorijsku lokaciju )iktivnog argumenta lo#al i u potprogramu se sve promene argumenta registruju u toj lokaciji. A prvoj nared#i dodeljivanja promenljiva lo#al do#ija vrednost !> a u drugoj se ova vrednost inkrementira a 2> 8to je vrednost glo#alne promenljive global $dodeljena pre ulaska u potprogram&. /ime argument lo#al do#ija vrednost ,> i to je vrednost koja se po avr8etku potprograma kopira natrag u memorijsku lokaciju stvarnog argumenta global. /o nai da se u ovom sluaju 8tampa vrednost ,. Slina anali a istog programa mogua je i a sluaj prenosa argumenta potprograma po vrednosti. A tom sluaju vrednost stvarnog argumenta global se kopira u potprogram ali su sve promene u potprogramu nevidljive a glavni program> pa se po avr8etku potprograma 8tampa vrednost 2 koja je dodeljena promenljivoj global pre po iva potprograma.

R$4$)$ 6$ 90(0F#"+5#: 6a #i )unkcija mogla da promeni vrednost spoljne promenljive u ulo i stvarnog parametra>
tre#alo #i da se prenese u )unkciju poka iva na tu promenljivu> pa indirektno adresirati u )unkciji. C== uvodi i vedeni tip re)erence $upuivaa& na o#jekat. A je iku C== mogu je i prenos po adresi $#< re)erence&.

+e inisanje re eren)i
(e)erence se deklari8u upotre#om naka a ispred imena. (e)erenca je alternativno ime a neki o#jekat $alias> sinonim&. A de)iniciji re)erenca mora da se inicijali uje o#jektom na koga e upuivati. Od inicijali acije re)erenca postaje sinonim a o#jekat na koji upuuje. Svaka operacija nad re)erencom $ukljuujui i operaciju dodele& je operacija nad o#jektom na koji re)erenca upuuje. Primer.

Jin;-+deKstdio.AL void main&' 9 int i=1 66 ;e-oDro>ni oD>e@at i int U>=i 66 > +=+e+>e na i i=3 66 men>a se i >=! 66 o=et se men>a i =rint,&3i = RdSn3,i' 66 i=! int E==U> 66 isto sa ==Ui >"=1 66 isto sa i"=1 =rint,&3i = Rd >= RdSn3,i,>' 66 i=( >=(

91

Predrag S. Stanimirovi

Osnove programiranja

int @=> 66 =osredan =rist+= do i =re@o re,eren;e @"" =rint,&3i = Rd @= RdSn3,i,@' 66 i=( @=) int m=E= 66 =osredan =rist+= do i =re@o =o@a<ivaCa =rint,&3m = RdSn3,m' 66 m=(

P!/#" (! +1)$s# (!&!F0 (!,+/#"+5+ 0 8


D$,%+)+6#.$ (!# '$)+ # 1!1$%.#"+ .$ Pointeri se koriste a pristup memoriji i manipulaciju adresama. 2rednosti poka ivaa jesu adrese promenljivi0. 6o sada smo ve videli upotre#u adresa kao argumenata u nared#i s#anf$&. Hko je v promenljiva> tada je 7v adresa $lokacija& u memoriji u kojoj je sme8tena vrednost a v. Operator 7 je unarni> ima asocijativnost sdesna na levo> a prioritet kao i ostali unarni operatori. Pointerske promenljive se mogu deklarisati u programu> a onda koristiti tako da u imaju adrese a svoje vrednosti. -a primer> deklaracija
int Gp2

deklari8e promenljivu p tipa ZZpointer na intZZ. (ang vrednosti svakog pointera ukljuuje pose#nu adresu 0> de)inisanu kao ;099 u Kstdio.AL, kao i skup po itivni0 celi0 #rojeva koji se interpretiraju kao ma8inske adrese. Primer. Pointeru p se vrednosti mogu dodeljivati na sledei nainF.
p3Hi2 p3:2 p3"BII2 p3)intG*9<:> \G isto ]to i p3:2 G\ \G apsolutna adresa u memori-i G\ /

A prvom primeru p je ZZpointer na iZZ> odnosno ZZsadr@i adresu od iZZ. /rei i drugi primer predstavljaju dodelu specijalne vrednosti 0 pointeru p. A etvrtom primeru kast je nu@an da #i se i #eglo upo orenje kompajlera> a koristi se aktuelna memorijska lokacija kao vrednost promenljive p. Ovakve nared#e se ne koriste u korisnikim programima> ve samo u sistemskim. A1)$s#)+ .$ # !($)+'!) # 1#)$,6#.$ -eka su date deklaracije
int i, Gp2

/ada nared#e
p3Hi2 scanf)^Vd^,p*2

u rokuju da se sledea uneta vrednost sme8ta u adresu adatu pointerom p. Hli> s o# irom da p uka uje na i> to nai da se vrednost sme8ta u adresu od i. Operator indirekcije R je unarni i ima isti prioritet i asocijativnost sa desna ulevo kao i ostali unarni operatori. Hko je p pointer> tada Rp predstavlja vrednost promenljive na koju uka uje p. 6irektna vrednost a p je memorijska lokacija> dok je Rp indirektna vrednost od p> tj. vrednost memorijske lokacije sadr@ane u p. A su8tini> R je inver ni operator u odnosu na operator 7. -a taj nain> pointeri se mogu koristiti a dodelu vrednosti nekoj promenljivoj. -a primer> neka su date deklaracije
int Gp,x2

/ada se i ra ima
p3Hx2 Gp3A2

promenljivoj ! dodeljuje vrednost '. Primer. Aoimo deklaracije


float x,y, Gp2

92

Predrag S. Stanimirovi

Osnove programiranja

i nared#e
p 3 Hx2 y3Gp2

Prvom nared#om se adresa od ! pridru@uje pointeru p> a drugom se vrednost na koju uka uje p dodeljuje ". Ove dve nared#e su ekvivalentne sa
y3GHx2

odnosno
y3x.

Primer. -eka je dat sledei khdF


char c9,c;3_A_,Gp,G`2 p3Hc92 `3Hc;2 Gp3G`2

Hdrese od #1 i #2 pridru@uju se promenljivima p i I u prva dva i ra a. Poslednja nared#a i jednauje vrednost na koju uka uje p i vrednost na koju uka uje I. Ove tri nared#e su ekvivalentne sa #1S#2. Primer.
void main&' 9 int i=))),E= ==Ui =rint,&3Grednost <a i7RdSn3,E=' =rint,&3Adrese <a i7 R+ i-i R=Sn3,=,=' B

5ormati `% i `p se koriste a prika ivanje vrednosti promenljive p u o#liku neo naenog decimalnog #roja> odnosno 0eksadecimalnog #roja> respektivno. Primer. % ra ima
int i3>>>, Gp3Hi2

je inicijali ovano p> a ne Rp. Promenljiva p je tipa ZZpointer na intZZ> i njena poetna vrednost je 7i. Primer.
Jin;-+de Kstdio.AL void main&' 9 int x=), Q=10 =rint,&3x=Rd Ux=R=Sn3, x,Ux' =rint,&3Q=Rd UQ= R=R+Sn3,Q,UQ, UQ' B void main&' 9 int i=!, E=i=Ui =rint,&3i= Rd i-i = RdSn3, i, E=i' B

8+%% 3= )$4$)$ 6$ 9(!/#" (! +1)$s#: ,!)#s'$F# (!,+/#"+5$ Prenos vrednosni0 parametara je pogodan kada )unkcija vraa jednu i la nu veliinu #e i mene svoji0 stvarni0 parametara. ;e3utim> kada je potre#no da )unkcija menja vrednosti svoji0 stvarni0 parametara> ili ukoliko )unkcija vraa vi8e i la ni0 veliina> mo@e se koristiti druga te0nika predaje parametaraF prenos adrese stvarni0 parametara. Hdrese promenljivi0 se mogu koristiti kao argumenti )unkcija u cilju i mene apameni0 vrednosti promenljivi0 u po ivajuoj programskoj jedinici. /ada se pointeri koriste u listi parametara pri de)inisanju )unkcije. 1ada se )unkcija po iva> moraju se koristiti adrese promenljivi0 kao argumenti. Primer. Primer u je iku C kojim se ilustruju glo#alna promenljiva i prenos po adresi. (e ultat je kao u sluaju prenosa po adresi.
Jin;-+deKstdio.AL int g-oDavoid PPY&int E-o;a-' 9 &E-o;a-'"" =rint,&3g-oDa- = RdSn3,g-oDa-' void main&' 9 g-oDa- = 2 PPY&Ug-oDa-'

E-o;a- = E-o;a-"g-oDa- B B

=rint,&3RdSn3,g-oDa-' 93

Predrag S. Stanimirovi

Osnove programiranja

Primer. 6ate su vrednosti a dve celo#rojne promenljive i i '. Arediti i0 u poredak iTS '.
Jin;-+de Kstdio.AL void +=is&int Ex, int EQ' void sredi&int Ex, int EQ' void is=is&int x,int Q' void main&' 9 int x,Q +=is&Ux,UQ' sredi&Ux,UQ' B void +=is&int Ex, int EQ' 9 =rint,&30nesi dva ;e-a Dro>a3' void sredi&int Ex, int EQ' 9 int =om i,&ExLEQ' 9 =om=Ex B

is=is&x,Q'

s;an,&3RdRd3,x,Q'

Ex=EQ

EQ==om

void is=is&int x, int Q' 9 =rint,&3Sn .o s+ Dro>evi Rd RdSn3,x,Q'

/e0nika predaje parametara po adresi $,all b" referen#e& se sastoji i sledei0 #a ni0 pravilaF 1. deklarisati )ormalne parametre )unkcije kao pointereX 2. koristiti operatore indirekcije u telu )unkcijeX !. pri po ivu )unkcije koristiti adrese kao argumente. 1ako sredi$& radi sa poka ivaimad 1ada predajete poka iva> predajete adresu o#jekta i tako )unkcija mo@e manipulisati vredno8u na toj adresi. 6a #i sredi$& promenila stvarne vrednosti> kori8enjem poka ivaa> )unkcija sredi$&> tre#alo #i da #ude deklarisana da pri0vata dva int poka ivaa. +atim> dere)erenciranjem poka ivaa> vrednosti ! i " e> u stvari> #iti promenjene. Primer. Predavanje po re)erenci kori8cenjem poka ivaa.
17 27 37 $7 !7 (7 )7 X7 87 107 117 127 137 1$7 1!7 1(7 1)7 1X7 187 207 217 227 237 2$7 2!7 2(7 2)7 66 Prenos =arametara =o re,eren;i Jin;-+de Kiostream.AL void sOa=&int Ex, int EQ' int main&' 9 int x = !, Q = 10 ;o+t KK 3Main. Pre sOa=, x7cKKxKK3 Q7 3KKQKK3Sn3 sOa=&Ux,UQ' ;o+tKK3Main. Pos-e sOa=., x7 3KKxKK3 Q7 3KKQKK3Sn3 ret+rn 0 B void sOa=&int E=x, int E=Q' 9 int tem= ;o+tKK31Oa=. Pre sOa=, E=x7 3KKE=xKK3 E=Q73KKE=QKK3Sn3 tem= = E=x E=x = E=Q E=Q = tem= ;o+tKK31Oa=. Pos-e sOa=, E=x7 3KKE=xKK3 E=Q7 3KKE=QKK3Sn3

94

Predrag S. Stanimirovi 2X7 287 B

Osnove programiranja

% la F
Main. 1Oa=. 1Oa=. Main. Pre sOa=, x7! Q7 Pre sOa=, E=x7 ! Pos-e sOa=, E=x7 Pos-e sOa=, x710 10 E=Q710 10 E=Q7! Q7 !

A liniji , prototip )unkcije s4ap$& poka uje da e njegova dva parametra #iti poka ivai na int> a ne na int promenljive> 1ada se po ove s4ap$& u liniji 12> kao argumenti se predaju adrese od ! i ". A liniji 1. lokalna promenljiva> temp> deklarisana je u )unkciji s:ap$& - nije potre#no da temp #ude poka ivaX ona e uvati samo vrednost od Rp! $to jest> vrednost promenljive ! u po ivajuoj )unkciji&> tokom @ivota )unkcije. Posle povratka i )unkcije> promenljiva temp vi8e nee #iti potre#na. A liniji 2! promenljivoj temp se dodeljuje vrednost na p!. A liniji 2" vrednost na adresi pQ se dodeljuje vrednosti na adresi p". A liniji 2, vrednost uvana u temp $to jest> originalna vrednost na adresi p!& stavlja se u adresu p". K)ekat ovoga je da su vrednosti u po ivajuoj )unkciji> ija adresa je #ila predata )unkciji s4ap$&> u stvari> amenjene.

P)$ !s (! )$4$)$ 6# ,!)#s'$F# )$4$)$ 6$ 0 8GG


Pret0odni program radi> ali sintaksa )unkcije s4ap$& je pro#lematina #og dve stvari. Prvo> ponavljajua potre#a a dere)erenciranjem poka ivaa unutar )unkcije s4ap$& ini je podlo@nim gre8kama i te8kom a itanje. 6rugo> potre#a da se preda adresa promenljivi0 u po ivajuoj )unkciji ini unutra8nji rad )unkcije s4ap$& vi8e nego oiglednim a korisnike. Cilj C== je da sprei korisnika )unkcije da se #rine o tome kako ona radi. +#og toga se prenos po adresi u C== mo@e uraditi pomou re)erenci. Primer.
Jin;-+deKiostream.AL void ,&int i, int U>'9 66 i >e =o<iv =o vrednosti, > =o re,eren;i i"" 66 stvarni arg+ment si se neee =romeniti >"" 66 stvarni arg+ment s> ee se =romeniti B void main &' 9 int si=0,s>=0 ,&si,s>' ;o+tKK3si=3KKsiKK3, s>=3KKs>KKendB
I<-a<7 si=0, s>=1

Primer. Prepisana )unkcija s4ap$& sa re)erencama.


17 66Predavan>e =o re,eren;i 27 66 @ori[Cen>em re,eren;iV 37 $7 Jin;-+de Kiostream.AL !7 (7 void sOa=&int Urx, int UrQ' )7 X7 int main&' 87 9 107 int x = !, Q = 10 117 127 ;o+tKK3Main. Pre sOa=, x7 3KKxKK3 Q7 3KKQKK3Sn3 137 sOa=&x,Q' 1$7 ;o+tKK3Main. Pos-e sOa=, x7 3KKxKK3 Q7 3KKQKK3Sn3 1!7 ret+rn 0

95

Predrag S. Stanimirovi

Osnove programiranja

1(7 B 1)7 1X7 void sOa= &int Urx, int UrQ' 187 9 207 int tem= 217 227 ;o+tKK31Oa=. Pre sOa=, rx7 3KKrxKK3 rQ7 3KKrQKK3Sn3 237 2$7 tem= =rx 2!7 rx =rQ 2(7 rQ =tem=, 2)7 2X7 ;o+tKK31Oa=. Pos-e sOa=, rx7 3KKrxKK3 rQ7 3KKrQKK3Sn3 287 307 B

(e ultat je isti kao u pret0odnom primeru. 1ao i u primeru si poka ivaima> deklarisane su dve promenljive u liniji 10> a nji0ove vrednosti se 8tampaju u liniji 12. A liniji 1! po iva se )unkcija s4ap$&> ali uoite da se predaju ! i "> a ne nji0ove adrese. Po ivajua )unkcija main$& jednostavno predaje promenljive> kao i u sluaju po iva po vrednosti. 1ada se po ove s4ap$&> i vr8enje programa IskaeI na liniiju 14> gde se promenljive r! i r" identi)ikuju kao re)erence. -ji0ove vrednosti se 8tampaju u liniji 22> ali uoite da se a 8tampanje ne a0tevaju pose#ni operatori. Promenljive r! i r" su alijasi a originalne vrednosti i mogu se samostalno koristiti. A linijama 2"-2' vrednosti se amenjuju> a onda se 8tampaju u liniji 24> % vr8enje programa IskaeI u po ivajuu )unkcuju i u liniji 1" vrednosti se 8tampaju u main$&. +ato 8to su parametri a s4ap$& deklarisani kao re)erence> vrednosti i main$& se predaju po re)erenci i time se> tako3e> menjaju i u main$&. (e)erence o#e #e3uju pogodnost i lakou upotre#e normalni0 promenljivi0> sa snagom i sposo#no8u predavanja po re)erenci koju imaju poka ivai. Primer. Prenos parametra na dva naina.
Jin;-+deKiostream.AL intE ,&intE x' 9 &Ex'"" ret+rn x 66 Grednost <a x se =renosi + stvarni =arametar B intU g&intU x' 9 x"" 66 Isti e,e@at @ao + ,&' ret+rn x 66 Grednost <a x se =renosi + stvarni =arametar B int main&' 9 int a = 0 ,&Ua' 66 /+\no, a-i e@s=-i;itno ;o+t KK 3a = 3 KK a KK 3Sn3 g&a' 66 ^asno, a-i sa@riveno ;o+t KK 3a = 3 KK a KK 3Sn3 B

V)+F+ .$ "#2$s')0,#- ")$1 !s'#


1ao 8to je reeno> pomou nared#e ret%rn )unkcije mogu vratiti samo jednu vrednost. jta uiniti ako je potre#no da vratite dve vrednosti i )unkcijed Eedan nain da re8ite ovaj pro#lem je da )unkciji predate o#jekte po re)erenci. 1ako predavanje po re)erenci do voljava )unkciji da promeni originalne

96

Predrag S. Stanimirovi

Osnove programiranja

o#jekte> ovo e)ektno do voljava )unkciji da vrati vi8e in)ormacija. Povratna vrednost )unkcije se mo@e re ervisati a i ve8tavanje o gre8kama. Ovo se mo@e ostvariti re)erencama> ili poka ivaima. Sledei primer demonstrira )unkciju koja vraa tri vrednostiF dve kao poka ivake parametre i jednu kao povratnu vrednost )unkcije. Primer. 2raanje vrednosti pomou poka ivaa.
17 27 66 Graean>e vi[e vrednosti i< ,+n@;i>e 37 $7 Jin;-+de Kiostream.AL !7 (7 tQ=ede, +nsigned sAort 01FO/. )7 X7 sAort Fa;tor&01FO/., 01FO/.E, 01FO/.E' 87 107 int main&' 117 9 127 01FO/. n+mDer, sT+ared, ;+Ded 137 sAort error 1$7 1!7 ;o+t KK 30nesite Dro> &0#20'7 3 1(7 ;in LL n+mDer 1)7 1X7 error = Fa;tor&n+mDer, UsT+ared, U;+Ded' 187 207 i,&Verror' 217 9 227 ;o+t KK 3Dro>7 3 KK n+mDer KK 3Sn3 237 ;o+t KK 3@vadrat7 3 KK sT+ared KK 3Sn3 2$7 ;o+t KK 3@+D7 3 KK ;+Ded KK 3Sn3 2!7 B 2(7 e-se 2)7 ;o+t KK 3Dos-o >e do gres@eVVSn3 2X7 ret+rn 0 287 B 307 317 sAort Fa;tor&01FO/. n, 01FO/. E=1T+ared, 01FO/. E=5+Ded' 327 9 337 sAort Ga-+e = 0 3$7 i, &n L 20' 3!7 Ga-+e = 1 3(7 e-se 3)7 9 3X7 E=1T+ared = nEn 387 E=5+Ded = nEnEn $07 Ga-+e = 0 $17 B $27 ret+rn Ga-+e $37 B

A liniji 12 n%mber> sI%ared i #%bed su de)inisani kao 0(<:3 . Promenljivoj num#er se dodeljuje #roj #a iran na korisnikom ula u. Ovaj #roj i adresa od sI%ared i #%bed se predaju )unkciji /a#tor$&. 5unkcija /a#tor$& ispituje prvi parametar> koji se predaje po vrednosti. Hko je on vei od 20 $maksimalan #roj kojim ova )unkcija mo@e rukovati&> ona postavlja povratnu vrednost $=al%e& na jednostavnu vrednost gre8ke $=al%e S1&. Aoite da povratna vrednost 0 i )unkcije /a#tor$& poka uje da je sve pro8lo do#ro> i uoite da tunkcija vraa ovu vrednost u liniji "2. Stvarne potre#ne vrednosti> kvadrat i ku# promenljive n%mber> vraaju se menjanjem poka ivaa koji su predati )unkciji.

97

Predrag S. Stanimirovi

Osnove programiranja

A linijama !4 i !. poka ivaima se dodeljuju nji0ove povratne vrednosti. A liniji "0 return 2alue do#ija uspe8nu vrednost. Eedno po#olj8anje u ovom programu #i moglo #iti deklarisanje sledeegF
en+m %//O/_GAL0% 91055%11, %//O/B

+atim> umesto vraanja 0> ilii> program #i mogao da vrati SACCKSS> ili K((O(.

V)+F+ .$ "#2$s')0,#- ")$1 !s'# (! )$4$)$ 6#


Pret0odni program se mo@e uiniti lak8im a itanje i odr@avanje> kori8enjem re)erenci> umesto poka ivaa. Sledei primer prika uje isti program> prepisan radi kori8enja re)erenci i ukljuivanja .33:3 enumeracije. Primer. 2raanje vi8estruki0 vrednosti kori8enjem re)erenci.
17 66 27 66 Graean>e vi[e vrednosti i< ,+n@;i>e 37 66 @on[Cen>e re,eren;i $7 !7 Jin;-+de Kiostream.AL (7 )7 tQ=ede, +nsigned sAort 01FO/. X7 en+m %//_5OD% 91055%11, %//O/B 87 107 %//_5OD% Fa;tor&01FO/., 01FO/. U, 01FO/. U' 117 127 int main&' 137 9 1$7 01FO/. n+mDer, sT+ared, ;+Ded 1!7 %//_5OD% res+-t 1(7 1)7 ;o+t KK 30nesite Dro> &0 # 20'7 3 1X7 ;in LL n+mDer 187 207 res+-t = Fa;tor&n+mDer, sT+ared, ;+Ded' 217 227 i, &res+-t == 1055%11' 23 9 2$ ;o+t KK 3Dro>7 3 KK n+mDer KK 3Sn3 2! ;o+t KK 3@vadrat7 3 KK sT+ared KK 3Sn3 2( ;o+t KK 3@+D7 3 KK ;+Ded KK 3Sn3 2) B 2X e-se 28 ;o+t KK 3Dos-o >e do gres@eVVSn3 307 ret+rn 0 317 B 327 337 %//_5OD% Fa;tor&01FO/. n, 01FO/. Ur1T+ared, 01FO/. Ur5+Ded' 3$7 9 3!7 i, &n L 20' 3(7 ret+rn %//O/ 66 >ednostavan @hd <a gre[@+ 3)7 e-se 3X7 9 387 r1T+ared = nEn $07 r5+Ded = nEnEn $17 ret+rn 1055%11 $27 B $37 B

Ovaj program je identian pret0odnom> u dva i u etka. Knumeracija K((CCO6K ini i ve8tavanje o gre8ci u linijama !' i "1> kao i rukovanje gre8kama u liniji 22.

98

Predrag S. Stanimirovi

Osnove programiranja

%pak> vea promena je ta da je /a#tor$& sada deklarisana da pri0vata re)erence na sI%ared i #%bed> a ne na poka ivae> 8to ini manipulaciju ovim parametrima daleko jednostavnijom i lak8om a ra umevanje.

P)$1+"+ .$ (! )$4$)$ 6#H /3!* $4#,+s !s'#


Svaki put kada predate o#jekat )unkciji po vrednosti> pravi se njegova kopija. Svaki put kada vratite o#jekat i )unkcije po vrednosti> pravi se druga kopija. Ovi o#jekti se kopiraju na stek. +ato ovo u ima vreme i memoriju. +a male o#jekte> kao 8to su ugra3ene celo#rojne vrednosti> to je trivijalna cena. %pak> a vee korisniki kreirane o#jekte> cena je vea. 2eliina korisniki kreirani0 o#jekata na steku je suma svi0 njegovi0 promenljivi0 lanica. Svaka od nji0> dalje> mo@e #iti korisniki kreiran o#jekat i predavanje tako masivne strukture njenim kopiranjem na stek mo@e #iti veoma skupo #og per)ormansi i kori8enja memorije. Postoji> tako3e> i druga cena. Sa klasama koje kreirate> svaka ova privremena kopija se kreira kada kompajler po ove specijalan konstruktorF konstruktor kopije. +a sada> dovoljno je da nate da se konstruktor kopije po iva svaki put kada se privremena kopija o#jekta stavi na stek. Primer. Arediti tri #roja !> "> z u neopadajui poredak !TS "TS z.
void ra<meni&int Ea, int ED' 9 int =om =om=Ea Ea=ED ED==om B

void main&' 9 int x,Q,< void ra<meni&intE, intE' s;an,&3RdRdRd3, Ux,UQ,U<' i,&xLQ' ra<meni&Ux,UQ' i,&xL<' ra<meni&Ux,U<' i,&QL<' ra<meni&UQ,U<' =rint,&3x= Rd Q= Rd <= RdSn3,x,Q,<' B

Primer. -apisati proceduru kojom se i raunava najvei ajedniki sadr@alac i najvei ajedniki delilac dva prirodna #roja.
Jin;-+deKstdio.AL void +nos&int E,int E' void n<ds&int,int, int E,int E' void main&' 9 int x,Q, n<d,n<s +nos&Ux, UQ' n<ds&x,Q,Un<d,Un<s' =rint,&3]<d +netiA Dro>eva = Rd a n<s= RdSn3,n<d,n<s' B void +nos&int Ea, int ED' 9 =rint,&3Sn4adati dva ;e-a Dro>a7 3' s;an,&3RdRd3,a,D' B

void n<ds&int a, int D, int End, int Ens' 9 i,&aLD' Ens=a e-se Ens=D int v=Ens OAi-e&EnsRa V=0 WW EnsRD V=0'&Ens'"=v OAi-e&aV=D' 9 i,&aLD'a#=D e-se i,&DLa'D#=a End=a B

Primer. Sa tastature se unosi jedan ceo #roj> a a njim neodre3en #roj celi0 #rojeva. -apisati proceduru kojom se i raunava minimum i maksimum uneti0 #rojeva.
Jin;-+deKstdio.AL void minmax&int E,intE' void main&' 9 int mn,mx minmax&Umn,Umx' =rint,&3Minim+m >e Rd a ma@sim+m B void minmax&int Emin, int Emax'

RdSn3,mn,mx'

99

Predrag S. Stanimirovi 9 int n Emin=Emax=s;an,&3Rd3,Un' OAi-e&s;an,&3Rd3,Un'==1' i,&nKEmin'Emin=n e-se i,&nLEmax'Emax=n B

Osnove programiranja

Primer. -apisati )unkciju a i raunavanje determinante kvadratnog trinoma aQ2=#Q=c. -apisati proceduru kojom se i ra8avaju sledee aktivnostiF a& Odre3uje da li su re8enja realna i ra liita> realna i jednaka ili konjugovano-kompleksnaX #& u sluaju da su re8enja realna i raunava nji0ove vrednosti> a u sluaju da su re8enja konjugovano-kompleksna i raunava realni i imaginarni deo ti0 re8enja. -apisati proceduru a 8tampanje odgovarajui0 i ve8taja. A glavnom programu unositi koe)icijente kvadratni0 jednaina u #eskonanom ciklusu i prika ivati odgovarajue re ultate koristei proceduru a prika ivanje i ve8taja.
Jin;-+deKstdio.AL Jin;-+deKmatA.AL ,-oat dis@riminanta&,-oat, ,-oat, ,-oat' void so-+tion&,-oat, ,-oat, ,-oat, ,-oat E, ,-oat E,int E' void re<+-tati&,-oat, ,-oat, ,-oat, ,-oat E,,-oat E,int E' void main&' 9 ,-oat a,D,;, x1,x2 int ti= OAi-e&1' 9 =rint,&30nesi @oe,i;i>ente #L 3' s;an,&3R,R,R,3, Ua,UD,U;' re<+-tati&a,D,;,Ux1, Ux2, Uti=' B B ,-oat dis@riminanta&,-oat a, ,-oat D, ,-oat ;' 9 ret+rn&DED#$.0EaE;' B void so-+tion&,-oat a,,-oat D,,-oat ;, ,-oat Ex,,-oat EQ,int Et' 9 ,-oat d d=dis@riminanta&a,D,;' i,&dL0'9Et=0 Ex=&#D"sTrt&d''6&2Ea' EQ=&#D#sTrt&d''6&2Ea' B e-se i,&d==0' 9 Et=1 Ex=EQ=#D6&2Ea' B e-se 9 Et=2 Ex=#D6&2Ea' EQ=sTrt&#d'6&2Ea' B B void re<+-tati&,-oat a,,-oat D,,-oat ;, ,-oat Ex, ,-oat EQ, int Et' 9so-+tion&a,D,;,x,Q,t' i,&Et==0' 9=rint,&3/esen>a s+ rea-na i ra<-i;itaSn3' =rint,&3x1=R, x2=R,Sn3,Ex,EQ' B e-se i,&Et==1' 9=rint,&3/esen>a s+ rea-na i >edna@aSn3' =rint,&3x1=x2=R,Sn3,Ex' B e-se 9 =rint,&3/esen>a s+ @on>+govano#@om=-e@snaSn3' =rint,&3x1 =R, " iE R,Sn3,Ex,EQ' =rint,&3x2 = R, #iE R,Sn3,Ex,EQ' B B

Primer. -apisati proceduru a deljenje dva cela #roja na proi voljan #roj decimala. 6eljenik> delilac i #roj decimala adati u pose#noj proceduri.
Jin;-+deKstdio.AL Jin;-+deK;onio.AL void +nos&int E, intE, int E' void de->en>e&int, int, int' main&' 9 int n,i,Dde;, Dro>i-a;, imeni-a;

100

Predrag S. Stanimirovi ;-rs;r&' =rint,&3:o-i@o =+ta_ 3' s;an,&3Rd3, Un' ,or&i=1 iK=n i""' 9 +nos&UDro>i-a;, Uimeni-a;, UDde;' de->en>e&Dro>i-a;, imeni-a;, Dde;' B B void +nos&int EDr, int Eim, int EDd' 9 =rint,&3Bro>i-a; = _3' s;an,&3Rd3,Dr' =rint,&3Imeni-a; = _ 3' s;an,&3Rd3,im' =rint,&3Bro> de;ima-a = _ 3' s;an,&3Rd3,Dd' B void de->en>e&int Dr, int im, int Dd' 9 int i i,&DrEimK0' =rint,&3#3' Dr=DrK0_#Dr7Dr im=imK0_#im7im =rint,&3SnRd.3,Dr6im' Dr R= im ,or&i=1 iK=Dd i""' 9 Dr E=10 =rint,&3Rd3,Dr6im' Dr R=im B =rint,&3Sn3' B

Osnove programiranja

Primer. a& -apisati proceduru a uno8enje #rojioca i imenioca jednog ra lomka. A toj proceduri> po potre#i> vrednost imenioca promeniti tako da #ude po itivan. #& -apisati rekur ivnu )unkciju a i raunavanje najveeg ajednikog delioca dva prirodna #roja. c& -apisati )unkciju a i raunavanje najveeg ajednikog sadr@aoca dva prirodna #roja. d& -apisati proceduru a kraenje #rojioca i imenioca adatim prirodnim #rojem. e& -apisati proceduru a sa#iranje dva ra lomka. Pri sa#iranju ra lomaka koristiti najvei ajedniki sadr@alac a imenioce jednog i drugog ra lomka. +atim skratiti #rojilac i imenilac i raunatog ra lomka najveim ajednikim deliocem a #rojilac i imenilac. )& A glavnom programu uitati #rojilac i imenilac a n ra lomaka i i raunati #ir svi0 ra lomaka.
Jin;-+deKstdio.AL Jin;-+deKmatA.AL Jin;-+deK;onio.AL 6E ra<-om;i.; E6 int n<d&int, int' int n<s&int, int' void +nos&int E, int E' void saDiran>e&int, int,int, int, int E, int E' void @ra;en>e&int E, intE, int' main&' 9 int i,n, Dro>,imen, Dro>i-a;, imeni-a;, Dre<, ire< ;-rs;r&' =rint,&3:o-i@o ra<-oma@a saDirate_ 3' s;an,&3Rd3, Un' ,or&i=1 iK=n i""' 9+nos&UDro>i-a;, Uimeni-a;' i,&i==1'9 Dre<=Dro>i-a; ire<=imeni-a; B e-se 9Dro>=Dre< imen=ire< saDiran>e&Dro>i-a;,imeni-a;,Dro>,imen, UDre<,Uire<' B =rint,&3Rd6RdSn3, Dre<, ire<' B void +nos&int EDr, int Eim' 9 =rint,&3Bro>i-a; #L 3 ' s;an,&3Rd3,Dr' =rint,&3Imeni-a; #L 3 ' s;an,&3Rd3,im' i,&EimK0' 9EDr=#EDr Eim=#&Eim' B B int n<d&int Dr, int im' 9 i,&Dr == im' ret+rn&Dr' e-se i,&DrLim'ret+rn&n<d&Dr#im,im'' e-se ret+rn&n<d&Dr,im#Dr''

101

Predrag S. Stanimirovi B int n<s&int Dr, int im' 9 int ns i,&DrLim' ns=Dr e-se ns=im OAi-e&&ns RDr V=0' WW &ns Rim V= 0''ns"" ret+rn&ns' B void @ra;en>e&int EDr, int Eim, int @' 9 EDr 6=@ Eim 6=@ B

Osnove programiranja

void saDiran>e&int =D,int =i,int dD,int di,int ErD,int Eri' 9 int ns, nd ns=n<s&=i,di' Eri=ns ErD==DEns6=i"dDEns6di nd=n<d&ErD, Eri' @ra;en>e&rD, ri, nd' B

Primer. -apisati proceduru a uitavanje i ispis kompleksni0 #rojeva kao i procedure a i vo3enje osnovni0 aritmetiki0 operacija sa kompleksnim #rojevima. -apisati test program.
Jin;-+deKstdio.AL Jin;-+deKmatA.AL void +nos&,-oat E,,-oat E, ,-oat E, ,-oat E' void saDeri&,-oat, ,-oat, ,-oat, ,-oat, ,-oat E, ,-oat E' void od+<mi&,-oat, ,-oat, ,-oat, ,-oat, ,-oat E, ,-oat E' void mno<i&,-oat, ,-oat, ,-oat, ,-oat, ,-oat E, ,-oat E' void de-i&,-oat, ,-oat, ,-oat, ,-oat, ,-oat E, ,-oat E' void is=is&,-oat, ,-oat' void main&' 9 ,-oat x1,Q1,x2,Q2,re,im +nos&Ux1,UQ1,Ux2,UQ2' saDeri&x1,Q1,x2,Q2, Ure,Uim' =rint,&3Sn]>iAov <Dir >e7 3' is=is&re,im' =rint,&3Sn3' od+<mi&x1,Q1,x2,Q2, Ure,Uim' =rint,&3Sn]>iAova ra<-i@a >e7 3' is=is&re,im' =rint,&3Sn3' mno<i&x1,Q1,x2,Q2,Ure,Uim' =rint,&3Sn]>iAov =roi<vod >e7 3' is=is&re,im' =rint,&3Sn3' de-i&x1,Q1,x2,Q2,Ure,Uim' =rint,&3Sn]>iAov @o-i;ni@ >e7 3' is=is&re,im' =rint,&3Sn3' B void +nos&,-oat Ere1, ,-oat Eim1, ,-oat Ere2, ,-oat Eim2' 9 =rint,&3Prvi @om=-e@sni Dro>_ 3' s;an,&3R,R,3, re1,im1' =rint,&3Dr+gi @om=-e@sni Dro>_ 3' s;an,&3R,R,3, re2,im2' B void saDeri&,-oat re1,,-oat im1,,-oat re2,,-oat im2, ,-oat Ere<, ,-oat Eim<' 9Ere<=re1"re2 Eim<=im1"im2 B void od+<mi&,-oat re1, ,-oat im1, ,-oat re2, ,-oat im2, ,-oat Ere<, ,-oat Eim<' 9Ere<=re1#re2 Eim<=im1#im2 B void mno<i&,-oat re1, ,-oat im1, ,-oat re2, ,-oat im2, ,-oat Ere<, ,-oat Eim<' 9Ere<=re1Ere2#im1Eim2 Eim<=re1Eim2"re2Eim1 B void de-i&,-oat re1, ,-oat im1, ,-oat re2, ,-oat im2, ,-oat Ere<, ,-oat Eim<' 9Ere<=&re1Ere2"im1Eim2'6&re2Ere2"im2Eim2' Eim<=&#re1Eim2"re2Eim1'6&re2Ere2"im2Eim2' B void is=is&,-oat x, ,-oat Q' 9 =rint,&3Sn R,3,x'

102

Predrag S. Stanimirovi i,&QK0' =rint,&3#3' e-se =rint,&3"3' =rint,&3iER,Sn3,,aDs&Q'' B

Osnove programiranja

Primer. a& -apisati )unkciju ;J-$a>b& kojom se i raunava najvei ajedniki delilac a prirodne #rojeve a i b. #& 1oristei )unkciju ;J-$a>b& i raunati ;J-$a>b>#&. d& -apisati )unkciju skrati#$int a> int b> int K#> int Kd& koja ra lomak aLb $b0& dovodi do neskrativog ra lomka #Ld. e& -apisati )unkciju skrati$int a> int b> int 7#> int 7d& koja ra lomak aLb $b0& dovodi do neskrativog ra lomka #Ld. )& A )unkciji mainF - +a tri uitana prirodna #roja nai nji0ov -+6. - +a dva ra lomka koji su uitani preko tastature i uitani operacijski nak $= a sa#iranje> - a odu imanje> R a mno@enje> G a deljenje& odrediti re ultat raunanja u neskrativom o#liku.
Jin;-+deKstdio.AL Jin;-+deKmatA.AL int ]4D&int a, int D' 9 int r OAi-e&aRD' 9 r=aRD ret+rn&D' B

a=D

D=r

int ]4D3&int a, int D, int ;' 9 ret+rn&]4D&a,]4D&D,;''' B void s@rati;&int a, int D, int E;, int Ed' 9 int nd=]4D&a,D' E;=a6nd Ed=D6nd B void s@rati&int a, int D, int U;, int Ud' 9 int nd=]4D&a,D' ;=a6nd d=D6nd B int ]41&int a, int D' 9 int =, n i,&aKD' 9 ==a a=D n=a OAi-e&nRD' n"=a ret+rn n B 6E Ger<i>a <a 5 E6

6E Ger<i>a <a 5"" E6

D==

void o=era;i>a&int a, int D, int ;, int d, ;Aar ;A, int UDr, int Uim' 9 int as, Ds, ;s, ds s@rati&a,D,as,Ds' s@rati&;,d,;s,ds' sOit;A&;A' 9 ;ase 2"27 im=]41&Ds,ds', Dr=asEim6Ds";sEim6ds Drea@ ;ase 2#27 im=]41&Ds,ds', Dr=asEim6Ds#;sEim6ds Drea@ ;ase 2E27 Dr=asE;s im=DsEds Drea@ ;ase 2627 Dr=asEds im=DsE;s Drea@ B int nd=]4D&Dr, im' im= im6nd Dr=Dr6nd B

103

Predrag S. Stanimirovi void is=is&int Dr, int im' 9 i,&DrEimK0'=rint,&3#3' =rint,&3Rd6RdSn3,aDs&Dr',aDs&im'' B

Osnove programiranja

void main&' 9 int a,D,;,d =rint,&3a,D = _ 3' s;an,&3RdRd3,Ua,UD' =rint,&3;= _ 3' s;an,&3Rd3,U;' =rint,&3]4D3&Rd,Rd,Rd'=RdSn3,a,D,;,]4D3&a,D,;'' int Dr,im s@rati;&a,D,UDr,Uim' 66 s@rati&a,D,Dr,im' =rint,&3Prvi ra<-oma@_ 3' s;an,&3RdRd3,Ua,UD' =rint,&3Dr+gi ra<-oma@_ 3' s;an,&3RdRd3,U;,Ud' ;Aar o= =rint,&3O=era;i>a = _ 3' s;an,&3R;3,Uo=' s;an,&3R;3,Uo=' o=era;i>a&a,D,;,d,o=,Dr,im' =rint,&31@ra;eni ra<-oma@ = 3' is=is&Dr,im' B

Primer. -apisati )unkciju koja vraa n dana stariji datum. 3eenje u .CC>
Jin;-+deKstdio.AL int =rest+=na&int g' 9 ret+rn &&gR$==0' UU V&gR100==0''WW&gR$00==0' B

void s+tra&int U d, int U m, int U g' 9 sOit;A&m' 9 ;ase 17 ;ase 37 ;ase !7 ;ase )7 ;ase X7 ;ase 107 ;ase 127 i, &dK=30' d"" e-se 9 d=1 i,&""m==13' 9 m=1 g"" B B Drea@ ;ase $7 ;ase (7 ;ase 87 ;ase 117 i, &dK30' d"" e-se 9 d=1 m"" B Drea@ ;ase 27 i,&""dL2X"=rest+=na&g'' 9 d=1 m"" B Drea@ B B void main&' 9 int d,m,g,n s;an,&3RdRdRd3,Ud,Um,Ug' s;an,&3Rd3,Un' ,or&int i=1 iK=n s+tra&d,m,g',i""' =rint,&3Rd. Rd. Rd.Sn3,d,m,g' B

3eenje u .>
Jin;-+deKstdio.AL int =rest+=na&int g' 9 ret+rn &&gR$==0' UU V&gR100==0''WW&gR$00==0' void s+tra&int Ed, int Em, int Eg' 9 =rint,&3]a =o;et@+ Rd. Rd. Rd.Sn3,Ed,Em,Eg' sOit;A&Em'

104

Predrag S. Stanimirovi

Osnove programiranja

9 ;ase 17 ;ase 37 ;ase !7 ;ase )7 ;ase X7 ;ase 107 ;ase 127 i, &EdK=30' &Ed'"" e-se 9 Ed=1 i,&""&Em'==13'9 Em=1 &Eg'"" B B Drea@ ;ase $7 ;ase (7 ;ase 87 ;ase 117 i, &EdK30' Ed"" e-se 9 Ed=1 &Em'"" B Drea@ ;ase 27 i,&""&Ed'L2X"=rest+=na&Eg'' 9 Ed=1 &Em'"" B Drea@ B =rint,&30 ,+n@;i>i Rd. Rd. Rd.Sn3,Ed,Em,Eg' B void main&' 9 int d,m,g,n =rint,&3Dat+m = _ 3' s;an,&3RdRdRd3,Ud,Um,Ug' =rint,&3Pos-e @o-i@o dana _ 3' s;an,&3Rd3,Un' ,or&int i=1 iK=n s+tra&Ud,Um,Ug',i""' =rint,&3Rd. Rd. Rd.Sn3,d,m,g' B

5.4. G%!3+% $ ()!&$ %.#"$ ,+! (+)+&$')# (!'()!*)+&+


Potprogram se u odnosu na programski modul u kome je de)inisan tretira kao #lok u #loku. Sve promenljive de)inisane u okru@enju u kome je de)inisan i sam potprogram mogu se koristiti i u potprogramu po konceptu glo#alni0 promenljivi0. Potprogram mo@e da #ude i #e spiska argumenata i da sve ve e sa okru@enjem ostvaruje preko glo#alni0 promenljivi0. Primer. Potre#no je napisati program kojim se i raunava i ra -= tan0$ a n + b& tan0 2 $ a 2 + b 2 & tan0 2 $a + m b& tan0$ a 2 b 2 &

+a i raunavanje vrednosti tan&$!& koristiti potprogram kojim se ova )unkcija i raunava prema jednoj od relacijaF e ! e! e2! 1 tan0 = ! tan0 = ili . e + e ! e2! + 1 Slede etiri mogua re8enja ovog pro#lema u kojima se koriste ra liiti potprogrami sa i #e parametara. (e8enja su data u programskom je iku Pascal. $a& (e8enje )unkcijskim potprogramom #e argumenata. (e ultat se dodeljuje imenu )unkcije. 2rednost a ! se unosi u )unkciju preko glo#alnog parametra.
program .A]F1 var D,a,D,m,n,/1,/2,/3,x 7 reaf+nction tA7 reavar / 7reabegin /7=ex=&2Ex' tA 7= &/#1'6&/"1' end$ begin read&a,D,m,n' x7=aEn"D /17=tA x7=a"mED /27=tA x7=aEa"DED /37=tA x7=aEa#DED D7=/16&/3E/3'#/2E/26tA Orite-n&D' end. Jin;-+deKstdio.AL Jin;-+deKmatA.AL 105

Predrag S. Stanimirovi

Osnove programiranja

,-oat D,a,D,m,n,/1,/2,/3,x ,-oat tA&' 9 ,-oat / /=ex=&2Ex' B

ret+rn &&/#1'6&/"1''

void main&' 9 s;an,&3R,R,R,R,3,Ua,UD,Um,Un' x=aEn"D /1=tA&' x=a"mED /2=tA&' x=aEa"DED /3=tA&' x=aEa#DED D=/16&/3E/3'#/2E/26tA&' =rint,&3R,Sn3,D' B

$#& (e8enje pomou procedure #e argumenata. (e ultat se dodeljuje glo#alnom parametrom. /ako3e> i vrednost a ! se unosi preko glo#alnog parametra.
program .A]F2 var D,a,D,m,n,/1,/2,/3,x,Q 7 reaproced+re tA begin Q 7= ex=&2Ex' Q 7= &Q#1'6&Q"1' end$ begin read&a,D,m,n' x 7= aEn"D tA /1 7= Q x 7= a"mED tA /2 7= Q x 7= aEa"DED tA /3 7= Q x 7= aEa#DED tA D 7= /16&/3E/3'# /2E/26Q Orite-n&D' end. Jin;-+deKstdio.AL Jin;-+deKmatA.AL ,-oat D,a,D,m,n,/1,/2,/3,x,Q void tA&' 9 Q=ex=&2Ex' Q=&Q#1'6&Q"1' B

void main&' 9 s;an,&3R,R,R,R,3,Ua,UD,Um,Un' x=aEn"D tA&' /1=Q x=a"mED tA&' x=aEa"DED tA&' /3=Q x=aEa#DED tA&' D=/16&/3E/3'# /2E/26Q =rint,&3R,Sn3,D' B

/2=Q

$c& Program sa )unkcijskim potprogramom sa argumentima. (e ultat se dodeljuje imenu )unkcije. 2rednost a ! se unosi pomou parametra )unkcije.
program .A]F3 var D,a,D,m,n 7 reaf+nction tA&x7 rea-'.reavar / 7 reabegin / 7= ex=&2Ex' tA7= &/#1'6&/"1' end$ begin read&a,D,m,n' D 7= tA&aEn"D'6&tA&aEa"DED'EtA&aEa"DED'' f tA&a"mED'EtA&a"mED'6tA&aEa#DED' Orite-n&D' end.

106

Predrag S. Stanimirovi

Osnove programiranja

Jin;-+deKstdio.AL Jin;-+deKmatA.AL ,-oat D,a,D,m,n ,-oat tA&,-oat x' 9 ,-oat /=ex=&2Ex' ret+rn &&/#1'6&/"1'' B void main&' 9 s;an,&3R,R,R,R,3, Ua,UD,Um,Un' D= tA&aEn"D'6&tA&aEa"DED'EtA&aEa"DED'' # tA&a"mED'EtA&a"mED'6tA&aEa#DED' =rint,&3R,Sn3,D' B

$d& (e8enje pomou procedure sa argumentima. Prvi argument je i la ni a drugi ula ni.
program .A]F$ var D,a,D,m,n,/-,/2,/3,/$ 7reaproced+re tA&var Q7 rea- x7 rea-' begin Q 7= ex=&2Ex' Q 7= &Q#1'6&Q"1' end begin read&a,D,m,n' tA&/-, aEn"D' tA&/2, a"mED' tA&/3,aEa"DED' D7=/-6&/3E/3'#/2E/26/$ Orite-n&D' end. Jin;-+deKstdio.AL Jin;-+deKmatA.AL ,-oat D,a,D,m,n,/-,/2,/3,/$ void tA&,-oat EQ, ,-oat x' 9 EQ=ex=&2Ex' EQ=&EQ#1'6&EQ"1'

tA&/$,aEa#DED'

void main&' 9 s;an,&3R,R,R,R,3, Ua,UD,Um,Un' tA&U/-, aEn"D' tA&U/2, a"mED' tA&U/3,aEa"DED' D=/-6&/3E/3'#/2E/26/$ =rint,&3R,Sn3,D' B Jin;-+deKstdio.AL Jin;-+deKmatA.AL ,-oat D,a,D,m,n,/-,/2,/3,/$ void tA&,-oat UQ, ,-oat x' 9 Q=ex=&2Ex' Q=&Q#1'6&Q"1'

tA&U/$,aEa#DED'

void main&' 9 s;an,&3R,R,R,R,3, Ua,UD,Um,Un' tA&/-, aEn"D' tA&/2, a"mED' tA&/3,aEa"DED' D=/-6&/3E/3'#/2E/26/$ =rint,&3R,Sn3,D' B

tA&/$,aEa#DED'

A programskom je iku 5O(/(H- konceptu glo#alni0 promenljivi0 na neki nain odgovara koncept CO;;O- podruja. Sve promenljive koje su ajednike a vi8e programski0 modula o#u0vataju se sa CO;;O- i pamte se u ase#nom memoriskom #loku koji je dostupan svim potprogramima koji se re)erenciraju na isto CO;;O- podruje.

107

Predrag S. Stanimirovi

Osnove programiranja

P)#&$)#
Primer. 4.6 +a paran #roj ; proveriti 0ipote u 7old#a0a. Prema toj 0ipote i> svaki paran #roj vei od 2 mo@e se predstaviti #irom dva prosta #roja. (e8enje se sastoji u proveri da li je a svaki prost #roj i $i S !> ... > nG2& #roj n-i tako3e prost. 6a li je #roj prost proverava se )unkcijom prost.
Jde,ine ne=ar&x' &&x'R2'_170' Jin;-+de 3matA.A3 int =rost&-ong n' 9 -ong i,@oren int T @oren=,-oor&sTrt&n'' T=&ne=ar&n' WW &n==2' i=3 OAi-e &&T' UU &iK=@oren'' 9 T=&&n R i' V= 0' ret+rn &T' B

i=i"2

void main&' 9-ong n,i int T do 9 =rint,&3Sn+nesite =aran Dro>7 3' s;an,&3R-d3,Un' OAi-e&&nK$' WW &&n R 2' V= 0'' i=2 T=0 OAi-e &&iK= n62' UU &VT'' 9 T=&=rost&i' UU =rost&n#i'' i, &T' =rint,&3Sn.o s+ Dro>evi R-d i R-d3,i,n#i' i"" B i, &VT' =rint,&3Sn Fi=ote<a ne va<i <a R-d 3,n' B

Primer. -apisati )unkcijski potprogram koji i raunava n-ti stepen #roja ! koristei relaciju ! D
n

1> nS0 k 2 $! & > nD2k !$!k&2> nD2kE1

-apisati program a stepenovanje koji u #eskonanom ciklusu uitava realan #roj ! i prirodan #roj n i i raunava !n.
=rogram 1te=enovan>e2 tQ=e PrirodniBro> = O..Maxint var Pi, Pi:vadrat 7 /ea,+n;tion 1te=en&Osnova7/ea- %@s=onent7PrirodniBro>'7 /eavar /e<+-tat7/eaDegin /e<+-tat 7= 1 OAi-e %@s=onent L 0 do Degin OAi-e not Odd&%@s=onent' do Degin %@s=onent 7= %@s=onent div 2 Osnova 7= 1Tr&Osnova' end %@s=onent7= %@s=onent#1 /e<+-tat 7= /e<+-tatEOsnova end 1te=en7=/e<+-tat end 9 1te=en B Degin

108

Predrag S. Stanimirovi re=eat read-n&x' read-n&n' `rite-n&x7117(, n73, 1te=en&x,n'7117(' +nti- ,a-se end 9 1te=enovan>e2 B.

Osnove programiranja

est primeriF
;.:::::: @.949<F@ > ; 9;=.:::::: F.=AFA:<

!.1"1,.! "

.7."0.100

Primer. 4PA'.A/6 -apisati )unkciju koja i raunava vrednost veri@nog ra lomka 1 v $ m& = 1 1+ 1 2+ ... 1 m2+ 1 m 1+ m -apisati program kojim se i raunava suma 1 1 1 ( = 1 + ... + $1& n . v$!& v$,& v$2n + 1&
=rogram veri<ni_ra<-om;i var s,<na@7reai,n7integer ,+n;tion veri<ni&m7integer'7reavar s7reai7integer Degin s7=0 ,or i7=m doOnto 1 do s7=16&s"i' veri<ni7=s end Degin read-n&n' s7=1.0 <na@7=#1 ,or i7=1 to n do Degin s7=s"<na@6veri<ni&2Ei"1' end Orite-n&s' end.

<na@7=#<na@

Primer. -ai najvei> najmanji i drugi po veliini element i me3u uneti0 realni0 #rojeva> #e kori8enja ni ova.
=rogram na>ve;i var max1,max2,min,x7rean,i7integer Degin Orite&2:o-i@o Dro>eva_ 2' read-n&n' i, nL2 tAen Degin Orite-n&20nesi 2,n,2 Dro>eva2' max17=x min7=x read&x' i, xL=max1 tAen Degin max27=max1 max17=x end

read&x'

109

Predrag S. Stanimirovi e-se i, xL=min tAen max27=x e-se Degin max27=min min7=x end ,or i7=3 to n do Degin read&x' i, xL=max1 tAen Degin max27=max1 max17=x end e-se i, xLmax2 tAen max27=x e-se i, xKmin tAen min7=x end Orite-n&2]a>ve;i >e 2,max17107(' Orite-n&2Dr+gi =o ve-i;ini >e 2,max27107(' Orite-n&2]a>man>i >e 2,min7107(' end e-se Orite-n&2Man>a@ Dro>eva2' end.

Osnove programiranja

Primer. jta se ispisuje posle i vr8enje sledeeg programad


=rogram 0<gredni%,e@at&O+t=+t' var A, 4 7 Integer ,+n;tion 1@riven&*7Integer'7Integer Degin 4 7= 4#* 9 +<gredni e,e@at na 4B 1@riven 7= 1Tr&*' end 9 1@riven B Degin 4 7= 10 A 7= 1@riven&4' `rite-n&A,2 2, 4' 4 7= 10 A 7= 1@riven&10' A 7= AE1@riven&4' `rite-n&A,2 2, 4' 4 7= 10 A 7= 1@riven&4' A 7= AE1@riven&10' `rite-n&A,2 2, 4' end 9 0<gredni%,e@atB .
Rezultat1

100 0 0 0 10000

#10

5.5. R$,0)/#" # (!'()!*)+&#


5unkcija> odnosno procedura je rekur ivna ako sadr@i nared#u u kojoj po iva samu se#e. (ekur ija mo@e #iti direktna> kada )unkcija direktno po iva samu se#e. /ako3e> rekur ija mo@e #iti i indirektna> kada )unkcija po iva neku drugu proceduru ili )unkciju> koja po iva pola nu )unkciju $proceduru&. A reali aciji rekur ije moraju se po8tovati dva osnovna principaF - ;ora da postoji rekurentna ve a i me3u tekueg i pret0odnog $ili narednog& koraka u i raunavanju. - ;ora da postoji jedan ili vi8e granini0 uslova koji e prekinuti rekur ivno i raunavanje. -eki programski je ici do voljavaju po iv potprograma u telu samog tog potprograma. /akvi potprogrami na ivaju se rekur ivnim i pogodno su sredstvo a re8avanje pro#lema koji su rekur ivno de)inisani. /ipian primer rekur ivnog potprograma je potprogram a i raunavanje )aktorijela )unkcije de)inisanog saF

110

Predrag S. Stanimirovi

Osnove programiranja

nR$n-l&^> n^ S 1>

a nU0 anS0

Primer. Program a i raunavanje )aktorijela reali ovan u Pascal-uF


,+n;tion FA:.&]7integer'7 integer begin if ]L0 t#en FA:. 7= ]EFA:.&]#-' e)se FA:. 7= 1 end

1oncept rekur ivni0 potprograma se naj#olje mo@e sagledati pomou gra)a po iva potprograma na kome se predstavlja svaki od po iva potprograma. -a slici je prika an gra) po iva potprograma /)M a ; S ".

A praksi se esto sreu i pro#lemi u kojima postoji vi8estruka rekur ija. Eedan od takvi0 je pro#lem i raunavanja lanova 5i#onaijevog ni a #rojeva. 5i#onaijeva )unkcija je de)inisana kaoF f$n& S f$n-l& = f$n-2&> 1> 1> nU1 nS1 nS0

Potprogram a i raunavanje lanova 5i#onaijevog ni a #ie dvostruko rekur ivan. 6ajemo implementaciju u Pascal-uF
,+n;tion FiD&n7 Integer'7 integer begin if n L 1 t#en FiD 7= FiD&n#-' " FiD&n#2' e)se FiD 7= 1 end

A ovom potprogramu rekur ija dakle nije u stvaranju jedne> ve dve kopije iste )unkcije. ;ogue su i trostruke> cetvorostruke> itd. rekur ije jer #roj po iva kopija niim nije ogranien. 7ra) po iva ovakve dvostruke rekur ije ra likuje se od gra)ika rekur ija i pret0odnog primera.

Eo8 jedan od klasini0 rekur ivni0 pro#lema je uveni pro#lem Lanojski0 kula. Primer. Lanojske kule.
=ro;ed+re Fano> &n,sa,na,=re@o 7 integer' 111

Predrag S. Stanimirovi begin i, n L 0 tAen begin Fano>&n#1, sa =re@o, na' `rite&sa, 2 #LN, na' Fano>&n#1, =re@o, na, sa' end end

Osnove programiranja

Prema staroj indijskoj legendi> posle stvaranja sveta je Dog Drama $Dra0ma& postavio tri dijamantska stu#a i na prvi postavio '" latna prstena ra liiti0 prenika tako da svaki naredni #ude manji od pret0odnog. Sve8tenici 0rama moraju da pre#acuju te prstenove sa prvog na trei stu# koristei pri tome drugi> all samo jedan po jedan i to tako da se vei prsten ne mo@e nai i nad manjeg. 1ad svi prstenovi #udu pre#aeni na trei stu# nastupie kraj sveta. Ovde ce #iti prika an primer programa koji vr8i ovu operaciju pre#acivanja i koji ne avisi od #roja prstenova. ;e3utim uo#iajeno je da se ovaj primer i vodi a manji #roj krugova ! do , ve samim tim 8to je najmanji #roj potre#ni0 pote a 2n - 1. +a sluaj sa '" kruga dola imo do #roja od 14.""'.7"".07!.70..,,1.'1, pote a. A opstem sluaju> me3utim> pro#lem se sastoji u tome da se n prstenova pre#aci sa prvog stu#a $1& na trei stu# $!& preko drugog stu#a $2&. Cilj je> dakle> ostvarljiv u tri IkorakaI. Sve prstenove osim najveeg $n-tog&> pre#aciti na drugi stu#> koristei trei stu#. +atim n$ti prsten pre#aciti na trei stu#> a onda na njega staviti pomonu gomilu sa drugog stu#a> koristei prvi stu# kao pomoni. 6a #i se ovo i velo potre#no je ceo postupak i vesti a n -1 prsten> a a to je potre#no i vr8iti istu proceduru a n 2 prstena itd. /ako dola imo do rekur ije. Procedura se po iva a naprimer <ano'$!>1>!>2&. (a motriemo jo8 primer rekur ivnog potprograma a generisanje svi0 mogui0 permutacija #e ponavljanja skupa sa n elemenata G$n&> dat kao pret0odni primer. Primer. Potprogram a generisanje permutacija.
proced+re P&ni<7 arraQH-..10I of integer n,d+<7integer' var i,>,=om7integer begin ,or > 7= 1 to n do if n L 1 tAen begin P&ni<, n#1, d+<' for i 7= 1 to n#1 do ni<HiI 7= ni<Hi"1I ni<HnI 7= =om end e)se ,or i 7= 1 to d+< do =rint&ni<HiI' end

(e8enje dato u ovom potprogramu pored klasine rekur ije sadr@i i iteraciju> 8to dovodi do toga da njegovo i vr8avanje ima veoma animljiv tok> 8to se do#ro vidi na gra)u po iva $sledea slika&. 1arakteristino je da je ovo vi8e rekur ivan algoritam. Aoljivo je tako3e da on generi8e sve permutacije #e ponavljanja generi8ui neke od nji0 vi8e puta> 8tampajui i0 pritom samo jednom.

112

Predrag S. Stanimirovi

Osnove programiranja

5.5.1. P)#&$)# )$,0)/#" #- 40 ,6#.+ 0 8


Primer. Eedmostavni primeri rekur ivni0 )unkcija.
Jin;-+de Kstdio.AL void ,+n1&int' void ,+n2&int' void ,+n3&int' void main&' 9 =rint,&3Sn ,+n1&!'Sn3' =rint,&3Sn ,+n2&!'Sn3' =rint,&3Sn ,+n3&!'Sn3' B void ,+n1&int n' 9 =rint,&3R2d3,n' void ,+n2&int n' 9 i,&n' ,+n2&n#1' void ,+n3&int n' 9 =rint,&3R2d3,n' i,&n' ,+n3&n#1' B
$est primeri1 ,+n1&!' ! $ 3 2 1 0 ,+n2&!' 0 1 2 3 $ ! ,+n3&!' ! $ 3 2 1 0 0 1 2 3 $ !

,+n1&!' ,+n2&!' ,+n3&!'

i,&n' ,+n1&n#1' =rint,&3R2d3,n'

ret+rn ret+rn B

=rint,&3R2d3,n'

ret+rn

Primer. (ekur ivno i raunavanje )aktorijela.


Jin;-+de Kstdio.AL -ong ,a;t&sAort' void main&' 9 sAort n -ong re<+-tat s;an,&3Rd3,Un' re<+-tat = ,a;t&n' =rint,&3Fa@tori>e- od Rd = R-dSn3, n,re<+-tat' B -ong ,a;t&sAort n' 9 i,&nK=1'ret+rn&1L' e-se ret+rn&nE,a;t&n#1'' B

113

Predrag S. Stanimirovi

Osnove programiranja

Primer. -apisati rekur ivnu )unkciju a i raunavanje n-tog lana 5i#onaijevog ni aF fib$n&S 1> )i#$n-1&=)i#$n-2&> nS1 ili nS0> nU1 .

Jin;-+de Kstdio.AL -ong ,iD&sAort' void main&' 9 sAort n s;an,&3Sn Rd3, Un' =rint,&3Rd#ti ;-an FiDona;i>evog ni<a = R-dSn3, B -ong ,iD&sAort n' 9 i,&nK=1'ret+rn&&-ong'1'

n,,iD&n''

e-se ret+rn&,iD&n#1'",iD&n#2'' B

Droj rekur ivni0 po iva pri i raunavaju 5i#onaijevi0 #rojeva mo@e se smanjiti na sledei nainF
-ong ,iD&-ong a, -ong D, sAort n' 9 i,&n==2'ret+rn D e-se 9 D=a"D a=D#a n## ret+rn ,iD&a,D,n' B

Primer. +adati #roj tipa int ispisati nak po nak.

Jin;-+de Kstdio.AL void =rintd&int n' 9 i,&nK0' 9 =+t;Aar&2#2' n=#n B i,&n610' =rintd&n610' =+t;Aar&nR10"202' B void main&' 9int n s;an,&3Rd3, Un' =rintd&n' B

Primer. (ekur ivno i raunavanje najveeg ajednikog delioca dva cela #roja.
Jin;-+de Kstdio.AL int n<d&int n, int m' 9 i,&n==m' ret+rn&m' i,&nKm' ret+rn&n<d&n,m#n'' e-se ret+rn&n<d&n#m,m'' B void main&' 9 int =,T s;an,&3RdRd3,U=,UT' =rint,&3n<d&Rd,Rd'=RdSn3,=,T,n<d&=,T'' B

Primer. (ekur ivno i raunati Hkermanovu )unkciju )$n>!>"&> koja je de)inisana na sledei nainF )$n> !> "& S !=1> a nS0 )$n> !> "& S !> a nS1> "S0> )$n> !> "& S 0> a nS2> "S0 )$n> !> "& S 1> a nS!> "S0 )$n> !> "& S 2> a nU!> "S0 )$n> !> "& S )$n-1> )$n> !> "-1&> !&> inae.
Jin;-+de Kstdio.AL -ong a@er&int,int,int' void main&' 9 int x,Q,n =rint,&30nesit n3' s;an,&3Rd3,Un' =rint,&30nesit x3' s;an,&3Rd3,Ux' =rint,&30nesit Q3' s;an,&3Rd3,UQ' =rint,&3A&Rd,Rd,Rd'=R-dSn3,n,x,Q,a@er&n,x,Q'' B

114

Predrag S. Stanimirovi

Osnove programiranja

-ong a@er&int n, int x, int Q' 9 int =om i,&n==0'ret+rn&x"1' i,&n==1 UU Q==0' ret+rn&x' i,&n==2 UU Q==0' ret+rn&0' i,&nL3 UU Q==0' ret+rn&2' e-se 9 =om=a@er&n,x,Q#1' ret+rn&a@er&n#1,=om,x'' B B

Primer. 1oristei rekur ivnu de)iniciju proi voda dva prirodna #roja napisati odgovarajuu )unkciju.
Jin;-+de Kstdio.AL -ong =&int a, int D' 9 i,&D==1' ret+rn&a' ret+rn&a"=&a,D#1'' void main&' 9 int x,Q =rint,&30nesi dva =rirodna Dro>a 3' =rint,&3RdERd=R-dSn3,x,Q,=&x,Q'' B

B s;an,&3RdRd3,Ux,UQ'

Primer. -apisati rekur ivni program a i raunavanje sume ci)ara adatog prirodnog #roja.
Jin;-+de Kstdio.AL int s+ma;i,&-ong n' 9 i,&Vn'ret+rn&0'

e-se

ret+rn&nR10"s+ma;i,&n610''

void main&' 9 -ong @ =rint,&30nesi d+g ;eo Dro> 3' s;an,&3R-d3,U@' =rint,&31+ma ;i,ara od R-d=RdSn3,@,s+ma;i,&@'' B

Primer. -apisati rekur ivni program a i raunavanje kolinika dva prirodna #roja na proi voljan #roj decimala.
Jin;-+de Kstdio.AL void @o-i;ni@&int ind, int n, int m, int @' 9 i,&ind' =rint,&3Rd.3,n6m' e-se =rint,&3Rd3,n6m' i,&@' @o-i;ni@&0,&nRm'E10,m,@#1' B void main&' 9 int n,m,@ =rint,&3Bro>i-a;_ 3' s;an,&3Rd3,Un' =rint,&3Imeni-a;_ 3' s;an,&3Rd3,Um' =rint,&3Bro> de;ima-a_ 3' s;an,&3Rd3,U@' @o-i;ni@&1,n,m,@' B

Primer. Lanojske kule.


Jin;-+de Kstdio.AL void main&' 9 int Dd void =reDa;i&' =rint,&3Bro> dis@ova = _ 3' =reDa;i&Dd,1,3,2' B

s;an,&3Rd3,UDd'

void =reDa;i&int n, int sa, int na, int =re@o' 9 i,&n' 9 =reDa;i&n#1,sa,=re@o,na' =rint,&3Rd#LRd 3,sa,na' =reDa;i&n#1,=re@o,na,sa' B

Primer. Sa tastature se uitava #e gre8ke )ormula o#lika


K,orm+-aL77=K;i,raLWM&K,orm+-aL,K,orm+-aL'Wm&K,orm+-aL,K,orm+-aL'

115

Predrag S. Stanimirovi K;i,raL77=0W1W2W3W$W!W(W)WXW8 M# ma@sim+m, m#minim+m.

Osnove programiranja

-apisati rekur ivnu )unkciju kojim se i raunava vrednost i ra a. -a primer> M&$,m&(,8''=(.


Jin;-+deKiostream.AL Jin;-+deKstdio.AL int ,&' 9 ;Aar ;A,< int x,Q ;A=get;Aar&' i,&;AL=202 UU ;AK=282' ret+rn ;A#202 66sada >e ;A= M i-i m <=get;Aar&' 66 ;ita otvoren+ <agrad+ x=,&' <=get;Aar&' 66 ;ita <are< Q=,&' <=get;Aar&' 66 ;ita <atvoren+ <agrad+ sOit;A&;A' 9 ;ase 2M27 ret+rn &xLQ'_x7Q ;ase 2m27 ret+rn &xLQ'_Q7x B B void main&' 9 ;o+tKK3####L 3KK,&'KKendB

5.6. I&(%$&$ '+6#.+ (!'()!*)+&+


Prilikom prevo3enja programa kompilator vr8i planiranje memorijskog prostora koji e #iti dodeljen programu $(torage allo#ation&. Pored toga 8to tre#a da se re ervi8e memorijski prostor a sme8taj khda programa i podataka koji se o#ra3uju u njemu> a svaki od potprograma koji se po iva i programa generi8e se i jedan aktiva#ioni slog u koji se sme8taju podaci koji se preu imaju od glavnog programa> lokalni podaci potprograma i tako vane privremene promenljive koje generi8e kompilator prilikom generijsanja ma8inskog koda. Struktura jednog aktivacionog sloga data je na slici. (e ultati koje vraa potprogram Stvarni argumenti Opcioni upravljaki linkovi aktivacionog sloga glavnog programa Opcioni linkovi a pristup podacima u drugim aktivacionim slogovima Podaci o statusu *okalni podaci Privremene promenljive koje generi8e kompilator +a sme8taj aktivacioni0 slogova koristi se jedna od sledee tri strategijeF statika> pomou steka i dinamika. A avisnosti od toga koja je strategija primenjena avisi da li e ill ne #iti mogui rekur ivni po ivi potprograma. 1od statikog sme8tanja aktivacioni0 slogova> kompilator unapred re ervi8e )iksan memorijski prostor iji se sadr aj o#navlja kod svakog po iva potprograma. /o nai da kod ovakvog smestanja nisu mogui rekur ivni po ivi potprograma jer se kod svakog novog po iva potprograma gu#i in)ormacija o pret0odnom po ivu. Ovakva te0nika primenjuje se na primer kod reali acije kompilatora a programski je ik 5O(/(H-> pa se u njemu #og toga ne mogu koristiti rekur ije. 1od strategije koja se asniva na primeni steka a sme8taj aktivacioni0 slogova koristi se stek u koji se a svaki po iv potprograma sme8ta jedan aktivacioni slog. Ova te0nika do voljava rekur iju jer se kod svakog novog po iva potprograma generi8e novi slog i sme8ta u stek. -a kraju potprograma

116

Predrag S. Stanimirovi

Osnove programiranja

slog se i #acuje i steka. /o nai da je u toku i vr8avanja programa ovaj stek dinamiki au et aktivacionim slogovima oni0 potprograma koji su trenutno aktivni. Od veliine memorijskog prostora koji je dodeljen steku avisi i du#ina rekur ivni0 po iva potprograma. -a slici ispod prika ana je promena strukture steka u toku i vr8avanja programa u kome se po iva rekur ivni potprogram a i raunavanje 5i#onaijevi0 #rojeva a n S ".

117

Predrag S. Stanimirovi

Osnove programiranja

/rea> dinamika strategija sastoji se u tome da se a svaki po iv potprograma generi8e aktivacioni slog koji se sme8ta u pose#an deo memorije na van <eap. A ovom sluaju aktivacioni slogovi potprograma pove uju se u dinamiku strukturu podataka koja odgovara sta#lu po iva potprograma. Oigledno je da i ova te0nika do voljava rekur iju.

5.7. S6!($ )0%$s 91!&$ "+I$ .+:


1omponovana nared#a $#lok& je serija deklaracija i a koje sledi serija nared#i i me3u agrada [ i ]. 5unkcije se mogu tretirati kao imenovani #lokovi sa parametrima i do voljenom return nared#om. Da ino pravilo domena va@enja je da su identi)ikatori dostupni samo u #loku u kome su deklarisani. Eedno ime u spolja8anjem #loku va@i dok se ne rede)ini8e u unutra8njem. /ada je ime u spolja8njem #loku skriveno $ili maskirano& tim imenom unutra8njeg #loka. Primer.
6E s=o->asn>i D-o@ E6 int a=2 =rint,&3RdSn3,a' 6E 2 E6 6E +n+tra[n>i D-o@ E6 int a=3 =rint&3RdSn3,a' 6E 3 E6

118

Predrag S. Stanimirovi =rint,&3RdSn3,a' 6E2 E6

Osnove programiranja

5.>. M$&!)#.s,$ ,%+s$ 0 8


Svaka promenljiva i )unkcija u C ima dva atri#utaF tip i memorijsku klasu. ;emorijske klase su de)inisane kljunim reima a%to> e!tern> stati# ili register Promenljive deklarisane unutar tela )unkcije jesu> podra umevano $#< de)ault&> memorijske klase a%tomati#. promenljive ove klase deklari8u se eksplicitno kljunom reju a%to. Primer. 6eklaracija unutar nekog #loka
char c2 int i,-,k2 W auto int i,-,k2 W

je ekvivalentna sa
auto char c2

1ada je #lok unet> sistem re ervi8e adekvatnu memoriju a promenljive klase a%to. Ove promenljive se tretiraju kao ZZlokalneZZ a #lok. 1ada se i a3e i #loka sistem vi8e ne pamti vrednosti ovi0 promenljivi0. Sve )unkcije i promenljive deklarisane i van tela )unkcija imaju memorijsku klasu e!ternal> i one su glo#alne a sve )unkcije deklarisane posle nji0. Primer.
Jin;-+deKstdio.AL int a=) void main&' 9 void ,&void' void g&void' 9 =rint,&3RdSn3,a' ,&' =rint,&3RdSn3,a' g&' =rint,&3RdSn3,a' B void ,&' 9 =rint,&3RdSn3,a' a"" =rint,&3RdSn3,a' B void g&' 9 int a=10 =rint,&3RdSn3,a' B

6E ) E6 6E X E6 6E X E6

6E) E6 6E X E6

6E 10 E6

Promenljiva je glo#alna na nivou modula ako je deklarisana van svi0 )unkcija u modulu. memorijski prostor se trajno dodeljuje> a memorijska klasa te promenljive je e!tern. 7lo#alnost je odre3ena mestom deklaracije. 7lo#alna promenljiva mo@e da #ude maskirana lokalnom promenljivom istog imena. 6a #i glo#alna promenljiva #ila dostupna i drugi0 modula> ona mora da se u tim modulima de)ini8e pomou kljune rei e!tern. Primer. % ra om o#lika
extern int a2

promenljiva a se ne deklari8e> ve de)ini8e> tj. ne dodeljuje se memorijski prostor> nego se C prevodilac in)ormi8e o tipu promenljive. Kksterna promenljiva se mo@e inicijali ovati iskljuivo na mestu svoje deklaracije. Primer. 6at je sledei program koji se nala i u dve datoteke $dva modula&. A datoteci modul1.c se nala i program
119

Predrag S. Stanimirovi

Osnove programiranja

Jin;-+de Kstdio.AL Jin;-+de bmod+-2.;c ;Aar ;=2O2 void main&' 9 void ,&' void g&' =rint,&3=re ,+n@;i>e ,7 ;= R;Sn3,;' ,&' =rint,&3=os-e ,+n@;i>e ,7 ;= R;Sn3,;' g&' =rint,&3=os-e ,+n@;i>e g7 ;= R;Sn3,;' B

Promenljiva # je glo#alna> pa se njoj mo@e pristupiti i drugi0 modula pomou kljune rei e!tern. -eka je datoteka mod%l2.c sledeeg sadr@aja
extern ;Aar ; void ,&' 9 ; = 2a2 B void g&' 9 ;Aar ;=2D2
6re funkci-e f1 c3w 6osle funkci-e f1 c3a 6osle funkci-e g1 c3a

6o#ijaju se sledei re ultatiF

5unkcija f menja vrednost eksterne promenljive #> a to mogu i druge )unkcije i ove datoteke $modula&. Hko datoteka mod%l2.c ima sadr@aj
,&' 9 extern ;Aar ; ;=2a2 B

tako3e se menja vrednost promenljive #. ;e3utim> to ne#i mogle da uine druge )unkcije i datoteke mod%l2.#. Statike promenljive se koriste u dva sluaja. A prvom sluaju> omoguava lokalnoj promenljivoj da adr@i vrednost kada se avr8i #lok u kome je deklarisana. 6ruga primena je u ve i sa glo#alnom deklaracijom> i omoguuje me0ani am privatnosti glo#alni0 promenljivi0. Primer. $1.primena&
Jin;-+deKstdio.AL void ,+n1&' 9 stati; int x=0 int Q=0 =rint,&3stati;=Rd a+to = RdSn3,x,Q' B void main&' 9 int i ,or&i=0 iK3 ""i' ,+n1&'

""x,""Q B

% la jeF
static3: auto3: static39 auto3: static3; auto3:

A ve i sa drugom primenom> koristi se injenica da su statike promenljive lokalne u okviru modula> jer im mogu pristupiti samo )unkcije i istog modula. Pored promenljivi0> i )unkcije mogu da se de)ini8u kao eQtern ili static. ;emorijska klasa e!tern se u ima po de)iniciji. Statike )unkcije su dostupne samo )unkcijama i istog modula. 1ori8enje registarski0 promenljivi0 omoguava programeru da utie na e)ikasnost i vr8enja programa. Hko )unkcija esto koristi neku promenljivu> mo@e se a0tevati da se njena vrednost memori8e u #r im registrima centralne procesorske jedinice $CPA&> uvek kada se )unkcija i vr8ava. (egistarske promenljive su naje8e promenljive a kontrolu petlje i lokalne promenljive u
120

Predrag S. Stanimirovi

Osnove programiranja

)unkcijama. Promenljiva se mo@e uiniti registarskom pomou kljune rei register. Primer.
register char c2 register int i2

Promenljiva deklarisana kao registarska tako3e je i automatska. Hko nema slo#odni0 registara u ,G0> C prevodilac ne prepo naje gre8ku. Primer. Promenljiva i deklari8e se kao registarska neposredno pre upotre#e u for petlji.
register int i ,or&i=0 iK! ""i' ...

+avr8etak #loka u kome je deklarisana registarska promenljiva oslo#a3a registar.

5.>.1. J#"!' # "$, !3.$,+'+


?ivotni vek o#jektaF vreme u toku i vr8avanja programa u kojem o#jekat postoji i a koje mu se mo@e pristupati. -a poetku @ivotnog veka> o#jekat se kreira> po iva se njegov konstruktor> ako ga ima. -a kraju @ivotnog veka se o#jekat uni8tava> po iva se njegov destruktor> ako ga ima.

5.>.2. V)s'$ !3.$,+'+ (! I#"!' !& "$,0


Po @ivotnom veku> o#jekti se dele naF statike> automatske> dinamike> tran ijentne $privremene&.

2ek atri#uta klase S vek o#jekta kome pripadaju. 2ek )ormalnog argumenta S vek automatskog o#jekta.
5ormalni parametri se inicijali uju vrednostima stvarni0 argumenata.

S'+'#5,# # +0'!&+'s,# !3.$,'# Hutomatski o#jekat je lokalni o#jekat koji nije deklarisan kao stati#.
?ivotni vekF od njegove de)inicije> do napu8tanja o#lasti va@enja. 1reira se i nova pri svakom po ivu #loka u kome je deklarisan. Prostor a automatske o#jekte se alocira na stack-u.

Statiki o#jekat je glo#alni o#jekat ili lokalni deklarisan kao stati#.


?ivotni vekF od i vr8avanja de)inicije do kraja i vr8avanja programa. 7lo#alni statiki o#jektiF kreiraju se samo jednom> na poetku i vr8avanja programa> kreiraju se pre kori8enja #ilo koje )unkcije ili o#jekta i istog )ajla> nije o#ave no da se kreiraju pre po iva )unkcije main$&> prestaju da @ive po avr8etku )unkcije main$&. *okalni statiki o#jekti poinju da @ive pri prvom nailasku toka programa na nji0ovu de)iniciju.
Primer. int a=1 void ,&' 9 int D=1 66 ini;i>a-i<+>e se =ri sva@om =o<iv+ static int ;=1 66 ini;i>a-i<+>e se samo >ednom ;o+tKK3a=3KKa""KK3 D=3KKD""KK3 ;=3KK;""KKendB void main&' 9 (#i)e &aK3' ,&' B
i<-a<7 a = 1 D = 1 ; = 1 a = 2 D = 1 ; = 2

121

Predrag S. Stanimirovi

Osnove programiranja

6. STRUKTURNI TIPOVI PODATAKA


Pojam struktura podataka> ni ova> slogova> skupova i datoteka je po nat i prisutan u vi8im programskim je icima od samog nji0ovog nastanka. A okviru strukturni0 tipova podataka> vrednosti koje tip o#u0vata de)inisane su kao jednorodne ili ra norodne strukture podataka. A je iku Pascal postoji mogunost de)inisanja strukturni0 tipova koji omoguavaju rad sa ni ovima> slogovima> skupovima i datotekama. Skupovi se kao strukturni tipovi podataka re3e sreu kod drugi0 programski0 je ika> dok su ni ovi> slogovi i datoteke postali standardni koncept> prisutan u mnogim programski0 je icima $Hda> C&.

6.1. P!%.+ 0 ()!*)+&s,#& .$/#6#&+


-i $Polje& $array6 je indeksirana sekvenca komponenti. Polja u programskim je icima jesu jednodimen ionalne ili vi8edimen ionalne strukture podataka koje o#u0vataju vi8e vrednosti istog tipa. ;o@e se rei> da jednodimen ionalna polja odgovaraju pojmu vektora> a vi8edimen ionalna pojmu matrica. Dilo koji ni koji ima komponente nekog tipa pri emu su vrednosti elemenata nekog tipa ( predstavlja preslikavanje ( v . 6u@ina $length& ni a jeste #roj njegovi0 komponenti> koji se o naava sa _(. -i ovi se mogu nai u svakom imperativnom i o#jektno orijentisanom je iku. /ip ( mora da #ude konaan> tako da je ni konano preslikavanje. A praksi> ( je uvek rang u astopni0 vrednosti> 8to se na iva rang indeksa ni a $arra<rs index range&. 7ranice opsega indeksa na ivaju se donja granica $lower bound& i gornja granica $upper bound&. 1ao i sve druge promenljive u programu> i ni se mora deklarisati pre nego 8to se upotre#i. 6eklaracijom ni a kompajleru se saop8tavaju sledei podaci o ni uF ime $koje je predstavljeno nekim identi)ikatorom&> tip elemenata ni a i veliinu ni a $#roj elemenata tog ni a&. Da ine operacije nad ni ovima jesuF i konstruisanje $construction& ni a i njegovi0 komponentiX i indeksiranje $indexing&> tj. selektovanje partikularne komponente ni a> kada je adat njegov indeks. %ndeks koji se koristi a selekciju komponente ni a jeste vrednost koja se i raunava. Programski je ici C i C== ograniavaju indeks ni a na celo#rojne vrednosti ija je donja granica 0. Op8ti o#lik deklaracije ni a u je iku C je
,tip elemenata. ,ime tipa. !,celobro-ni izraz.%2

PHSCH* omoguava da rang a indeks ni a mo@e #iti oda#ran od strane programera> jedina restrikcija je rang indeksa mora da #ude diskretan primitivni tip. +a opis ovi0 struktura u nekim programskim je icima se koristi kljuna re arra-. /akav je sluaj u je iku PHSCH*. Op8ti o#lik deklaracije ni a u PHSCH*u je
array!,tip indeksa.% of ,tip elemenata.2

(a motrimo sledei primer u je iku PHSCH*F


'=($ EEM$'R 3 +))+= !9..9:% !4 )$+%2 "+) A,Q 1 EEM$'R2

Ovom de)inicijom de)inisan je tip =.M :3> kao ni od 10 elemenata tipa real. Promenljive ) i + su deklarisane kao promenljive tipa =.M :3. Svakoj od promenljivi0 ) i + odgovara struktura podataka koja se sastoji od 10 komponenti tipa real. Svakoj od komponenti vektora opisanog na ovaj nain mo@e se pristupiti preko indeksa. A nekim je icima $Pascal& koristi se i notacija sa uglastim agradama na primer )V!W i )VNW. A ovakvim sluajevima indeks mo@e da #ude de)inisan i kao

122

Predrag S. Stanimirovi

Osnove programiranja

celo#rojni i ra . Ove indeksirane promenljive mogu se u programu upotre#iti svuda gde se javljaju i proste promenljive odgovarajueg tipa. A datom primeru )$N& i +$N& su promenljive tipa real. Kvo neki0 primera koji ilustruju upotre#u ni aF
AH3I7= 0.0 * 7= AH3I

- /reem elementu vektora ) dodeljuje se vrednost 0X - promenljiva X do#ija vrednost treeg elementa vektora ).

Polja se reali uju kao statike strukture podataka> 8to nai da se a svaki odre3eni vektor re ervi8e unapred de)inisani prostor u memoriji raunara. 7ranice indeksa u de)iniciji tipa mogu da #udu date i preko promenljivi0 ili ak i preko i ra a> ali ove vrednosti tre#a da #udu po nate u taki programa u kojoj se pojavljuje de)inicija tipa. Kvo neki0 de)inicija takvog o#lika u je iku PascalF
type G%:.O/1 = array H1 .. ]I of ,-oat type G%:.O/2 = array H] .. ]"MI of ,-oat

A svim ovim primerima> a de)inisanje indeksa je iskori8en interval u skupu celi0 #rojeva $integer&. /o je i prirodno> jer se naje8e a indeksiranje i u matematici koriste celo#rojne vrednosti. A Pascal-u i Hdi se a de)inisanje indeksa mo@e koristiti #ilo koji diskretni tip podataka. (a motrimo sledei primer u kome se kreira ta#ela sa podacima o koliini padavina u svakom mesecu jedne godine u je iku HdaF
type PADAGI]% is de)ta 0.1 range 0.0 .. 200.0 type M%1%5I is ^A],F%B,MA/,AP/,MA^,^0],^0L,AGY,1%P,O:.,]OG,D%5' type :OL_PAD is array &M%1%5I' o, PADAGI]%

A programu se mogu koristiti promenljive tipa M:96G)-.


PODA5I7 :OL_PAD

Hnalogni tip podataka u je iku Pascal je dat sledeim de)inicijamaF


type M%1%5I = &^A],F%B,MA/,AP/,MA^,^0],^0L,AGY,1%P,O:.,]OG,D%5' type :OL_PAD = array HM%1%5II of reavar PODA5I7 :OL_PAD

A ovom primeru de)inisan je strukturni tip podataka M:96G)-> a ije indeksiranje se koristi diskretni tip na#rajanja H.(.,2> tako da vektor G:-),2 ima ukupno 12 komponenti> od koji0 svaka odgovara jednom mesecu u godini. Svakoj od ovi0 komponenti pristupa se preko imena meseca kao indeksa. -a taj nain> u programu e G:-),2VH)3 W #iti promenljiva kojoj se dodeljuje vrednost koja odgovara padavinama u mesecu martu. 6iskretni tipovi podataka se mogu koristiti a de)inisanje opsega indeksa> tako 8to se u okviru skupa vrednosti odre3enog diskretnog tipa koristi samo interval vrednosti. -a primer> u ra matranom primeru moglo je da #ude postavljeno ogranienje da se ra matraju padavine u letnjem periodu godine. A tom sluaju> pogodno je indeks vektora G:-),2 de)inisati tako da ima samo komponente koje odgovaraju letnjim mesecima.

6.1.1. A ! #& $ 1$4# #6#.$ s')0,'0) #- '#(!"+


6e)inicije strukturni0 tipova mogu u programu da #udu date i #e eksplicitnog de)inisanja i imenovanja tipa u vidu anonimni0 de)inicija tipa. Sledei primer ilustruje ovaj koncept. Primer. Strukturno ekvivalentni vektori.
=ro;ed+re G%:.O/_DOD1 var A 7 arrayH1..!I of integer B 7 arrayH1..!I of integer begin B 7= A BH1I7= AH1I end 9G%:.O/_DODB

2ektori ) i + su de)inisani u okviru ra liiti0 tipova podataka koji su me3utim strukturno jednaki. A je iku Pascal kod ovakvi0 de)inicija va@i strukturna ekvivalentnost na nivou nared#i dodeljivanja> tako da #i sva dodeljivanja u primeru #ila korektna. A je iku Hda> me3utim> i u ovakvim sluajevima se a0teva eksplicitna ekvivalentnost> tako da su navedena dodeljivanja nekorektna. Hko @elimo da
123

Predrag S. Stanimirovi

Osnove programiranja

koristimo anonimne de)inicije tipova podataka i u ovakvim programskim je icima> onda i vektor ) i vektor + tre#a da #udu opisani u okviru iste de)inicije> odnosno da eksplicitno pripadaju istom tipu> kako je to ura3eno u primeru koji sledi. Primer. Kksplicitno ekvivalentni vektori.
=ro;ed+re G%:.O/_DOD2 var A,B 7 arrayH1..!I of integer begin B 7= A BH1I 7= AH1I end 9G%:.O/_DOD$B

P#&$)# 0(!')$3$ #/!"+ 0 P+s6+%0


Primer. Sortiranje elemenata ni a dovo3enjem maksimalnog na poetak.
=rogram sortni< tQ=e ni<=arraQH1..20I o, reavar x7ni< n,i,>71..20 =7reaDegin Orite-n Orite&2D+<ina ni<a_ 2' read-n&n' Orite-n&2%-ementi ni<a_ 2' ,or i7=1 to n do read&xHiI' ,or i7=1 to n#1 do ,or >7=i"1 to n do i, xHiIKxH>I tAen Degin =7=xHiI xHiI7=xH>I xH>I7== end Orite-n Orite-n&21ortirani ni< >e7 2' ,or i7=1 to n do Orite&xHiI71$7(' Orite-n end.

Primer. Potprogram a ure3ivanje vektora u 5O(/(H--u 77.


10B/O0.I]% 1O/.&A,]' DIM%]1IO] A&100' DO 10 I = 1, ]#1 AMA* = A&I' : = I DO 20 ^ = I"1,] IF &A&^'.Y..AMA*' .F%] AMA* = A&^' : = ^ %]D IF 20 5O].I]0% A&:' = A&I' A&I' = AMA* 10 5O].I]0% %]D

Primer. Program kojim se ilustruju ni ove kao parametre procedure u Pascal-u.


=rogram MinMa@s2 ;onst Ma@sGe- = 20 tQ=e Ge-Liste = 1..Ma@sGevar Dodata@7 Integer 0<ora@7 Ge-Liste A 7 arraQ HGe-ListeI o, Integer =ro;ed+re MinMa@s

124

Predrag S. Stanimirovi var 0<ora@7 Ge-Liste Min, Ma@s, Prvi, Dr+gi7 Integer Degin Min 7= AH1I Ma@s 7= Min 0<ora@ 7= 2 `Ai-e 0<ora@ K Ma@sGe- do Degin Prvi 7= AH0<ora@I Dr+gi 7= AH0<ora@"1I i, Prvi L Dr+gi tAen Degin i, Prvi L Ma@s tAen Ma@s 7= Prvi i, Dr+gi K Min tAen Min 7= Dr+gi end e-se Degin i, Dr+gi L Ma@s tAen Ma@s 7= Dr+gi i, Prvi K Min tAen Min 7= Prvi end 0<ora@ 7= 0<ora@ " 2 end i, 0<ora@ = Ma@sGe- tAen i, AHMa@sGe-I L Ma@s tAen Ma@s 7= AHMa@sGe-I e-se i, AHMa@sGe-I K Min tAen Min 7= AHMa@sGe-I `rite-n&Ma@s, Min' `rite-n end 9 MinMa@s B Degin ,or 0<ora@ 7= 1 to Ma@sGe- do Degin /ead&AH0<ora@I' `rite&AH0<ora@I7$' end `rite-n MinMa@s ,or 0<ora@ 7= 1 to Ma@sGe- do Degin /ead&Dodata@' AH0<ora@I 7= AH0<ora@I " Dodata@ `rite&AH0<ora@I7$' end `rite-n MinMa@s end.

Osnove programiranja

;ada jednostavan> ovaj program ilustruje vi8e injenicaF 1. -ajjednostavniji o#lik zaglavl'a pro#ed%re> o#likaF procedure (dentifikatorX 2. +lokove1 Procedura je #lok sa imenom. A ovom sluaju> deo programa koji se upotre#ljava samo a pronala@enje najmanje i najvee vrednosti je i dvojen i dato mu je ime HinHaks. Da8 kao i programski #lok> #lok koji sainjava proceduru ima deklaracioni deo> 8to uvodi o#jekte koji su lokalni a proceduru. !. 9okalne promenl'ive1 Promenljive 0zorak> Grvi> -r%gi> Hin i Haks lokalne su a proceduru HinHaks. 6odele vrednosti ovim promenljivima nemaju nikakvog uticaja na program van o#lasti va@enja procedure HinHaks. Svaki put kada se procedura aktivira lokalne promenljive su nede)inisane na poetku iska nog dela. ". 5lobalne promenl'ive1 Promenljive )> 0zorak i -odatak jesu glo#alne promenljive deklarisane u glavnom programu. -a nji0 se mo@e po ivati kro celokupan program $na primer> prva dodela vrednosti u HinHaks je Min 7= AH1I&. ,. :blast vaCen'a1 Aoite da je 0zorak ajedniko ime jedne glo#alne i jedne lokalne promenljive. One nisu ista promenljiva^ Procedura se mo@e po ivati na #ilo koju nelokalnu promenljivu ili mo@e i a#rati da ponovo de)ini8e to ime. Akoliko je ime promenljive ponovo deklarisano> onda nova ve a imeGtip va@i u o#lasti va@enja de)ini8ue procedure> a glo#alna promenljiva sa istim imenom $osim ako je preneta kao parametar& nije vi8e dostupna u okviru o#lasti va@enja procedure. 6odela vrednosti lokalnoj promenljivoj A orak $na primer dodela A orakFS A orak=2&

125

Predrag S. Stanimirovi

Osnove programiranja

nema uticaja na glo#alnu promenljivu 0zorak* te kako unutar procedure HinHaks lokalna promenljiva 0zorak ima prednost> glo#alni 0zorak je praktino nepristupaan. 6o#rom programerskom praksom smatra se deklarisanje svakog identi)ikatora na koji se ne po iva van procedure> kao strogo lokalnog toj proceduri. -e samo da je ovo do#ro dokumentovanje> nego ono tako3e o#e #e3uje i dodatnu sigurnost. -a primer> 0zorak je mogao #iti ostavljen kao glo#alna promenljivaX ali tada #i kasnije pro8irenje programa koje aktivira proceduru HinHaks unutar petlje kontrolisane sa A orak i a valo pogre8no i raunavanje. '. Gro#ed%rni iskaz1 A ovom primeru iska HinHaks u glavnom programu aktivira proceduru. Prouavajuci detaljnije program uoite da je procedura HinHaks aktivirana dva puta. 5ormulisanjem programskog dela kao procedure -tj. konkretno ne ispisujui programski deo dva puta mo@ete u8tedeti ne samo vreme uno8enja> ve i memorijski prostor koji upotre#ljava program. Statiki khd se sme8ta samo jednom> a prostor a lokalne promenljive dinamiki se aktivira samo tokom i vr8avanja procedure $stvara se na poetku i uni8tava na kraju&. %pak> ne #i tre#alo da oklevate pri )ormulisanju radnje kao procedure - ak i kada se ona po iva samo jedanput - ako time poveavate itljivost programa. Aop8te> krai #lokovi mogu se lak8e ra umeti nego oni du@i. 6e)inisanje ra vojni0 koraka kao procedura ini program lak8im a ra umevanje i proveravanje. Program koji sledi pro8iruje gornji primer tako 8to na op8tiji nain sraunava najmanju i najveu vrednost ni a.
=rogram MinMa@s3 ;onst Ma@sGe- = 20 tQ=e Ge-Liste = 1..Ma@sGeLista = arraQ HGe-ListeI o, Integer var 0<ora@ 7 Ge-Liste A, B 7 Lista MinA, MinB, Ma@sA, Ma@sB 7 Integer =ro;ed+re MinMa@s&var L7Lista var Min, Ma@s 7 Integer' var 0<ora@ 7 Ge-Liste Prvi, Dr+gi 7 Integer Degin Min 7= LH1I Ma@s 7= Min 0<ora@ 7= 2 OAi-e 0<ora@ K Ma@sGe- do Degin Prvi 7= LH0<ora@I Dr+gi 7= LH0<ora@ " 1I i, Prvi L Dr+gi tAen Degin i, Prvi L Ma@s tAen Ma@s 7 = Prvi i, Dr+gi K Min tAen Min 7= Dr+gi end e-se Degin i, Dr+gi L Ma@s tAen Ma@s 7= Dr+gi i, Prvi K Min tAen Min 7= Prvi end 0<ora@ 7= 0<ora@ " 2 end i, 0<ora@ = Ma@sGe- tAen i, LHMa@sGe-I L Ma@s tAen Ma@s 7= LHMa@sGe-I e-se i, LHMa@sGe-I K Min tAen Min 7 = LHMa@sGe-I end 9 MinMa@s B =ro;ed+re 5ita>Pisi&var L 7 Lista' Degin ,or 0<ora@ 7= 1 to Ma@sGe- do Degin /ead&LH0<ora@I' `rite&LH0<ora@I 7$' end `rite-n

126

Predrag S. Stanimirovi end 9 5ita>Pisi B

Osnove programiranja

Degin 9 g-avni =rogram B 5ita>Pisi&A' MinMa@s&A, MinA, Ma@sA' `rite-n&MinA, Ma@sA, Ma@sA # MinA' `rite-n 5ita>Pisi&B' MinMa@s&B, MinB, Ma@sB' `rite-n&MinB, Ma@sB, Ma@sB # MinB' `rite-n `rite-n `rite-n&aDs&MinA # MinB', aDs&Ma@sA # Ma@sB'' `rite-n ,or 0<ora@ 7= 1 to Ma@sGe- do Degin AH0<ora@I 7= AH0<ora@I " BH0<ora@I `rite&AH0<ora@I7$' end `rite-n MinMa@s&A, MinA, Ma@sA' `rite-n&MinA, Ma@sA, Ma@sA # MinA' end.

est primerF
9 @ 4 A 4< 4@ @ = ; 44 4: > >F = 4< @4 F == F< 9< 4 > 4@ 9; 9> > 4= >> >< F > > 9; = =< 9 <@ @4 = 9 4 @4 @ = 9 @ ; 4 A A A > <4 ;@ < @ F F F A 4< >F >F @ 9 9 <

> 9< > ==

Ovo prika uje nekoliko dalji0 injenica o procedurama. 1. 6rugi o#lik aglavlja procedure> sa listom parametara. 2. 5ormalne parametre. *ista parametara daje ime svakog )ormalnog parametra praenog njegovim tipom. HinHaks ima parametre 9> Hin i Haks kao )ormalne parametre. !. Stvarne parametre. Aoite ve u i me3u aglavlja procedure i procedurnog iska a. Ovaj poslednji sadr i listu stvarni0 parametara> koji amenjuju odgovarajue )ormalne parametre de)nisane u deklaraciji procedure. 2e a se uspostavlja stavljanjem parametara u listama stvarni0 i )ormalni0 parametara na odgovarajuca mesta. Parametri o#e #e3uju me0ani am amene koji do voljava ponavljanje procesa u menjanje njegovi0 argumenata $na primer HinHaks se aktivira dva puta da #i pretra@io ni ) i jedanput da #i pretra@io ni +&. Postoje dve vrste parametaraF vrednosni parametri i promenljivi parametri. ". Gromenl'ive parametre1 Procedura HinHaks prika uje sluaj promenl'ivog parametra1 Odgovarajui stvarni parametar mora biti promenl'ivaX odgovarajuem )ormalnom parametru mora pret0oditi sim#ol var. Svaka operacija koja u se#e ukljuuje )ormalni parametar tada se o#avlja neposredno na stvarnom parametru. Apotre#ljavajte promenljive parametre da #iste predstavili rez%ltate procedure - kao sto je sluaj a Hin i Haks. jtavi8e> ako su X1... Xn stvarne promenljive koje odgovaraju )ormalnim promenljivim parametrima =1...=n> tada X1...Xn tre#a da #udu razliite promenljive. Sva preraunavanja adresa o#avljaju se u trenutku aktivacije procedure. Stoga> ako promenljiva jeste komponenta ni a> vrednost njegovog indeksnog i ra a i raunava se kada se aktivira procedura. A proceduri HinHaks i pret0odnog programa ne menja se nijedna vrednost u ni u 9> tj. 9 nije re ultat. S0odno tome> ni 9 mogao je #iti de)inisan kao vrednosni parametar> 8to ne #i uticalo na krajnji re ultat. 6a #i se s0vatilo a8to ovo nije ura3eno> korisno je pogledati implementaciju.

127

Predrag S. Stanimirovi

Osnove programiranja

)ktiva#i'a procedure dodeljuje novi memorijski prostor a svaki vrednosni parametar> koji je predstavljen lokalnom promenljivom. /renutna vrednost stvarnog parametra IkopiraI se u ovu lokacijuX i la ak i procedure jednostavno oslo#a3a ovaj prostor. O#ino je pogodnije koristiti vrednosni parametar> ukoliko se parametar ne upotre#ljava a preno8enje re ultata procedure. /ako pristup promenljivima mo e #iti e)ikasniji> a i a8tieni ste od ne0otine i mene podataka. ;e3utim> u sluaju gde je parametar strukturiranog tipa $na primer ni & morate #iti o#a rivi> jer je operacija kopiranja relativno skupa> a prostor potre#an a sme8tanje kopije mo@e #iti veliki. A ovom primeru> s o# irom da se svakoj komponenti ni a 9 pristupa samo jedanput> po@eljno je de)inisati parametar kao promenljivi parametar. ;o@emo promeniti veliinu ni a ako jednostavno ponovo de)ni8emo Haks=el. 6a #ismo uinili program primenljivim a ni sa realnim #rojevima> tre#a samo da i menimo de)inicije tipova> i promenljivi0. Primer. -apisati proceduru a sortiranje elemenata ni a. -apisati proceduru kojom se adati #roj umee u sortirani ni > tako da ni ostane sortiran. A glavnom programu testirati napisane procedure.
=rogram +metan>e tQ=e ve@tor = arraQH1..!0I o, reavar a7ve@tor i,>,n70..!1 x, =om7reaDegin 9 0;itavan>e ni<a i Dro>a @o>i se +me;e B Orite-n Orite&2 :o-i@o e-emenata + ni<+_ 2' read-n&n' Orite-n&2 0nesite e-emente ni<a 2' ,or i7= 1 to n do read&aHiI' Orite&2 0nesite Dro> @o>i se +me;e 2' read-n&x' Orite-n 9 1ortiran>e ni<a B ,or i7=1 to n#1 do ,or >7= i"1 to n do i, aH>IKaHiI tAen Degin =om7=aHiI aHiI7=aH>I aH>I7==om end Orite-n&2 1ortirani ni< >e 2' ,or i7=1 to n do Orite&aHiI7107(' 9 0metan>e + ni< B i7=1 OAi-e &iK=n' and &xLaHiI' do i7= i"1 i, i=n"1 tAen aHn"1I7=x 9Postav->an>e na @ra> ni<a B e-se 90metan>e + ni<+ B Degin ,or >7=n doOnto i do aH>"1I7=aH>I aHiI7=x end Orite-n Orite-n Orite-n&2 ]i< sa +metn+tim e-ementom >e7 2' ,or i7=1 to n"1 do Orite&aHiI7107(' end.

Primer. Odrediti poetnu po iciju i du@inu najveeg podni a datog ni a koji se sastoji od u astopni0 parni0 #rojeva.
=rogram +<asto=ni_=arni tQ=e =o<itivni =0..maxint ni<=arraQH1..100I o, =o<itivni var a7ni< i,n,@7 1..100 -,-max,@max70..100 Degin

128

Predrag S. Stanimirovi

Osnove programiranja

Orite-n&2 :o-i@o e-emenata_ 2' read-n&n' Orite-n&2 0neti e-emente 2' ,or i7=1 to n do read&aHiI' i7=1 -max7=0 @max7=0 OAi-e iK=n do Degin OAi-e &aHiI mod 2 = 1' and &iK=n' do i7= i"1 @7=i -7=0 OAi-e &aHiI mod 2 = 0' and &iK=n' do Degin i7= i"1 -7=-"1 end i, -maxK- tAen Degin -max7=- @max7=@ end end Orite-n&2 Ma@sima-ni =odni< =oCin>e od =o<i;i>e 2, @max' Orite-n&2 D+<ina ma@sima-nog =odni<a >e 2,-max' end.

Primer. % raunati #roj nula kojima se avr8ava #roj n^> 1TSnTS10000. +atim odrediti dve posledenje ci)re koje ostaju posle precrtavanja krajnji0 desni0 nula.
=rogram n+-e,a@ var i,>,n,Dn+-a7integer =7-ongint D7arraQH1..10001I o, integer Degin Orite&2n = _ 2' read-n&n' ,or i7=1 to n do DHiI7=i Dn+-a7=0 ,or i7= 1 to n do OAi-e &DHiI mod !' = 0 do Degin >7=1 OAi-e &DH>I mod 2' = 1 do >7=>"1 DH>I7=DH>I div 2 DHiI7=DHiI div ! Dn+-a7=Dn+-a"1 end Orite-n Orite-n&n,2V se <avrsava sa 2,Dn+-a,2 n+-a2' =7=1 ,or i7=1 to n do =7=&=EDHiI' mod 100 Orite-n&2Pos-edn>e dve ;i,re =os-e i<Da;ivan>a n+-a s+ 2' i, =K10 tAen Orite-n&202,=' e-se Orite-n&=' end.

Primer. Svaki od dva po itivna cela #roja adaje se #rojem svoji0 ci)ara i ni om svoji0 ci)ara. -apisati program a mno@enje adati0 #rojeva.
=rogram mno<en>e var a,D7arraQH1..20I o, 0..8 ;7arraQH1..$0I o, 0..8 m,n,i,>,=,T7integer Degin Orite&2D+<ina =rvog Dro>a_ 2' read-n&m' Orite-n&25i,re =rvog Dro>a_2' ,or i7=m doOnto 1 do read&aHiI' Orite&2D+<ina dr+gog Dro>a_ 2' read-n&n' Orite-n&25i,re dr+gog Dro>a_2'

129

Predrag S. Stanimirovi

Osnove programiranja

,or i7=n doOnto 1 do read&DHiI' Orite-n&2Proi<vod oviA Dro>eva >e 2' ,or i7=1 to m"n do ;HiI7=0 ,or i7= 1 to m do Degin =7=0 ,or >7=1 to n do Degin T7=;H>"i#1I"aHiIEDH>I"= ;Hi">#1I7= T mod 10 =7=T div 10 i, >=n tAen ;H>"iI7== end end i, ;Hm"nIKL0 tAen Orite&;Hm"nI' ,or i7=m"n#1 doOnto 1 do Orite&;HiI' end.

P)#&$)#
1. 4PA'.A/6 -i om parova $ !Vi W> "Vi W&> i = 1>2>...> n date su lokacije n o#jekata u novosagra3enom naselju. Svaki o#jekat ima pri emne prostorije predvi3ene a neki od pratei0 o#jekata $samoposluga> dom dravlja> ka)i i drugo&. -apisati program kojim se odre3uje indeks o#jekta i njegova lokacija koji je najpogodniji a otvaranje doma dravlja. -ajpogodnijim se smatra o#jekat iji je #ir rastojanja od ostali0 o#jekata najmanji.
=rogram Lo@a;i>a ;onst @=30 tQ=e ni<=arraQH1..@I o, reavar i,o=t,n7integer x,Q7ni< ,+n;tion rasto>an>e&x1,Q1,x2,Q27rea-'7reaDegin rasto>an>e7=sTrt&sTr&x2#x1'"sTr&Q2#Q1'' end ,+n;tion 1+ma/asto>an>a&@,n7integer x,Q7ni<'7reavar i7integer s7reaDegin s7=0 ,or i7=1 to n do i, iKL @ tAen s7=s"rasto>an>e&xH@I,QH@I,xHiI,QHiI' 1+ma/asto>an>a7=s end ,+n;tion OD>e@at&n7integer x,Q7ni<'7integer var i7integer s,Min/7reaDegin Min/7=1+ma/asto>an>a&1,n,x,Q' OD>e@at7=1 ,or i7=2 to n do Degin s7=1+ma/asto>an>a&i,n,x,Q' i, sKMin/ tAen Degin Min/7=s OD>e@at7=i end end end

130

Predrag S. Stanimirovi

Osnove programiranja

Degin read-n&n' ,or i7=1 to n do read-n&xHiI,QHiI' o=t7=OD>e@at&n,x,Q' Orite-n&2]a>=ogodni>i oD>e@at ima redni Dro> 2,o=t, 2 i ima @oordinate 2,xHo=tI7X7$,2 2,QHo=tI7X7$' end.

2. 4Pas)al6 -apisati proceduru kojom se uitavaju elementi realnog ni a. -apisati )unkciju koja odre3uje #roj promena naka u ni u elemenata ra liiti0 od nule. -apisati test program.
=rogram <adata@8 ;onst @=100 tQ=e o=seg=1..@ o=seg1=0..@ ni<=arraQHo=segI o, reavar n,i7o=seg Dr7o=seg1 x7ni< =ro;ed+re +;ita>&var n7o=seg var a7ni<' var i7o=seg Degin Orite&2Bro> e-emenata_ 2' read-n&n' Orite-n&2%-ementi_ 2' ,or i7=1 to n do read&aHiI' end ,+n;tion Dro>=romena<na@a&n7o=seg a7ni<'7o=seg1 var i7o=seg D7o=seg1 Degin D7=0 ,or i7=1 to n#1 do i, aHiIEaHi"1IK0 tAen D7=D"1 Dro>=romena<na@a7=D end Degin +;ita>&n,x' Dr7=Dro>=romena<na@a&n,x' end.

Orite-n&2Bro> =romena <na@a + ni<+ = 2, Dr'

3. Odrediti poetnu po iciju i du@inu najveeg podni a datog ni a koji se sastoji od u astopni0 parni0
#rojeva.
=rogram +<asto=ni_=arni tQ=e =o<itivni =0..maxint ni<=arraQH1..100I o, =o<itivni var a7ni< i,n,@7 1..100 -,-max,@max70..100 Degin Orite-n&2 :o-i@o e-emenata_ 2' Orite-n&2 0neti e-emente 2' i7=1 -max7=0 @max7=0 OAi-e iK=n do Degin OAi-e &aHiI mod 2 = 1' and @7=i -7=0 OAi-e &aHiI mod 2 = 0' and Degin i7= i"1 -7=-"1 end i, -maxK- tAen Degin

read-n&n' ,or i7=1 to n do read&aHiI'

&iK=n' do i7= i"1 &iK=n' do

131

Predrag S. Stanimirovi -max7=@max7=@

Osnove programiranja

end

end.

end Orite-n&2 Ma@sima-ni =odni< =oCin>e od =o<i;i>e 2, @max' Orite-n&2 D+<ina ma@sima-nog =odni<a >e 2,-max'

#. -apisati program koji trans)ormi8e ni celi0 #rojeva tako da na poetku #udu negativni a na kraju nenegativni elementi tog ni a.
=rogram sredi var i,n,=,@,=om7integer ni<7arraQH1..100I o, integer Degin Orite&2Bro> e-emenata =_ 2' read-n&n' Orite-n&2%-ementi_2' ,or i7=1 to n do read&ni<HiI' =7=1 @7=n OAi-e =K@ do Degin OAi-e &ni<H=IK0' and &=K@' do =7=="1 OAi-e &ni<H@IL=0' and &=K@' do @7=@#1 i, =K@ tAen Degin =om7=ni<H=I ni<H=I7=ni<H@I ni<H@I7==om end end ,or i7=1 to n do Orite&ni<HiI,2 2' end.

6.2. J$1 !1#&$ /#! +% # #/!"# 0 8


6eklaracija jednodimen ionalnog ni a se sastoji od imena tipa i a koga sledi identi)ikator $ime ni a& i na kraju celo#rojni i ra i me3u srednji0 agrada. 2rednost ovog i ra a mora da #ude po itivan ceo #roj i predstavlja veliinu ni a. %ndeksiranje elemenata ni a poinje od 0. Op8ta )orma i ra a kojom se deklari8e ni je sledeaF
tip ime!velicina%.

2eliina ni a adaje se konstantom ili konstantnim i ra om. -a primer> i ra om int DH100I deklari8e se ni sa 100 celo#rojni0 vrednosti. -i b se sastoji od 100 celo#rojni0 $indeksirani0& promenljivi0 sa imenima bV0W> ...> bV..W. 1omponentama ni a se pristupa navo3enjem imena ni a i celo#rojnog i ra a i me3u srednji0 agrada. Ovim i ra om se de)ini8e indeks @eljenog elementa ni a. Hko je indeks manji od 0 ili vei ili jednak od #roja elemenata u ni u> nee se pristupiti elementu ni a. -i ovi mogu da imaju memorijsku klasu a%to> e!tern> stati#> a ne mogu #iti memorijske klase register. A /ur#o C se ni ovi mogu inicijali ovati u nared#i deklaracije. Primer. Posle inicijali acije
,-oat xH)I=9#1.1,0.2,33.0,$.$,!.0!,0.0,).)B

do#ija se
xH0I=#1.1, xH1I=0.2, g xH(I=).).

*ista elemenata koji se koriste a inicijali aciju vektora mo@e #iti manja od #roja njegovi0 elemenata. Hko je ni memorijske klase static ili eQtern> njegovi preostali elementi postaju 0. A sluaju da je ni memorijske klase auto> a ove vrednosti e #iti neke vrednosti koje su aostale od ranije u delu memorije koja se koristi a sme8tanje elemenata ni a. Hko extern ili stati; ni nije inicijali ovan> tada kompajler automatski inicijali uje sve elemente na 0.

132

Predrag S. Stanimirovi

Osnove programiranja

Hko je ni deklarisan #e preci iranja du@ine> i pritom inicijali ovan> tada se du@ina ni a implictno odre3uje prema #roju inicijali atora. -a primer> i ra int aHI=93,$,!,(B int aH$I=93,$,!,(B proi vodi isto dejstvo kao i i ra

Primeri.
Primer. % raunati #roj pojavljivanja svakog velikog slova u unetom tekstu.
Jin;-+de Kstidio.AL Jin;-+de K;tQ=e.AL void main&' 9 int ;,i, s-ovaH2(I ,or&i=0 iK2( ""i' s-ovaHiI=0 OAi-e&&;=get;Aar&'' V=%OF' i,&is+==er&;'' ""s-ovaH;#2A2I ,or&i=0 iK2( ""i' 9 i,&iR(==0' =rint,&3Sn3' =rint,&3R!;7R$d3, 2A2"i, s-ovaHiI' B =rint,&3SnSn3' B

Primer. -apisati program kojim se i raunava n-ti stepen #roja 2> gde je nTS ,00> i tra@eni stepen nema vi8e od 200 ci)ara.
void main&' 9 int i,n,d=0,>,=, xH200I =rint,&3Sn 0nesi ste=en ##L 3' s;an,&3Rd3,Un' xH0I=1 ,or&i=0 iKn i""' 9 ==0 ,or&>=0 >K=d >""'9xH>I=xH>IE2"= ==xH>I610 i,&=V=0' 9 d"" xHdI== B B =rint,&3Rd. ste=en Dro>a 2 >e 3,n' ,or&i=d iL=0 i##'=rint,&3Rd3,xHiI' B

xH>I R=10

Primer. Dinarno tra@enje. Posmatra se sledei matematiki pro#lemF adat je ure3en realni ni aV0WTaV1WTpTaVn-1W i realan #roj bX ustanoviti da li se b nala i u ni u> i ako se nala i odrediti indeks p a koji va@i aVpWS#. -ajjednostavnije> ali i najnee)ikasnije je tako vano linearno pretra@ivanjeF redom se upore3uju elementi ni a a sa #rojem b> do prvog elementa ni a a a koji je aViWUSb. Hko je aViWSb> tada je p S i tra@eni indeks. Hko je aViWUb> tada se #roj b ne nala i u ni u a1 +a #r o pretra@ivanje se koristi algoritam #inarnog pretra@ivanja. Pretpostavimo da postoji pV0> n-1W takav da je aVpW S b. % a#eremo srednji element ni a a sa indeksom s S $0=n-1&G2. Hko je aVsWS#> tada je pSs tra@eni indeks> a pretra@ivanje se prekida. Hko je ispunjen uslov b T aVsW> tada se indeks p nala i u intervalu V0> s-1W> a inae se nala i u intervalu Vs=1>n1W. A o#a sluaja> prepolovljen je interval pretra@ivanja. -apisati )unkciju koja prema opisanom algoritmu odre3uje indeks onog elementa rastueg ni a a koji je jednak adatoj vrednosti b> a inae vraa re ultat -1.
Jin;-+deKstdio.AL void main&' 9 ,-oat Dr, aH100I int n,i,=

133

Predrag S. Stanimirovi int Dintra&,-oat aHI, int n, ,-oat D' =rint,&3SnBro> e-emenata_ 3' s;an,&3Rd3,Un' =rint,&3%-ementi ni<a 3' ,or&i=0 iKn i""'s;an,&3R,3, UaHiI' =rint,&3^edan rea-an Dro>_ 3' s;an,&3R,3,UDr' ==Dintra&a, n, Dr' =rint,&3Po<i;i>a Dro>a R, + ni<+ >e RdSn3,Dr,='

Osnove programiranja

int Dintra&,-oat aHI, int n, ,-oat D' 9 int -,d,s -=0 d=n#1 OAi-e&-K=d' 9 s=&-"d'62 i,&D==aHsI' ret+rn&s' e-se i,&DKaHsI'd=s#1 e-se -=s"1 B ret+rn&#1' B

Odgovarajua rekur ivna )unkcija je


Jin;-+deKstdio.AL main&' 9 ,-oat Dr, aH100I int n,i,= int Dintra1&,-oat aHI, int -, int d, ,-oat D' =rint,&3SnBro> e-emenata_ 3' s;an,&3Rd3,Un' =rint,&3%-ementi ni<a 3' ,or&i=0 iKn i""'s;an,&3R,3, UaHiI' =rint,&3^edan rea-an Dro>_ 3' s;an,&3R,3,UDr' ==Dintra1&a, 0, n#1, Dr' =rint,&3Po<i;i>a Dro>a R, + ni<+ >e RdSn3,Dr,=' B int Dintra1&,-oat aHI, int -, int d, ,-oat D' 9 int s i,&-Ld' ret+rn&#1' e-se 9 s=&-"d'62 i,&D==aHsI' ret+rn&s' e-se i,&DKaHsI'ret+rn Dintra1&a,-,s#1,D' e-se ret+rn Dintra1&a,s"1,d,D' B B

1. 4.6 -apisati )unkciju koja uitava #roj elemenata u ni u kao i elemente ni a. -apisati )unkciju koja od dva neopadajua ni a aV0..m-1W i bV0..n-1W )ormirati rastui ni #V0..k-1W u kome se elementi koji se ponavljaju u pola nim ni ovima pojavljuju samo jednom. -apisati test program.
Jin;-+deKstdio.AL int aH!0I, DH!0I, ;H!0I void ;ita>&int xHI, int En' 9 =rint,&3Bro> e-emenata = _ 3' s;an,&3Rd3,n' =rint,&3%-ementi_Sn3' ,or&int i=0 iKEn i""'s;an,&3Rd3,x"i' B void ,ormira>&int aHI, int DHI, int ;HI, int m, int n, int E@' 9 int i=0,>=0,-ast -ast = &&aH0IKDH0I'_aH0I7DH0I'#1 E@=0

134

Predrag S. Stanimirovi

Osnove programiranja

OAi-e&iKm WW >Kn' i,&i==m'9 ,or&int -=> -Kn -""';H&E@'""I=DH-I >=n B e-se i,&>==n'9 ,or&int -=i -Km -""';H&E@'""I=aH-I i=m e-se i,&aHiIKDH>I' 9 i,&aHiIV=-ast' 9;H&E@'""I=aHiI -ast=aHiI B i"" B e-se i,&DH>IKaHiI' 9 i,&DH>IV=-ast'9 ;H&E@'""I=DH>I -ast=DH>I B >"" B e-se 9 i,&aHiIV=-ast' 9;H&E@'""I=aHiI -ast=aHiI B i"" >"" B

void main&' 9 int i,m,n,@ ;ita>&a,Um' ;ita>&D,Un' ,ormira>&a,D,;,m,n,U@' ,or&i=0 iK@ i""'=rint,&3;HRdI = RdSn3,i,;HiI' B

Primer. Postupkom Kratostenovog sita ispisati sve proste #rojeve od 2 do n. Postupak se sastoji u sledeemF 5ormira se ni koji sadr@i prirodne #rojeve 2 do n. % ni a se i #acuju svi #rojevi koji su deljivi sa 2> !. Drojevi deljivi sa " su i #aeni #og deljivosti sa 2> i tako dalje. A ni u ostaju prosti #rojevi.
Jin;-+de Kstdio.AL void main&' 9 int aH1001I, n, s;an,&3Rd3,Un' ,or &i=2 iK=n ,or &i=2 iK=n i, &aHiI' 9 >=2Ei B ,or &i=2 iK=n B

i, > i""' aHiI=1 i""' OAi-e &>K=n' 9 aH>I=0 >"=i B

i""' i, &aHiI' =rint,&3RdSn3,i'

Primer. -apisati )unkciju a deljenje polja G na dva dela> pri emu u polje G1 ula e svi elementi polja G vei od adatog #roja k> a u polje G2> svi elementi polja G manji od k. Klementi polja G1 i G2 tre#a da #udu sortirani.
Jin;-+deKstdio.AL Jin;-+deKiostream.AL void main&void'9 int =H20I,=1H20I,=2H20I,n,i,>,<adati,Dr1,Dr2 ;o+tKK3Sn 0nesite dimen<i>+ ni<a73 ;inLLn ;o+tKK3Sn 0nesite e-emente ni<a7Sn3 ,or&i=0 iKn i""' ;inLL=HiI ;o+tKK3Sn 0nesite <adati e-ement73 ;inLL<adati Dr1=0 Dr2=0 ,or&i=0 iKn i""' 9 i,&=HiIL<adati' 9 =1HDr1I==HiI Dr1"" B e-se 9 =2HDr2I==HiI Dr2"" B B

135

Predrag S. Stanimirovi ,or&i=0 iKDr1#1 i""' 9 ,or&>=i"1 >K=Dr1#1 >""' 9 i,&=1HiIL=1H>I'9 <adati==1HiI B B

Osnove programiranja

=1HiI==1H>I

=1H>I=<adati

,or&i=0 iKDr2#1 i""' 9 ,or&>=i"1 >K=Dr2#1 >""' 9 i,&=2HiIL=2H>I'9 <adati==2HiI =2HiI==2H>I =2H>I=<adati B B ;o+tKK3Sn Po->e P1Sn3 ,or&i=0 iKDr1 i""' ;o+tKK3Sn P1H3KKiKK3I=3KK=1HiI ;o+tKK3SnSnSn Po->e P2Sn3 ,or&i=0 iKDr2 i""' ;o+tKK3Sn P2H3KKiKK3I=3KK=2HiI ;o+tKK3SnSn3 B

6.3. V$/+ #/&$<0 #/!"+ # (!# '$)+ 0 8


%me ni a je konstantni poka iva na poetak ni a> tj. adresa njegovog nultog elementa. %me ni a je samo po se#i jedna adresa> ili vrednost pointera $pointer je promenljiva koja u ima adrese a svoje vrednosti&. 1ada je ni deklarisan> kompajler alocira #a nu adresu i dovoljan memorijski prostor a sme8tanje svi0 elemenata ni a. 1ompajler je ika C sam prevodi o nake ni a u poka ivae> pa se kori8enjem poka ivaa poveava e)ikasnost u radu sa ni ovima. Primer. -eka je data deklaracija
Odefine " 9:: long a!"%, Gp2

Pretpostavimo da je prva adresa a sme8tanje ni a a jednaka !00 $ostale su !0">!04>p>'.'&. -ared#e


p 3 a2 p3Ha!:%2

su ekvivalentne. A o#a sluaja promenljiva p u ima a svoju vrednost adresu nultog elementa ni a a. Preci nije> promenljivoj p se dodeljuje vrednost !00. /ako3e> nared#e
p3aP92 p3Ha!9%2

su ekvivalentne i dodeljuju vrednost !0" promenljivoj p. Hnalogno> nared#e p S a=i i p S aaViW su ekvivalentne> a svaki element aViW ni a a. Hko su elementima ni a a pridru@ene vrednosti> one se mogu sumirati koristei pointer p> na sledei nainF
s+m=0 ,or&==a =KUaH]I s+m "= E=, ""='

%sti e)ekat se mo@e postii sledeim postupkomF


s+m=0 ,or&i=0 iK] ""i' s+m "= E&a"i'

-apomenimo da je i ra R$a=i& ekvivalentan sa aViW. /ako3e> mo@e se pisati p S a$R$a=i&& umesto i ra a p S a=i> odnosno p S aaViW. Primer. Eo8 jedan nain sumiranja ni ova.
==a s+m=0 ,or&i=0 iK] ""i' s+m "= =HiI

;e3utim> postoji ra lika i me3u pointera i ni ova. 1ako je ime ni a a konstantni pointer> a ne promenljiva> ne mogu se koristiti i ra i a S p==a a=S2.

136

Predrag S. Stanimirovi

Osnove programiranja

/o nai da se adresa ni a ne mo@e menjati. Primer. -apisati program koji trans)ormi8e ni celi0 #rojeva tako da na poetku #udu negativni a na kraju nenegativni elementi tog ni a.
Jin;-+deKstdio.AL void main&void' 9 int ni<H100I, =,i,@,n =rint,&3SnBro> e-emenata ##L 3' s;an,&3Rd3,Un' ,or&i=0 iKn i""' 9 =rint,&3ni<HRdI=##L 3,i"1' s;an,&3Rd3,ni<"i' B ==0 @=n#1 OAi-e&=K@' 9 OAi-e&ni<H=IK0 UU =K@'="" OAi-e&ni<H@IL=0 UU =K@'@## i,&=K@' 9 int =om=ni<H=I ni<H=I=ni<H@I ni<H@I==om B B ,or&i=0 iKn i""'=rint,&3ni<HRdI = Rd 3,i,ni<HiI' =rint,&3Sn3' B

6ato je jedno re8enje koje koristi ime ni a kao poka iva.


Jin;-+deKstdio.AL void main&void' 9 int ni<H100I, E=,E@,i,n =rint,&3SnBro> e-emenata ##L 3' s;an,&3Rd3,Un' ,or&i=0 iKn i""'9=rint,&3ni<HRdI= ##L 3,i"1' s;an,&3Rd3,ni<"i' ==ni< @=ni<"n#1 OAi-e&=K@' 9 OAi-e&E=K0 UU =K@'="" OAi-e&E@L=0 UU =K@'@## i,&=K@' 9 int =om =om=E= E==E@ E@==om B B ,or&i=0 iKn i""'=rint,&3ni<HRdI= Rd 3,i,E&ni<"i'' =rint,&3Sn3' B

-eka je> a ovaj primer adat #roj elemenata nS"> i neka su elementi -1>2>-!>". -eka je vrednost poka ivaa p=aaV0W jednaka 0eksadekadnom #roju 0x0012,d,0. Hko je program napisan u programskom je iku C==> tada svaka vrednost tipa int au ima po " #ajta> pa je vrednost poka ivaa k=aaV!W jednaka 0eksadekadnom #roju 0x0012,d,;. Hdrese lokacija koje su au ete adatim elementima ni a predstavljene su u sledeoj ta#eliF
Klement ni a aV0W aV1W aV2W aV!W Hdresa prvog #ajta 0x0012,d,0= aaV0W 0x0012,d,$= aaV1W 0x0012,d,X= aaV2W 0x0012,d,;= aaV!W Hdresa drugog #ajta 0x0012,d,1 0x0012,d,! 0x0012,d,8 0x0012,d,d Hdresa treeg #ajta 0x0012,d,2 0x0012,d,( 0x0012,d,a 0x0012,d,e Hdresa etvrtog #ajta 0x0012,d,3 0x0012,d,) 0x0012,d,D 0x0012,d,,

Primer. Sortiranje ni a pointerskom te0nikom. 1ao algoritam i a#rano je sortirane i #orom u astopni0 minimuma.
Jin;-+deKstdio.AL void +=is&int Ea, int En' 9 int i =rint,&3Bro> e-emenata_ 3' s;an,&3Rd3,n' =rint,&3%-ementi_ 3' ,or&i=0 iKEn i""' s;an,&3Rd3,a"i' B void is=is&int Ea, int n' 9 int i ,or&i=0 iKn i""'=rint,&3Rd 3,E&a"i'' 137

Predrag S. Stanimirovi B void +re?en>e&int Ea, int n' 9 int i,>,=om ,or&i=0 iKn#1 i""' ,or&>=i"1 >Kn >""' i,&E&a"i'LE&a">'' 9=om=E&a"i' E&a"i'=E&a">' B

Osnove programiranja

E&a">'==om

void main&' 9 void +=is&int E, intE' void is=is&int E, int' int xH100I,@ +=is&x, U@' +re?en>e&x,@' is=is&x,@' B

6.3.1. P!# '$)s,+ +)#'&$'#,+


A je iku C do voljene su aritmetike operacije nad poka ivaima. 6o voljeno jeF - dodeliti poka ivau adresu promenljive ili nuluX - uveati ili umanjiti vrednost poka ivaaX - dodati vrednosti poka ivaa neki ceo #rojX - odu eti od vrednosti poka ivaa neki ceo #rojX - porediti dva poka ivaa pomou operacija SS> ^S> i tako daljeX - odu eti od jednog poka ivaa drugi> ako uka uju na o#jekte istog tipa. Pointerska aritmetika predstavlja veliku prednost je ika C u odnosu na druge je ike visokog nivoa. A sledeoj ta#eli su uvedene pretpostavkeF aF vektor sa elementima tipa > nF celo#rojni i ra > vF ra tipa > pa1> pa2F uka atelj na tip > kojima se uka uje na elemente vektora a. A njoj su prika ana neka pravila pointerske $adresne& aritmetikeF <znaka a 7aV0W 7aVnW Rpa1 Rpa1 S v ==pa1 --pa1 R==pa1 Rpa1== pa1n R$pa1=n& S v pa1Upa2 R$a=n& Primer.
void main&'

=na!enje uka atelj na prvi element vektora a uka atelj na prvi element vektora a uka atelj na n=1 element vektora a element vektora na koji pa1 uka uje dodeljuje vrednost v elementu na koji pa1 uka uje postavlja pa1 na sledei element vektora a postavlja pa1 na pret0odni element vektora a inkrementira pa1> a atim pristupa elementu na koji pa1 uka uje pristupa elementu vektora a na koji pa1 uka uje> atim inkrementira pa1 uka uje na n-ti naredni $pret0odni& element poev od elementa na koji pa1 uka uje vrednost v dodejluje n-tom narednom elementu u odnosu na element na koji pa1 uka uje ispituje vrednosti adresa u pa1 i pa2 pomou relacioni0 operatora n-ti element vektora a

;ip rezultata uka atelj na uka atelj na uka atelj na uka atelj na uka atelj na

uka atelj na

int

138

Predrag S. Stanimirovi 9 do+D-e aH2I, E=, ET ==UaH0I T=="1 =rint,&3RdSn3,T#=' =rint,&3RdSn3,&int'T#&int'=' B

Osnove programiranja

6E 1 E6 6E X E6

Primer. 6ate su deklaracija


int xH$I, E=ti

i dodela
=ti=x

Hko je ni ! sme8ten poev od adrese ,'00'$S7!V0W&> odrediti lokacije i elemente ni a ! na koji uka uju pti> pti=1> pti=2 i pti=!. 3eenje. 6odavanje jedinice poka ivau pti automatski uveava adresu na koju on uka uje a 2> jer se radi o poka ivau na tip int. +nai> pti> pti=1> pti=2 i pti=! uka uju redom na adrese ,'00'> ,'004> ,'010> ,'012 i na elemente !V0W> !V1W> !V2W> !V!W ni a !. % pret0odnog primera akljuujemo
G)xP;*3x!;%, xP;3Hx!;%.

% ra R!=2 jednak je i ra u $R!&=2 i predstavlja uveanje vrednosti nultog elementa ni a a 2.

6.4. V#2$1#&$ /#! +% + (!%.+


1od re8avanja mnogi0 pro#lema postoji potre#a a radom sa vi8edimen ionalnim strukturama podataka. A programskim je icima se a rad sa ovakvim strukturama podataka mogu de)inisati vi8edimen ionalna polja> kao jednorodne strukture podataka u okviru koji0 se pojedinanim elementima pristupa preko dva ili vi8e indeksa. Pose#no su naajne dvodimen ionalne strukture> koje odgovaraju pojmu matrica i omoguavaju re8avanje veoma 8iroke klase pro#lema u kojima se koriste matrine repre entacije podataka.

6.4.1. V#2$1#&$ /#! +% # #/!"# 0 P+s6+%70


Op8ti o#lik a de)inisanje tipova koji odgovaraju vi8edimen ionalnim ni ovima u Pascal-u jeF
type "9 3 array!$;% of $@2 " 3 array!$9% of "92

gde suF l> 2 - tip indeksa> ! - tip komponenti. Hko je ! prostog tipa de)ini8e se dvodimen ionalni ni > a ako je ! jednodimen ionalni ni tada je ; trodimen ionalni ni . Stepen umetanja jednog ni a u drugi nije ogranien. PHSCH* do voljava jo8 jednu )ormu opisa vi8edimen ionalni0 ni ova> navo3enjem spiska tipova indeksa i medu kvadratni0 agrada. +a odvajanje tipova indeksa koriste se apeteF
type ";3array!$9,$;% of $@2

Primer. (a motriemo neke de)inicije dvodimen ionalni0 ni ova.


type MA./I5A = arrayH1..10,1..10I of integer P 7 MA./I5A

A ovom sluaju de)inisan je strukturni tip podataka H) 32,) i matrica G kao struktura tipa H) 32,). Klementima ovako de)inisane matrice pristupa se sa GV2> NW. Strukturni tip H) 32,) mo@e da se de)ini8e i kao vektor vektora> 8to ilustruju sledea dva primera. A prvom primeru se koristi eksplicitna de)inicija tipa =.M :3> a u drugom anonimna de)inicija strukturno istog tipa. A o#a ova sluaja elementima matrice G pristupa se preko GV2WVNW> 8to kod re8avanja neki0 pro#lema mo@e da #ude pogodno> jer omoguava pristupanje svim elementima jedne vrste. A op8tem sluaju> GV2W predstavlja vrstu 2 matrice G.

139

Predrag S. Stanimirovi type G%:.O/ = arrayH1..10I of integer type MA./I5A = arrayH1..10I of G%:.O/ var P 7 MA./I5A

Osnove programiranja

type MA./I5A * arrayH1..10I of array H1..10I of integer var P 7 MA./I5A

6e)inicija matrice u programu mo@e da #ude data i kom#inacijom eksplicitni0 i anonimni0 tipova podataka. Sledei primer ilustruje jednu od mogunosti> gde je najpre eksplicitno de)inisan strukturni tip =.M :3> a atim matrica G de)inisana preko anonimne de)inicije tipa kao vektor vektora.
type G%:.O/ = arrayH1..10I of integer var P 7 arrayH1..10I of G%:.O/

Sledea dva sluaja odnose se na potpuno anonimne de)inicije tipa. A prvom je matrica P de)inisana opet kao vektor vektora> a u drugom direktno kao dvodimen ionalna struktura.
P 7 arrayH1..10I of arrayH1..10I of integer P 7 arrayH1..10, 1..10I of integer

2a@no je napraviti ra liku i me3u prve i adnje de)inicije na jednoj strani> kada se matrica de)ini8e direktno kao dvodimen ionalna struktura i svi0 ostali0 de)inicija na drugoj strani> kada se de)ini8e kao vektor vektora. A prvom sluaju elementima matrice G pristupa se preko GV2>NW> a u drugom sluaju preko GV2WVNW> kada postoji mogunost da se pristupi svakoj vrsti matrice kao pose#nom vektoruF Primeri u Pas)alDu.

Primer. Proi vod dve matrice.


=rogram =roi<vodmatri;a ;onst max = 20 tQ=e matri;a = arraQH1..maxIo, arraQH1..maxI o, reavar a, D, ;7 matri;a n, m, =7 integer =ro;ed+re +;itavan>e&var x7matri;a var i,>7integer n, m7integer'

Degin ,or i 7= 1 to n do ,or > 7= 1 to m do read&xHi,>I' end =ro;ed+re mno<en>e&a,D7matri;a m,@,-7integer var ;7matri;a' var i,>,r7integer Degin ,or i 7= 1 to m do ,or > 7= 1 to - do Degin ;Hi,>I 7= 0 ,or r7=1 to @ do ;Hi,>I7=;Hi,>I"aHi,rIEDHr,>I end end =ro;ed+re is=is&x7matri;a m, n7integer' var i,>7integer Degin ,or i 7= 1 to m do Degin ,or > 7= 1 to n do Orite&2 2, xHiIH>I' Orite-n end end

140

Predrag S. Stanimirovi

Osnove programiranja

Degin 9=rogramB &E +;itavan>e dimen<i>a matri;a E' Orite&2n = _ 2' read-n&n' Orite&2m = _ 2' read-n&m' Orite&2= = _ 2' read-n&=' &E +;itavan>e matri;a E' Orite-n&24ada>te matri;+ a2' +;itavan>e&a, n, m' Orite-n&24ada>te matri;+ D2' +;itavan>e&D, m, =' &E i<ra;+navan>e =roi<voda +;itaniA matri;a E' mno<en>e&a,D, n, m, =, ;' Orite-n&2 Proi<vod +netiA matri;a >e matri;a 7 2' Orite-n is=is&;, n, =' end.

Primer. -apisati program kojim se ra menjuju vrsta koja sadr@i element najvee vrednosti i vrsta koja sadr@i element najmanje vrednosti.
=rogram ra<menavrsta tQ=e o=seg=1..10 ni< = arraQHo=segI o, integer matri;a=arraQHo=segI o, ni< var m,n,-,s7o=seg a7matri;a ;7ni< =ro;ed+re ;ita>&m,n7o=seg var x7matri;a' var i,>7o=seg Degin ,or i7=1 to m do Degin ,or >7=1 to n do read&xHiIH>I' read-n end end =ro;ed+re =isi&m,n7o=seg x7matri;a' var i,>7o=seg Degin ,or i7=1 to m do Degin ,or >7=1 to n do Orite&xHiIH>I,2 2' Orite-n end end =ro;ed+re ra<menivrste&var a,D7ni<' var =7ni< Degin =7=a a7=D D7== end ,+n;tion indminmax&m,n,=7integer a7matri;a'7integer var i,>,@7integer minmax7reaDegin @7=1 minmax7=aH1IH1I ,or i7=1 to m do ,or >7=1 to n do i, =EaHiIH>IK=Eminmax tAen Degin minmax7=aHiIH>I @7=i end indminmax7=@ end Degin

141

Predrag S. Stanimirovi Orite-n read-n&m,n' ;ita>&m,n,a' -7=indminmax&m,n,1,a' s7=indminmax&m,n,#1,a' i, -KLs tAen ra<menivrste&aH-I,aHsI' =isi&m,n,a' end.

Osnove programiranja

Primer. -apisati program koji )ormira magini kvadrat reda n $n je neparan #roj&. ;agini kvadrat se sastoji od prirodni0 #rojeva raspore3eni0 u ta#elu koja ima isti #roj vrsta i kolona. Droj vrsta $odnosno kolona& predstavlja red kvadrata. Drojevi su raspore3eni tako da je nji0ov #ir u svakoj vrsti> koloni i svakoj dijagonali jednak. -a primer> magini kvadrat reda ! i gleda ovakoF ' 1 4 7 , ! 2 . ".
=rogram magi; +ses ;rt tQ=e mat=arraQH1..38,1..38I o, integer var mag 7 mat i,>,@,n7integer Degin Orite-n&2 0nesite dimen<i>e 2' read-n&n' ,or i7=1 to n do ,or >7=1 to n do magHi,>I7=0 i7=1 >7= &n"1' div 2 @7=1 OAi-e @K= nEn do Degin magHi,>I7=@ @7=@"1 i, &i=1' and &>=1' tAen i7=i"1 e-se i, i=1 tAen Degin i7=n >7=>#1 end e-se i, >=1 tAen Degin >7=n i7= i#1 end e-se i, magHi#1,>#1IKL0 tAen i7=i"1 e-se Degin i7=i#1 >7=>#1 end Orite-n ;-rs;r ,or i7=1 to n do Degin ,or >7= 1 to n do Orite&magHi,>I7$' end end.

end

Orite-n

Primer. 6ata je matrica ) dimen ija nn. -apisati program kojim se )ormira ni dV1W> dV2W> p> dVnW> u kome je dV1W suma elemenata na glavnoj dijagonali matrice> dV2W suma elemenata na prvoj dijagonalnoj paraleli donjeg trougla matrice> dV!W suma elemenata na drugoj dijagonalnoj paraleli> itd.
=rogram =ara-e-e tQ=e o=seg=1..10 ni<=arraQHo=segI o, reamatri;a=arraQHo=seg,o=segI o, reavar i,n7o=seg a7matri;a d7ni< =ro;ed+re +;ita>&n7o=seg var i,>7o=seg Degin ,or i7=1 to n do Degin var x7matri;a'

142

Predrag S. Stanimirovi ,or >7=1 to n do read&aHi,>I' read-n

Osnove programiranja

end end

=ro;ed+re =ara-&n7o=seg x7matri;a var d7ni<' var i,>7o=seg Degin ,or i7=1 to n do Degin dHiI7=0 ,or >7= i to n do dHiI7=dHiI"aH>,>#i"1I end end Degin Orite&2 Dimen<i>e_ 2' read-n&n' +;ita>&n,a' Orite-n =ara-&n,a,d' ,or i7=1 to n do Orite-n&2 s+ma e-emenata na 2,i#1,2. di>agona-no> =ara-e-i >e2, dHiI707(' end.

6.4.2. V#2$1#&$ /#! +% # #/!"# 0 8


Eednim parom agrada de)ini8u se jednodimen ionalni ni ovi. Svaki par agrada de)ini8e jednu dimen iju ni a. -a primer> sledee deklaracije su korektneF
int a!9::%2 int b!@%!<%2 int c!>%!F%!;%2

A je iku C proi voljni k-dimen ionalni ni poseduje veliinu svake od svoji0 k dimen ija. Primer. +adavanje elemenata matrice na mestu njene deklaracije.
Jin;-+de Kstdio.AL main&' 9 int i,>,aH2I=91,2B, DH2IH3I=99$!,(),XXB,9(),))),!$BB, s=0 ,or&i=0 iK2 ""i' s"=aHiI =rint,&3Sn1+ma e-emenata ni<a >e7RdSn3,s' ,or&i=0 iK2 i""' ,or&>=0 >K3 >""' =rint,&3DHRdRdI=RdSn3,i,>,DHiIH>I' B void main&' 9int i, >, @ tQ=ede, do+D-e matH3IH3I stati; mat m1=991.0,2.0,3.0B,9$.0,!.0,(.0B,9).0,X.0,8.0BB, m2=998.0,X.0,).0B,9(.0,!.0,$.0B,93.0,2.0,1.0BB mat m3 ,or&i=0 iK3 ""i' ,or&>=0 >K3 "">' ,or&m3HiIH>I=0, @=0 @K3 ""@' m3HiIH>I"=m1HiIH@IEm2H@IH>I =rint,&3SnProi<vod matri;aSn3' ,or &i=0 iK3 ""i' ,or &>=0 >K3 "">' =rint,&3R1!.2,R;3, m3HiIH>I, &>==2' _ 2Sn2 7 2 2' B

Primer. Program a mno@enje matrica koji koristi korisniki tip mat a de)iniciju matrica reda !!.

Primer. 6e)inisan je tip Hatri#a u je iku C==. -apisane su )unkcije a ispis i upis elemenata matrice> a transponovanje matrice> a sa#iranje dve matrice> kao i )unkcija a ciklino pomeranje vrsta u matrici.

143

Predrag S. Stanimirovi Jin;-+deKstdio.AL tQ=ede, ,-oat matri;aH10IH20I void main&' 9 int m,n matri;a a,D,; void =isi&int, int, matri;a' void ;ita>&int U, int U, matri;a' void saDeri&int, int, matri;a, matri;a,matri;a' void rotira>&int, int, matri;a' void trans=on+>&int, int, matri;a' ;ita>&m,n,a' ;ita>&m,n,D' saDeri&m,n,a,D,;' =isi&m,n,;' rotira>&m,n,;' =isi&m,n,;' trans=on+>&m,n,;' =isi&n,m,;' B void ;ita>&int U@, int U-, matri;a x' 9 int i,> s;an,&3RdRd3,U@,U-' ,or&i=0 iK@ i""' ,or&>=0 >K- >""' s;an,&3R,3,xHiI">' B void =isi&int @, int -, matri;a x' 9 int i,> ,or&i=0 iK@ i""' 9 ,or&>=0 >K- >""' =rint,&3R.2, 3,xHiIH>I' =rint,&3Sn3' B =rint,&3Sn3' B

Osnove programiranja

void saDeri&int @, int -, matri;a x, matri;a Q, matri;a <' 9 int i,> ,or &i=0 iK@ i""' ,or &>=0 >K- >""' <HiIH>I=xHiIH>I"QHiIH>I B void +<mi&int n, ,-oat Ex, ,-oat EQ' 9 int > ,or&>=0 >Kn >""'xH>I=QH>I B void rotira>&int m, int n, matri;a a' 9 int i ,-oat =H20I +<mi&n,=,aHm#1I' ,or&i=n#2 iL=0 i##' +<mi&n,aHi"1I,aHiI' +<mi&n,aH0I,=' B void trans=on+>&int m, int n, matri;a a' 9 int i,> ,or&i=0 iKm i""' ,or&>=i"1 >Kn >""' 9 ,-oat ==aHiIH>I aHiIH>I=aH>IHiI 144

aH>IHiI==

Predrag S. Stanimirovi B

Osnove programiranja

Primer. -apisati potprogram koji pronala i minimalni element ni a i njegov indeks. A glavnom programu uitati matricu mn i u pomo )ormiranog potprograma nai minimalni element u matrici i njegove indekse.
Jin;-+de Kstdio.AL void min+ni<+&int aHI, int n, int Emn, int E@' 9 int i E@=0 Emn=aH0I ,or&i=1 iKn i""'i,&aHiIKEmn' 9 E@=i Emn=aHiI B

void main&' 9 int m,n,i,>, min, ind int aH10IH10I, DH10I, =H10I =rint,&3Dimen<i>e matri;e_7 3' s;an,&3RdRd3, Um,Un' =rint,&3Sn%-ementi matri;e_7 3' ,or&i=0 iKm i""' ,or&>=0 >Kn >""' s;an,&3Rd3, UaHiIH>I' ,or&i=0 iKm i""' min+ni<+&aHiI, n, UDHiI, U=HiI' min+ni<+&D,m, Umin, Uind' i=ind >==HindI =rint,&3Minima-ni >e na =o<i;i>i HRd,RdI i >edna@ >e RdSn3,i,>,min' B

Primer. 1onstruisati magini kvadrat dimen ija nn> a n neparno.


Jin;-+deKstdio.AL void main&' 9 int i,>,@,n, magH28IH28I =rint,&3Dimen<i>e @vadrata_ 3' s;an,&3Rd3, Un' ,or&i=1 iK=n i""' ,or&>=1 >K=n >""' magHiIH>I=0 i=1 >=&n"1'62 @=1 OAi-e&@K=nEn' 9 magHiIH>I=@"" i,&i==1 UU >==1' i"" e-se i,&i==1' 9 i=n >## B e-se i,&>==1' 9 >=n i## B e-se i,&magHi#1IH>#1IV=0' i"" e-se 9 i## >## B B ,or&i=1 iK=n i""' 9 ,or&>=1 >K=n >""' =rint,&3R$d3,magHiIH>I' B

=rint,&3Sn3'

Primer. -apisati program koji naje)ikasnijim postupkom i raunava n-ti stepen matrice ). /akav stepen se mo@e i raunati rekur ivno sa najmanjim #rojem matrini0 mno@enja na sledei nainF )n S )> nS1 $)k&2> nS2k )$)k&2> nS2k=1

Jin;-+deKstdio.AL void mno<i&int n, int aH10IH10I, int DH10IH10I, int ;H10IH10I' 9 int i,>,@ int s ,or&i=0 iKn i""'

145

Predrag S. Stanimirovi ,or&>=0 >Kn >""' 9 s=0 ,or&@=0 @Kn @""' s"=aHiIH@IEDH@IH>I ;HiIH>I=s B

Osnove programiranja

void @o=i&int n, int aH10IH10I, int DH10IH10I' 9 int i,> ,or&i=0 iKn i""' ,or&>=0 >Kn >""' DHiIH>I=aHiIH>I B void ;ita>&int n, int aH10IH10I' 9 int i,> =rint,&30nesi RdERd e-emenata matri;eSn3, n,n' ,or&i=0 iKn i""' ,or&>=0 >Kn >""' s;an,&3Rd3,UaHiIH>I' B void =isi&int n, int aH10IH10I' 9 int i,> ,or&i=0 iKn i""' 9 ,or&>=0 >Kn >""' =rint,&3Rd 3,aHiIH>I' =rint,&3Sn3' B B void ste=en&int m, int n, int aH10IH10I, int DH10IH10I' 9 int ;H10IH10I, =H10IH10I i,&m==1' @o=i&n,a,D' e-se 9 ste=en&m62,n,a,;' mno<i&n,;,;,=' i,&mR2==1'mno<i&n,=,a,D' e-se @o=i&n,=,D' B B void main&' 9 int n,m int aH10IH10I, DH10IH10I =rint,&3/ed @vadratne matri;e = 3' s;an,&3Rd3, Un' ;ita>&n,a' =rint,&31te=en = 3' s;an,&3Rd3, Um' ste=en&m,n,a,D' =isi&n,D' B

Primer. Svaki element matrice koji predstavlja maksimum svoje vrste i minimum svoje kolone na iva se sedlasta taka. Pronai sve sedlatse take u adatoj matrici.
Jde,ine MA** 100 Jde,ine MA*P 100 Jin;-+deKstdio.AL Jin;-+deK;onio.AL Jin;-+deK-imits.AL Jin;-+deKstd-iD.AL int aHMA**IHMA*PI, miniHMA**I, maxiHMA*PI,m,n void main&' 9 int i,> ;-rs;r&' =rint,&3Dimen<i>e matri;e_ 3'

s;an,&3RdRd3,Um,Un'

146

Predrag S. Stanimirovi =rint,&3%-ementi_Sn3' ,or&i=0 iKm i""' ,or&>=0 >Kn >""' s;an,&3Rd3, UaHiIH>I' ,or&i=0 iKm i""'maxiHiI=maxim+m&i' ,or&>=0 >Kn >""'miniH>I=minim+m&>' ,or&i=0 iKm i""' ,or&>=0 >Kn >""' i,&maxiHiI==aHiIH>I UU miniH>I==aHiIH>I' =rint,&3aHRdIHRdI=Rd 3,i,>,aHiIH>I'

Osnove programiranja

int minim+m&int @o-' 9 int i,re<=I]._MA* ,or&i=0 iKm i""' re<=min&re<,aHiIH@o-I' ret+rn&re<' B int maxim+m&int vrs' 9 int >,re<=I]._MI] ,or&>=0 >Kn >""' re<=max&re<,aHvrsIH>I' ret+rn&re<' B

Primer. 6ata je matrica )mn celi0 #rojeva. Klement aVi>'W je vr0> ako je vei od svoji0 susedni0 elemenata koji su i nad> ispod> sa leve i sa desne strane. 2isina vr0a je ra lika i me3u elementa i njegovog najvi8eg suseda. -apisati program koji e )ormirati ni vr0ova sortiran u nerastui redosled po visini.
Jin;-+deKstdio.AL int vrA&int i, int >, int m, int n, int aH10IH10I' 9 i,&i==0 UU >==0' ret+rn&aHiIH>ILaHiIH>"1I UU aHiIH>ILaHi"1IH>I' e-se i,&i==m#1 UU >==n#1' ret+rn&aHiIH>ILaHi#1IH>I UU aHiIH>ILaHiIH>#1I' e-se i,&i==0 UU >==n#1' ret+rn&aHiIH>ILaHiIH>#1I UU aHiIH>ILaHi"1IH>I' e-se i,&i==m#1 UU >==0' ret+rn&aHiIH>ILaHi#1IH>I UU aHiIH>ILaHiIH>"1I' e-se i,&i==0' ret+rn&aHiIH>ILaHiIH>#1I UU aHiIH>ILaHi"1IH>I UU aHiIH>ILaHiIH>"1I' e-se i,&>==0' ret+rn&aHiIH>ILaHi#1IH>I UU aHiIH>ILaHiIH>"1IUU aHiIH>ILaHi"1IH>I' e-se i,&i==m#1' ret+rn&aHiIH>ILaHi#1IH>I UU aHiIH>ILaHiIH>#1I UU aHiIH>ILaHiIH>"1I' e-se i,&>==n#1' ret+rn&aHiIH>ILaHi#1IH>I UU aHiIH>ILaHiIH>#1I UU aHiIH>ILaHi"1IH>I' e-se ret+rn&aHiIH>ILaHi#1IH>I UU aHiIH>ILaHiIH>#1I UU aHiIH>ILaHi"1IH>I UU aHiIH>ILaHiIH>"1I' B int min2&int x, int Q' 9i,&xKQ' ret+rn&x' e-se ret+rn&Q' int min3&int x, int Q, int <' 9 int min min=x i,&QKmin' min=Q ret+rn&min' B B

i,&<Kmin' min=<

147

Predrag S. Stanimirovi

Osnove programiranja

int min$&int x, int Q, int <, int O' 9 int min min=x i,&QKmin' min=Q i,&<Kmin' min=< i,&OKmin'min=O ret+rn&min' B int visina&int i, int >, int m, int n, int aH10IH10I' 9 int min2&int,int' int min3&int,int,int' int min$&int,int,int,int' i,&i==0 UU >==0' ret+rn&min2&aHiIH>I#aHiIH>"1I,aHiIH>I#aHi"1IH>I'' e-se i,&i==m#1 UU >==n#1' ret+rn&min2&aHiIH>I#aHi#1IH>I,aHiIH>I#aHiIH>#1I'' e-se i,&i==0 UU >==n#1' ret+rn&min2&aHiIH>I#aHiIH>#1I,aHiIH>I#aHi"1IH>I'' e-se i,&i==m#1 UU >==0' ret+rn&min2&aHiIH>I#aHi#1IH>I,aHiIH>I#aHiIH>"1I'' e-se i,&i==0' ret+rn&min3&aHiIH>I#aHiIH>#1I,aHiIH>I#aHi"1IH>I, aHiIH>I#aHiIH>"1I'' e-se i,&>==0' ret+rn&min3&aHiIH>I#aHi#1IH>I,aHiIH>I#aHiIH>"1I, aHiIH>I#aHi"1IH>I'' e-se i,&i==m#1' ret+rn&min3&aHiIH>I#aHi#1IH>I,aHiIH>I#aHiIH>#1I, aHiIH>I#aHiIH>"1I'' e-se i,&>==n#1' ret+rn&min3&aHiIH>I#aHi#1IH>I,aHiIH>I#aHiIH>#1I, aHiIH>I#aHi"1IH>I'' e-se ret+rn&min$&aHiIH>I#aHi#1IH>I,aHiIH>I#aHiIH>#1I, aHiIH>I#aHi"1IH>I,aHiIH>I#aHiIH>"1I'' B void main&' 9 int vrA&int i, int >, int m, int n, int aH10IH10I' int visina&int i, int >, int m, int n, int aH10IH10I' int i,>,aH10IH10I, vrAoviH2!I,visineH2!I, =om,@=0,m,n s;an,&3RdRd3, Um,Un' ,or&i=0 iKm i""' ,or&>=0 >Kn >""' s;an,&3Rd3,UaHiIH>I' ,or&i=0 iKm i""' ,or&>=0 >Kn >""' i,&vrA&i,>,m,n,a'' 9 vrAoviH@I=aHiIH>I visineH@I=visina&i,>,m,n,a' @"" B ,or&i=0 iK@#1 i""' ,or&>=i"1 >K@ >""' i,&visineHiIKvisineH>I' 9 =om=visineHiI visineHiI=visineH>I visineH>I==om =om=vrAoviHiI vrAoviHiI=vrAoviH>I vrAoviH>I==om B =rint,&3Sn]i< vrAova i visina7Sn3' ,or&i=0 iK@ i""'=rint,&3GrA7 Rd visina7 RdSn3,vrAoviHiI,visineHiI' B

Primer. 6at je ni a0>... > ak$1 celi0 #rojeva. -apisati program kojim se )ormira kvadratna matrica reda n takva da je ni ai> i S 0>... > k$1 upisan spiralno u tu matricu u smeru kretanja ka aljke na satu. Akoliko ni ima manje od n2 elemenata> posle svaki0 k upisani0 elemenata poeti upisivanje od prvog.
Jin;-+de Kstdio.AL

148

Predrag S. Stanimirovi int dodiH$I=90,1,0,#1B int do?H$I=91,0,#1,0B

Osnove programiranja

6E desno, do-e, -evo, gore E6

void main&' 9 int aH10I, @, matH20IH20I, n, n1, smer, i,>,Dr,=omDr,Dro> =rint,&3Bro> e-emenata + ni<+_ 3' s;an,&3Rd3, U@' =rint,&3e-ementi ni<a_Sn3' ,or&i=0 iK@ i""' s;an,&3Rd3,UaHiI' =rint,&3Dimen<i>a matri;e_ 3' s;an,&3Rd3, Un' n1=n i=>=Dr=smer=0 ,or&Dro>=1 Dro>K=nEn Dro>""' 9 6E ;i@-+s <a =ostav->an>e e-emenata + matri;+ E6 matHiIH>I=aHDrI 6E i, > s+ inde@si matri;e, a Dr >e inde@s ni<a E6 Dr"" i,&Dr==@'Dr=0 6E @ad Dr do?e do @, vra;a se na 0 E6 i"=dodiHsmerI >"=do?HsmerI i,&i==n1 WW >==n1 WW &i==n#n1UUsmerL0' WW >==n#n1#1' 6E sada se men>a smer dodavan>a E6 9 i,&i==n1' i=n1#1 i,&>==n1' >=n1#1 i,&i==n#n1 UU smerL0' i=n#n1"1 i,&>==n#n1#1'>=n#n1 smer"" 6E s-ede;i smer E6 i,&smer==$' 6E +=otreD->eni s+ svi smerovi E6 9 smer=0 6E =onovo na desno E6 n1## B i"=dodiHsmerI >"=do?HsmerI B 3,matHiIH>I' =rint,&3Sn3' B

B ,or&i=0 iKn i""' 9,or&>=0 >Kn >""' =rint,&3Rd B

6.4.3. P!,+/#"+5# # "#2$1#&$ /#! +% # #/!"# 0 8


6vodimen ionalni ni ovi $matrice& se u memoriji registruju po vrstama> koristei u astopne memorijske lokacije. -a primer> dvodimen ionalni ni int aV!WV2W se u memoriji raspore3uje u sledeem poretkuF
a!:%!:%, a!:%!9%, a!9%!:%, a!9%!9%, a!;%!:%, a!;%!9% .

Hko se deklari8e poka iva p pomou


int Gp

posle dodele pSa pointer p u ima a svoju vrednost adresu elementa koji le@i u nultoj vrsti i nultoj koloni matrice a $tj. adresu prvog elementa matrice a&. /ako3e> va@e sledee pointerske jednakostiF
p3Ha!:%!:%, pP93Ha!:%!9%, pP;3Ha!9%!:%, pP@ 3Ha!9%!9%, pP43Ha!;%!:%, pP<3Ha!;%!9%.

6vodimen ionalni ni ovi jesu jednodimen ionalni ni ovi jednodimen ionalni0 ni ova. -a primer> ako je r ime dvodimen ionalnog ni a> tada je rViW jednodimen ionalni ni koji sadr@i elemente i-te vrste matrice r. A na8em sluaju> vrste matrice a date su i ra ima aV0W> aV1W i aV2W. S o# irom na po nata svojstva jednodimen ionalni0 ni ova> va@e sledee jednakostiF
a!:%3Ha!:%!:%, a!9%3Ha!9%!:%, a!;%3Ha!;%!:% .

/ako3e je
a!-%!k%3G)aP-Gduzina7vrste Pk*.

-eka je matVWV7W dvodimen ionalni ni . /ada je


mat!i%!-%3G)mat!i%P-*3)G)matPi**!-%3G)matPiG>P-*3 G)Hmat!:%!:%PiG>P-*3 G))G)matPi**P-*.

149

Predrag S. Stanimirovi

Osnove programiranja

A gornjim primerima agrade su neop0odne #og toga 8to operator selekcije ima vi8i prioritet u odnosu na operator indirekcije.

6.5. STRINGOVI
String je sekvenca karaktera. String konstanta mo@e da ima proi voljan #roj karaktera> ukljuujui i string #e karaktera. Droj karaktera u stringu se na iva du@ina stringa. Eedinstveni string koji ne sadr@i karaktere na iva se prazan string. Stringovi su podr@ani u svim modernim programskim je icima. /ipine operacije nad stringovima suF i du@ina $lengt0&X i upore3enje na jednakost $ePualit< comparison&X i leksikogra)sko pore3enje $leQicograp0ic comparison&X i selekcija karaktera u stringu $c0aracter selection&X i selekcija podstringa $su#string selection&X i nadove ivanje $concatenation&.

6.5.1. S')# *!"# 0 P+s6+%70


String konstante u Pascalu su niske nakova okru@eni apostro)ima. Stringovi koji se sastoje od pojedinani0 nakova jesu konstante standardnog tipa 5Aar. Stringovi od ; nakova $;U1& jesu konstante tipa de)inisanog saF
packed array !9.."% of &har

/akav tip na iva se tip string. %spravna je dodela vrednosti ) FS . gde ni ovna promenljiva ) i i ra . imaju #ilo koji tip stringa sa istim #rojem komponenata. Slino tome> relacioni operatori $S > TU> T> U> TS i US& mogu se upotre#iti pri upore3ivanju #ilo koja dva stringa. Are3enost je odre3ena redosledom predeklarisanog tipa ,&ar i podra umeva da je prvi element $)V1W& naj naajniji u tom pore3enju. /A(DO PHSCH* raspola@e tipom string koji predstavlja ni sim#ola kome se mora $radi prevo3enja& unapred de)inisati maksimalna du@ina> dok stvarna du@ina vrednosti string promenljive mo@e varirati $do maksimalne& u toku i vr8avanja programa. +a de)inisanje tipa string koristi se re ervisana re stringA i a koje se u kvadratnim agradama navodi maksimalna du@ina stringa>. primer. 6e)inicija tipa i deklaracija string promenljivi0.
type Lini>a-=stringHX0I Lini>a2=stringH2!!I var @o-a;7stringH10I so@7stringH30> s-7Lini>as27Lini>a2 s37string

String promenljive imaju atri#ut du@ine koji de)ini8e nji0ovu maksimalnu du@inu. String promenljivoj mo@e #iti dodeljena #ilo koja po itivna celo#rojna vrednost atri#uta du@ine do 2,,. Hko se atri#ut du@ine ne navede podra umeva se da je 2,,. A pret0odnom primeru string promenljiva kola# mo@e imati #ilo koju du@inu od 0 do 10 nakovaX promenljiva sok mo@e imati #ilo koju du@inu od 0 do !0. String promenljiva s1 mo@e imati du@inu od 0 do 40X s2 mo e imati du@inu od 0 do 2,,> a s! tako3e od 0 do 2,,. String promenljiva au ima u memoriji jedan #ajt vi8e od de)inisane du@ine. -a primer> promenljiva kola# au ima 11 #ajtova memorije. -ulti #ajt $element stringa indeksiran nulom& sadr@i HSC%% vrednost jednaka du@ini stringa. Hko je i vr8ena dodela @o-a;7=2torta2, to e se u memoriji registrovati na sledei nainF

150

Predrag S. Stanimirovi

Osnove programiranja

-ulti #ajt uka uje na du@inu va@eeg dela stringa. Ostatak $sa ateenim nakovima& sadr@an u poslednji0 pet #ajtova se anemaruje. String promenljivoj se mo@e dodeliti vrednost nared#om dodele> na primerF
s1 7= 2Ovo >e =rimer stringa2

ili uitavanjem nared#om readln> na primerF


read-n&s2'

Posle dodeleF kola#>EF string promenljivoj kola# je dodeljen pra an string $niska #e nakova&. Pod niskom podra umevamo ni nakova. Hko @elimo da u string smestimo jedan apostro)> tre#a napisatiF
@o-a;7=NcN

1ako se nulti #ajt stringa koristi a o naavanje du@ine stringa to se pristupom ovom #ajtu mo@e proitati du@ina stringa> ali i postaviti. -a primer>
@o-a;7=3 9=ra<an stringB Orite-n&ord&@o-a;H0I'' 9is=is+>e se 0B @o-a;7=2Da@-ava2 Orite-n&ord&@o-a;H0I'' 9is=is+>e )B @o-a;H0I7=;Ar&3' Orite-n&@o-a;' 9is=is+>e7 Da@B

+a odre3ivanje du@ine se po pravilu koristi standardna )unkcija lengt&A koja ima jedan parametar dat u o#liku i ra a tipa string.

O($)+6#.$ +1 s')# *!"#&+ 0 P+s6+%0


+a manipulaciju podacima tipa string koristi se ni ugra3eni0 )unkcija i procedura. 5unkcija un)tion length4s>string6>b-te daje celo#rojnu du@inu tekue vrednosti promenljive s tipa string. A sledeem ciklusu se vrednost promenljive kola# ispisuje nak po nak>
for i7=- to -engtA&@o-a;'do Orite&@o-a;HiI'

;e3utim> ovakve cikluse ne moramo koristiti> jer se vrednosti promenljivi0 ugra3enog tipa string ispisuju pomou nared#i Brite ili BritelnA tako da je pret0odnom ciklusu ekvivalentna nared#a Orite&@o-a;'. Hko je du@ina polja koje odgovara string vrednosti u nared#i Brite vea od tekue du@ine string promenljive> vr8i se poravnavanje s desne strane polja> a s leve strane je dopunjavanje pra ninama. Hko je du@ina polja manja od du@ine promenljive> polje se pro8iruje koliko je potre#no a ispis stringa. Primer. +a vrednost s7=2AB/A:ADAB/A2 do#ijaju se sledea ispisivanjaB Orite-n&s7--' ispisuje AB/A:ADAB/A Orite-n&s713' ispisuje __AB/A:ADAB/A Orite-n&s7!' ispisuje AB/A:ADAB/A 6a #i se uitala vrednost promenljive tipa string mora se koristiti readiln a ne read. -ad tipom string je de)inisano pore3enje koje daje re ultate logikog tipa. (e ultat pore3enja avisi od pore3enja prvog para nakova koji nije u relaciji jednako. -a primer> va@iF ZHDC6ZTZHDCKZ. +nakovi se porede pomou vrednosti svoji0 kodova. Primer. -apisati program kojim se uitavaju pre imena uenika jednog odeljenja> a atim ispisuju u al)a#etskom poretku.

151

Predrag S. Stanimirovi program A-,aDet const @=!0 type Maxstring=stringH30I var i,>,n7integer =re<ime7arraQH1..@I o, Maxstring proced+re ra<meni&var s1,s27Maxstring' var =om7Maxstring begin =om7=s1 s17=s2 s27==om end$ begin Orite&20nesite Dro> =re<imena72' read-n&n' Orite-n&20nesite =re<imena72' for i7=1 to n do read-n&=re<imeHiI' for i7=1 to n#1 do for >7=i"- to n do i, =re<imeHiIL=re<imeH>I t#en ra<meni&=re<imeHiI,=re<imeH>I' for i.*1 to n do Orite-n&=re<imeHiI' end.

Osnove programiranja

A ovom primeru je primenjen po nati numeriki algoritam sortiranja. 5unkcijom un)tion )on)at4slAs2As3A... >string6>string se )ormira novi string nadove ivanjem stringova koji su argumenti )unkcije. -a primer> concat$ZHDCZ>ZNO+Z& concat$Z12Z>Z!"r>r,'Z& daje daje ZHDCNO+Z Z12!",'Z.

Stringovi se mogu nadove ivati $struni i ra konkatenacija& i primenom naka q=r. -a primer> s"FSs1=s2=s! ima isti e)ekat kao s"FSconcat$sl>s2>s!&. 5unkcija un)tion pos4slAs2>string6>string odre3uje po iciju pojavljivanja string s1 sadr@i u stringu s2. % me3u ostalog> ova )unkcija ispituje da li se string s1 sadr@i u stringu s2. Hko je to tano> pos daje ceo #roj koji o naava po iciju prvog pojavljivanja stringa s1 idui sleva nadesno u stringu s2. A protivnom daje 0. Prema tome> vrednostF pos$ZgramZ>ZprogramiranjeZ& pos$Z2H(Z>Z2H(Z& pos$ZgradZ>Z#eogradZ& pos$Z(H6HZ>Z*H;DH6HZ& pos$Z6HZ>Z*H;DH6HZ& je je je je je " 1 " 0 '

5unkcija )op-4s>stringG pAd>b-te6>string daje novi string )ormiran kopiranjem d nakova stringa s poev od po icije p. -a primer> cop<$Z*H;DH6HZ>'>2& vraa Z6HZ Hko @elimo da ispi8emo poslednji0 pet nakova promenljive filmA tre#a napisatiF :riteln$cop<$)ilm>lengt0$)ilm&-">,&&. Sledea kompo icija ciklusa o#e #e3uje ispis svi0 podstringova promenljive filmA ukljuujui i nju samuF or p>El to lengt0$)ilm&do or d>El to lengt0$)ilm&-p=l do :riteln$cop<$)ilm>p>d&&X Primer. -apisati program kojim se ula ni string ispisuje sa deset nakova u vrsti> i u ev poslednje vrste koja mo@e imati manje od 10 nakova> i sadr@i ostatak stringa.
program Pre-om var s7stringHX0I begin i7integer

152

Predrag S. Stanimirovi read-n&s' i7=1 (#i)e iK=-engtA&s' do begin Orite-n&;o=Q&s,i,10'' end end.

Osnove programiranja

i7=i"10

Procedura pro)edure delete4s>stringG pAd>b-te6 uklanja podstring stringa s poev od po icije p u du@ini d. -a primer>
s7=2LAMBADA2 de-ete&s,3,3' Orite-n&s'

Poslednja nared#a Briteln ispisujeF *H6H. Primer. -apisati program kojim se rei ula nog stringa ispisuju u inver nom poretku. (ei su me3uso#no ra dvojene pra ninama.
program Inver</e;i var D-an@o7integer stara-,nova-7 stringH100I begin Orite-n&20nesite string ;i>e re;i <e-ite da invert+>ete2' read-n&stara-' nova-7=NN &E dva navodni@a, a ne a=ostro, E' stara-7=;on;at&stara-,2 2' 9Edo=isati =ra<nin+EB (#i)e stara- KLNN do begin D-an@o7==os&2 2,stara-' nova-7=;o=Q&stara-, 1 ,D-an@o'"novade-ete&stara-, 1 ,D-an@o' end$ Orite-n&nova-' end.

1ako je pretpostavljeno da se rei ra dvajaju pra ninom to se koristi )unkcija pos a odre3ivanje granice rei. Svaka re i dvojena s pocetka stringa staral dodaje se na poetak novalA 8to o#e #e3uje promenu poretka rei stare linije. 1ada staral postane pra an string> ispisuje se string noval. Procedura pro)edure insert4sl>stringG var s2>stringG p>b-te6 umee string s1 u string s2 poev od po icije p. -a primer> slFSZ;DHZX s2FSZ*H6HZX insert$sl>s2>!&X :riteln$s2&X Poslednja nared#a Briteln ispisujeF *H;DH6H. Primer. -apisati program kojim se u stringu s amenjuje svako pojavljivanje stringa s1 stringom s2.
program 4amene var =o<i;i>a7 integer s,s-,s27string begin Orite-n&20nesi string72' read-n&s' Onte-n&24ameniti string72' read-n&s1' Orite-n&21tringom72' read-n&s2' (#i)e =os&s-,s'KL0 do begin =o<i;i>a7==os&s-,s' de-ete&s,=o<i;i>a,-engtA&s1'' 9EDrise s1EB insert&s2,s,=o<i;i>a' 9E+me;e s2 + sEB end$ Orite-n&s' end.

153

Predrag S. Stanimirovi

Osnove programiranja

Procedura pro)edure str4num>realG var s>string6 o#e #e3uje konver iju numerike vrednosti n%m $tipa integer ili real& u string s. -a primer> ako je n%m jednako 1!0> tada str4numA s6 dodeljuje stringu s string Z1!0Z. -umerika vrednost se )ormatira po istim pravilima kao u nared#i i la a 4Brite ili Briteln6. -a primer> a deklaracijuF var
s1string!;:%2

procedura str ostvaruje sledee dodeleF naredba


str);:,s*2 str);:14,s*2 str)4.<,s*2 str)4.<19<1@,s* str)4.<1:1;,s*

rezultat
_;:_ _ ;:_ _ 4.<:::::::::EP::_ _4.<::_ _4.<:_

Procedura pro)edure val4sA numA kodgreske6 konvertuje string s u #roj tipa real ili integer. Hko string sadr@i korektan #rojni apis $celo#rojni> realni u )iksnom ili pokretnom are u& konver ija je uspe8na i kodgreske se postavlja na 0X ako string sadr@i nekorektan #rojni apis> kodgreske do#ija vrednost ra liitu od 0 $po iciju na kojoj se austavila procedura prevo3enja&. String ne sme sadr@ati pra ninu. Primer. Sledei program ilustruje kori8enje procedure valF
program 1tring0Bro> type maxstring=stringH20I var n+m7rea- @od7integer proced+re PisiBro>&s7maxstring' begin va-&s,n+m,@od' i, @od=0 t#en Orite-n&n+m7073' e)se Orite-n&2Yres@a + @onver<i>i , na mest+ 2,@od,2VVV2' end$ begin PisiBro>&2$!(.232' PisiBro>&2s$!(.232' end.

Primer. -apisati program kojim se uitava ni stringova od koji0 svaki sadr@i pre ime i ime ra dvojene are ima> a atim 8tampa al)a#etski sortiran spisak uenika po pre imenima u )ormatu TimeUCTprezimeU. 1raj ula ni0 podataka o naava se uno8enjem pra nog reda. Pretpostavlja se da u spisku nema vi8e od 20 uenika.
=rogram imena_i_=re<imena tQ=e ni<=arraQH1..20I o, string var imena7ni< i,n7integer =s71..2!! s1,s27string =ro;ed+re sortira>&m7integer var ns7ni<' var i,>7integer =om7string Degin ,or i7=1 to m#1 do ,or >7=i"1 to m do i, nsHiILnsH>I tAen Degin =om7=nsHiI nsHiI7=nsH>I nsH>I7==om end end =ro;ed+re +;ita>&var m7integer var n<7ni<' 154

Predrag S. Stanimirovi var i7integer Degin m7=1 Orite-n&2Imena_2' read-n&n<HmI' OAi-e n<HmIKL22 do Degin m7=m"1 read-n&n<HmI' end end Degin +;ita>&n,imena' sortira>&n,imena' ,or i7=1 to n do Degin =s7==os&2,2,imenaHiI' s17=;o=Q&imenaHiI,1,=s#1' s27=;o=Q&imenaHiI,=s"2,-engtA&imenaHiI'' imenaHiI7=;on;at&s2,2 2,s1' end ,or i7=1 to n do Orite-n&imenaHiI' Orite-n end.

Osnove programiranja

Primer. -apisati )unkcije ili procedure kojima se i raunava sledeeF a& odre3uje podstring datog stringa s koji pret0odi prvom pojavljivanju stringa s1. #& odre3uje podstring datog stringa s koji se nala i i a prvog pojavljavanja datog stringa s1 u stringu s. c& odre3uje #roj pojavljivanja stringa s1 u stringu s. d& odre3uje po icija stringa s1 u stringu s poev od po icije k. e& u datom stringu s ameniti se svako pojavljivanje stringa s1 stringom s2.
=rogram stringovi var s1,s2,s7string @7integer ,+n;tion is=red&s,s17string'7string Degin i,&=os&s1,s'=0'tAen is=red7=s e-se is=red 7= ;o=Q&s,1,=os&s1,s'#1' end ,+n;tion i<a&s,s17string'7string var =o;,d70..2!! Degin i,&=os&s1,s'=0'tAen i<a7=22 e-se Degin =o;7= =os&s1,s'"-engtA&s1' d7=-engtA&s'#=o;"1 i<a 7= ;o=Q&s,=o;,d' end end ,+n;tion =o>av->ivan>e&s,s17string'7integer var i,Dr7integer Degin Dr7=0 ,or i7=1 to -engtA&s'#-engtA&s1'"1 do i, ;o=Q&s,i,-engtA&s1''=s1 tAen Dr7=Dr"1 =o>av->ivan>e 7= Dr end ,+n;tion =os1&s,s17string @7integer'7integer Degin de-ete&s,1,@#1' =os17==os&s1,s'

155

Predrag S. Stanimirovi end ,+n;tion <amene&s1,s2,s7string'7string var =o<7integer Degin OAi-e =os&s1,s'KL0 do Degin =o<7==os&s1,s' de-ete&s,=o<,-engtA&s1'' end <amene7=s end

Osnove programiranja

insert&s2,s,=o<'

Degin Orite-n Orite-n&20nesi dva stringa 2' read-n&s' read-n&s1' Orite-n&2Podstring od 2,s,2 is=red 2,s1,2 >e 2,is=red&s,s1'' Orite-n&2Podstring od 2,s,2 i<a 2,s1,2 >e 2,i<a&s,s1'' Orite-n&21tring 2,s1,2 =o>av->+>e se + 2, s,2 2,=o>av->ivan>e&s,s1',2 =+ta 2' Orite-n&20nesi =o<itivan ;eo Dro> 2' read-n&@' Orite-n&21tring 2,s1,2 =o>av->+>e se + 2,s,2 od =o<i;i>e 2, @, 2 na mest+ 2,=os1&s,s1,@'' Orite-n&20nesi tri stringa2' read-n&s1' read-n&s2' read-n&s' Orite-n&21tring nastao <amenom 2,s1,2 sa 2,s2,2 + 2,s, 2 >e 2,<amene&s1,s2,s'' end.

Primer. -apisati program koji i dva data stringa i dvaja nji0ov maksimalni podstring.
=rogram str-$ var i,>,-,d,maxd7integer s1,s2,s=1,maxs7string i<-a<7Doo-ean =ro;ed+re ra<meni&var s1,s27string' var =om7string Degin =om7=s1 s17=s2 s27==om end Degin Orite-n&20nesi =rvi string 2' read-n&s1' Orite-n&20nesi dr+gi string 2' read-n&s2' i, -engtA&s1' L -engtA&s2' tAen ra<meni&s1,s2' -7=-engtA&s1' maxd7=0 maxs7=22 ,or i7=1 to - do ,or >7= i to - do Degin s=17=;o=Q&s1,i,>#i"1' i, =os&s=1,s2'KL 0 tAen Degin d7=-engtA&s=1' i, dLmaxd tAen Degin maxd7=d maxs7=s=1 end end end i, maxs=22 tAen Orite-n&2]e =osto>i <a>edni;@i =odstring2' e-se Orite-n&2Ma@sima-ni <a>edni;@i =odstring >e 2,maxs' end.

Primer. -apisati proceduru koja centrira i podvlai jedan red teksta. Podvlaenje se reali uje 8tampom naka minus ispod svakog ne#lanko naka u tekstu.

156

Predrag S. Stanimirovi

Osnove programiranja

=rogram ;entriran>e ;onst d+<ina_reda=X0 var s7string =ro;ed+re ;entrira>&nas-ov7string' var i,=ra<nine71..X0 Degin =ra<nine7=&d+<ina_reda#-engtA&nas-ov''div 2 Orite-n&2 27=ra<nine,nas-ov' Orite&2 27=ra<nine' ,or i7=1 to -engtA&nas-ov' do i, nas-ovHiIKL2 2 tAen Orite&2#2' e-se Orite&2 2' Orite-n end Degin Orite-n&2 0nesi -ini>+ 2' end. read-n&s' ;entrira>&s'

Primer. -apisati program koji generi8e sve injektivne )unkcije fF ) +> ako su skupovi ) i + adati stringovima du@ine n i m> respektivno. Klementi skupova H i D su al)a#etski sim#oli. 5unkcija ) je injekcija ako va@iF $!> " )& ! " f$!& f$"&.
=rogram in>e@;i>a +ses ;rt ;onst @=20 tQ=e ni<=arraQH1..@I o, ;Aar var A,B7string n,m7integer x7ni< ,+n;tion ra<-i;iti&@7integer x7ni<'7Doo-ean var i7integer ra<7Doo-ean Degin ra<7=tr+e i7=1 OAi-e &iK=@#1' and ra< do Degin ra<7=xH@IKLxHiI i7=i"1 end ra<-i;iti7=ra< end =ro;ed+re =isi&n7integer x7ni<' var i7integer ;A7;Aar Degin Orite&2 x7 2' ,or i7=1 to n do Orite&aHiI72' Orite&2,&x'7 2' ,or i7=1 to n do Orite&xHiI72' Orite-n ,or i7=1 to 2En"( do Orite&2#2' Orite-n ;A7=read@eQ end =ro;ed+re ,ormira>&@7integer' var i7integer Degin ,or i7=1 to m do Degin *H@I7=BHiI i, ra<-i;iti&@,*' tAen i, @=n tAen =isi&n,*' e-se ,ormira>&@"1' end

Orite-n

157

Predrag S. Stanimirovi end

Osnove programiranja

Degin Orite&21@+= A7 2' read-n&A' Orite&21@+= B7 2' read-n&B' n7=-engtA&A' m7=-engtA&B' i, mKn tAen Orite-n&2]e =osto>e in>e@tivne ,+n@;i>e2' e-se ,ormira>&1' end.

Primer. Hko je re niska nakova i me3u pra nina> napisati proceduru kojaF ispisuje sve palindrome u datom stringu> odre3uje #roj palindroma i pronala i najdu@i palindrom.
=rogram str-12 var s,ms7string @7integer ,+n;tion =a-indrom&st7string'7Doo-ean var i,n7integer i<-a<7Doo-ean Degin n7=-engtA&st' i7=1 i<-a<7=tr+e OAi-e &iK= n div 2' and i<-a< do Degin i<-a< 7= stHiI=stHn#i"1I i, i<-a< tAen i7=i"1 end =a-indrom7=i<-a< end =ro;ed+re =a-indromi&st7string var @7integer var maxst7string' var i,>,i=o;,d+<,md+<7integer =o;,@ra>7;Aar s=om7string Degin @7=0 i7=1 OAi-e iK=-engtA&s'#1 do Degin i, sHiIKL2 2 tAen Degin =o;7=sHiI i=o;7=i OAi-e &sHi"1IKL2 2' and &iK=-engtA&s'#1' do i7=i"1 @ra>7=sHiI i, =o;=@ra> tAen Degin s=om7=22 ,or >7=i=o; to i do s=om7=s=om"sH>I i, =a-indrom&s=om' tAen Degin @7=@"1 Orite&@,2. =a-indrom7 2' d+<7=-engtA&s=om' ,or >7=1 to d+< do Orite&s=omH>I' i, @=1 tAen Degin md+< 7= d+< maxst7=s=om end e-se i, d+<Lmd+< tAen Degin md+< 7= -engtA&s=om' maxst7=s=om end Orite-n end end

158

Predrag S. Stanimirovi end i7=i"1 OAi-e sHiI = 2 2 do i7=i"1 end end

Osnove programiranja

Degin Orite-n Orite&21tring= _ 2' read-n&s' Orite-n&21vi =a-indromi + <adatom string+72' =a-indromi&s,@,ms' i, @=0 tAen Orite-n&2]i>e Di-o =a-indroma 2' e-se Degin Orite-n&2Bi-o >e 2,@,2 =a-indroma 2' Orite-n&2]a>d+<i =a-indrom >e 2' Orite-n&ms' end end.

Primer. -apisati )unkciju a prevo3enje dekadnog #roja u rimski. A glavnom programu testirati napisanu )unkciju u #eskonanom ciklusu.
=rogram =is2 +ses ;rt var n7integer st7string ;A7;Aar ,+n;tion rim&n7integer'7string var s7string Degin s7=22 OAi-e nL=1000 do Degin n7=n#1000 s7=s"2M2 end i, nL=800 tAen Degin s7=s"25M2 n7=n#800 end i, nL=!00 tAen Degin n7=n#!00 s7=s"2D2 end i, nL=$00 tAen Degin s7=s"25D2 n7=n#$00 end OAi-e nL=100 do Degin n7=n#100 s7=s"252 end i, nL=80 tAen Degin s7=s"2*52 n7=n#80 end i, nL=$0 tAen Degin s7=s"2*L2 n7=n#$0 end OAi-e nL=10 do Degin n7=n#10 s7=s"2*2 end i, n=8 tAen Degin s7=s"2I*2 n7=0 end i, nL=! tAen Degin n7=n#! s7=s"2G2 end i, n=$ tAen Degin s7=s"2IG2 n7=0 end OAi-e nL=1 do Degin n7=n#1 s7=s"2I2 end rim7=s end Degin re=eat Orite&2n=_ 2' read-n&n' st7=rim&n' Orite-n&24e-ite >os P6]2' ;A7=read@eQ +nti- &;A=2n2' or &;A=2]2' end.

Orite-n&st'

Primer. +adata je ogrlica sastavljena od plavi0 $+& i crveni0 $3& kuglica. 1uglice su o#ele@ene #rojevima od 1 do n. Hko prekinemo ve u i me3u dve susedne kuglice> od ogrlice mo@emo da do#ijemo ni kuglica. 1uglice se nakon prekida prikupljaju na sledei nainF u mimo prvu kuglicu s leve strane i idemo nadesno do kuglice suprotne #oje. Hnalogno> pola ei od poslednje kuglice u ni u idemo nalevo do pojave kuglice suprotne #oje. Potre#no je da se prona3e takvo mesto prekida da #roj ovako prikupljeni0 kuglica #ude maksimalan. -apisati program kojiF

159

Predrag S. Stanimirovi

Osnove programiranja

a& ita liniju sastavljenu od mali0 slova r i b kojom se opisuje kon)iguracija ogrlice poev od prve kuglice. ;aksimalan #roj kuglica je ,0X #& nala i mesto prekida u kome je #roj prikupljeni0 kuglica maksimalanX c& ispisuje mesto prekida i #roj prikupljeni0 kuglica.
=rogram =er-e var ogr-i;a7string Dro>,maxDro>,i,>,@,n,=re@id7integer ;7;Aar Degin read-n&ogr-i;a' n7=-engtA&ogr-i;a' maxDro>7=0 =re@id7=1 ,or i7=1 to n do Degin Dro>7=2 >7=n#1 ;7=ogr-i;aHnI OAi-e&ogr-i;aH>I=;' and &>L1' do Degin Dro>7=Dro>"1 >7=>#1 end @7=2 ;7=ogr-i;aH1I OAi-e&ogr-i;aH@I=;' and &@K>' do Degin Dro>7=Dro>"1 @7=@"1 end i, Dro>LmaxDro> tAen Degin maxDro>7=Dro> =re@id7=i 9=re@id >e o=tima-no mesto =re@idaB end ogr-i;a7=ogr-i;a"ogr-i;aH1I de-ete&ogr-i;a,1,1' end Orite-n&2Pre@id i<me?+ 2,=re@id#1,2. i 2,=re@id,2. @+g-i;e 2' Orite-n&2Bro> =er-i >e 2,maxDro>' end.

Primer. 1a@emo da se string 0 pojavljuje u stringu od po icije s ako su ispunjeni sledei usloviF

sa pomakom s> ili da se 0 pojavljuje u

poev

0TS sTS n - 0nX Vs='W S 0V'W a 0 TS ' T 0n> gde je n #roj elemenata u stringu 0 u stringu .
=rogram +=ar1 var s1,s27string =ro;ed+re se@v_sm&t,+7string' var s, >, tn, +n7integer -og7Doo-ean Degin tn 7= -engtA&t' +n 7= -engtA&+' ,or s7= 1 to tn#+n"1 do Degin -og7=tr+e >7=1 OAi-e &>K=+n' and -og do i, &tHs">#1I KL +H>I' tAen -og7=,a-se e-se >7=>"1 i, -og tAen Orite-n&20<ora@ se =o>av->+>e sa =o;et@om 2, s' end end

$du@ina&> a 0n du@ina stringa 0. Odrediti sva pojavljivanja stringa

160

Predrag S. Stanimirovi Degin Orite&2D+<i string_ 2' read-n&s1' Orite&2Dr+gi string_ 2' read-n&s2' se@v_sm&s1,s2' end.

Osnove programiranja

Primer. -apisati program koji ita proi voljan tekst i prepisuje ga u i la ni )ajl> pri emu sve komentare i i vornog teksta ne prepisuje. 1omentarom se smatra #ilo koji ni nakova i me3u $R i R&> ukjluujui i te nakove. Svaki komentar mo@e da sadr@i proi voljan #roj drugi0 komentara.
=rogram tan=32 var ,,g7text ;1,;27;Aar d+Dina7integer Degin assign&,,2;7St=SdraganS+=is.txt2' reset&,' assign&g,2;7St=SdraganSis=is.txt2' reOrite&g' d+Dina7=0 re=eat read&,,;1' i, ;1=2&2 tAen Degin read&,,;2' i, ;2=2E2 tAen d+Dina7=d+Dina"1 e-se i, d+Dina=0 tAen Orite&g,;1,;2' end e-se i, ;1=2E2 tAen Degin read&,,;2' i, ;2=2'2 tAen d+Dina7=d+Dina#1 e-se i, d+Dina=0 tAen Orite&g,;1,;2' end e-se i, d+Dina=0 tAen Orite&g,;1' +nti- eo,&,' ;-ose&,' ;-ose&g' end.

Primer. Sa tastature uitati ni nakova. Poslednji nak tog ni a je taka. -a ekranu prika ati tekst iste sadr@ine kod koga su sva slova van stringova prevedena u mala. /est primerF HDc ZH#CZ aDC. SU a#c ZH#CZ a#c.
=rogram =2001_1 +ses ;rt ;onst ra<-i@a=ord&2a2'#ord&2A2' a=ostro,=;Ar&38' var st7arraQH1..X0I o, ;Aar i,@7integer =ro;ed+re Pres@o;i1tring var i,@17integer Degin @17=@ re=eat @7=@"1 read&stH@I' +nti- &stH@I=a=ostro,' or &stH@I=2.2' i, stH@I=2.2 tAen ,or i7=@1 to @ do Orite&stHiI' end Degin ;-rs;r @7=0

161

Predrag S. Stanimirovi re=eat @7=@"1 read&stH@I' i, &stH@IL=2A2' and &stH@IK=242' tAen stH@I7=;Ar&ord&stH@I'"ra<-i@a' e-se i, stH@I=a=ostro, tAen Pres@o;i1tring +nti- stH@I=2.2 Orite-n ,or i7=1 to @ do Orite&stHiI' Orite-n re=eat +nti- @eQ=ressed end.

Osnove programiranja

Primer. Aitati prirodan #roj n> atim n slova. % tekstualne datoteke ucitati atim prirodan #roj m i na kraju m rei. Odrediti i od8tampati najdu@u re sastavljenu od adati0 slova koja se nala i u popisu uneti0 rei. Slova u rei se mogu ponavljati. Hko postoji vi8e rei iste du@ine 8tampati jednu od nji0.
=rogram =s3 var s1,s2,maxre;7string i,m,d+<,maxd+<7integer ,7text =ro;ed+re ;ita>s-ova&var s7string' var i,n7integer ;7;Aar Degin read-n&n' s7=22 ,or i7=1 to n do Degin read-n&;' s7=s"; end end ,+n;tion sadr<i&t1,t27string'7Doo-ean var i,>,-1,-27integer -g7Doo-ean Degin i7=1 -g7=tr+e -17=-engtA&t1' -27=-engtA&t2' OAi-e &iK=-1' and -g do Degin >7=1 -g7=,a-se OAi-e &>K=-2' and not -g do Degin i, t1HiI=t2H>I tAen -g7=tr+e e-se >7=>"1 end i, -g tAen i7=i"1 end sadr<i7=-g end Degin ;ita>s-ova&s1' assign&,,2;7St=S<ada;iS+-a<.txt2' reset&,' read-n&,,m' maxd+<7=0 maxre;7=22 ,or i7=1 to m do Degin read-n&,,s2' i, sadr<i&s2,s1' tAen Degin i, -engtA&s2'Lmaxd+< tAen Degin maxd+<7=-engtA&s2' end

maxre;7=s2

162

Predrag S. Stanimirovi end end Orite-n&maxre;' end.

Osnove programiranja

;-ose&,'

Primer. Aitati prirodne #rojeve n i k $kU0& i imena n oso#a. Droj n predstavlja #roj oso#a u krugu> a k predstavlja #roj slogova u #rojanici. Drojanje poinje od prve oso#e. Droji se u krug dok se ne do3e do k. k-ta oso#a ispada i kruga. Drojanje se nastavlja poev od oso#e koja je sledea na redu. Droji se sve dok ne ostane samo jedna oso#a. Od8tampati ime te oso#e i njen indeks u poetnom krugu.
=rogram s@o-s@o_188X_]is_1 tQ=e ni<=arraQ H1..100I o, stringH20I -ogni<=arraQ H1..100I o, Doo-ean var osoDe7ni< +igri7-ogni< n,@,i,osoDe+igri,i<Dro>ani7integer =ro;ed+re +;ita>& var n7integer var a7ni< var @7integer' var i7integer Degin Orite&20nesi Dro> osoDa i Dro> s-ogova + Dro>ani;i7 2' read-n&n,@' Orite-n&20nesi imena 2,n,2 osoDa2' ,or i7=1 to n do read-n&aHiI' end Degin +;ita>&n,osoDe,@' ,or i7=1 to n do +igriHiI7=tr+e i<Dro>ani7=0 osoDe+igri7=n i7=1 OAi-e osoDe+igriL1 do Degin i<Dro>ani7=i<Dro>ani"ord&+igriHiI' i, i<Dro>ani=@ tAen Degin i<Dro>ani7=0 +igriHiI7=,a-se osoDe+igri7=osoDe+igri#1 end i, iKn tAen i7=i"1 e-se i7=1 end ,or i7=1 to n do i, +igriHiI tAen Orite-n&2]a @ra>+ >e ostao 2,osoDeHiI,2 sa inde@som 2, i,2 + =o;etnom @r+g+2' read-n end.

6.5.2. S')# *!"# 0 8


A je iku C> string je jednodimen ionalni ni elemenata tipa #&ar koji se avr8ava karakterom Z\0Z. String se mo@e posmatrati i kao pointer na #&ar.

I #6#.+%#/+6#.+ # !3)+1+ s')# *!"+


1arakteru u stringu mo@e da se pristupi ili kao elementu ni a ili pomou pointera na #&ar. Svaki string se avr8ava karakterom Z\0Z. String konstanta je proi voljan ni nakova i me3u navodnika. Svi naci a0vaeni nacima navoda> kao i n%ll nak Z\0Z sme8taju se u u astopnim memorijskim lokacijama. -a primer> string s S I)+,I mo@e da se apamti u memoriju kao sekvenca od " karaktera sV0W S Z)Z> sV1W S Z+Z> sV2W S ZCZ> sV!W S Z\0Z> od koji0 je poslednji null karakter Z\0Z. De poslednjeg karaktera Z\0Z ni nije kompletiran> te predstavlja samo ni karaktera. Primer. 6odeljivanje poetne vrednosti string promenljivoj.
Odefine DA#RE& 9::

163

Predrag S. Stanimirovi
void main)* + char w!DA#RE&%2 W w!:%3_A_2 w!9%3_Q_2 w!;%3_&_2 w!@%3_a:_2 /

Osnove programiranja

Sada je jasno da su karakter ZaZ i string IaI dva ra liita o#jekta. String IaI je ni koji sadr@i dva karakteraF ZaZ i Z\0Z. Stringovi su ni ovi karaktera> pa se mogu inicijali ovati na mestu deklaracije> kao i ni ovi #rojeva. Osim toga> praktinije je da se string inicijali uje konstantnom vredno8u tipa string umesto t nak po naku. Primer. ;o@emo pisati
;Aar sHI=3aD;3 ;Aar E==3aD;3

umesto ;Aar sHI=92a2, 2D2, 2;2, 2S02B

/ako3e> mo@e se inicijali ovati pointer na c0ar kao konstantni stringF K)ekat ove nared#e da se string Iab#I sme8ta u memoriju> a pointer p se inicijali uje #a nom adresom tog stringa. A sluaju kada se ni nakova adate du@ine inicijali uje string konstantom> tada se neiskori8eni elementi ni a inicijali uju null karakterom Z\0Z. Primer. /rans)ormacija stringa. A stringu se svaki nak ZeZ amenjuje nakom Z.Z> dok se svaka pra nina amenjuje prela om u novi red i ta#ulatorom. Anos karaktera se avr8ava prela om u novi red ili .:/ karakterom.
Jin;-+de Kstdio.AL Jde,ine MA* !0 void main&' 9 ;Aar -ineHMA*I, E;Aange&;Aar E' void read&;Aar E' =rint,&30nesi >edan red3' read&-ine' =rint,&3SnRsSnSnRsSnSn3,Pos-e =romene red >e 7 3, ;Aange&-ine'' B void read&;Aar Es' 9 int ;, i=0 OAi-e &&;=get;Aar&'' V=%OF UU ; V=2Sn2' sHi""I=; sHiI=2S02 B ;Aar E;Aange&;Aar Es' 9 stati; ;Aar neO_stringHMA*I ;Aar E==neO_string 6E =ointer = >e ini;i>a-i<ovan na Da<n+ adres+ od neO_string E6 ,or & Es V= 2S02 ""s' i,&Es==2e2' E=""=2%2 e-se i,&Es==2 2' 9 E=""=2Sn2 E=""=2St2 B e-se E=""=Es E==2S02 ret+rn&neO_string' B

T$s'#)+ .$ # ,! "$)/#.+ / +,!"+


Standardna #i#lioteka T;tQ=e.AU sadr@i deklaracije )unkcija a testiranje nakova. Sve )unkcije i te #i#lioteke imaju jedan argument tipa int> ija vrednost je ili .:/ ili je predstavljena kao unsigned

164

Predrag S. Stanimirovi

Osnove programiranja

c0ar. (e ultat svake od ovi0 )unkcija je tipa int. 5unkcije vraaju re ultat ra liit od nule $tano&> ako argument adovoljava opisani uslov> a 0 ako ne adovoljava. -aje8e kori8ene )unkcije i ove #i#lioteke suF isdigit&;' ispituje da li je # decimalna ci)raX is-oOer&;' ispituje da li je # malo slovoX is+==er&;' ispituje da li je # veliko slovoX isa-=Aa&;' islo4er$c& ili is%pper$c& je tanoX isa-n+m&;' isalp&a&;' ili isdigit$c& je tanoX is;ntr-&;' ispituje da li je # kontrolni nak $kontrolni naci imaju kodove 0... !1&X iss=a;e&;' ra mak> novi red> povratnik> vertikalni ili0ori ontalni ta#ulator. /ako3e> postoje i dve )unkcije a promenu veliine slova. int to-oOer&int ;' konvertuje # u malo slovoX int to+==er&int ;' konvertuje # u veliko slovo. Hko je karakter # veliko slovo> tada )unkcija tolo4er$#& vraa odgovarajue malo slovo> a inae vraa #. Hko je karakter c malo slovo> tada )unkcija to%pper$#& vraa odgovarajue veliko slovo> a inae vraa #. Primer. Pre#rojavanje rei unutar stringa. String se avr8ava prela om u novi red ili karakterom eof. (ei unutar stringa su ra dvojene pra ninama.
Jin;-+de Kstdio.AL Jin;-+de K;tQ=e.AL Jde,ine MA* 30 void main&' 9 ;Aar -ineHMA*I void read&;Aar E' int ;nt&;Aar E' =rint,&3Sn 0nesi string 7 3' read&-ine' =rint,&3Sn Bro> re;i = RdSn3, ;nt&-ine'' B void read&;Aar sH I' 9 int ; OAi-e &&;=get;Aar&'' V=eo, UU ;V=2Sn2' sHiI=2S02 B

sHi""I=;

int ;nt&;Aar Es' 9 int Dr=0 OAi-e &EsV=2S02' 9 OAi-e &iss=a;e&Es'' ""s 6E =res@o;i =ra<nine i<me?+ re;i na =o;et@+ E6 i,&EsV=2S02' 6E na;i re; E6 9 ""Dr OAi-e&Viss=a;e&Es'UU EsV=2S02' 6E=res@o;i re;E6 ""s B B ret+rn&Dr' B

Primer. String je deklarisan kao statiki ni karaktera a atim je inicijali ovan nekom string konstantom. -apisati program koji ispisuje string u direktnom i inver nom poretku.
Jin;-+deKstdio.AL void main&' 9 stati; ;Aar sHI=3:onstantni string3 ;Aar E= ==s =rint,&3SnIs=is stringa7Sn3' 165

Predrag S. Stanimirovi OAi-e&E=' =+t;Aar&E=""' =rint,&3SnIs=is + inver<nom =oret@+7Sn3' OAi-e&##=L=s' =+t;Aar&E=' =+t;Aar&2Sn2' B

Osnove programiranja

U5#'+"+ .$ # #s(#s s')# *!"+


2rednosti stringova se mogu i uitavati. Pri uitavanju stringova #itno je da se re ervi8e dovoljno memorijskog prostora a sme8tanje stringova. Program ne mo@e da predvidi maksimalnu du@inu stringa i da re ervi8e potre#an memorijski prostor. +#og toga je programer o#ave an da predvidi maksimalnu du@inu stringova koji se uitavaju. String mo@e da do#ije vrednost pomou )unkcije s#anf$&> koristei )ormat `s. -a primer> mo@emo pisatiF
scanf)^Vs^, w*2

Svi naci> do prvog naka .:/ ili do prve pra nine se u imaju kao elementi stringa 4. Posle toga se n%ll karakter stavlja na kraj stringa. -apomenimo da nije kori8ena adresa 74 u drugom argumentu )unkcije s#anf$&. 1ako je ime ni a u stvari #a na adresa ni a> oigledno je 4 ekvivalentno sa 74V0W. Stoga je operator adresiranja ispred imena ni a 4 nepotre#an. +a uitavanje stringova naje8e se koristi )unkcija gets$&. Ovom )unkcijom se pri0vataju svi naci sa tastature> sve dok se ne unese nak a novi red Z\nZ. +nak a prela u novi red se ignori8e> dok se svi ostali karakteri dodeljuju stringu koji se uitava. 1ao poslednji nak uitanog stringa uvek se postavlja n%ll karakter Z\0Z. Prototip )unkcije gets$& je o#lika
;Aar Egets&;Aar E'

Akoliko je uitavanje avr8eno korektno> vrednost ove )unkcije je poka iva na adresu u kojoj je sme8ten prvi nak stringa s. A suprotnom sluaju> vraena vrednost je -A** $nulta adresa> koja je u datoteci stdio.0 de)inisana sa 0&. /o nai da se kontrola pravilnosti ula a mo@e kontrolisati i ra om
while)gets)ime*33"BII*2

Primer. Aitavanje stringa i njegovo prika ivanje na ekran.


Jin;-+deKstdio.AL void main&' 9 ;Aar imeH100I ;Aar E=o@ =o@=gets&ime' =rint,&31. na;in7 RsSn3,ime' B

=rint,&32. na;in7 RsSn3,=o@'

Primer. (e je data kao ni od n karaktera $nT!00&. -apisati program koji nala i najdu@i palindrom u toj rei. Palindrom je podni od u astopni0 elemenata koji se jednako ita s leva i s desna.
Jin;-+de Kstdio.AL void main&' 9 ;Aar aH300I int i,>,n,maxi,max-,max>,ind,int =a-&;Aar E, int, int' =rint,&30nesi Dro> @ara@tera re;iSn3' s;an,&3Rd3,Un' =rint,&30nesi re;7Sn3' s;an,&3R;3, UaH0I' ,or &i=0 iKn i""' s;an,&3R;3, UaHiI' max-=0 ,or &i=0 iKn i""' ,or &>=i >Kn >""' 9 i,&=a-&a,i,>'' 9 -=&>#i'"1 i, &-Lmax-'9 max-=- max>=> maxi=i B B B =rint,&3S]a>d+<i =a-indrom >e od =o<i;i>e Rd do RdSn3, maxi,max>' ,or &i=maxi iK=max> i""' =rint,&3R;3,aHiI'

166

Predrag S. Stanimirovi =rint,&3Sn3'

Osnove programiranja

int =a- &;Aar Ea, int i, int >' 9 int = int -,@,m ;Aar DH300I -=&>#i'"1 @=0 ,or &m=i mK=> m""' DH""@I=aHmI ==1 @=1 OAi-e&= UU @K=-62' i,&DH@I V= DH-#@"1I' ==0 e-se @"" ret+rn&=' B

Primer. A #eskonanom ciklusu se uitavaju stringovi i ispituje da li su palindromi. Stringovi se tretiraju kao pointeri na karaktere.
void main&' 9 ;Aar sH30I =rint,&3Sn 1tringovi + Des@onaCnom ;i@-+s+Sn3' OAi-e&1' 9 =rint,&34adati stringSn3' gets&s' i,&=a-indrom&s'' =rint,&3^este =a-indromSn3' e-se =rint,&3]i>e =a-indromSn3' B B int =a-indrom&;Aar Estr=o@' 9 ;Aar Estr=o@1=str=o@ OAi-e&Estr=o@1'""str=o@1 ##str=o@1 OAi-e&str=o@ K str=o@1' i,&Estr=o@"" V= Estr=o@1##' ret+rn&0' ret+rn&1' B

Primer. Aitava se tekst> sve do naka .:/. 8tampati i ve8taj> u kome se nala e du@ine rei sadr@ani0 u tekstu> kao i #roj rei date du@ine.
Jin;-+deKstdio.AL Jin;-+deKstring.AL Jde,ine MA* X0 int se=arator&;Aar ;A' 9 ret+rn&;A==2,2WW;A==22WW;A==2 2WW;A==2&2WW;A==2'2 WW;A==2 2WW;A==2V2WW;A==2_2' B void main&' 9 ;Aar ;A int i,>,-=0 int DHMA*I ,or&i=1 iK=MA* i""'DHiI=0 ;A=get;Aar&' OAi-e&;A V= %OF' 9 OAi-e&;A V= 2Sn2' 9 ;A=get;Aar&' i,&Vse=arator&;A'' -"" e-se i,&-L0' 9 DH-I"" -=0 B B ;A=get;Aar&' i,&-L0' 9 DH-I"" -=0 B B i,&-L0' DH-I"" =rint,&3Rs RsSn3,3Bro> re;i3,3Bro> =onav->an>a3' ,or&i=1 iK=MA* i""' i,&DHiIL0' =rint,&3Rd RdSn3,i,DHiI'

167

Predrag S. Stanimirovi B

Osnove programiranja

2e je poka ano da se vrednosti stringova mogu ispisivati pomou )unkcije printf> koristei )ormat `s. /ako3e> a ispis stringova se mo@e koristiti standardna )unkcija p%ts. 5unkcija p%ts ima jedan argument> koji predstavlja poka iva na poetnu adresu stringa koji se ispisuje. 5unkcija p%ts ispisuje sve karaktere poev od po icije odre3ene argumentom )unkcije do avr8nog karaktera \0Z. Primer. +adati string s koristei )unkciju gets$&. -apisati )unkciju a i #acivanje svi0 nula sa kraja stringa> kao i )unkciju a i #acivanje nula sa poetka uitanog stringa. A glavnom programu i #aciti sve poetne i avr8ne nule u adatom stringu.
void main&' 9 ;Aar sH30I void +@-oni_@ra>&;Aar E' void +@-oni_=o;eta@&;Aar E' =rint,&3Sn 4adati string7Sn3' gets&s' +@-oni_@ra>&s' =rint,&3Sn1tring De< <adn>iA n+-a = 3' =+ts&s' +@-oni_=o;eta@&s' =rint,&3Sn1tring De< =o;etniA i <adn>iA n+-a = 3' B void +@-oni_=o;eta@&;Aar Es' 9 ;Aar Et=s OAi-e&Et UU Et==202' t"" 6E ]a?en >e =rvi @ara@ter ra<-i;it od S0 E6 OAi-e&Et' Es""=Et"" 6E :o=ira =reosta-e @ara@tere na =o;eta@ stringa E6 Es=2S02 B void +@-oni_@ra>&;Aar Es' 9 ;Aar Et=s OAi-e&Et't"" t## OAi-e&Et==202't## t"" Et=2S02 B

=+ts&s'

Primer. -apisati program kojim se u jednoj liniji unosi korektno apisan post)iksni i ra > a atim i raunava njegova vrednost. Operandi u i ra u su prirodni #rojevi ra dvojeni #lanko sim#olom> a operacije su i skupa [=> -> R> G]> pri emu je G celo#rojno deljenje. -a primer> post)iksnom i ra u ! 2 7 = - " R odgovara in)iksni i ra $!-$2=7&&R"S-2".
Jin;-+deKstdio.AL Jin;-+deKstring.AL Jin;-+deKstdio.AL void main&' 9 ;Aar i<ra<HX0I, Es int aH$1I,n,gres@a,x,st OAi-e&1' 9 gets&i<ra<' n=0 gres@a=0 s=i<ra< OAi-e&Es UU Vgres@a' 9 i,&EsL=202 UU EsK=282' 9 x=0 st=1 OAi-e &EsL=202 UU EsK=282' 9 x"=&Es#202'Est stE=10 s"" aHn""I=x B e-se i,&EsV=2 2' 9 sOit;A&Es'

168

Predrag S. Stanimirovi 9 ;ase ;ase ;ase ;ase B n## 2"27 2#27 2E27 2627 aHn#2I"=aHn#1I Drea@ aHn#2I#=aHn#1I Drea@ aHn#2IE=aHn#1I Drea@ i,&aHn#1I' aHn#2I6=aHn#1I e-se gres@a=1

Osnove programiranja

B i,&Vgres@a' =rint,&3RdSn3,aH0I' e-se =rint,&3gres@a, de->en>e n+-omSn3' B B

B s""

S'+ 1+)1 $ 40 ,6#.$ /+ )+1 s+ s')# *!"#&+ 0 8


Standardna #i#lioteka sadr@i vei #roj )unkcija a manipulaciju stringovima. Ove )unkcije nisu deo C je ika> ali su napisane u je iku C. A njima su esto promenljive deklarisane u memorijskoj klasi register> da #i se o#e #edila nji0ovo #r@e i vr8avanje. Sve te )unkcije a0tevaju da se string avr8ava null karakterom> a nji0ov re ultat je integer ili pointer na c0ar. Prototipovi ovi0 )unkcija su dati u 0eader )ajlu Tstring.AU.
unsigned strlen)char Gs* int strcmp)char Gs9, char Gs;* int strncmp)char Gs9, char Gs;, int n*

Pre#rojava sve karaktere pre Z\0Z u s> i vraa na3eni #roj. (e ultat je ceo #roj T0> S0 ili U0> avisno od toga da li je s1 u leksikogra)skom poretku manje> jednako ili vee od s2. Slina je )unkciji strcmp> osim 8to ova )unkcija upore3uje najvi8e n karaktera niske s1 sa odgovarajuim karakterima niske s2. Stringovi s1 i s2 se spajaju> a re ultujui string se sme8ta u s1. (e ultat je pointer na s1. A stvari> pove uje nisku s2 sa krajem niske s1. ;ora da se alocira dovoljno memorije a s1. -adove uje najvi8e n nakova niske s2 sa krajem niske s1. -isku s1 avr8ava karakterom \0 i vraa s1. String s2 se kopira u memoriju> poev od #a ne adrese na koju uka uje s1. Sadr@aj od s1 se gu#i. (e ultat je pointer s1. 1opira najvi8e n nakova stringa s2 u memoriju> poev od #a ne adrese na koju uka uje s1. (e ultat je pointer s1. (e ultat primene ove )unkcije je pointer na prvo pojavljivanje karaktera # u stringu s> ili ;099 ako se # ne sadr@i u s. Ova )unkcija vraa poka iva na prvi nak u s1 poev od koga se s2 sadr@i u s1. Ova )unkcija prevodi string s sastavljen od HSC%% nakova u ekvivalentan ceo #roj. %spred decimalnog #roja koji je sadr@an u s mo@e da stoji proi voljan #roj nula> pra nina ili nakova ta#ulacije> i ono se ignori8u. String s mo@e poinjati nakom minus $-&> i tada je re ultat konver ije negativni ceo #roj. Droj se avr8ava null karakterom q\0r ili #ilo kojim nakom koji nije ci)ra. Ova )unkcija se nala i u standardnoj #i#lioteci stdlib1&.

char Gstrcat)char Gs9, char Gs;*

char Gstrncat)char Gs9, char Gs;, int n* char Gstrcpy)char Gs9, char Gs;* char Gstrncpy)char Gs9, char Gs;, int n* char Gstrchr)char Gs, char c*

char Gstrstr)char Gs9, char Gs;* int atoi)char Gs*

169

Predrag S. Stanimirovi

Osnove programiranja

float atof)char Gs*

Ova )unkcija prevodi string s sastavljen od HSC%% nakova u ekvivalentan realni #roj. Ova )unkcija se nala i u standardnoj #i#lioteci stdlib1&.

5unkcija str-en mo@e da se implementira na sledei nainF


+nsigned str-en&s' register ;Aar Es 9 register +nsigned n ,or &n=0 EsV=2S02 ret+rn&n' B

""s' ""n

Primer.
;Aar s1H100I, s2H100I, tH100I, Estr;at&', Estr;=Q&' str;=Q&s1, 3re;eni;a 13' str;=Q&s2, 3re; 23' str-en&s1' 6E 10 E6 str-en&s1"8' 6E 1 E6 str;m=&s1, s2' 6E =o<itivan Dro> E6 str=Q&t,s1"8' 6E t=313 E6 str;at&t,3 3' 6E t=31 3 E6 str;at&t,s1"8' 6E t=31 13E6 =rint,&3Rs3,t' 6E 1 1E6 B

Primer. 5unkcija str;=Q se mo@e implementirati na sledei nainF


;Aar Estr=Q&;Aar Es1, ;Aar Es2' 9 ;Aar + +=s2 OAi-e&s1""=s2""' ret+rn&+' B

Primer. 1a@emo da se string A pojavljuje u stringu sa pomakom s> ili da se 0 pojavljuje u od po icije s ako su ispunjeni sledei usloviF 0 TS s TS n - 0n> Vs='W S 0V'W a 0 TS ' T 0n> gde je n #roj elemenata u stringu a 0n du@ina stringa 0. Odrediti sva pojavljivanja stringa 0 u stringu .
Jin;-+deKstring.AL void se@v_sm &;Aar Et, ;Aar E+' 9 int s, > int tn, +n tn = str-en&t' +n = str-en&+' ,or &s = 0 s K= tn#+n s""' 9 ,or &> = 0 > K +n >""' i, &tHs">I V= +H>I' Drea@ i,&> == +n' =rint,&30<ora@ se =o>av->+>e sa =o;et@om Rd.Sn3, s' B B void main&' 9 ;Aar Es1, Es2 =rint,&3Prvi string_ 3' gets&s1' =rint,&3Dr+gi string_ 3' gets&s2' se@v_sm&s1,s2' B

poev

170

Predrag S. Stanimirovi

Osnove programiranja

Primer. -apisati C program a ure3ivanje ni a imena po a#ecednom redosledu. Droj imena nije unapred po nat. Svako ime se uitava u pose#nom redu. -i imena se avr8ava imenom koje je jednako t...u.
Jin;-+deKstdio.AL Jin;-+deKstring.AL Jde,ine ] 100 Jde,ine D $0 void main&' 9 ;Aar ->+diH]IHD"1I, osoDaHD"1I int i,>,m,n=0 665itan>e ne+red>enog ni<a imena do gets&->+diHnI' OAi-e&str;m=&->+diHn""I,3...3'V=0' n## 660red>ivan>e ni<a imena ,or&i=0 iKn#1 i""' 9 m=i ,or&>=i"1 >Kn >""' i,&str;m=&->+diH>I,->+diHmI'K0'm=> i,&mV=i' 9 str;=Q&osoDa,->+diHiI' str;=Q&->+diHiI,->+diHmI' str;=Q&->+diHmI,osoDa' B B 66Is=isivan>e +red>enog ni<a imena ,or&i=0 iKn =+ts&->+diHi""I'' B

6.6. Z+(#s#
+apisi $slogovi& su strukture podataka koje se> a ra liku od ni ova> sastoje od komponenti $segmenata& ra liitog tipa. 1omponente sloga se o#ino na ivaju polja. Svako polje poseduje ime i tip. %mena polja se grade kao i drugi identi)ikatori. +apisi se u programu de)ini8u preko eksplicitni0 de)inicija odgovarajui0 strukturni0 tipova podataka ili preko anonimni0 opisa tipova. Sledei primer i je ika Pascal ilustruje eksplicitne de)inicije strukturnog tipa podataka koji o#u0vata apiseF
type dat+m = record mese; 7&>an,,eD,mar,a=r,ma>,>+n,>+-,avg,se=,o@t,nov,de;' dan 7 1..31 godina 7 1800..2100 end$

A ovom primeru de)inisan je strukturni tip dat%m koji mo@e da se koristi a de)inisanje konkretni0 apisa u programu> nprF
danas, s+tra 7 dat+m

Ove promenljive su mogle #iti de)inisane implicitno na sledei nainF


danas, s+tra 7 record mese; 7&>an,,eD,mar,a=r,ma>,>+n,>+-,avg,se=,o@t,nov,de;' dan 7 1..31 godina 7 1800..2100 end$

Sintaksni dijagram kojim se opsiuje struktura sloga dat je na sledeoj slici

171

Predrag S. Stanimirovi

Osnove programiranja

Dekusova notacija ima sledei o#likF


,slogovni tip.113record ,ime pol-a.!,,ime pol-a....% 1 ,tip. !2 ,ime pol-a.!,,ime pol-a....% 1 ,tip....% end2

Pojedinim komponentama ovako de)inisani0 struktura podataka mo@e se pristupati preko selektora koji se )ormira od imena neke promenljive strukturnog tipa $ne ime strukturnog tipa&> take i imena komponete. -a primerF
danas.mese; 7= de; s+tra.dan 7= 1$ danas.dan 7= s+tra.dan

Slog predstavlja strukturu podataka kod koji0 je mogu direktan pristup #ilo kom polju sloga> #e pret0odnog navo3enja polja koja mu pret0ode u de)iniciji sloga. Eednom de)inisani strukturni tipovi mogu da se koriste a de)inisanje novi0 strukturni0 tipova. ;o@e se de)inisati strukturni tip koji predstavlja ni ove apisaF
type =ra<ni@ = arrayH1..10I of DA.0M var /as=+st 7 P/A4]I:

/ako3e> preko ve de)inisani0 apisa mogu se de)inisati novi apisiF


type O1OBA = record Ime 7 1tringH10I Pre<ime 7 1tringH1!I Dan_ro? 7 DA.0M end 1t+dent, ^a, .i 7 O1OBA

Primer. Osnovne operacije sa kompleksnim #rojevima.


=rogram @ra;+n tQ=e ;om=-ex = re;ord re, im7reaend var a,D,;,d,e,,,g,A7;om=-ex r-7rea=ro;ed+re saDiran>e &x, Q7;om=-ex var <7;om=-ex' Degin <.re 7= x.re " Q.re <.im 7= x.im " Q.im end =ro;ed+re od+<iman>e&x,Q7;om=-ex var <7;om=-ex' Degin <.re 7= x.re # Q.re <.im 7= x.im # Q.im end =ro;ed+re mno<en>e&x,Q7;om=-ex var <7;om=-ex' Degin <.re 7= x.reEQ.re # x.imEQ.im <.im 7= x.reEQ.im " x.imEQ.re end =ro;ed+re ;on>+g&x7;om=-ex var Q7;om=-ex' Degin Q.re 7= x.re Q.im 7= #x.im end ,+n;tion mod+o&;7;om=-ex'7reaDegin

172

Predrag S. Stanimirovi mod+o 7= sTrt& sTr&;.re' " sTr&;.im' ' end =ro;ed+re de->en>e&x,Q7;om=-ex var <7;om=-ex' var ;7;om=-ex r7reaDegin ;on>+g&Q, ;' mno<en>e&x, ;, <' r 7= sTr&Q.re' " sTr&Q.im' <.re 7= <.re6r <.im 7= <.im6r end =ro;ed+re +;ita>&var ;7;om=-ex' Degin Orite&2 /ea-ni deo = _ 2' read&;.re' Orite&2 Imaginarni deo = _ 2' read-n&;.im' end =ro;ed+re stam=a>&;7;om=-ex' Degin Orite&2 &2, ;.re707(, 2.2, ;.im707(, 2 ' 2' end

Osnove programiranja

Degin +;ita>&a' +;ita>&D' +;ita>&;' saDiran>e&a, D, d' od+<iman>e&a, ;, e' saDiran>e&D, ;, ,' de->en>e&d, e, g' mno<en>e&g, ,, A' Orite-n Orite-n Orite&2 &a"D'6&a#;'E&D";' = 2' stam=a>&A' Orite-n Orite-n r-7= mod+o&d' e.re 7= e.reEr- e.im 7= e.imErOrite&2 Wa"DWE&a#;' = 2' stam=a>&e' Orite-n Orite-n end.

Primer. 6e)inisan je tip


;onst max=!0 tQ=e =o-inom = re;ord red70..max @oe,7arraQH0..maxI o, reaend

koji predstavlja unutra8nju )ormu polinoma. -apisati procedure a uitavanje> ispis polinoma> kao i procedure a #ir> ra liku i proi vod dva polinoma. A glavnom programu testirati napisane procedure.
=rogram =o-inomi ;onst max = !0 tQ=e =o-inom = re;ord red 7 0..max @oe, 7 arraQH0..maxI o, reaend var a, D, ;, d7=o-inom =ro;ed+re +;itavan>e&var x7=o-inom' var i 7 integer Degin Orite&2red = _ 2' read&x.red' Orite&2:oe,i;i>enti = _ 2' ,or i 7= 0 to x.red do end =ro;ed+re <Dir&a,D7=o-inom var i 7 integer Degin i, a.red L D.red tAen Degin var ;7=o-inom'

read&x.@oe,HiI'

173

Predrag S. Stanimirovi

Osnove programiranja

;.red 7= a.red ,or i 7= 0 to D.red do ;.@oe,HiI 7= a.@oe,HiI " D.@oe,HiI ,or i 7= D.red"1 to a.red do ;.@oe,HiI 7= a.@oe,HiI end e-se Degin ;.red 7= D.red ,or i 7= 0 to a.red do ;.@oe,HiI 7= a.@oe,HiI " D.@oe,HiI ,or i 7= a.red"1 to D.red do ;.@oe,HiI 7= D.@oe,HiI end end =ro;ed+re =roi<vod&a, D7=o-inom var ;7=o-inom' var i,>7integer Degin ;.red 7= a.red " D.red ,or i 7= 0 to ;.red do ;.@oe,HiI 7= 0 ,or i 7= 0 to a.red do ,or > 7= 0 to D.red do ;.@oe,Hi">I 7= ;.@oe,Hi">I " a.@oe,HiIED.@oe,H>I end =ro;ed+re stam=an>e&x7=o-inom' var i 7 integer Degin Orite&x.@oe,Hx.redI7X72, 2ExEE2, x.red' ,or i 7= x.red#1 doOnto 1 do Orite&2"2,x.@oe,HiI7X72, 2ExEE2, i' Orite&x.@oe,H0I7X72' end Degin Orite-n&24adati =rvi =o-inom 2' +;itavan>e&a' Orite-n&24adati dr+gi =o-inom 2' +;itavan>e&D' <Dir&a, D, ;' =roi<vod&a, D, d' Orite-n Orite-n&2 4Dir +netiA =o-inoma >e 7 2' stam=an>e&;' Orite-n Orite-n&2 Proi<vod +netiA =o-inoma >e 7 2' stam=an>e&d' Orite-n Orite-n end.

Primer. 6ata je realna matrica X dimen ije mn i celi #rojevi 2p i Np> $1TS 2pTS m> 1 TS Np TS n&. Svakom elementu matrice pridru@uje se jedno polje na tano odre3en nain. Polje je odre3eno sa tri elementaF koordinatama $i>'& i realnim #rojem koji predstavlja njegovu visinu. Droj XVi>'W odre3uje visinu polja sa koordinatama $i>'&. A polju sa koordinatama $2p> Np& nala i se loptica. *optica prela i sa polja ) na polje + ako va@e sledei usloviF - polja ) i + su susedna> 8to nai da imaju ajedniku strinicuX - visina polja + je strogo manja od visine polja )> i - polje + ima najmanju visinu u odnosu na sva polja koja su sesedna u odnosu na ). *optica se austavlja u polju u odnosu na koje ne postoji polje na koje mo@e da pre3e. /akvo polje se na iva vr8no. Odrediti polje na kome e se loptica austaviti kao i put od poetnog polja $2p> Np& do avr8nog.
=rogram -o=ti;a +ses ;rt tQ=e matri;a = arraQH1..!0,1..!0I o, rea@oordinate =1..!0 =o->e=re;ord i,>7@oordinate visina7reaend

174

Predrag S. Stanimirovi var x7matri;a a,D7=o->e i,>,m,n7@oordinate @ra>7Doo-ean

Osnove programiranja

=ro;ed+re na>ni<e_s+sedno&=7=o->e mat7matri;a var na>ni<e7=o->e' Degin na>ni<e7== i,&=.i#1 in H1..mI' and &=.> in H1..nI' and &matH=.i#1,=.>IKna>ni<e.visina' tAen Degin na>ni<e.visina7=matH=.i#1,=.>I na>ni<e.i7==.i#1 na>ni<e.>7==.> end i,&=.i"1 in H1..mI' and &=.> in H1..nI' and &matH=.i"1,=.>IKna>ni<e.visina' tAen Degin na>ni<e.visina7=matH=.i"1,=.>I na>ni<e.i7==.i"1 na>ni<e.>7==.> end i,&=.i in H1..mI' and &=.>#1 in H1..nI' and &matH=.i,=.>#1IKna>ni<e.visina' tAen Degin na>ni<e.visina7=matH=.i,=.>#1I na>ni<e.i7==.i na>ni<e.>7==.>#1 end i,&=.i in H1..mI' and &=.>"1 in H1..nI' and &matH=.i,=.>"1IKna>ni<e.visina' tAen Degin na>ni<e.visina7=matH=.i,=.>"1I na>ni<e.i7==.i na>ni<e.>7==.>"1 end end Degin ;-rs;r Orite&2m = _ 2' read-n&m' Orite&2n = _ 2' read-n&n' ,or i7=1 to m do Degin ,or >7=1 to n do read&xHi,>I' read-n end Orite-n&20nesi @oordinate -o=ti;e 2' Orite&2I= = _ 2' read-n&a.i' Orite&2^= = _ 2' read-n&a.>' a.visina7=xHa.i,a.>I Orite-n Orite-n&2Lo=ti;a =re-a<i s-ede;i =+t72' @ra>7=,a-se re=eat na>ni<e_s+sedno&a,x,D' i, D.visinaKa.visina tAen Degin Orite-n&2 =o->e sa @oordinatama H2,a.i,2,2,a.>,2I2, 2 i visinom 2,xHa.i,a.>I7107!,2 2' a7=D end e-se Degin Orite-n&2i <a+stav->a se + =o->+ sa @oordinatama H2,a.i,2,2,a.>,2I i visinom 2 ,xHa.i,a.>I7107!,2 2' @ra>7=tr+e end +nti- @ra> re=eat +nti- @eQ=ressed

175

Predrag S. Stanimirovi end.

Osnove programiranja

Primer. Hko su dati kompleksan #roj z i realan #roj e U 0 napisati program koji sa adatom tano8u i raunava vrednost kompleksne )unkcije ez S 1=
9h]"B =rogram @ra;+n tQ=e ;om=-ex = re;ord re, im7do+D-e end var <,re<7;om=-ex e=s7do+D-e =ro;ed+re saDiran>e &x, Q7;om=-ex var <7;om=-ex' Degin <.re 7= x.re " Q.re <.im 7= x.im " Q.im end =ro;ed+re mno<en>e&x,Q7;om=-ex var <7;om=-ex' Degin <.re 7= x.reEQ.re # x.imEQ.im <.im 7= x.reEQ.im " x.imEQ.re end ,+n;tion mod+o&;7;om=-ex'7do+D-e Degin mod+o 7= sTrt& sTr&;.re' " sTr&;.im' ' end =ro;ed+re +;ita>&var ;7;om=-ex' Degin Orite-n Orite&2 /ea-ni deo = _ 2' read&;.re' Orite&2 Imainarni deo = _ 2' read-n&;.im' end =ro;ed+re stam=a>&;7;om=-ex' Degin Orite&2 &2, ;.re72271$, 2.2, ;.im72271$, 2 ' 2' end =ro;ed+re ;om=ex=&<7;om=-ex e=s7do+D-e var e<7;om=-ex' var n7integer ;-an7;om=-ex Degin ;-an.re7=1 ;-an.im7=0 e<7=;-an n7=0 OAi-e mod+o&;-an'L=e=s do Degin n7=n"1 ;-an.re7=;-an.re6n ;-an.im7=;-an.im6n mno<en>e&;-an,<,;-an' saDiran>e&e<,;-an,e<' end end Degin +;ita>&<' Orite&2 .a;nost= 2' read-n&e=s' ;om=ex=&<,e=s,re<' stam=a>&re<' end. z 1^ + z
2

2^

+ ... +

n^

+ ... +

176

Predrag S. Stanimirovi

Osnove programiranja

6.7. S')0,'0)$ # +3)!.#"# '#(!"# 0 6


6.7.1. %+ !"# s')0,'0)$
Slino slogovima u Pascalu> strukture do voljavaju da se ra liite komponente ujedine u pojedinanu strukturu. 1omponente strukture su tako3e imenovane i na ivaju se lanovi $odnosno elementi ili polja&. Klementi struktura su ra liiti0 tipova generalno> i mogu se prilago3avati pro#lemu. Strukture se de)ini8u pomou kljune rei struct. A najop8tijem o#liku> strukture se opisuju na sledei nainF
struct !oznaka% + tip ime7elementa9!, ime7elementa;...%2 W /!,ime7promenl-ive 9.!, ime7 promenl-ive ;...%2

(e ervisana re str%#t slu@i kao in)ormacija kompajleru da neposredno i a nje sledi opis neke strukture. +atim sledi neo#ave ni identi)ikator> o<naen sa oznaka> koji predstavlja ime strukture. %me dodeljeno strukturi se mo@e kasnije koristiti pri deklaraciji promenljivi0 strukturnog tipa. % a imena strukture> i me3u veliki0 agrada> deklari8u se pojedini delovi strukture. Klementi strukture mogu #iti proi voljni0 tipova> pa i nove strukture. % a poslednje agrade pi8e se nak ZXZ. % me3u atvorene agrade / i naka X opciono se mogu navesti imena promenljivi0 strukturnog tipa. Primer. Sledeom de)inicijom strukture opisani su osnovni podaci o studentuF ime> #roj indeksa i upisana godina studija.
struct student + char Gime2 int indeks2 int godina2 / s9,s;,s@2

Osim toga> promenljive s1> s2> s! se deklari8u kao promenljive koje mogu da sadr@e konkretne vrednosti saglasno tipu str%#t st%dent> tj. podatke o studentima. Svaki slog o studentu sadr@i tri komponenteF ime> indeks i godina. 1omponenta ime je string> dok su komponente indeks i godina celo#rojnog tipa. Struktura mo@e da se koristi kao 8a#lon a deklaraciju tipova podataka. -a primer> neka je deklarisana struktura student na sledei nainF
struct student + char Gime2 int indeks2 int godina2 /2

Sada se mogu deklarisati strukturne promenljive strukturnog tipa str%#t st%dent. -a primer> mo@emo pisati
struct student pom, razred!9::%2

/ek posle ovakvi0 deklaracija se alocira memorija a promenljivu pom i ni razred. O#jedinjavanje opisa strukture ije je ime i ostavljeno sa deklaracijama promenljivi0 koristi se kada se 8a#lon strukture ne koristi na drugim mestima u programu. -a primer> mo@emo pisati
struct + char Gime2 int indeks2 int godina2 / s9,s;,s@2

Strukturna promenljiva se mo@e inicijali ovati na mestu svoje deklaracijeF


static struct student pom3 + ^Dilan^, 9>FF, @/2

177

Predrag S. Stanimirovi

Osnove programiranja

Blanovima strukture se direktno pristupa pomou operatora Z.Z. -a primer> vrednosti lanovima strukture student mogu se dodeljivati na sledei nainF
pom.ime3 ^Dilan^2 pom.indeks3 9>FF2 pom.godina3 @2

String I;ilanI se mo@e dodeliti kao vrednost polja pom.ime i na sledei nainF
strcpy)pom.ime, ^Dilan^*2

/ako3e> lanovima strukture se mogu adati @eljene vrednosti pomou )unkcija s#anf$& i gets$&F
gets)pom.ime*2 scanf)^Vd^,Hpom.indeks*2 scanf)^Vd^,Hpom.godina*2

Hko se opis strukture navede van svi0 )unkcija> ta struktura se mo@e koristiti u svim )unkcijama koje su de)inisane posle opisa strukture. Ao#iajeno je da se de)inicija strukture navede na poetku i vornog programa> pre opisa promenljivi0 i )unkcija. A velikim programima opisi struktura se o#ino pi8u u pose#nom )ajlu. Primer. Pre#rojati studente tree godine. ;o@e se prvo napisati )ajl cl.0F
Jde,ine ] 10 str+;t st+dent 9 ;Aar Eime int inde@s int godina B

Ovaj 0eader )ajl mo@e se koristiti kao in)ormacija u modulima koje ine program.
Jin;-+de 3;-.A3 void main&' 9 str+;t st+dent sH10I int i ,or&i=0 iK] i""' 9 =rint,&3Rd ti st+dent 7 3,i' s;an,&3Rs3, sHiI.ime' s;an,&3Rd3, UsHiI.inde@s' s;an,&3Rd3, UsHiI.godina' B =rint,&3 1t+denata tre;e godine ima RdSn3, ,ai-&s'' B ,ai-&str+;t st+dent ;-assHI' 9 int i, ;nt=0 ,or &i=0 iK] ""i' ;nt "=;-assHiI.godina==3 ret+rn&;nt' B

Strukture se mogu inicijali ovati od strane programera na mestu svoje deklaracije. Primer. A sledeem khdu je de)inisan na#rojivi tip Hont& i strukturni tip -ate. Ova struktura ima skup vrednosti Date = MontAiBQte = 9>an,,eD, ..., de;Bi90, ..., 2!!B.
Jin;-+deKstdio.AL en+m MontA 9>an,,eD,mar,a=r,maQ,>+n,>+-,a+g,se=,o;t,nov,de;B str+;t Date 9 MontA m int d 178

Predrag S. Stanimirovi B

Osnove programiranja

void main&' 9 str+;t Date somedaQ = 9>an, 1B 66 de@-ara;i>a i in;i>a-i<a;i>a 661-ede;i @od i-+str+>e se-e@;i>+ e-emenata str+@t+re =rint,&3Rd6RdSn3, somedaQ.m " 1, somedaQ.d' somedaQ.d = 28 somedaQ.m = ,eD =rint,&3Rd6RdSn3, somedaQ.m"1, somedaQ.d' B

Primer. Primeri inicijali acije struktura. 1. Struktura dat%mF


str+;t dat+m 9 int dan, mese;, godina B str+;t dat+m d=911, $, 188(B

1. Struktura kartaF
en+m ti= 9M=N,NAN,N@N,NtNB str+;t @arta 9 int vrednost ti= Do>a B str+;t @arta @=912, 2t2B

Primer. 6eklaracija strukture datum i inicijali acija strukturne $i statike& promenljive danas.
Jin;-+de Kstdio.AL void main&' 9 str+;t dat+m 9 int dan int mese; int godina B danas=98, $, 188(B =rint,&3Rd.Rd.Rd.Sn3,danas.dan,danas.mese;,danas.godina' B

Primer. Program a korekciju tekueg vremena.


void main& ' 9 str+;t vreme 9 int sat int min+t int se@+nd B te@+;e,naredno =rint,&30nesi te@+;e vreme H;;7mm7ssI73' s;an,&3RdRdRd3,Ute@+;e.sat,Ute@+;e.min+t,Ute@+;e.se@+nd' naredno=te@+;e i, &""naredno.se@+nd==(0' 9 naredno.se@+nd=0 i,&""naredno.min+t==(0' 9 naredno.min+t=0 i,&""naredno.sat==2$' naredno.sat=0 B B =rint,&3]aredno vreme7 Rd7Rd7RdSn3, naredno.sat, naredno.min+t, naredno.se@+nd' B

6.7.2 S')0,'0) # '#(!"# # (!,+/#"+5# 0 8


;ogu se de)inisati poka ivake promenljive koje e poka ivati na strukturne promenljive.

179

Predrag S. Stanimirovi

Osnove programiranja

2rednosti ovakvi0 poka ivaki0 promenljivi0 jesu adrese strukturni0 promenljivi0 na koje poka uju. -a primer> a de)inisani strukturni tip podataka student mo@e se de)inisati poka ivaka promenljiva pst%dentF
struct student Gpstudent2

Sada se elementima strukture student mo@e pristupiti koristei operator indirekcije ZRZ i operator Z.ZF
)Gpstudent*.ime )Gpstudent*.indeks )Gpstudent*.godina

A cilju pristupa elementima strukturne promenljive pomou poka ivaa na tu promenljivu uveden je operator ZZstrelica u desnoZZ -U. 7eneralno pravilo je sledeeF ako je poka ivakoj promenljivoj pointerCstrukture dodeljena adresa neke strukture> tada je i ra
pointer7strukture .ime78lana

ekvivalentan i ra u
)Gpointer7strukture*.ime78lana

A poslednjem i ra u agrade nisu neop0odne. Operatori -U i Z.Z imaju asocijativnost sleva udesno. -a primer elementima strukture pstudent pristupa se na sledei nainF
pstudent .ime pstudent .indeks pstudent .godina

Sve eksterne i statike promenljive> ukljuujui strukturne promenljive> koje nisu eksplicitno inicijali ovane> automatski se inicijali uju na vrednost nula. Primer. -eka je de)inisana struktura li#nost na sledei nainF
struct licnost + char ime!@:%2 char adresa!<:%2 unsigned starost2 /

/ako3e> neka je de)inisana poka ivaka promenljiva oso#aF


struct licnost Gosoba2

Klementima strukture linost> na koju uka uje promenljiva oso#a> mo@e se pristupiti pomou operatora indirekcije ZRZ i operatora Z.ZF
)Gosoba*.ime )Gosoba*.adresa )Gosoba*.starost

/ako3e> elementima strukturne promenljive na koju uka uje pointer oso#a> mo@e se pristupiti i na sledei nainF
osoba .ime osoba .adresa osoba .starost

5ormalni parametar )unkcije mo@e #iti strukturna promenljiva kao i poka iva na strukturnu promenljivu. Akoliko je )ormalni parametar strukturna promenljiva> tada se kao stvarni parametar navodi strukturna promenljiva. A po ivu te )unkcije> kao stvarni parametar> predaje se kopija vrednosti te strukturne promenljive. -a taj nain> ne menja se vrednost strukturne promenljive koja je predata kao stvarni parametar. A sluaju kada je )ormalni parametar )unkcije pointer na strukturu> tada se kao

180

Predrag S. Stanimirovi

Osnove programiranja

stvarni parametar predaje adresa strukturne promenljive. /ime je omogueno ne samo kori8enje vrednosti poka ivake promenljive $pomou operatora indirekcije&> ve i promena ti0 vrednosti. /ako3e> strukture se mogu koristiti kao elementi ni ova. -i ovi struktura se deklari8u analogno ostalim ni ovima. -a primer> a de)inisane strukture li#nost i st%dent mogu se koristiti ni ovi
struct licnost osobe!;:% struct student studenti!<:%

Ovakvim deklaracijama opisan je ni struktura oso#e od najvi8e 20 elemenata> kao i ni struktura studenti sa najvi8e ,0 elemenata. Svaki element ni a oso#e predstavlja jednu strukturnu promenljivu tipa li#nost. Primer. A ovom primeru je de)inisana matrica kompleksni0 #rojeva i dodeljene su poetne vrednosti njenim elementima. Svaki element matrice predstavljen je parom realni0 #rojeva.
stati; str+;t ;om=-ex 9 do+D-e reado+D-e imag B mH3IH3I= 9 9 91.0,#0.!B, 92.!,1.0B, 90.),0.)B B, 9 9).0,#(.!B, 9#0.!,1.0B, 9$!.),X.0B B, B

Klementi strukture mogu #iti nove strukture. Struktura koja sadr@i #ar jedan element strukturnog tipa na iva se 0ijerar0ijska struktura. Primer. 6e)inisana je struktura licnost koja sadr@i element dat%mrod'ena strukturnog tipa dat%mF
struct datum + unsigned dan2 unsigned mesec2 unsigned godina2 / struct licnost + char Gime2 datum datumrod-en-a2 /

Strukturna promenljiva danas mo@e se de)inisati pomou i ra a


struct datum danas2

Pointer p na ovu strukturu deklari8e se iska om


struct datum Gp2

Postavljanje pointera p na adresu strukturne promenljive danas ostvaruje se nared#om


p3Hdanas2

Sada se strukturnoj promenljivoj danas mo@e pristupiti indirektno> pomou pointera p na jedan od sledea dva ekvivalentna nainaF )Gp*.godina39FFA2 p .godina39FFA2 p .mesec342 )Gp*.mesec342 p .dan3992 )Gp*.dan3992 /ako3e> pointeri mogu #iti lanovi strukture. Primer. % ra
struct pointeri + int Gn92 int Gn;2 /2

181

Predrag S. Stanimirovi

Osnove programiranja

de)ini8e strukturu pointeri sa dva uka atelja n1 i n2 na tip int. Sada se mo@e deklarisati strukturna promenljiva %kazF
str+;t =ointeri +@a< void main&' 9 int i1, i2 str+;t 9 int En1 int En2 B+@a< +@a<.n1=Ui1 +@a<.n2=Ui2 E+@a<.n1=111 E+@a<.n2=222 6E indire@tno dode->ivan>e vrednosti =romen->ivim i1, i2 E6 =rint,&3i1=Rd E+@a<.n1=RdSn3, i1, E+@a<.n1' =rint,&3i2=Rd E+@a<.n2=RdSn3, i2, E+@a<.n2' B

Primer. 6va ekvivalentna pristupa elementima strukture.


str+;t 1im=-e 9 int a B int main&' 9 1im=-e so, Es= = Uso s=#La so.a B

Primer. 6ato je n krugova. %spitati da li se krugovi seku. Sa ula a se uitava n> a u naredni0 n redova su adati centar i poluprenik svakog kruga. %spisati redne #rojeve svaka dva kruga koji se seku.
Jin;-+deKstdio.AL Jin;-+deKmatA.AL str+;t .a;@a9 do+D-e x,Q B str+;t :r+g9 .a;@a O do+D-e /

B B

void 5ita>:r+g&:r+g E:' 9 s;an,&3R-,R-,R-,3, U:#LO.x, U:#LO.Q,U:#L/'

int Interse;t&:r+g :1, :r+g :2' 9 do+D-e d=sTrt&=oO&:1.O.x#:2.O.x,2'" =oO&:1.O.Q#:2.O.Q,2'' ret+rn &&dK:1./":2./' UU &dL,aDs&:1./#:2./''' B void main&' 9 int i,>,n :r+g :H!I s;an,&3Rd3,Un' ,or&i=0 iKn i""' 5ita>:r+g&U:HiI' ,or&i=0 iKn#1 i""' ,or&>=i"1 >Kn >""' i,&Interse;t&:HiI,:H>I'' B

=rint,&3&Rd,Rd'Sn3,i"1,>"1'

6.7.3. D$4# #6#.+ s')0,'0) #- '#(!"+ (!&!F0 '=($1$4


;ogu se uvesti i strukturni tipovi podataka pomou operatora t"pedef.
typedef struct + int dan2 int mesec2 int godina2 / datum2

Sada se identi)ikator dat%m mo@e koristiti kao samostalan tip podataka. -a primer> iska om

182

Predrag S. Stanimirovi
datum rod-endan!9:%2

Osnove programiranja

deklari8e se vektor rod'endan kao jednodimen ionalni vektor sa elementima tipa datum. Primer. %me string kao tip a poka ivae na tip #&ar uvodi se pomou operatora t<pede) na sledei nainF
typedef char Gstring2

Sada je
string str9, str;2

ekvivalentno sa
char Gstr9, Gstr;2

Primer. %mplementacija osnovni0 aritmetiki0 operacija nad kompleksnim #rojevima. 1ompleksni #rojevi su predstavljeni strukturom kom.
Jin;-+de Kstdio.AL Jin;-+de KmatA.AL 6E 0G%D%]I .IPOGI E6 str+;t @om 9 ,-oat =rvi,dr+gi

6E ]A^AG% F0]:5I^A E6 void +=is&str+;t @om E=' void is=is&str+;t @om =' str+;t @om <Dir&str+;t @om =,str+;t @om T' str+;t @om =roi<&str+;t @om =,str+;t @om T' void main&' 9 str+;t @om a,D,; +=is&Ua' +=is&UD' ;=<Dir&a,D' =rint,&3]>iAov <Dir >e 3' is=is&;' ;==roi<&a,D' =rint,&3]>iAov =roi<vod >e 3' is=is&;' B void +=is&str+;t @om E=' 6E Da Di +=isani @om=-e@san Dro> Dio <a=am;en @oriste se =ointeri. Prema tome, @oriste se o<na@e &E='.=rvi==#L=rvi, &E='.dr+gi==#Ldr+gi E6 9 ,-oat x,Q s;an,&3R,R,3,Ux,UQ' =#L=rvi=x =#Ldr+gi=Q B void is=is&str+;t @om =' 9 i,&=.dr+giL0' =rint,&3Sn R, " iER,Sn3,=.=rvi,=.dr+gi' e-se =rint,&3Sn R, f iER,Sn3,=.=rvi,,aDs&=.dr+gi'' B str+;t @om <Dir&str+;t @om =,str+;t @om T' 6E 0 5#>e<i@+ vrednost ,+n@;i>e MO4% DA B0D% str+;t ti=a E6 9 str+;t @om =riv =riv.=rvi==.=rvi"T.=rvi =riv.dr+gi==.dr+gi"T.dr+gi ret+rn&=riv' B str+;t @om =roi<&str+;t @om =,str+;t @om T' 9 str+;t @om =riv =riv.=rvi==.=rviET.=rvi#=.dr+giET.dr+gi =riv.dr+gi==.=rviET.dr+gi"=.dr+giET.=rvi ret+rn&=riv'

183

Predrag S. Stanimirovi B

Osnove programiranja

Ovaj adatak se mo@e uraditi u kori8enje t"pedef i ra a. 1ompleksni #rojevi se repre entuju novim tipom kompl.
Jin;-+de Kstdio.AL Jin;-+de KmatA.AL tQ=ede, str+;t 9 ,-oat =rvi,dr+gi B @om=-

void +=is&@om=- E=' void is=is&@om=- =' @om=- <Dir&@om=- =,@om=- T' @om=- =roi<&@om=- =,@om=- T' void main&' 9 @om=- a,D,; +=is&Ua' +=is&UD' ;=<Dir&a,D' ;==roi<&a,D' is=is&;' B void +=is&@om=- E=' 9 ,-oat x,Q =rint,&3 Da> dva Dro>a =#L=rvi=x =#Ldr+gi=Q B

is=is&;'

7Sn3'

s;an,&3R,R,3,Ux,UQ'

void is=is&@om=- =' 9 =rint,&3Sn R, Ei" R,Sn3,=.=rvi,=.dr+gi'

@om=- <Dir&@om=- =,@om=- T' 9 @om=- =riv =riv.=rvi==.=rvi"T.=rvi =riv.dr+gi==.dr+gi"T.dr+gi ret+rn&=riv' B @om=- =roi<&@om=- =,@om=- T' 9 @om=- =riv =riv.=rvi==.=rviET.=rvi#=.dr+giET.dr+gi =riv.dr+gi==.=rviET.dr+gi"=.dr+giET.=rvi ret+rn&=riv' B

Primer. 6ato je n krugova. %spitati da li se krugovi seku. Sa ula a se uitava n> a u naredni0 n redova su adati centar i poluprenik svakog kruga. %spisati redne #rojeve svaka dva kruga koji se seku.
Jin;-+deKstdio.AL Jin;-+deKmatA.AL tQ=ede, str+;t 9do+D-e x,Q B .a;@a tQ=ede, str+;t 9 .a;@a O do+D-e / B :r+g

int interse;t&:r+g a, :r+g D' 9 do+D-e d d=sTrt&=oO&a.O.x#D.O.x,2'"=oO&a.O.Q#D.O.Q,2'' ret+rn &dKa./"D./'UU &dL,aDs&a./#D./'' B void main&' 9 int i,>,n :r+g aH100I s;an,&3Rd3,Un' ,or&i=1 iK=n i""' s;an,&3R-,R-,R-,3,UaHiI.O.x,UaHiI.O.Q,UaHiI./'

184

Predrag S. Stanimirovi ,or&i=0 iKn#1 i""' ,or&>=i"1 >Kn >""' i,&interse;t&aHiI,aH>I'' =rint,&3Rd

Osnove programiranja

RdSn3,i,>'

Primer. (etka matrica se mo@e predstaviti #rojem ne-nula elemenata kao i sledeim in)ormacijama a svaki ne-nula elementF - redni #roj vrste tog elementa> - redni #roj kolone tog elementa> i - realan #roj koji predstavlja vrednost tog elementa. Predstaviti retku matricu #rojem ne-nula elemenata i ni om slogova> u kome svaki slog sadr@i redni #roj vrste i kolone kao i vrednost svakog ne-nula elementa. -apisati procedure a )ormiranje ni a slogova koji predstavljaju repre entaciju retke matrice ). -apisati proceduru a ispis matrice. -apisati proceduru a )ormiranje sparse repre entaciju predstavlja matricu )/. -apisati )unkciju koja a adate vrednosti i> ' preko tastature i raunava vrednost elementa )Vi>'W.
Jin;-+deKstdio.AL str+;t s-og 9 int i,> ,-oat ai> B void =ravimatri;+&str+;t s-og xH10I, int En' 9 int =,T,i ,-oat x=T =rint,&3Bro> ne#n+-a e-emenata_ 3' s;an,&3Rd3, n' =rint,&3Po<i;i>e i vrednosti ne#n+-a e-emenata_Sn3' ,or&i=1 iK=En i""' 9 s;an,&3RdRdR,3, U=,UT,Ux=T' xHiI.i== xHiI.>=T xHiI.ai>=x=T B B void trans=on+>&str+;t s-og xH10I, int n, str+;t s-og QH10I' 9 int i ,or&i=1 iK=n i""' 9 QHiI.i=xHiI.> QHiI.>=xHiI.i QHiI.ai>=xHiI.ai> B B void =isimatri;+&str+;t s-og QH10I, int n' 9 int i =rint,&3RdSn3,n' ,or&i=1 iK=n i""' =rint,&3&Rd Rd'7 R10.3,Sn3,QHiI.i, QHiI.>,QHiI.ai>' B ,-oat vrednost&int n, str+;t s-og xH10I, int @, int -' 9 int i ,or&i=1 iK=n i""' i,&&xHiI.i==@' UU &xHiI.>==-'' ret+rn&xHiI.ai>' ret+rn&0' B void main&' 9 int i,>,n str+;t s-og =H10I, TH10I =ravimatri;+&=, Un'

185

Predrag S. Stanimirovi =rint,&3Matri;a >e7 Sn3' =isimatri;+&=,n' trans=on+>&=,n,T' =rint,&3.rans=onovana matri;a7 Sn3' =isimatri;+&T,n' =rint,&3i,>= _ 3' s;an,&3RdRd3, Ui,U>' =rint,&3R10.3,Sn3,vrednost&n,=,i,>''

Osnove programiranja

Primer. ;odi)ikacija pret0odnog primera. ;atrica se adaje #rojem vrsta> #rojem kolona> #rojem nenula elemenata kao i ni om slogova koji odgovaraju ne-nula elementima. Svaki takav slog je odre3en sledeim in)ormacijama a ne-nula elementF - redni #roj vrste tog elementa> - redni #roj kolone tog elementa> i - realan #roj koji predstavlja vrednost tog elementa. -apisati )unkciju a )ormiranje retke matrice ). -apisati )unkciju a ispis nenula elemenata matrice. -apisati )unkciju a uo#iajeni ispis matrice. -apisati )unkciju a )ormiranje sparse repre entaciju predstavlja matricu )/. -apisati )unkciju koja a adate vrednosti i> ' preko tastature i raunava vrednost elementa )Vi>'W.
Jin;-+deKstdio.AL str+;t s-og 9 int i,> ,-oat ai> B str+;t matri;a 9 int m,n,Dn s-og s=H10I B void =ravimatri;+&matri;a Ea' 9 int i =rint,&3Dimen<i>e matri;e7 3' s;an,&3RdRd3,Ua#Lm,Ua#Ln' =rint,&3Bro> ne#n+-a e-emenata_ 3' s;an,&3Rd3, Ua#LDn' =rint,&3Po<i;i>e i vrednosti ne#n+-a e-emenata_Sn3' ,or&i=0 iKa#LDn i""' s;an,&3RdRdR,3, Ua#Ls=HiI.i,Ua#Ls=HiI.>,Ua#Ls=HiI.ai>' B void trans=on+>&matri;a x, matri;a EQ' 9 int i Q#Lm=x.n Q#Ln=x.n Q#LDn=x.Dn ,or&i=0 iKx.Dn i""' 9 Q#Ls=HiI.i=x.s=HiI.> Q#Ls=HiI.>=x.s=HiI.i Q#Ls=HiI.ai>=x.s=HiI.ai> B B void =isimatri;+&matri;a x' 9 int i ,or&i=0 iKx.Dn i""' =rint,&3&Rd Rd'7 R10.3,Sn3,x.s=HiI.i, x.s=HiI.>,x.s=HiI.ai>' B ,-oat vrednost&matri;a x, int @, int -' 9 int i ,or&i=0 iKx.Dn i""'

186

Predrag S. Stanimirovi i,&&x.s=HiI.i==@' UU &x.s=HiI.>==-'' ret+rn&x.s=HiI.ai>' ret+rn&0'

Osnove programiranja

void =isig+sto&matri;a x' 9 int i,> ,or&i=0 iKx.m i""' 9 ,or&>=0 >Kx.n >""' =rint,&3R!.2, 3,vrednost&x,i,>'' =rint,&3Sn3' B B void main&' 9 int i,> matri;a =, T =ravimatri;+&U=' =rint,&3Matri;a >e7 Sn3' =isimatri;+&=' =isig+sto&=' trans=on+>&=,UT' =rint,&3.rans=onovana matri;a7 Sn3' =isimatri;+&T' =isig+sto&T' =rint,&3i,>= _ 3' s;an,&3RdRd3, Ui,U>' =rint,&3R10.3,Sn3,vrednost&=,i,>'' B

Primer. 6e)inisana je struktura koja predstavlja datumF


tQ=e dat+m=re;ord dan71..31 mese;71..12 godina70..maxint end

+atim je de)inisana je struktura koja sadr@i jedno polje tipa dat%m i jedno polje tipa stingF
=ra<ni@=re;ord d7dat+m na<iv7stringH30I end

Ova struktura repre entuje jedan pra nik. A programu )ormirati ni pra nike.
=rogram Pra<ni;i tQ=e dat+m=re;ord dan71..31 mese;71..12 godina70..maxint end =ra<ni@=re;ord d7dat+m na<iv7stringH30I end =ro;ed+re 5ita>Pra<ni@&var =7=ra<ni@' Degin OitA = do Degin OitA d do Degin Orite&2Dan = _ 2' read-n&dan' Orite&2Mese; = _ 2' read-n&mese;' Orite&2Yodina = _ 2' read-n&godina' end

datuma koji predstavljaju

187

Predrag S. Stanimirovi Orite&2]a<iv =ra<ni@a _ 2' 9OitA B read-n&na<iv'

Osnove programiranja

end end

=ro;ed+re PisiPra<ni@&=7=ra<ni@' Degin Orite-n&=.na<iv' Orite-n Orite-n&=.d.dan,2.2,=.d.mese;,2.2,=.d.godina,2.2' end var i,n7integer a7arraQH1..30I o, =ra<ni@

Orite-n

Degin read-n&n' Orite-n&24adati =odat@e <a 2,n,2 =ra<ni@a72' ,or i7= 1 to n do 5ita>Pra<ni@&aHiI' Orite-n Orite-n ,or i7=1 to n do Degin Orite-n&i,2. =ra<ni@72' PisiPra<ni@&aHiI' end end.

3eenje u jeziku .>


Jin;-+deKstdio.AL Jin;-+deKstring.AL tQ=ede, str+;t 9 int dan, mese;, godina tQ=ede, str+;t 9 ;Aar na<ivH30I dat+m d B=ra<ni@

Bdat+m

void 5ita>Pra<ni@&=ra<ni@ E=' 9 int d,m,g =rint,&3Dan = _ 3' s;an,&3Rd3, Ud' =rint,&3Mese; = _ 3' s;an,&3Rd3, Um' =rint,&3Yodina = _ 3' s;an,&3Rd3, Ug' =#Ld.dan=d =#Ld.mese;=m =#Ld.godina=g =rint,&3]a<iv =ra<ni@a _ 3' gets&=#Lna<iv' gets&=#Lna<iv' B void PisiPra<ni@&=ra<ni@ =' 9 =+ts&=.na<iv' =rint,&3SnRd.Rd.Rd.SnSn3,=.d.dan,=.d.mese;,=.d.godina' B void main&' 9 int i,n =ra<ni@ aH30I s;an,&3Rd3,Un' =rint,&34adati =odat@e <a Rd =ra<ni@a7Sn3,n' ,or&i=0 iKn i""'5ita>Pra<ni@&a"i' =rint,&3SnSn3' ,or&i=0 iKn i""' 9 =rint,&3Rd. =ra<ni@7Sn3,i"1' PisiPra<ni@&aHiI' B B

Primer. Polinom se mo@e predstaviti strukturom koja sadr@i red polinoma i ni njegovi0 koe)icijenata. -apisati )unkcije a i raunavanje #ira> ra like> proi voda i kolinika dva polinoma koji su adati odgovarajuim strukturama. -apisati program a testiranje napisani0 )unkcija.
Jin;-+deKstdio.AL

188

Predrag S. Stanimirovi

Osnove programiranja

tQ=ede, str+;t 9 do+D-e aH30I

int n

B Po-i

Po-i <Dir&Po-i =1, Po-i =2' 9 Po-i = int i =.n=&=1.nL=2.n'_ =1.n 7 =2.n ,or&i=0 iK==.n i""' i,&iL=2.n'=.aHiI==1.aHiI e-se i,&iL=1.n'=.aHiI==2.aHiI e-se =.aHiI==1.aHiI"=2.aHiI OAi-e&=.nL=0 UU =.aH=.nI==0'=.n## ret+rn = B Po-i ra<-i@a&Po-i =1, Po-i =2' 9 Po-i = int i =.n=&=1.nL=2.n'_ =1.n 7 =2.n ,or&i=0 iK==.n i""' i,&iL=2.n'=.aHiI==1.aHiI e-se i,&iL=1.n'=.aHiI=#=2.aHiI e-se =.aHiI==1.aHiI#=2.aHiI OAi-e&=.nL=0 UU =.aH=.nI==0'=.n## ret+rn = B Po-i =roi<vod&Po-i =1, Po-i =2' 9 Po-i = int i,> =.n==1.n"=2.n ,or&i=0 iK==.n =.aHi""I=0' ,or&i=0 iK==1.n i""' ,or&>=0 >K==2.n >""' =.aHi">I"==1.aHiIE=2.aH>I ret+rn = B Po-i @o-i;ni@&Po-i =1, Po-i =2, Po-i Eostata@' 9 Po-i = int i,> =.n==1.n#=2.n ,or&i==.n iL=0 i##' 9 =.aHiI==1.aH=2.n"iI6=2.aH=2.nI ,or&>=0 >K==2.n >""' =1.aHi">I#= =.aHiIE=2.aH>I B OAi-e&=1.nL=0 UU =1.aH=1.nI==0'=1.n## Eostata@==1 ret+rn = B Po-i ;ita>&' 9 Po-i = int i =rint,&31te=en = _ 3' s;an,&3Rd3, U=.n' =rint,&3:oe,i;i>enti_Sn3' ,or&i==.n iL=0 ret+rn = B void =isi&Po-i =' 9 int i =+t;Aar&292' ,or&i==.n iL=0 =+t;Aar&2B2' B void main&' 9 Po-i =1, =2, =3

s;an,&3R-,3, U=.aHi##I''

i##'9 =rint,&3R.2-,3, =.aHiI'

i,&iL0'=+t;Aar&2,2'

189

Predrag S. Stanimirovi

Osnove programiranja

OAi-e&1' 9 =1=;ita>&' =2=;ita>&' =rint,&3P1 = 3' =isi&=1' =+t;Aar&2Sn2' =rint,&3P2 = 3' =isi&=2' =+t;Aar&2Sn2' =rint,&3P1"P2 = 3' =3=<Dir&=1,=2' =isi&=3' =+t;Aar&2Sn2' =rint,&3P1#P2 = 3' =isi&ra<-i@a&=1,=2'' =+t;Aar&2Sn2' =rint,&3P1EP2 = 3' =isi&=roi<vod&=1,=2'' =+t;Aar&2Sn2' =rint,&3P16P2 = 3' =isi&@o-i;ni@&=1,=2, U=3'' =+t;Aar&2Sn2' =rint,&3P1RRP2 = 3' =isi&=3' =+t;Aar&2Sn2' =+t;Aar&2Sn2' B B

6.7.4. U #.$
Anija je tip podataka koji mo@e da sadr@i $u ra nim situacijama& o#jekte ra liiti0 tipova. Anije odre3uju nain manipulisanja ra liitim tipovima podataka u istoj memorijskoj o#lasti. Svr0a nji0ovog postojanja je u8teda memorije. One su analogne slogovima promenljivog tipa u Pascal-u> a sintaksa im je asnovana na strukturama je ika C. Svr0a unije je da postoji samo jedna promenljiva koja mo@e da sadr@i #ilo koju od vrednosti ra liiti0 tipova. Anije se ra likuju od struktura po tome 8to elementi unije koriste isti memorijski prostor> i 8to se u svakom trenutku koristi samo jedan element unije. Primer. Pretpostavimo da u ta#eli sim#ola nekog kompajlera> konstanta mo@e da #ude int> float ili char. -ajvea u8teda memorije se posti@e ako je vrednost ma kog elementa ta#ele memorisana na istom mestu> #e o# ira na tip. A na8em sluaju je potre#na sledea deklaracija
union tag + int ival2 float fval2 char Gsval2 /2 union tag u2

Kkvivalentna deklaracija je data kako slediF


union tag + int ival2 float fval2 char Gsval2 / u2

Promenljivoj koja je deklarisana kao unija prevodilac dodeljuje memorijski prostor dovoljan a memorisanje onog lana unije koji au ima najvei memorijski prostor. Programer mora da vodi rauna o tome koji tip se trenutno memori8e u uniji> jer je va@ei tip onaj koji je najskorije memorisan. Blanovi unije se selektuju identino lanovima struktureF
uni-a.clan ili pointer7uni-e .clan.

Hko je int tip tekueg lana unije u> njegova vrednost se prika uje i ra om
printf)^Vdan^,u.ival*2

ako je aktivni lan tipa )loat pi8emo


printf)^Vfan^,u.fval*2

a ako je tipa c0ar


printf)^Vsan^,u.sval*2

Klementima strukturne promenljive u vrednosti se mogu dodeliti> na primer> iska ima


u.ival39=F2 ili u.fval3:.@><AX ili u.sval3^string^2

Primer. Eednostavna unija koja sadr@i jedno celo#rojno i jedno realno polje.

190

Predrag S. Stanimirovi void main&' 9 +nion 9 int i ,-oat , B x x.i=123 =rint,&3x.i=Rd x.,=R,Sn3,x.i,x.,' x.,=12.X03 =rint,&3x.i=Rd x.,=R,Sn x.i,x.,' B

Osnove programiranja

Anije mogu da se pojavljuju u strukturama i ni ovima. 1om#inacijom strukture i unije grade se promenljive strukture. Primer. /a#lica sim#ola
struct + charGname2 int flags2 int utype2 union + int ival2 float fval2 char Gsval2 / u2 / symtab!9::%2

Sada mo@emo pristupiti lanu ival i-tog elementa ta#lice sim#ola pomou i ra a
symtab!i%.u.ival2

Prvi nak stringa sval i-tog elementa ta#lice sim#ola se do#ija jednim od sledea dva ekvivalentna i ra aF
Gsymtab!i%.u.sval2 symtab!i%.u.sval!:%2

Anija se mo@e inicijali ovati samo pomou vrednosti koja odgovara tipu njenog prvog lana. Stoga se unija opisana u pret0odnom primeru mo@e inicijali ovati samo pomou celo#rojne vrednosti. Primer. Osnovne geometrijske )igure se mogu okarakterisati sledeom strukturomF
str+;t ,ig+ra 9 ,-oat =ovrsina, oDim int ti= +nion 9 ,-oat r ,-oat aH2I ,-oat DH3I B geom_,ig B ,ig 6E 4a>edni;@i e-ementi E6 6E O<na@a a@tivnog e-ementa E6 6E Po-+=re;ni@ @r+ga E6 6E D+<ine strana =ravo+gaoni@a E6 6E D+<ine strana tro+g-a E6

6.>. N+3)!.#"# '#( (!1+'+,+ 0 6


Pomou kljune rei en+m deklari8u se na#rojivi $enumerisani& tipovi podataka. Promenljive na#rojivog tipa mogu da imaju samo konaan skup vrednosti. 6eklaracija promenljivi0 na#rojivog tipa se sastoji od kljune rei en+m> imena enumerisanog tipa> eventualno liste do voljeni0 vrednosti i liste enumerisani0 promenljivi0 koje se deklari8u. Primer. %ska om
en+m ,-ag9tr+e,,a-seB

de)inisan je na#rojivi tip en+m ,-ag. Promenljive ovog tipa mogu da imaju samo vrednosti tr%e ili false. 1ljuna re en+m o naava da se radi o na#rojivom tipu podataka> a identi)ikator flag predstavlja ime de)inisanog na#rojivog tipa. % me3u agrada se nala i lista vrednosti. Sada se mogu deklarisati promenljive na#rojivog tipa en%m flagF
191

Predrag S. Stanimirovi
enum flag file7end, input7end2

Osnove programiranja

%me na#rojivog tipa se mo@e i ostaviti> ime se do#ija neimenovani na#rojivni tip. -a primer> sledea deklaracija je analogna pret0odnojF
enum +true,false/ file7end, input7end2

6odeljivanje vrednosti enumerisanoj promenljivoj promenljivima ostali0 tipova. Sledei iska i su legalniF
file7end3false2 if)input7end 33 true*

je

analogno

dodeljivanju

vrednosti

A sledeem primeru se de)ini8e na#rojivi tip en%m daniF


enum dani +pon,uto,sre,cet,pet,sub,ned/2

2rednosti na#rojivog tipa se tretiraju kao celo#rojne konstante. Preci nije> C kompajler dodeljuje sekvencijalne celo#rojne vrednosti elementima liste vrednosti> startujui od prvog elementa liste> kome se dodeljuje vrednost 0. -a primer> i ra om
ova-7dan3sreda2

dodeljena je vrednost 2 $ne ime sreda& promenljivoj ova'6dan $tipa en%m dani&. Sekvencijalni nain dodeljivanja celo#rojni0 vrednosti elementima i liste imena mo@e se promeniti eksplicitnim dodeljivanjem @eljene celo#rojne vrednosti nekom elementu i liste imena. Pri tome se mogu koristiti i negativni celi #rojevi. Primer. ;o@emo pisati
enum dani+pon,uto,sre39:,cet,pet,sub39::,ned/ 2

Sada je
pon3:, uto39, sre39:, cet399, pet39;, sub39::, ned39:9.

Hko se @eli eksplicitno dodeljivanje celo#rojne vrednosti na#rojivog promenljivoj> mora da se koristi kast operator. -a primer> i ra
ova-7dan3pon

ekvivalentan je sa
ova- dan3)enum dani*:2

Primer. Program odre3ivanje sledeeg dana u nedelji


Jin;-+deKstdio.AL void main&' 9 int @ en+m dani9=on,+to,sre,;et,=et,s+D,nedB s-ede;i =rint,&3+nesite danasn>i dan7Sn3' s;an,&3Rd3,U@' @"=1 @R=) s-ede;i=&en+m dani'@ =rint,&3Sn1-ede;i dan >e Rd.dan + nede->iSn3, &int's-ede;i' B

%sta konstanta se ne mo@e koristiti u deklaracijama ra liiti0 na#rojivi0 tipova podataka. -a primer> de)inicije tipova
enum radnidani +pon,uto,sre,cet,pet/2 enum vikend +pet,sub,ned/2

su nekorektne> jer se konstanta pet pojavljuje u de)iniciji o#a tipa. -a#rojivi tip se mo@e de)inisati koristei operatore tQ=ede, i en+m. -a primer> sledeim de)inicijama su uvedena dva na#rojiva tipa> samoglasnik i daniF

192

Predrag S. Stanimirovi
typedef enum +A,E,(,',B/ samoglasnik2 typedef enum +pon,uto,sre,cet,pet,sub,ned/ dani2

Osnove programiranja

Posle de)inicije ovi0 tipova mogu se deklarisati promenljive uvedeni0 tipovaF


samoglasnik slovo2 dani d9,d;2

Promenljivoj na#rojivog tipa se mo@e dodeliti #ilo koja vrednost koja je sadr@ana u de)iniciji na#rojivog tipaF
slovo3B2 d93sre2

Hko se vrednosti promenljivi0 na#rojivog tipa ispisuju pomou )unkcije print)$&> ispisuju se celo#rojne vrednosti koje su do#ile na osnovu de)inicije na#rojivog tipa. +a ra liku od Pascala> promenljive na#rojivog tipa se ne mogu koristiti kao #rojake promenljive u operatorima FOR ciklusa.

6.9. Z+(#s# s+ "+)#.+ '+&+


A nekim programskim je icima $Pascal> Hda& postoji mogunost da se de)ini8u apisi sa segmentima koji se ukljuuju u strukturu apisa u avisnosti od odre3ene vrednosti nekog drugog segmenta apisa. (a motrimo primer koji predstavlja de)iniciju strukturnog tipa %nstrument kojim se opisuje apis sa atri#utima mu iki0 instrumenata> prilago3en ra liitim tipovima instrumenata. A ta#eli su prika ane komponente koje postoje u sluaju promenljive ) tipa 2nstr%ment. 1omponente promenljive ) tipa 2nstr%ment
HF%nstrument H.2rstaFS @icani H.tip FS udarni H.klavijatura FS )alse H.dijapa onF real true H.#rojF 1..100 gudacki H.raspon FS kontra#as viola elo metal H.nain FS klavir duvaki H.;aterijal FS drvo H.pisak FS dvodelni

pokrtetni jednodelni

Primer. +apis sa varijantama.


type GrstaInstr+menta = &<i;ani,d+va;@i' .i=Instr+menta = &+darni,g+da;@i' .i=Materi>a-a = &meta-, drvo' Instr+ment = record case Grsta7GrstaInstr+menta of <i;ani7 &case .i=7 .i=Instr+menta of +darni 7 &case @-avi>at+ra7 Boo-ean of ,a-se 7 &di>a=a<on 7 rea-' tr+e 7 &dir@i 7 1..100' ' g+da;@i 7 & ras=on 7&@Das, ;e-o, vio-a, vio-ina'

193

Predrag S. Stanimirovi ' d+va;@i7 & case Materi>a- 7 .i=Materi>a-a of meta-7&na;insv 7 &@-av, =o@ret'' drvo7&=isa@ 7&>ednode-ni,dvode-ni' '

Osnove programiranja

end

Primer. -apisati program a i raunavanje rastojanja i me3u dve take u ravni> pri emu postoji mogunost da svaka od taaka #ude de)inisana u 6ekartovom ili polarnom koordinatnom sistemu. O#u0vaeni su svi sluajeviF kada su o#e take adate 6ekartovim koordinatama> jedna od taaka 6ekartovim> a druga polarnim koordinatama i sluaj kada su o#e take de)inisane polarnim koordinatama. 3eenje u Pas)alu.
=rogram /asto>an>e tQ=e :oordinate = re;ord ;ase :ord 7 &De@artove, Po-arne' o, De@artove 7 &x,Q7rea-' Po-arne 7 &r7rea- ,i7rea-' end var A,B7@oordinate d 7 rea=ro;ed+re +;ita>&var d7:oordinate' var ;A7;Aar Degin Orite-n&2.i= @oordinata7 1#De@artove, 2#Po-arne 2' ;ase d.:ord o, De@artove7 read-n&d.x,d.Q' Po-arne7 read-n&d.r,d.,i' end end

read-n&;A'

Degin +;ita>&A' +;ita>&B' ;ase A.:ord o, De@artove 7 ;ase B.:ord o, De@artove 7 d7= sTrt&sTr&A.x#B.x' " sTr&A.Q#B.Q'' Po-arne 7 d7= sTrt&sTr&A.x#B.rE;os&B.,i'' " sTr&A.Q#B.rEsin&B.,i'' ' end Po-arne 7 ;ase B.:ord o, De@artove 7 d7= sTrt&sTr&A.rE;os&A.,i'#B.x' " sTr&A.rEsin&A.,i'#B.Q' ' Po-arne 7 d7= sTrt&sTr&A.rE;os&A.,i'#B.rE;os&B.,i''" sTr&A.rEsin&A.,i'#B.rEsin&B.,i''' end end Orite-n&2d = 2,d707$' read-n end.

3eenje u jeziku ..
Jin;-+deKstdio.AL Jin;-+deKmatA.AL

194

Predrag S. Stanimirovi tQ=ede, en+m 9 De@artove, Po-arne B.i=:or tQ=ede, str+;t 9 do+D-e x,Q B De@ tQ=ede, str+;t 9 do+D-e r,,i B PotQ=ede, str+;t 9 .i=:or ti= +nion 9 De@ D: Po- P: B B @oordinate

Osnove programiranja

void +;ita>&@oordinate Ed' 9 int ;A do+D-e +,v =rint,&3.i= @oordinata_ 1 <a De@artove, 2 <a =o-arne7 3' s;an,&3Rd3, U;A' =rint,&3:oordinate_ 3' sOit;A &;A' 9 ;ase 17 d#Lti==De@artove s;an,&3R-,R-,3, U+, Uv' d#LD:.x=+ d#LD:.Q=v Drea@ ;ase 27 d#Lti==De@artove s;an,&3R-,R-d3, U+,Uv' d#LP:.r=+, d#LP:.,i=v Drea@ B B void main&' 9 @oordinate A,B do+D-e d +;ita>&UA' +;ita>&UB' sOit;A&A.ti=' 9 ;ase De@artove7 sOit;A&B.ti=' 9 ;ase De@artove7 d=sTrt&=oO&A.D:.x#B.D:.x,2'"=oO&A.D:.Q#B.D:.Q,2'' Drea@ ;ase Po-arne7 d=sTrt&=oO&A.D:.x#B.P:.rE;os&B.P:.,i',2'" =oO&A.D:.Q#B.P:.rEsin&B.P:.,i',2'' Drea@ B Drea@ ;ase Po-arne7 sOit;A&B.ti=' 9;ase De@artove7 d=sTrt&=oO&A.P:.rE;os&A.P:.,i'#B.D:.x,2'" =oO&A.P:.rEsin&A.P:.,i'#B.D:.Q,2'' Drea@ ;ase Po-arne7 d=sTrt&=oO&A.P:.rE;os&A.P:.,i'#B.P:.rE;os&B.P:.,i',2'" =oO&A.P:.rEsin&A.P:.,i'#B.P:.rEsin&B.P:.,i',2'' Drea@ B Drea@ B =rint,&3R.$-,Sn3,d' B

195

Predrag S. Stanimirovi

Osnove programiranja

Primer. -apisati program a sumiranje povr8ina n geometrijski0 )igura. 5igura mo@e #iti krug $odre3en du@inom poluprenika&> pravougaonik $odre3en du@inama susedni0 stranica& ili trougao $odre3en du@inama svoji0 stranica&.
Jin;-+deKstdio.AL Jin;-+deKmatA.AL void main&' 9 str+;t =ravo+gaoni@ 9 do+D-e a,D B str+;t tro+gao 9 do+D-e a,D,; B str+;t ,ig+ra 9 int ti= +nion 9 do+D-e r str+;t =ravo+gaoni@ = str+;t tro+gao t B B ,ig+reH!0I int i,n do+D-e =ov=0,s s;an,&3Rd3,Un' ,or&i=0 iKn i""' 9 =rint,&3.i= ,ig+re &0 # @r+g, 1#=ravo+gaoni@, 2#tro+gao'7 3' s;an,&3Rd3,U,ig+reHiI.ti=' sOit;A&,ig+reHiI.ti=' 9 ;ase 07 s;an,&3R-,3,U,ig+reHiI.r' Drea@ ;ase 17 s;an,&3R-,R-,3,U,ig+reHiI.=.a,U,ig+reHiI.=.D' Drea@ ;ase 27 Drea@ s;an,&3R-,R-,R-,3,U,ig+reHiI.t.a,U,ig+reHiI.t.D,U,ig+reHiI.t.;'

B B ,or&i=0 iKn i""' 9 sOit;A&,ig+reHiI.ti=' 9 ;ase 07 =ov"=3.1$E,ig+reHiI.rE,ig+reHiI.r Drea@ ;ase 17 =ov"=,ig+reHiI.=.aE,ig+reHiI.=.D Drea@ ;ase 27 s=&,ig+reHiI.t.a",ig+reHiI.t.D",ig+reHiI.t.;'62 =ov"=sTrt&sE&s#,ig+reHiI.t.a'E&s#,ig+reHiI.t.D'E&s# ,ig+reHiI.t.;'' B B =rint,&3Povrsina sviA ,ig+ra >e R-,Sn3,=ov' B

Primer. 6ati su podaci o stam#enom stanju radnika iji je #roj unapred po nat. Ala ni podaci su slogovi sledee sadr@ineF - ime radnikaX - stam#eno stanjeF 0 - ako je radnik #e stana> 1 - ako je radnik ima stan> 2 - ako je radnik ima kuuX

196

Predrag S. Stanimirovi

Osnove programiranja

Hko radnik ima kuu ili stan navode se jo8 dva podatkaF #roj lanova porodice i kvadratura stam#enog o#jekta. Smatra se da je radnik stam#eno ugro@en ako ima manje od 17m 2 po lanu domainstva. Hko radnik ima kuu> a kvadraturu u eti .0` od uitane kvadrature kue. -a i la u 8tampati imena radnika koji nemaju ni stan ni kuu> a atim imena radnika koji imaju manje od 17m2 po lanu porodice.
=rogram stanovi +ses ;rt ;onst max = !0 tQ=e na<iv=stringH30I ti=stan>a=0..2 stamDstan>e = re;ord ime7na<iv ;ase stan>e7ti=stan>a o, 1,27&Dro>;-anova71..10 0 7 &' end

@vadrat+ra 7 rea-'

var Dro>radni@a, Dro>+gro<eniA, i7integer ss7arraQH1..maxI o, stamDstan>e >71..max @71..30 @vadrat+ra=o;-an+7rea&E =ro;ed+ra <a stam=an>e rednog Dro>a i imena E' =ro;ed+re stam=an>e& var Dr7integer a7na<iv' var >71..30 Degin Dr 7= Dr"1 Orite&Dr, 2. 2,a,2 2' end Degin ;-rs;r Orite&2Bro> radni@a_ 2' read-n&Dro>radni@a' Dro>+gro<eniA 7= 0 ,or > 7= 1 to Dro>radni@a do Degin Orite&2Ime_ 2' read-n&ssH>I.ime' Orite&2stan>e=_ 2' read-n&ssH>I.stan>e' ;ase ssH>I.stan>e o, 07 1,27Degin Orite-n&2Bro> ;-anova i @vadrat+ra_ 2' read-n&ssH>I.Dro>;-anova, ssH>I.@vadrat+ra' end end 9;aseB end 9,orB Orite-n&2 1PI1A: 1.AMB%]O 0Y/O4%]IF 2' Orite-n ,or > 7= 1 to Dro>radni@a do Degin i, ssH>I.stan>e = 0 tAen Degin stam=an>e&Dro>+gro<eniA, ssH>I.ime' Orite-n&2 B%4 1.A]A 2' end e-se

197

Predrag S. Stanimirovi

Osnove programiranja

end.

Degin i, ssH>I.stan>e = 2 tAen ssH>I.@vadrat+ra 7= 0.8EssH>I.@vadrat+ra @vadrat+ra=o;-an+7= ssH>I.@vadrat+ra6ssH>I.Dro>;-anova i, @vadrat+ra=o;-an+ K 1). tAen Degin stam=an>e&Dro>+gro<eniA, ssH>I.ime' Orite-n&@vadrat+ra=o;-an+7)72' end 9i,B end 9e-se B end 9,orB

6.9.1. N+)$13+ B#'- 0 P+s6+%70


A programskom je iku Pascal postoji pose#na nared#a :i t0 prilagodena radu sa apisima. Smisao ove nared#e ilustruje sledei primerF
1t+dent 7 O1OBA (it# 1t+dent do (it# Dan_ro? do begin mese; 7= ma> end

dan 7= 1$

godina 7= 18(3

ili
(it# 1t+dent, Dan_ro? do begin mese; 7= ma> dan 7= 1$ end godina 7= 18(3

Sledei primer ilustruje prednosti upotre#e nared#e 4it&. 6at je program u kome se pomou apisa sa varijantama de)ini8e struktura koja o#u0vata geometrijske )igure trougao> pravougaonik i krug i i raunavaju povr8ine ovi0 )igura. Program je najpre napisan #e nared#e 4it&> a atim pomou nared#e 4it&. Oigledno je da se tekst programa skrauje i postaje pregledniji. Primer. -apisati program koji a i a#ranu vrstu geometrijskog tela adatog na sledei nain
type tip3)kvadar,kocka,lopta*2 telo3record case fig1tip of kvadar1)duzina,sirina,visina1real*2 kocka1)ivica1real*2 lopta1)poluprecnik1real*2 end

i raunava povr8inu i apreminu oda#ranog geometrijskog tela.


=rogram ,ig+re ;onst =i=3.1$1!8 tQ=e ti==&@vadar,@o;@a,-o=ta' te-o=re;ord ;ase ,ig7ti= o, @vadar7&d+<ina,sirina,visina7rea-' @o;@a7&ivi;a7rea-' -o=ta7&=o-+=re;ni@7rea-' end var =,v7reat=7string ,ig7te-o Degin Orite-n&2.i= ,ig+re_ 2' read-n&t='

198

Predrag S. Stanimirovi

Osnove programiranja

i, t==2@vadar2 tAen OitA ,ig do Degin read-n&d+<ina,sirina,visina' =7=2E&d+<inaEsirina"d+<inaEvisina"sirinaEvisina' v7=d+<inaEsirinaEvisina end e-se i, t==2@o;@a2 tAen OitA ,ig do Degin read-n&ivi;a' =7=(EsTr&ivi;a' v7=sTr&ivi;a'Eivi;a end e-se i, t==2-o=ta2 tAen OitA ,ig do Degin read-n&=o-+=re;ni@' =7=$EsTr&=o-+=re;ni@'E=i v7=$EsTr&=o-+=re;ni@'E=o-+=re;ni@E=i63 end Orite-n Orite-n&2Povrsina = 2,=707$,2 4a=remina = 2,v707$' end.

6.1K. S,0(!"#
A matematici skup ini vi8e elemenata o#jedinjeni0 nekim ajednikim svojstvom. A nekim programskim je icima $Pascal& postoji mogunost de)inisanja skupova kao struktura podataka i odgovarajui0 strukturni0 tipova podataka> me3utim ovaj pojam u programskim je icima je ne8to u@i u odnosu na matematiki pojam. Skupovni tip podataka de)ini8e se i ra om o#lika
$ype ,(me$ipa. 3 set of ,Qazni$ip.

u kome ,Qazni$ip. predstavlja tip elemenata skupovnog tipa. Primer koji sledi ilustruje de)inisanje strukturni0 tipova a rad sa skupovima i nji0ovo kori8enje.
program s@+=ovi type OsnovneBo>e = &;rvena, oran<, <+ta, =-ava, vio-et' Bo>e = Set of OsnovneBo>e var 1Do>a, 1Do>a1, 1Do>a2 7 Bo>e ^ednaDo>a 7 OsnovneBo>e B 7 Boo)ean$ begin 1Do>a1 7= H;rvena, <+ta, vio-etI 1Do>a2 7= HI 1Do>a1 7= H;rvena, <+ta, vio-et, oran<, <e-ena, =-avaI 1Do>a2 7= H=-avaI end.

A datom primeru ne #i #ila do voljena dodeljivanjaF S#oja1 FS VcrnaWX S#oja2 FS V#elaWX jer elementi #rna i bela ne postoje u tipu podataka :snovne+o'e nad kojim je de)inisan skupovni tip +o'e. -ad skupovima u programskom je iku Pascal mogu se i vr8avati sve operacije koje postoje i u teoriji skupova u matematici.

199

Predrag S. Stanimirovi

Osnove programiranja

U #.+ s,0(!"+
Anija dva skupa predstavlja se nakom =. -a primer> korektni su sledei i ra i.
?bo-a9 13 !crvena, zuta, violet%2 ?bo-a; 13 !plava, zelena%2 ?bo-a 13 ?bo-a9 P ?bo-a;2

Posle adnje nared#e dodeljivanja> promenljiva S#oja do#ija vrednost !crvena, zuta, violet, plava, zelena%. %sto dodeljivanje mo@e da se postigne i ra omF
?bo-a 13 !crvena, zuta, violet% P !plava, zelena%2

P)$s$, s,0(!"+
Presek dva skupa predstavlja se nakom R.
?bo-a9 13 !crvena, zuta, violet%2 ?bo-a; 13 !plava, zelena. zuta%2 ?bo-a 13 ?bo-a9G?bo-a;2

Promenljivoj (bo'a dodeljena je vrednost skupa !zuta%. ;e3utim u sledeem sluaju


?bo-a9 13 !crvena, zuta, violet%2 ?bo-a 13 ?bo-a9G!zelena%2

promenljiva (bo'a do#ija vrednost pra nog skupa.

R+/%#,+ s,0(!"+
(a lika dva skupa predstavlja se nakom -.
?bo-a9 13 !crvena, zuta, violet%2 ?bo-a 13 ?bo-a9 !zuta, violet%2 violet%>

Promenljivoj (bo'a dodeljuje se vrednost koja je dopuna skupa !zuta, violet% do skupa !crvena, zuta, a to je skup !crvena%.

J$1 +,!s' # $.$1 +,!s' s,0(!"+


6va skupa su jednaka samo ako sadr@e iste elemente> a nejednaka ako se ra likuju #ar po jednom elementu.
?bo-a9 13 !crvena, zuta, violet%2 ?bo-a; 13 !crvena, zuta, violet%2 ?bo-a 13 !crvena, zuta, violet, zelena%2 Q 13 ?bo-a9 3 ?bo-a;2 Q 13 ?bo-a9 ,. ?bo-a2

A o#a navedena dodeljivanja> logika promenljiva + do#ija vrednost navedene relacije i me3u skupova su istinite.

30.. Odnosno> o#e

P!1s,0(!"#
?bo-a9 13 !crvena, zuta%2 ?bo-a; 13 !crvena, zuta, violet%2 Q 13 ?bo-a9 ,3 ?bo-a;2 Q 13 ?bo-a; .3 ?bo-a92

A ovom primeru> promenljiva + tako3e do#ija vrednost 30. kao re ultat i jednog i drugog dodeljivanja> jer je skup dodeljen promenljivoj (bo'al podskup skupa koji je dodeljen promenljivoj (bo'a2. ;e3utim> ako se u tim dodeljivanjima relacije postave o#rnutoF
Q 13 ?bo-a; ,3 ?bo-a92 Q 13 ?bo-a9 .3 ?bo-a;2

promenljiva + do#ija vrednost 5H*SK.

P)#(+1 !s' s,0(0


Ovo je operacija koja omoguava da se ispita pripadnost odre3enog elementa adatom skupu elemenataF

200

Predrag S. Stanimirovi
?bo-a9 13 !crvena, zuta%2 ?bo-a; 13 !crvena, zuta, violet%2 Tednabo-a 13 violet2 Q 13 Tednabo-a # ?bo-a92 Q 13 Tednabo-a # ?bo-a;2

Osnove programiranja

A prvom dodeljivanju + do#ija vrednost 5H*SK jer #oja violet ne pripada skupu (bo'a1> a u drugom /(AK jer violet pripada skupu (bo'a2.

P)#&$)#.
Primer. -apisati program koji uitava dva stringa i ispisuje sve nakove koji se pojavljuju u jednom a ne pojavljuju u drugom.
tQ=e s-ova = set o, 2a2..2<2 var s1,s27string s@+=7s-ova i,-1,-27integer ;A72a2..2<2 Degin Orite&2Prvi string = _ 2' read-n&s1' Orite&2Dr+gi string = _ 2' read-n&s2' s@+=7=HI -17=-engtA&s1' -27=-engtA&s2' ,or i7=1 to -1 do i, =os&s1HiI,s2'=0 tAen s@+=7=s@+="Hs1HiII ,or i7=1 to -2 do i, =os&s2HiI,s1'=0 tAen s@+=7=s@+="Hs2HiII Orite-n&2.o s+ <na;i72' ,or ;A7=2a2 to 2<2 do i, ;A in s@+= tAen Orite&;A,2 2' end.

Primer. 6ata je deklaracija


tQ=e =rirodan=1..maxint

-apisatiF a& )unkciju ,+n;tion Formira>1@+=&n7=rirodan'7s@+= koja )ormira skup od ra liiti0 dekadni0 ci)ara koje su sadr@ane u dekadnom #roju n. a& )unkciju Dro>;i,ara&n' koja i raunava #roj ra liiti0 ci)ara u dekadnom apisu #roja nX #& proceduru vanDro>a&n' koja 8tampa u rastuem redosledu sve ci)re koje ne ula e u sastav dekadnog prirodnog #roja n.
tQ=e =rirodan=1..maxint s@+==set o, 0..8 var n7=rirodan ,+n;tion Formira>1@+=&n7=rirodan'7s@+= var s@+=;i,ara7s@+= ;70..8 Degin s@+=;i,ara7=HI re=eat ;7=n mod 10 n7=n div 10 s@+=;i,ara7=s@+=;i,ara"H;I +nti- n=0 Formira>1@+=7=s@+=;i,ara end ,+n;tion ;ard&s7s@+='7integer var i70..8 @7integer Degin @7=0 ,or i7=0 to 8 do i, i in s tAen @7=@"1 ;ard7=@ end

201

Predrag S. Stanimirovi ,+n;tion Dro>;i,ara&n7=rirodan'7=rirodan Degin Dro>;i,ara7=;ard&Formira>1@+=&n'' end

Osnove programiranja

=ro;ed+re vanDro>a&n7=rirodan' var s@+=;i,ara7s@+= ;70..8 Degin s@+=;i,ara7=Formira>1@+=&n' Orite-n&20 sastav Dro>a ne +-a<e s-ede;e ;i,re72' ,or ;7=0 to 8 do i, not&; in s@+=;i,ara' tAen Orite&;73' end Degin Orite&24adati Dro> 2' read-n&n' Orite-n&24adati Dro> ima 2,Dro>;i,ara&n',2 ra<-i;itiA ;i,ara2' vanDro>a&n' end.

Primer. -apisati program koji odre3uje skup delitelja a sve #rojeve od 1 do 100. (e ultat smestiti u ni skupova.
=rogram -es@+=! tQ=e s@+=de- = set o, 0..8 ni<s@+=de- = arraQH1..100I o, s@+=devar ni<de-7ni<s@+=dei,>71..100 Degin ,or i7=1 to 100 do Degin ni<de-HiI7=HI ,or >7=1 to tr+n;&sTrt&i'' do i, i mod > =0 tAen ni<de-HiI7=ni<de-HiI"H>I"Hi div >I end Orite-n&2De-ite->i s+7 2' ,or i7=1 to 100 do Degin Orite-n&24a 2,i7$' Orite-n ,or >7=1 to i do i, > in ni<de-HiI tAen Orite&>,2 Orite-n i, i mod ! =0 tAen Degin Orite&2Press anQ @eQ 2' read-n end end end.

2'

Primer. -apisati program koji amenjuje sve samoglasnike u jednom redu unetog teksta nakom R> i 8tampa a#ecedno sortirane suglasnike koji se pojavljuju u tekstu.
=rogram -es@+=) tQ=e s@+=s-ova=set o, 2a2..2<2 var ;A7;Aar s-ova,samog-asni;i,s+g-asni;i,=o>ave7s@+=s-ova s7string Degin Orite-n&20neti >edan red <na@ova2' s7=22 =o>ave7=HI samog-asni;i7=H2a2,2e2,2i2,2o2,2+2I

202

Predrag S. Stanimirovi s-ova7=H2a2..2<2I s+g-asni;i7=s-ova#samog-asni;i OAi-e not eo-n do Degin read&;A' i, ;A in samog-asni;i tAen s7=s"2E2 e-se i, ;A in s+g-asni;i tAen Degin =o>ave7==o>ave"H;AI s7=s";A end e-se s7=s";A end Orite-n Orite-n&2.rans,ormisani red= 2,s' Orite-n&21+g-asni;i s+72' ,or ;A7=2a2 to 2<2 do i, ;A in =o>ave tAen Orite&;A,2 2' Orite-n end.

Osnove programiranja

Primer. %spisati sve ra liite ci)re koje se nala e u apisu celog po itivnog #roja n kao i one ci)re koje ne pripadaju #roju n.
=rogram ;i,re tQ=e nat+r = 1..maxint ;i,ra = 0..8 s@+=;i,ara = set o, ;i,ra var s7s@+=;i,ara ;7;i,ra n7nat+r =ro;ed+re ra<;i,re&n7nat+r var s@7s@+=;i,ara' var ;i,7;i,ra Degin s@ 7= HI OAi-e n KL 0 do Degin ;i, 7= n mod 10 n 7= n div 10 s@ 7= s@ " H;i,I end end =ro;ed+re =rint&n7nat+r s@7s@+=;i,ara' var ;i, 7;i,ra Dro> 7 integer Degin Orite-n&2 5i,re sadr<ane + Dro>+ 2' Orite-n Dro> 7= 0 ,or ;i, 7= 0 to 8 do Degin i, ;i, in s@ tAen Degin Orite&;i,7!' Dro> 7= Dro>"1 end end Orite-n Orite-n&2 Bro> sadr<i 2, Dro>, 2 ra<-i;itiA ;i,ara 2' end =ro;ed+re n=rint&n7nat+r s@7s@+=;i,ara' var ;i,7;i,ra s=om7s@+=;i,ara Degin Orite-n Orite-n&2 5i,re @o>e nis+ sadr<ane + Dro>+ 2'

203

Predrag S. Stanimirovi s=om 7= H0..8I # s@ ,or ;i, 7= 0 to 8 do i, ;i, in s=om tAen Orite-n end Degin 9=rogramB Orite&2 4adati ;eo Dro> 7 2' read-n&n' ra<;i,re&n, s' =rint&n, s' Orite-n end.

Osnove programiranja

Orite&;i,7!'

Orite-n n=rint&n, s'

Primer. -ai sve proste #rojeva manje ili jednake datom prirodnom #roju ma!S2,0 primenom Kratostenovog sita.
=rogram eratosten ;onst max = 2!0 tQ=e s@+= = set o, 2..max var sito, =rosti 7s@+= next, m 7 integer Degin 9 <adavan>e =o;etniA =odata@a B =rosti 7= HI sito 7= H2..maxI next 7= 2 9g-avni a-goritam B OAi-e sito KL HI do Degin m 7= next OAi-e m K= max do Degin sito 7= sito # HmI m 7= m " next end =rosti 7= =rosti " HnextI re=eat next 7= next " 1 +nti- &next in sito' or &next L max'

end

9stam=an>e =rostiA Dro>eva B ,or m 7= 1 to max do i, m in =rosti tAen Orite&m7!' Orite-n end.

Skupovi se esto koriste a skraeno predstavljanje slo@eni0 uslova. -a primer> u sledeem primeru imamo ni uslova koji se jednostavno amenjuju jednim uslovom de)inisanim nad skupom podatakaF
#4 )( 3 ;9<* !) )( 3 ;;:* or ... or )( 3 ;><* !) )( 3 ;=:* '-$ ...

%sti uslov mo@e se predstaviti preko skupova na sledei nainF


I4 ( # !;9<, ;;:, ;;<, ...., ;=:% '-$ ...

-aredni primeri i ilustruju mogunost kori8enja skupova a re8avanje neki0 pro#lema koji se o#ino re8avaju drugim tipovima podataka.

6.11. D+'!'$,$
Programi koje smo do sada koristili imali su jedan o #iljan nedostatak. -aime> re ultati o#rade ula ni0 veliina prestankom i vr8avanja programa su nepovratno nestajali. Eedan od naina da se sauvaju podaci #io #i da se posredstvom 8tampaa ispi8u na 0artiji. ;e3utim> ako postoji potre#a da podaci #udu pristupani nekom programu> tre#a i0 sauvati na magnetnim nosiocima in)ormacija> na primer na disku ili traci. -a taj nain> na disku ili traci se mogu uvati datoteke sa podacima koje mo@emo o#ra3ivati koliko god 0oemo puta> a da i0 ne moramo uitavati sa tastature.

204

Predrag S. Stanimirovi

Osnove programiranja

6atoteke su sekvencijalne strukture jednorodni0 apisa iji #roj nije unapred po nat> i koje se apisuju na nekom od spolja8nji0 memorijski0 medijuma. Ovakvi strukturni tipovi opisuju se sa file i postali su standardni u programskim je icima posle pojave ovog koncepta u je iku Pascal. 6atoteke su jednorodne strukture podataka> slino poljima ali a ra liku od polja> #roj elemenata datoteke se ne de)ini8e unapred i podra umeva se da one )i iki postoje van programa na nekom od spolja8nji0 memorijski0 medijuma $disku> traci> disketi itd.&.

6.11.1. D+'!'$,$ 0 .$/#,0 P+s6+%


Pod datotekom $ili )ajlom& u PHSCH*-u se podra umeva imenovani deo memorije na peri)ernom medijumu a registrovanje in)ormacija> koji mo@e uvati odre3enu koliinu in)ormacija. 6atoteka mo@e #iti i vor in)ormacija - kada mi itamo sadr@aj datoteke ili prijemnik in)ormacija - kada upisujemo podatke u datoteku. Operacija upisa u datoteku o naava prenos podataka i radne memorije $unutra8nje memorije& u datoteku> a operacija itanja - prenos sadr@aja i datoteke u radnu memoriju. Ove operacije se na ivaju ula no-i la ne operacije.

D+'!'$5 # '#(!"# (!1+'+,+


+atote!ni tip 4tip ile6 predstavlja ure3en skup proi voljnog #roja komponenti istog tipa. Droj komponenti teoretski nije ogranien> ali direktno avisi od oso#ina )i ikog nosioca in)ormacija $disk> traka> ...&. Sintaksni dijagram datotecnog tipa datje na sledeoj slici.

/ip komponenti datotenog tipa mo@e #iti #ilo koji tip - prost ili strukturirani> sa jednim i u etkomF to ne sme #iti datoteni tip> niti stmkturirani tip sa knmponentama datotenog tipa. Primer. Eednostavni primeri ra liiti0 tipova datoteka. Prvo su navedene neke de)inicije #a ni0 tipova> a potom slede de)inicije datoteni tipova.
6! s' Iimit 3 9:2 '=($ 'pseg 3 9 .. Iimit2 ?kup 3 set !4 'pseg2 Eektor 3 +))+= !'pseg% !4 real2 &omplex 3 )$6!)1 Re, (m 1 real2 end +record/2 (ntdat 3 4#%$ !4 integer2 Redat 3 4#%$ !4 real2 &hdat 3 4#%$ !4 char2 ?kupdat 3 4#%$ !4 ?kup2 Eekdat 3 4#%$ !4 Eektor2 Momdat 3 4#%$ !4 &omplex2

Promenljive nekog datotenog tipa opisuju se i ra ima o#lika


'=($ $ipdat 3 file of $ipslog2 "+) 0 1 $ipdat2

gde je ipdat tip elemenata datoteke> ili anonimno saF


"+) 0 1 file of $ipslog2

gde je ipslog tip elemenata datoteke. Prilikom opisa svake promenljive tipa datoteke automatski se generi8e jedna #a)erska promenljiva koja po tipu odgovara tipu elemenata datoteke. A sluaju kada se radi o promenljivoj / #a)erska promenljiva se o naava sa /Y. Preko ove #a)erske promenljive ostvaruje se svaka ve a sa konkretnom datotekom> kako upis tako i itanje slogova i datoteke.

205

Predrag S. Stanimirovi

Osnove programiranja

Sve operacije sa datotekama $itanje ili upis& se reali uju posredstvom nji0ovi0 komponenti> tako da u operaciji ucestvuje komponenta na koju poka uje datoteni poka iva. Sve komponente datoteke se mogu smatrati numerisanim - prva komponenta datoteke je interno o naena n%lom1 6u@ine datoteka se ne de)ini8u u opisima> ali svaka datoteka ima kraj koji se o#ele@ava markerom kraja datoteke 4Heo I D end o ile6. +#og toga se pri radu sa datotekama koristi )unkcija eo 4Ime+atote)nePromenljive6> koja do#ija vrednost true ako je dostignut kraj datoteke> i vrednost alse ako nije. 1ada #a)erska promenljiva /Y dostigne kraj datoteke standardna )unkcija KO5$/& do#ija vrednost tr%e> dok u suprotnom ima vrednost false.

P!"$/#"+ .$ 1+'!'$5 $ ()!&$ %.#"$ s+ 1+'!'$,!&


Pre nego 8to aponemo operacije sa datotekom potre#no je da u programu pove@emo datotenu promenljivu sa konkretnom )i ikom datotekom na disku. -akon pove ivanja sve operacije nad stvamom )i ikom datotekom se reali uju posredstvom datotecne promenljive. Pove ivanje se F reali uje procedurom assign sledeeg o#likaF
assign)Datotecna6romenl-iva,(me0a-la*

2me/a'la - je string konstanta ili promenljiva koja identi)ikuje datoteku na disku. -a primer>
assign)f, _ucenici.dat_*

Ovom procedurom je datotena promenljiva ) pove ana sa datotekom u)eni)i.dat u aktivnom direktorijumu. A stringu se mo@e navesti i putanja do datotekeF
assign)f,_c1askolskiaucenici.dat_*

8to nai da je datotena promenljiva pove ana sa datotekom u)eni)i.dat u poddirektorijumu skolski na disku #. 6rugi parametar procedure assign mo@e #iti string koji sadr@i o naku ure3aja koji imaju )iksirana imena i po mnogim svojstvima su slini datotekama. -a primer> ZCO-Z je jedno ime a dva ure3aja $ekran i tastaturu&. Hko je datotena promenljiva otvorena a itanje> to se reali uje sa tastature> a ako je otvorena a upis to se reali uje na ekranu. Slino Z*P/1Z> Z*P/2Z> Z*P/!Z> ZP(-Z su o nake 8tampaa na kojima se mo@e reali ovati samo i la in)ormacija> pri emu se ovi ure3aji tretiraju kao tekstualne datoteke.

K)$#)+ .$ 1+'!'$,+
6a #i se kreirala nova datoteka mora se nakon pove ivanja sa datotenom promenljivom procedurom assign otvoriti a upis proiceduromF
rewrite)(meDatote8ne6romenl-ive*

Ovom procedurom se uvek proi vodi pra na datoteka. Hko je datotena promenljiva pove ana sa datotekom koja ve postoji tada se sadr@aj postojee datoteke #ri8e #e ikakvog upo orenja u programu. -akon procedure re4rite nova datoteka je spremna da pri0vati in)ormacije> a datoteni poka iva do#ija vrednost 0. Posle svakog upisa u datoteku vrednost datotenog poka ivaa se uveava a 1 $pomera na sledeu komponentu&. A PHSCH*-u se a upis u datoteku koristi proceduraF
write)f,x*

gde je f ime datotene promenljive> a ! promenljiva istog tipa kao komponente datoteke koja se )ormira. A proceduri Brite do voljeno je navesti listu promenljivi0F
write)f, x 9 ,x;,... ,xn*

8to je ekvivalentno saF


begin write)f,x9*2 write)f,x;*2write)f,xn* end2

206

Predrag S. Stanimirovi

Osnove programiranja

1ada se prekida rad sa datotekom ona se mora atvoriti> #e o# ira da li je ula na ili i la na> proceduromF )lose4Ime+atote!nePromenIjive6 Ovim se u sluaju i la ne datoteke o#e #e3uje prenos podataka i pri0vatne $#a)erske& memorije na disk. /ako3e se prekida kori8enje programa operativnog sistema koji omoguavaju rad sa datotekama. A aglavlju procedure ili )unkcije ne sme se nala iti datotena promenljiva koja je vrednosni parametar> ve samo promenljivi.

K)$#)+ .$ 1+'!'$,+
Postojea datoteka se otvara a itanje primenom standardne procedure resetF
Reset)(meDatote8ne6romenl-ive*

gde je datotena promenljiva pret0odno pove ana sa )i ikom datotekom procedurom assign. % vr8avanjem procedure reset datoteni poka iva pove an sa datotekom poka uje na poetak )ajla> tj. na komponentu numerisanu sa 0. -a primer> procedure
assign)f,_ucenici.dat_*2 reset)f*2

pove uju datoteku %#eni#i1dat sa datotenom promenljivom f tako da se o#raanje ovoj datoteci> u programu> reali uje posredstvom datotene promenljive f. Procedurom reset se datoteni poka iva po icionira na prvu komponentu datoteke $numerisanu sa 0&. Bitanje datoteke reali uje proceduraF
read)f,x*

gde je f ime datotene promenljive> a ! promenljiva istog tipa kao komponente datoteke koja se ita. Posle svakog itanja datoteni poka iva se pomera na sledeu komponentu. A read proceduri se mo@e navesti i lista promenljivi0. % ra read)f,x9,x;,...,xn* ekvivalentan je saF
begin read)f,x9*2 read)f,x;*2 read)f,xn* end2

Otvaranjem datoteke a upis ili itanje re ervi8e se deo memorije koji se na iva ula no-i la ni #a)er. Pri upisu u datoteku> komponenta se ne prosle3uje odma0 na disk> ve se upisuje u #a)er> i tek kada se #a)er napuni sadr@aj se 8alje na disk. Slino pri itanju> ne ita se onoliko komponenti koliko se i programa tra@i> ve se #a)er napuni tra@enim komponentama> ali se puni i komponentama koje nisu tra@ene. /o nai> ako program tra@i " komponente> a #a)er mo@e da primi '"> to e se uitati jo8 '0 komponenti. Da)erisanjem se o#e #e3uje #r@a ra mena in)ormacija. Procedure otvaranja se mogu primeniti vi8e puta nad istom datotekom. Hko je datoteka #ila ve otvorena ona se automatski atvara> a u sluaju procedure reset datoteni poka iva se po icionira na prvu komponentu. Ponovljeni po iv re4rite #ri8e sadr@aj tekue datoteke i priprema je a upis poev od prve komponente. % me3u ponovljeni0 po iva procedura otvaranja nije neop0odno po vati operaciju #lose a atvaranja datoteke. +a rad sa datotekama mogu se koristiti sledee procedureF 3.(. $/& - Po icioniramo se na poetak datoteke / da #i je o#ra3ivali od prvog sloga. Hko je datoteka / pra na va@iF .:/$/& S tr%e i /Y je nede)inisano> inae je .:/$/& S )alse i /Y do#ija vrednost prvog sloga datoteke. 3.?32 .$/& - Dri8u se svi slogovi datoteke /. Pri tome .:/$/& do#ija vrednost true i postoji mogunost ponovnog kreiranja datoteke sa istim imenom. 5. $/& - Prela na sledei slog datoteke /. Da)erska promenljiva /Y do#ija vrednost sledeeg sloga datoteke ako on postoji. Hko je kraj datoteke i nema vi8e slogova $nema sledeeg sloga& va@iF .:/$/& S tr%e i /Y je nede)inisano. 6ejstvo ove procedure je nede)inisano ako je pre njenog po iva #ilo .:/$/& S tr%e.

207

Predrag S. Stanimirovi

Osnove programiranja

G0 $/& - /ekua vrednost #a)erske promenljive /Y upisuje se u datoteku /> postaje aktivan sledei element datoteke i va@iF .:/$/& S tr%e i /Y nede)inisano. Pre upotre#e ove procedure mora da se i vr8i po icioniranje na kraj datoteke> odnosno tre#a da va@i .:/$/& S tr%e. Primer. Program kojim se sadr@aj datoteke ) preslikava u datoteku +.
program Datote@e type Dat = ,i-e of integer var A,B 7 Dat begin reset&A' reOrite&B' (#i)e not %OF&A' do begin BY 7= AY Y%.&A' P0.&B' end.

1apomena> O#ino se kod implementacije je ika Pascal procedure reset i re4rite koriste pove ivanje stvarni0 datoteka sa logikim programskim datotekama. -a primerF

3.(. $2;G0 > qG:-),2 q&X - 6atoteka kreirana na disku pod imenom OG:-),2P pove uje se sa standardnom datotekom 2;G0 . 3.?32 .$:0 G0 > q2J9)Jr&X - 1ao i la na datoteka na disku e #iti kreirana datoteka sa imenom Z2J9)JZ. A principu> sve operacije nad datotekama mogu se i vr8avati preko etiri navedene procedure. ;e3utim> #og praktinosti i jednostavnijeg de)inisanja osnovni0 aktivnosti nad datotekama postoje i procedure read i 4rite. 3.)-$/> X& ekvivalentno sa X FS /YX 5. $/&X ?32 .$/> X& ekvivalentno sa /Y FS XX G0 $/&X Procedure read i 4rite se mogu koristiti i sa vi8e argumenata pri emu jeF 3.)-$/> X1> X2> .... > Xk&X ekvivalentno saF 3.)-$/> X1&X p 3.)-$/> Xk&X ?32 .$/> X1> X2> .... > Xk&X ekvivalentno saF ?32 .$/> X1&Xp ?32 .$/> Xk&X

-ad datotekama se o#ino mogu i vr8avati dve osnovne operacije i to itanje slogova datoteke i upis slogova u datoteku> koje se mogu opisati na sledei nainF $1& Bitanje slogova i datotekeF
RE?E$)0*2 B-#%$ !' E'0)0* 1! 3$*# READ)0, Momp*2 # 13 Momp2 $ 1A RE?E$)0*2 )$($+' READ)0, Momp*2 # 13 Momp2 0 '#% E'0)0*2 .

$2& Apis slogova u datoteku> kreiranje datotekeF


REbR($E)0*2 B-#%$ B6(? 1! 3$*# Momp 13 #2 bR($E)0,Mopm*2 $ 1A REbR($E)0*2 )$($+' Momp 13 #2 bR($E)0,Momp*2 0 '#% !' B6(?2

Promenljiva 0G2( logikog tipa ovde slu@i da se preko nje reguli8e kraj upisa u datoteku. Slogovi se upisuju dok je 0G2( S tr%e.

Primeri.

208

Predrag S. Stanimirovi

Osnove programiranja

Primer. -apisatiF a& )unkciju koja utvr3uje da li postoji datoteka sa adatim imenomX #& proceduru koja ponavlja a0tev a unos imena datoteke koja se otvara a uitanje sve dok se ne unese ime postojee datotekeX c& proceduru kojom se proverava da li postoji datoteka sa adatim imenom> sve dok se ne unese ime datoteke koja nije o)ormljena. 1ada je uneto ime datoteke koja nije o)ormljena> otvara se a upis datoteka sa takvim imenom.
=rogram datote@e +ses ;rt tQ=e ime=stringH!0I var ime,a>-a7ime ,7text doDro7Doo-ean ,+n;tion =osto>i&imedat7ime'7Doo-ean var ,7text Degin assign&,,imedat' 9hI#B reset&,' 9hI"B i, &IOres+-t=0' tAen Orite-n&2Datote@a sa imenom 2,imedat,2 =osto>i2' e-se Orite-n&2Datote@a sa imenom 2,imedat,2 ne =osto>i2' =osto>i7=&IOres+-t=0' end =ro;ed+re sig+rno;itan>e var imedat7ime ,7text otvori7Doo-ean Degin re=eat Orite&2Ime datote@e <a ;itan>e_ 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B otvori7=&IOres+-t=0' i, not otvori tAen Orite-n&2Datote@a sa imenom 2,imedat,2 ne =osto>i2' e-se Orite-n&2Datote@a sa imenom 2,imedat,2 >e otvorena <a ;itan>e2' +nti- otvori end =ro;ed+re sig+ran+=is var imedat7ime ,7text otvori7Doo-ean Degin re=eat Orite&2Ime datote@e <a +=is_ 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B otvori7=&IOres+-t=0' i, otvori tAen Orite-n&2Datote@a sa imenom 2,imedat,2 ve; =osto>i2' e-se reOrite&,' +nti- not otvori end Degin ;-rs;r Orite&2Ime datote@e <a ;itan>e_ 2' read-n&ime,a>-a' doDro7==osto>i&ime,a>-a' sig+rno;itan>e sig+ran+=is end.

209

Predrag S. Stanimirovi

Osnove programiranja

Primer. A )ajlu f se nala i jedna reenica #e nakova interpukcije. Ona je sastavljena od rei koje su ra dvojene #lanko nacima. -a ekranu prika ati jednu ispod druge sve rei i te reenice> ure3ene po a#ecedi.
=rogram +re?en>e var n,@,i,>7integer ,7,i-e o, ;Aar =riv, re;7stringH$0I re;i7arraQH1..20I o, stringH$0I ;A 7 ;Aar Degin assign&,,2,2' reset&,' @ 7= 0 re; 7= 22 OAi-e not eo,&,' do Degin re=eat read&,,;A' re; 7= re; " ;A +nti- &;A = 2 2' or eo,&,' @ 7= @"1 re;iH@I 7= re; OAi-e&;A = 2 2' do read&,,;A' re; 7= ;A end Orite-n Orite-n ,or i 7= 1 to @ # 1 do ,or > 7= i " 1 to @ do Degin i,&re;iHiI L re;iH>I' tAen Degin =riv 7= re;iHiI re;iHiI 7= re;iH>I re;iH>I 7= =riv end end ,or n 7= 1 to @ do Orite-n&re;iHnI' ;-ose&,' Orite-n end.

Primer. A )ajlu cF\tp\ adaci\).tQt nala e se sledei podaci o kandidatima a poslanikeF - ime i pre imeX - adresaX - animanjeX - ime stranke koja ga kandiduje. A )ajl cF\tp\ adaci\g.tQt upisati sve kandidate ure3ene po imenu stranke $a#ecedno&> a u okviru stranke po imenu kandidata.
=rogram stran@e tQ=e s-og = re;ord imei= 7 stringH20I adresa 7 stringH10I <animan>e 7 stringHXI imes 7 stringH10I end ni<=arraQH1..20I o, s-og var g,, 7 ,i-e o, s-og =ro;ed+re +=is var ;A7;Aar =riv7s-og Degin assign&,,2;7St=S<ada;iS,.txt2'

reOrite&,'

210

Predrag S. Stanimirovi re=eat OitA =riv do Degin Orite&2Ime i =re<ime_ 2' read-n&imei=' Orite&2Adresa_ 2' read-n&adresa' Orite&24animan>e_ 2' read-n&<animan>e' Orite&2Ime stran@e_ 2' read-n&imes' end Orite&,,=riv' Orite&2^os s-ogova_ 2' read-n&;A' +nti- not &;A in H2d2,2D2I' ;-ose&,' end

Osnove programiranja

=ro;ed+re ;ita>isortira> var i,>,@7integer a7ni< =riv7s-og Degin assign&,,2;7St=S<ada;iS,.txt2' reset&,' i7= 0 OAi-e not eo,&,' do Degin i7=i"1 read&,,aHiI' end ,or > 7= 1 to i#1 do ,or @ 7= >"1 to i do i,&aH>I.imes L aH@I.imes' or &&aH>I.imes = aH@I.imes' and &aH>I.imei= L aH@I.imei='' tAen Degin =riv 7= aH>I aH>I 7= aH@I aH@I 7= =riv end assign&g,2;7St=S<ada;iSg.txt2' reOrite&g' ,or >7=1 to i do Orite&g,aH>I' ;-ose&,' ;-ose&g' end =ro;ed+re ;itan>e var =riv7s-og Degin assign&g,2;7St=S<ada;iSg.txt2' reset&g' OAi-e not eo,&g' do Degin read&g,=riv' OitA =riv do Degin Orite-n&imei=' Orite-n&adresa' Orite-n&<animan>e' Orite-n&imes' end end ;-ose&g' end Degin Orite-n Orite-n&2O,orm->ena >e s-ede;a datote@a2' +=is ;ita>isortira> ;itan>e end.

Primer. -apisati program koji )ormira sekvencijalnu datoteku koja se sastoji od n realni0 #rojeva. +atim o)ormiti novu datoteku koja sadr@i sve realne #rojeve i datoteke> pomno@ene sa 2. %mena datoteka adati preko tastature.

211

Predrag S. Stanimirovi

Osnove programiranja

=rogram dvostr+@i&in=+t,o+t=+t' tQ=e rea-dat = ,i-e o, reavar ,, ,neO7rea-dat x7reaimedat, neOimedat7stringH1!I Degin Orite-n&20nesi ime datote@e7 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B i, IO/es+-t KL 0 tAen Degin Orite-n&2Datote@a 32,imedat, 23 ni>e o,orm->ena 2' Aa-t end Orite-n&20nesi ime nove datote@e7 2' read-n&neOimedat' assign&,neO, neOimedat' reOrite&,neO' OAi-e not eo,&,' do Degin read&,, x' i, not eo,&,' tAen Degin x7=2Ex Orite&,neO, x' end end ;-ose&,' ;-ose&,neO' end.

Primer. -apisati program koji e od celi0 #rojeva koji se uitavaju i postojee datoteke upisati u novu datoteku sve one koji predstavljaju potpun kvadrat.
=rogram dat) tQ=e intdat = ,i-e o, integer var ,,g7 intdat x7integer imedat, neOimedat7stringH!0I Degin Orite-n&20nesi ime datote@e i< @o>e se ;ita7 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B i, IO/es+-t KL 0 tAen Degin Orite-n&2Datote@a 32,imedat, 23 ni>e o,orm->ena 2' Aa-t end Orite-n&20nesi ime nove datote@e7 2' read-n&neOimedat' assign&g, neOimedat' reOrite&g' OAi-e not eo,&,' do Degin read&,, x' i, tr+n;&sTrt&x''=sTrt&x' tAen Orite&g, x' end ;-ose&,' ;-ose&g' Orite-n&21adr<a> nove datote@e >e72' assign&g,neOimedat' reset&g' OAi-e not eo,&g' do Degin read&g,x' Orite&x,2 2' end ;-ose&g' end.

Primer. Ala na datoteka -) . X sadr@i sekvence #inarni0 #rojeva ra dvojeni0 pra ninom. Eedna sekvenca ima najvi8e "0 karaktera> sastoji se od 0 i 1> pri emu mogu postojati vodee nule> dok du@ina sekvence nije )iksna. -apisati program koji uitava sve #inarne #rojeve i datoteke u ni > pri emu sve parne #rojeve umanjuje a 1> a neparne uveava a 1> i tako )ormirani ni sortira u rastuem

212

Predrag S. Stanimirovi

Osnove programiranja

poretku. +atim tako sortirane #rojeve ispisuje u i la nu datoteku :0 . X . Pretpostavka je da su svi #rojevi vei od 0.
=rogram =m,>n882 +ses ;rt tQ=e Dinni<=arraQH1..!0I o, stringH$1I var Dn7Dinni< ,,g7 text ;A7;Aar D,=7stringH$1I &E %vent+a-ni =renos E' -,@,i,>7integer ,+n;tion 0ve;a>4a1&D7string'7string var >7integer Degin >7=-engtA&D' OAi-e &DH>I=212' and &>L0' do Degin DH>I7=202 >7=>#1 end &EGode;e >edini;e + n+-e E' i, >L0 tAen Degin DH>I7=212 0ve;a>4a17=D &E Prva n+-a + >edini;+ E' end e-se 0ve;a>4a17=212"D &E %vent+a-na nova =o<i;i>a E' end ,+n;tion 0man>i4a1&D7string'7string var >,-7integer Degin >7=-engtA&D' -7=> OAi-e &DH>I=202' and &>L0' do Degin DH>I7=212 >7=>#1 end &EGode;e n+-e + >edini;eE' DH>I7=202 &E Prva >edini;a + n+-+ E' i, DH1I=202 tAen D7=;o=Q&D,2,-#1' &EI<Da;ivan>e vode;e n+-e E' 0man>i4a17=D end =ro;ed+re T+i;@sort&n7integer var ni<7Dinni<' ,+n;tion man>i&s1,s27string'7Doo-ean Degin man>i7= &-engtA&s1'K-engtA&s2'' or &&-engtA&s1'=-engtA&s2'' and &s1Ks2'' end =ro;ed+re sort&-,d7integer var s7Dinni<' var i,>7integer =om,x7stringH$1I Degin i7=- >7=d x7=sH&i">' div 2I re=eat OAi-e man>i&sHiI,x' and &iKd' do i7=i"1 OAi-e man>i&x,sH>I' and &>L-' do >7=>#1 i, iK=> tAen Degin =om7=sHiI sHiI7=sH>I sH>I7==om i7=i"1 >7=>#1 end +nti- iL> i, >L- tAen sort&-,>,s' i, iKd tAen sort&i,d,s' end

213

Predrag S. Stanimirovi Degin sort&1,n,ni<' end

Osnove programiranja

Degin ;-rs;r assign&,,2;7St=S<ada;iSdat.txt2' reset&,' assign&g,2;7St=S<ada;iSo+t.txt2' reOrite&g' -7=0 OAi-e not eo,&,' do Degin D7=22 read&,,;A' OAi-e &;A=202' and &;A=2 2' and not eo,&,' do read&,,;A' OAi-e &;A KL 2 2' and not eo,&,' and &;A KL J13' do Degin D7=D";A read&,,;A' end -7=-"1 i, DH-engtA&D'I=212 tAen DnH-I7=0ve;a>4a1&D' e-se DnH-I7=0man>i4a1&D' end T+i;@sort&-,Dn' ,or i7=1 to - do Orite-n&DnHiI' ,or i7=1 to - do Orite-n&g,DnHiI' ;-ose&,' ;-ose&g' end.

Primer. -apisatiF a& )unkciju koja utvr3uje da li postoji datoteka sa adatim imenomX #& proceduru koja ponavlja a0tev a unos imena datoteke koja se otvara a itanje sve dok se ne unese ime postojee datotekeX c& proceduru kojom se proverava da li postoji datoteka sa adatim imenom> sve dok se ne unese ime datoteke koja nije o)ormljena. 1ada je uneto ime datoteke koja nije o)ormljena> otvara se a upis datoteka sa takvim imenom.
=rogram datote@e +ses ;rt tQ=e ime=stringH!0I var ime,a>-a7ime ,7text doDro7Doo-ean ,+n;tion =osto>i&imedat7ime'7Doo-ean var ,7text Degin assign&,,imedat' 9hI#B reset&,' 9hI"B i, &IOres+-t=0' tAen Orite-n&2Datote@a sa imenom 2,imedat,2 =osto>i2' e-se Orite-n&2Datote@a sa imenom 2,imedat,2 ne =osto>i2' =osto>i7=&IOres+-t=0' end =ro;ed+re sig+rno;itan>e var imedat7ime ,7text otvori7Doo-ean Degin re=eat Orite&2Ime datote@e <a ;itan>e_ 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B

214

Predrag S. Stanimirovi

Osnove programiranja

otvori7=&IOres+-t=0' i, not otvori tAen Orite-n&2Datote@a sa imenom 2,imedat,2 ne =osto>i2' e-se Orite-n&2Datote@a sa imenom 2,imedat, 2 >e otvorena <a ;itan>e2' +nti- otvori end =ro;ed+re sig+ran+=is var imedat7ime ,7text otvori7Doo-ean Degin re=eat Orite&2Ime datote@e <a +=is_ 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B otvori7=&IOres+-t=0' i, otvori tAen Orite-n&2Datote@a sa imenom 2,imedat,2 ve; =osto>i2' e-se reOrite&,' +nti- not otvori end Degin ;-rs;r Orite&2Ime datote@e <a ;itan>e_ 2' read-n&ime,a>-a' doDro7==osto>i&ime,a>-a' sig+rno;itan>e sig+ran+=is end.

Primer. -apisati procedure i glavni program kojima seF a& )ormira datoteka sa imenima i pre imena vlasnika tele)ona i #rojevima tele)ona. Anos podataka se avr8ava kada se umesto imena unese re IkrajI. Hko datotreka ve postoji 8tampati odgovarajuu poruku. #& proverava da li postoji datoteka )ormirana pret0odnom procedurom> i ako postoji ispisuje njen celokupni sadr@aj. c& ispisuje #roj tele)ona na osnovu adatog imena oso#e> Akoliko u datoteci ne postoji polje sa adatim imenom 8tampati odgovarajuu poruku.
=rogram imeni@ tQ=e =odata@ = re;ord =re<ime7stringH20I te-e,on7stringH10I end datote@a = ,i-e o, =odata@ ime=string var imedat,imeosoDe7ime ,7datote@a osoDa7=odata@ =ro;ed+re @reiran>e&var ,7datote@a' Degin Orite-n&2Ime datote@e @o>a se @reira_ 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B i, IOres+-t=0 tAen Orite-n&2.a@va datote@a =osto>i2' e-se Degin reOrite&,' Orite-n&20nesi =re<ime i-i 3@ra>3 <a =re@id +=isa2' read-n&osoDa.=re<ime' OAi-e osoDa.=re<imeKL2@ra>2 do Degin Orite&2.e-e,on_ 2' read-n&osoDa.te-e,on' 215

Predrag S. Stanimirovi Orite&,,osoDa' Orite-n&2Pre<ime i ime_ 2' end

Osnove programiranja

read-n&osoDa.=re<ime'

end end =ro;ed+re is=is&var ,7datote@a' Degin Orite-n&2Ime datote@e <a ;itan>e_ 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B i, IOres+-t KL 0 tAen Orite-n&2.a@va datote@e ne =osto>i 2' e-se Degin OAi-e not eo,&,' do Degin read&,,osoDa' OitA osoDa do Orite-n&=re<ime,2 2,te-e,on' end end end =ro;ed+re nad>i&var ,7datote@a' var ima7Doo-ean Degin Orite&20nesi ime osoDe 2' read-n&imeosoDe' Orite-n&2Ime datote@e <a ;itan>e_ 2' read-n&imedat' assign&,,imedat' 9hI#B reset&,' 9hI"B i, IOres+-t KL 0 tAen Orite-n&2.a@va datote@e ne =osto>i 2' e-se Degin ima7=,a-se OAi-e &not ima' and &not eo,&,'' do Degin read&,,osoDa' OitA osoDa do i, =re<ime=imeosoDe tAen Degin Orite-n&=re<ime,2 2,te-e,on' ima7=tr+e end end i, &not ima' tAen Orite-n&2OsoDa 2,imeosoDe,2 nema te-e,on2' end end Degin @reiran>e&,' end. is=is&,' nad>i&,' ;-ose&,'

T$,s'0+% $ 1+'!'$,$
6atoteke iji su elementi naci kodirani standardnim kodom $HSC%%& na ivaju se /ekstualne datoteke su odre3ene sledeim opisomF
'=($ T$L' 3 file of charM

tekstualnim.

A su8tini tip podataka te!t je standardni tip podataka u je iku Pascal kao 8to su to na primer 2nteger> 3eal> ,&ar i +oolean. ;o@e se smatrati da su tekstualne datoteke ni ovi nakova koji se mogu 8tampati. +a rad sa tekstualnim datotekama mogu se koristiti sledee procedureF ?32 .9;$X& - avr8etak tekueg reda tekstualne datoteke NX

216

Predrag S. Stanimirovi

Osnove programiranja

3.)-9;$X& - prela na poetak sledeeg reda tekstualne datoteke X $XY poka uje na prvi nak sledeeg reda&X .:9;$X& - logika )unkcija koja poka uje da li je dostignut kraj tekueg reda tekstualne datoteke X $ako .:9;$X& S tr%e tada XY poka uje na ra delnik redova&. /ako3e se mogu koristiti i procedure read i 4rite> u onom smislu u kome su ve opisane. Hko je / tekstualna datoteka i ,< promenljiva tipa c0ar> va@iF
write)F, CH*2 ekvivalentno je saF read)F, CH*2 ekvivalentno je saF FK 13CH2 PUT)F*2 CH 13 FK2 GET)F*2

Procedure readln i 4riteln mogu se koristiti samo u sluaju tekstualni0 datoteka. Slino procedurama read i :rite i ove procedure se mogu koristiti sa vi8e argumenata i pri tome jeF
/%ADL]&F,5F1,5F2,...,5F:'

ekvivalentno saF
/%AD&F, 5F1' .../%AD&F, 5F:' /%ADL]&F'

+a rad sa tekstualnim datotekama mogu se koristiti sledee op8te procedure. $1& Bitanje tekstualne datoteke /F
program 5itextd1 var F7text Pom, 5F7 ;Aar begin reset&F' ... (#i)e not %OF&F' do begin (#i)e not %OL]&F'do begin read&F,5F' Pom 7= 5F end read-n&F' end end.

Kkvivalentan program pret0dodnomF


program 5itextd2 var F7 text Pom, 5F7 ;Aar begin reset&F' ... repeat repeat read&F,5F' Pom .* 5F +nti) %OL]&F' read-n&F' +nti) %OF&F' end.

$2& 1reiranje tekstualne datoteke /F


program :rtextd1 var F7 text 5F, Pom 7;Aar Da->edat, Da->ered 7Boo-ean begin reOrite&F' ... (#i)e Da->edat do begin (#i)e Da->ered do 217

Predrag S. Stanimirovi begin 5F 7= Pom end$ Orite-n&F' end$ ... end.

Osnove programiranja

Orite&F,5F'

ili
program :rtextd2 var F 7 text 5F, Pom 7 ;Aar Da->edat, Da->ered 7 Boo-ean begin reOrite&F' ... repeat repeat 5F 7= Pom Orite&F,5F' +nti) not Da->ered Orite-n &F' +nti) not Da->edat end.

Sledei primer je jedan od klasini0 pro#lema koji se re8avaju pomou tekstualni0 datoteka. Primer. Program kojim se preslikava datoteka X u datoteku @ i pri tome se svaki ni u astopni0 pra nina amenjuje jednom pra ninom.
program Pres-i@ati &*,P' var 5F 7 ;Aar *,P 7 text begin /%1%.&*' /%`/I.%&P' (#i)e not %OF&*' do begin (#i)e not %OL]&*' do begin /%AD&*,5F' `/I.%&P,5F' if 5F = 2 2 t#en repeat /%AD&*,5F' +nti) C/ end$ /%ADL]&*' `/I.%L]&P' end end.

0,1 1$

P)#&$)#.
Primer. 6ata su dva )ajla
var ,,g7text

%spitati da li su isti. Hko su isti od8tampati tekst Zisti suZ. Hko nisu istu od8tampati koja opisuje prvu prona3enu ra liku.
=rogram =ored>en>e var ,,g7text radi7Doo-ean i 7 integer ;A1,;A27;Aar Degin assign&,,2,.=as2' assign&g,2g.=as2' reset&,' reset&g' i7=1 radi 7= tr+e OAi-e not eo,&,' and not eo,&g' and radi do Degin 218

Predrag S. Stanimirovi read&,,;A1' read&g,;A2' i, ;A1 = ;A2 tAen i7= i"1 e-se radi 7= ,a-se

Osnove programiranja

end i, not radi tAen Orite-n&2/a<-i@a 2,i,2 #to> @om=onenti2' e-se i, eo,&,' and not eo,&g' tAen Orite-n&2Datote@a g >e d+<a2' e-se i, not eo,&,' and eo,&g' tAen Orite-n&2Datote@a , >e d+<a2' e-se Orite-n&2Isti s+2' end.

Primer. -apisati program kojim se itaju dva tekstualna )ajla tekst1 i tekst2> i 8tampaju jedan pored drugog> na sledei nainF
te@st1 ############ ############ te@st2 ################ ################

-e sme se menjati struktura redova u )ajlovima.


=rogram te@stovi var te@st1, te@st2 7 text ;A 7 ;Aar i,> 7 integer Degin Orite-n Orite-n Orite&2 te@st1 2' Orite&2 te@st2 2' Orite-n Orite-n assign&te@st1, 2te@st1.=as2' assign&te@st2,2te@st2.=as2' reset&te@st1' reset&te@st2' i 7= 0 re=eat i, eo,&te@st1' tAen Degin Orite&2 %OF 2' i7=X end e-se OAi-e not eo-n&te@st1' do Degin read&te@st1,;A' i 7= i"1 Orite&;A' end read-n&te@st1' ,or > 7= i to 3X do Orite&2 2' i7=0 i, eo,&te@st2' tAen Orite&2 %OF 2' e-se OAi-e not eo-n&te@st2' do Degin read&te@st2,;A' Orite&;A' end read-n&te@st2' Orite-n +nti- eo,&te@st1' and eo,&te@st2' end.

Primer. % raunati #roj pra ni0 redova u tekstualnom )ajlu.


=rogram =ra<niredovi +ses ;rt var tx7text ime7string -7-ongint ,+n;tion em=tQ&var t7text'7-ongint var @,d7integer ;A7;Aar Degin reset&t' @7=0

219

Predrag S. Stanimirovi OAi-e not eo,&t' do 9 ;i@-+s =o redovima B Degin d7=0 9 d >e d+<ina te@+;eg reda B read&t,;A' OAi-e not eo-n&t' do Degin d7=d"1 read&t,;A' end i, d=0 tAen @7=@"1 read&t,;A' 9 =ro=+stan>e @ra>a reda B end em=tQ7=@ end Degin ;-rs;r Orite&20nesi ime datote@e 2' read-n&ime' -7=em=tQ&tx' Orite-n&2Pra<niA redova + datote;i 2,ime,2 ima 2,-' end.

Osnove programiranja

assign&tx,ime' ;-ose&tx'

S'+ 1+)1 $ 1+'!'$,$ INPUT # OUTPUT


A programskom je iku Pascal a o naavanje standardni0 ula no-i la ni0 ure3aja $tastatura> ekran& koriste se tekstualne datoteke 2;G0 i :0 G0 . 1ada se predvi3a rad sa ovim standardnim uredajima imena ovi0 datoteka se navode u aglavlju programa. A tom sluaju procedure a rad sa datotekama mogu da se koriste #e argumenta kojim se uka uje na datoteku> kada se podra umeva da se ula ne procedure odnose na datoteku 2;G0 > a i la ne na datoteku :0 G0 . Po dogovoru va@e sledee relacijeF
`/I.%&5F' /%AD&5F' `/I.%L] /%ADL] %OF %OL]

ekvivalentno sa ekvivalentno sa ekvivalentno sa ekvivalentno sa ekvivalentno sa ekvivalentno sa

`/I.%&O0.P0., 5F' /%AD&5F' `/I.%L]&O0.P0.' /%ADL]&I]P0.' %OF&I]P0.' %OL]&I]P0.'

1apomena> O#ino se kod implementacije je ika Pascal procedure reset i re:rite koriste pove ivanje stvarni0 datoteka sa logikim $programskim& datotekama. -a primerF

(KSK/$%-PA/> ZPO6HC%Z&X - 6atoteka kreirana na disku pod imenom qPO6HC%Z pove uje se sa standardnom datotekom %-PA/. (K9(%/K$OA/PA/>Z %+*H+Z&X imenom Z %+*H+Z. - 1ao i la na datoteka na disku e #iti kreirana datoteka sa

D#)$,' # ()#s'0( 1+'!'$,+&+


-edostatak serijski0 i sekvencijalni0 datoteka jeste u tome 8to traganje a apisom morate poeti od poetka datoteke> a #risanje ili dodavanje jednog apisa nai da sve apise morate prepisati u novu datoteku. 6atoteke s direktnim $ili IsluajnimI& pristupom ne snimaju apise jedan a drugim> ve svaki apis ima svoju adresu $ili polo@aj u odnosu na poetak datoteke&> koji se i raunava i vrednosti njegovog kljunog polja. /o nai da se svakom apisu mo@e ne avisno pristupati putem njegove jedinstvene adrese. Po8to Pascal do voljava samo apise )iksne $dakle po nate& du@ine> takve datoteke mo@emo neposredno a5urirati $%pdate in sit%&> odnosno preko postojeeg apisa prepisati nov> a@uriran apis> a da strukturu datoteke nimalo ne poremetimo.

220

Predrag S. Stanimirovi

Osnove programiranja

Primer. Hko je potre#no da apamtimo podatke o artiklima na skladi8tu> a oni imaju jedinstvene 8i)re $odnosno Iprimarni kljuI& i me3u 0 i 1000> onda se 8i)ra artikla mo@e upotre#iti kao jedinstvena adresa odgovarajueg apisa.
=rogram Dire@tanPrist+= tQ=e .Arti@a-= re;ord 1i,ra7integer O=is7stringH2!I 5ena7/eaBro>:omada7DQte end var Arti@a- 7 .Arti@aDat4a-iAa 7 ,i-e o, .Arti@aDegin assign&Dat4a-iAa, 24a-iAe.dat2' reOrite&Dat4a-iAa' Orite&20=isite o=is &* a@o =re@idate +=isivan>e' 2' read-n&Arti@a-.o=is' OAi-e&Arti@a-.O=isKL2*2'do Degin Orite&20=isite si,r+ arti@-a &od 0 do 1000'7 2' re=eat read-n&Arti@a-.1i,ra' +nti- &Arti@a-.1i,raL=0' and &arti@a-.1i,raK=1000' Orite&20=isite ;en+7 2' read-n&arti@a-.5ena' Orite&20=isite Dro> @omada na <a-iAama7 2' read-n&arti@a-.Bro>:omada' see@&Dat4a-iAa,Arti@a-.1i,ra' Orite&Dat4a-iAa, Arti@a-' Orite&20=isite o=is &* a@o =re@idate +=isivan>e' 2' read-n&Arti@a-.o=is' end ;-ose&Dat4a-iAa' reset&Dat4a-iAa' OAi-e not eo,&Dat4a-iAa' do Degin read&Dat4a-iAa, Arti@a-' Orite-n&Arti@a-.1i,ra' Orite-n&Arti@a-.O=is' Orite-n&Arti@a-.5ena7072' Orite-n&Arti@a-.Bro>:omada' Orite-n end ;-ose&Dat4a-iAa' end.

Primer. -api8ite program a pojednostavljen o#raun plata u malom predu eu. Program tre#a da o#ra3uje podatke do 1, aposleni0. +aposleni se plaaju sedmino i tada primaju detaljan platni o#raun sa #rojem normalni0 i prekovremeni0 radni0 sati> #ruto platom pore om> od#itkom a socijalno osiguranje i neto platom nakon svi0 od#itaka. Program tre#a da pamti imena aposleni0. Ostale podatke tre#a pamtiti du@e od jedne sedmice. ;ora #iti omogueno pretra@ivanje podataka pojedinai aposleni0 i detalja nji0ovi0 tekui0 platni0 o#rauna. Pretpostavite sledee )iksne podatkeF i standardna satnicaF ..00 po satu i prekovremena satnicaF 1!.,0 po satu i normalna radna sedmicaF !7 sati i maksimalna radna sedmicaF "4 sati i socijalno osiguranjeF 11` #ruto plate. i Pore se i raunava ovakoF pomno@ite #ruto sedminu platu sa ,2 da #iste do#ili godi8njuX na godi8nju platu primenite poreske stope i sledee ta#eleX

221

Predrag S. Stanimirovi

Osnove programiranja

podelite re ultujui pore sa ,2 da #iste do#ili i nos sedminog pore a. Poreske stope u godini 200! - 200" prvi0 "'1, nema pore a sledei0 1.20 10` od sledei0 1.21 do 2..00 22` preko 2..00 "0`
=rogram /adni;i tQ=e radni@ = re;ord ImeiPre<ime7stringH$0I /adna1edmi;a73)..$X 1o;Osig+ran>e, Pore<, P-ata7reaend var Dat/ad7 ,i-e o, radni@ r7radni@ i,n,B1ati7integer Pore<Pro;7reaDegin assign&Dat/ad,2/adni;i.txt2' reOrite&Dat/ad' Orite&2Bro> radni@a_ 2' read-n&n' Orite-n&2Poda;i <a 2,n,2 radni@a2' ,or i7=1 to n do Degin Orite&2Ime i =re<ime_ 2' read-n&r.ImeiPre<ime' Orite&2Bro> radniA sati_ 2' read-n&r./adna1edmi;a' B1ati7=/adna1edmi;a i, B1atiL3) tAen r.P-ata7= 3)E8"&B1ati#3)'E13.!0 e-se r.P-ata7=B1atiE8 r.1o;Osig+ran>e7=r.P-ataE116100 i, r.P-ataK=200 tAen Pore<Pro;7=0 e-se i, r.P-ataK=300 tAen Pore<Pro;7=106100 e-se i, r.P-ataK=$00 tAen Pore<Pro;7=226100 e-se Pore<Pro;7=$06100 r.Pore<7=r.P-ataE!2EPore<Pro;6!2 r.P-ata7=r.P-ata#r.Pore<#r.1o;Osig+ran>e Orite&Dat/ad,r' end ;-ose&Dat/ad' reset&Dat/ad' Orite-n ,or i7=1 to n do Degin read&Dat/ad,r' Orite-n&r.ImeiPre<ime' Orite-n&r.P-ata7072' end ;-ose&Dat/ad' reset&Dat/ad' Orite&2redni Dro> radni@a_ 2' read-n&i' see@&Dat/ad,i' read&Dat/ad,r' Orite-n&r.ImeiPre<ime' Orite-n&r.P-ata7072' end.

1. A promenljivoj i se nala i po icija prvog pojavljivanja nakova ))> dok se u promenljivoj ' nala i po icija prvog pojavljivanja nakova DD. % vr8iti sve amene para )) sa + i para ++ sa ). Akoliko postoje o#a para nakova unutar rei> menjuje se onaj par ija je po icija manja.
=rogram transstring var +-re;7string =ro;ed+re I<re;&var s7string' var i,>7DQte Degin i7==os&2AA2,s' >7==os&2BB2,s'

222

Predrag S. Stanimirovi OAi-e&i">KL0' do Degin i, &iKL0' and &iK>' or &>=0' tAen Degin de-ete&s,i,2' insert&2B2,s,i' end e-se Degin de-ete&s,>,2' insert&2A2,s,>' end i7==os&2AA2,s' >7==os&2BB2,s' end end Degin read-n&+-re;' I<re;&+-re;' end. Orite-n Orite-n&+-re;'

Osnove programiranja

Orite-n

/est primer. (e HHDDHC6SHHDDH trans)ormi8e se u re HDHC6SHDH.

2. -apisati Pascal )unkcije $rekur ivnu ili iterativnu ver iju& koje a datu relaciju nad maksimalno devetolanim skupom ispituju re)leksivnost> simetrinost i tran ivnost. (elacija je opisana matricom istinitosni0 vrednostiF ako je element aij matrice H jednak true> to nai da je i-ti element skupa u relaciji sa '-tim elementom. 6ata je tekstualna datoteka. Svaki red datoteke ima o#lik n i1 '1 i2 '2 ... ik 'k> gde je n dimen ija matrice> a il 'l $lS1>...>k& indeksi elemenata koji su u relaciji. 6akle> jedan red datoteke opisuje jednu relaciju. -apisati Pascal program koji pre#rojava nekorektne redove u datoteci> redove koji opisuju relaciju ekvivalencije> kao i redove koji opisuju relaciju poretka $ure3enja&.
=rogram =m,o@t22 ;onst maxn=8 tQ=e re-a;i>a = arraQH1..maxn,1..maxnI o, Doo-ean ,+n;tion +;ita> &var dat7text var n7integer var r7re-a;i>a'7Doo-ean var i,>7integer ind7Doo-ean Degin ind7=tr+e read&dat,n' ,or i7=1 to n do ,or >7= 1 to n do rHi,>I7=,a-se OAi-e not eo-n&dat' do Degin read&dat,i' i,&iK1' or &iLn' or eo-n&dat' tAen ind7=,a-se i, ind tAen Degin read&dat,>' i, &>K1' or &>Ln' tAen ind7=,a-se end i, ind tAen rHi,>I7=tr+e end +;ita>7=ind end &E Iterativne ,+n@;i>e E' ,+n;tion re,-e@s&n7integer r7re-a;i>a'7Doo-ean var i7integer ind7Doo-ean Degin ind7=tr+e ,or i7=1 to n do ind7=ind and rHi,iI

223

Predrag S. Stanimirovi re,-e@s7=ind end ,+n;tion simet&n7integer r7re-a;i>a'7Doo-ean var i,>7integer ind7Doo-ean Degin ind7=tr+e ,or i7=1 to n#1 do ,or >7=i"1 to n do ind7=ind and rHi,>I=rH>,iI simet7=ind end

Osnove programiranja

,+n;tion antisimet&n7integer r7re-a;i>a'7Doo-ean var i,>7integer ind7Doo-ean Degin ind7=tr+e ,or i7=1 to n#1 do ,or >7=i"1 to n do i, &iKL>' and rHi,>I and rH>,iI tAen ind7=,a-se antisimet7=ind end ,+n;tion tran<it&n7integer r7re-a;i>a'7Doo-ean var i,>,@7integer ind7Doo-ean Degin ind7=tr+e ,or i7=1 to n do ,or >7=1 to n do ,or @7=1 to n do i, rHi,>I and rH>,@I and &not rHi,@I' tAen ind7=,a-se tran<it7=ind end &E /e@+r<ivne ver<i>e ,+n@;i>a E' ,+n;tion re,-e@sr&n7integer r7re-a;i>a'7Doo-ean Degin i, n=1 tAen re,-e@sr7= rH1,1I e-se re,-e@sr7=re,-e@sr&n#1,r' and rHn,nI end ,+n;tion simetr&n7integer r7re-a;i>a'7Doo-ean var i7integer ind7Doo-ean Degin i, nK=1 tAen simetr7=tr+e e-se Degin ind7=tr+e ,or i7=1 to n do ind7=ind and &rHi,nI=rHn,iI' simetr7=simetr&n#1,r' and ind end simetr7=ind end ,+n;tion antisimetr&n7integer r7re-a;i>a'7Doo-ean var i,>7integer ind7Doo-ean Degin i, nK=1 tAen antisimetr7=tr+e

224

Predrag S. Stanimirovi

Osnove programiranja

e-se Degin ind7=tr+e ,or i7=1 to n#1 do i, rHi,nI and rHn,iI and &iKLn' tAen ind7=,a-se antisimetr7=ind and antisimetr&n#1,r' end end ,+n;tion tran<itr&n7integer r7re-a;i>a'7Doo-ean var i,>7integer ind7Doo-ean Degin i, nK=2 tAen tran<itr7=tr+e e-se Degin ind7=tr+e ,or i7=1 to n do ,or >7=1 to n do i, rHi,>I and rH>,nI and &not rHi,nI' tAen ind7=,a-se tran<itr7=ind and tran<itr&n#1,r' end end =ro;ed+re +radi var Dre@v, Dr=or, Drne@or7integer ,7text r7re-a;i>a n7integer re,,sim,asim,tr,re,r,simr,asimr,trr7Doo-ean Degin Dre@v7=0 Dr=or7=0 Drne@or7=0 assign&,,2;7St=S<ada;iSre-a;i>e2' reset&,' OAi-e not eo,&,' do Degin i, not +;ita>&,,n,r' tAen Drne@or7=Drne@or"1 e-se Degin re,7=re,-e@s&n,r' &E re,7=re,-e@sr&n,r E' sim7=simet&n,r' &E sim7=simetr&n,r' E' asim7=antisimet&n,r' &E asim7=antisimetr&n,r' tr7=tran<it&n,r' &E tr7=tran<itr&n,r' E' i, re, and sim and tr tAen Dre@v7=Dre@v"1 i, re, and asim and tr tAen Dr=or7=Dr=or"1 end end Orite-n&2Iterativna ver<i>a7 2' Orite-n&2Bi-o >e 2,Dre@v,2 re-a;i>a e@viva-en;i>e2' Orite-n&2Bi-o >e 2,Dr=or,2 re-a;i>a =oret@a2' Orite-n&2Bi-o >e 2,Drne@or,2 ne@ore@tniA re-a;i>a2' ;-ose&,' end Degin +radi end.

E'

3. -ai sve proste #rojeva manje ili jednake datom prirodnom #roju maQTS10000 primenom Kratostenovog sita. Skupovni tip podataka se simulira logikim ni om.
=rogram -ogs@+= tQ=e ni<=arraQH1..10000I o, Doo-ean var a7ni<

225

Predrag S. Stanimirovi i,>,n7integer Degin Orite&20nesi n 7 2' read-n&n' ,or i7=1 to n do aHiI7=tr+e ,or i7=2 to n do i, aHiI=tr+e tAen Degin Orite&i7(' >7=i re=eat aH>I7=,a-se >7=>"i +nti- >Ln end end.

Osnove programiranja

6.11.2. P)#s'0( 1+'!'$,+&+ 0 6


6atoteke omoguavaju da se ula ne veliine i re ultati o#rade podataka trajno sauvaju na disku. 6atoteka se tretira kao sekvencijalni ni karaktera. 6atotekama se pristupa kori8enjem uka atelja na strukturu /29.> koja je de)inisana u #i#lioteci stdio1&. A datoteci stdio1& su de)inisane i konstante .:/ i ;099. 1onstanta .:/ o naava kraj datoteke i ima vrednost -1. 1onstanta ;099 ima vrednost 0 i vraa se kao re ultat neuspe8nog po iva neki0 )unkcija a upravljanje datotekama.

O'"+)+ .$ # /+'"+)+ .$ 1+'!'$,+


Programski je ik C koristi dva osnovna tipa )ajlovaF tekstualni i binarni tip. (ad sa )ajlovima odvija se kro nekoliko osnovni0 aktivnostiF otvaranje )ajla> itanje i upis u )ajl> kretanje po )ajlu> atvaranje )ajla. 6atoteka mora da #ude otvorena pre #ilo kakvog procesiranja. Prilikom otvaranja datoteke mora se speci)icirati njeno ime i tip @eljene ula no-i la ne operacije. ;o@e se koristiti re@im itanja $read mode&> re@im upisa $4rite mode&> odnosno re@im dodavanja $append mode&. +a otvaranje datoteka koristi se )unkcija fopen i C #i#lioteke. +aglavlje ove )unkcije je o#lika
0(IE Gfopen)const char Gfilename, const char Gmode *2

5unkcija fopen$& vraa pointer na otvoreni )ajl. 2raena vrednost -A** indicira gre8ku prilikom otvaranja )ajla. Parametar filename ime )ajla> a parametar mode predstavlja nain na koji se )ajl otvara. ;ogui naini su opisani u nastavkuF IrI Otvara a itanje. Hko )ajl ne postoji ili ne mo@e #iti prona3en po iv ne uspeva. IOI Otvara pra an )ajl a pisanje. Hko dati )ajl postoji njegov sadr@aj se #ri8e. IaI Otvara )ajl a pisanje na kraju )ajla $appending& #e #risanja KO5 markera pre pisanja novi0 podataka na kraju )ajla> inae kreira )ajla ako ne postoji. Ir"I Otavara )ajl a itanje i pisanje. 5ajl mora da postoji. IO"I Otvara pra an )ajla a itanje i pisanje. Hko dati )ajl postoji> njegov sadr@aj je o#risan. Ia"I Otvara )ajl a itanje i appednovanje. Operacija apendovanja ukljuuje #risanje KO5 markera pre nego se novi podaci upi8u u )ajl. ;arker KO5 se restaurira posle kompletiranja pisanja. Akoliko )ajl sa speci)iciranim imenom ne postoji> on se prvo kreira. 1ad je )ajl otvoren sa pristupom IaI ili Ia"I sve opracije upisa se de8avaju na kraju )ajla. 5ajl pointer mo@e #iti repo icioniran kori8enjem fseek ili re4ind> ali se uvek vraa na kraj )ajla pre #ilo koje operacije upisa u )ajl. /ako preko postojei0 podataka nema upisa. ;od IaI ne #ri8e KO5 marker pre dodavanja podataka u )ajl. Hko se to desi ;S6OS komanda /OPK samo poka uje podatke do originalnog KO5 markera i ne poka uje podatke dodate )ajlu. ;od Ia"I #ri8e KO5 marker pre dodavanja )ajlu. Posle dodavanja ;S6OS komanda /OPK poka uje sve podatke dodate )ajlu. ;od Ia"I se a0teva a dodavanje stream )ajlu koji je terminiran C/(*=+ KO5
226

Predrag S. Stanimirovi

Osnove programiranja

markerom. 1ad je speci)iciran neki od Ir"I> IO"I ili Ia"I i itanje i pisanje su do voljeni> a ka@e se da je )ajl otovren a update. Potre#no je da se prilikom pre#acivanja i me3u itanja i pisanja uradi intervencija u o#liku po iva ffl%s&> fsetpos> fseek> ili re4ind operacije. /ekua po icija mo@e #iti speci)icirana fsetpos ili fseek operacijom. Sledei karakteri mogu #iti ukljueni u mod radi speci)ikacije prevo3enja ne4line karaktera. t Otvara )ajl u tekstualnom modu. C/(*=+ se interpretira kao end-o)-)ile karakter na ula u. A )ajlu otvorenom a itanje - pisanje sa Ia"I fopen proverava C/(*=+ na kraju )ajla i #ri8e ga ako je mogue. Ovo se radi jer kori8enje fseek i ftell a kretanje unutara )ajla koji se avr8ava sa C/(*=+> mo@e da uslovi nekorektno pona8anje fseek #li u kraja )ajla. /ako3e> u tekstualnom modu carriage ret%rn - line feed kom#inacije na ula u se prevode u jedan line)eeds na ula u i o#ratno linefeed karakter na i la u se prevode u carriage ret%rn n line feed kom#inacije. b Otvara )ajl u #inarnom neprevedenom modu. Prevo3enja koja ukljuuju #arriage$ret%rn i linefeed kraktere se ne vr8e. Hko je otvaranje neuspe8no> tj. ako fopen$& ne mo@e da prona3e @eljenu datoteku> ona vraa vrednost ;099. Primer. -i iska a
Jin;-+deKstd-iD.AL FIL% Ein,i-e,E,o=en&' in,i-e=,o=en&3,i-e3,3r3'

otvara datoteku pod imenom )ile u re@imu itanja. 5unckija fopen$& vraa uka atelj na strukturu /29.> koja se dodeljuje promenljivoj infile istog tipa. -euspe8no otvaranje datoteke infile se mo@e ispitati i ra om o#lika
i,&in,i-e==]0LL' =rint,&3datote@a ,i-e ne mo<e se otvoritiSn3'

Po iv )unkcije fopen$& i ispitivanje vraenog re ultata se mo@e ujediniti


i,&&in,i-e=,o=en&3,i-e3,3r3''==]0LL' =rint,&3datote@a ,i-e ne mo<e Diti otvorenaSn3'

5unkcijom f#lose$& atvara se datoteka otvorena a itanje ili upis. +atvorenoj datoteci se ne mo@e pristupiti pre ponovnog otvaranja. +aglavlje ove )unkcije je
int fclose)0(IE Gfile7pointer*2

gde je file6pointer uka atelj kojim se identi)ikuje datoteka. 5unkcija


fclose)file7pointer*

vraa vrednost .:/ ako uka atelj file6pointer nije pove an sa nekom datotekom. -a primer> otvorena datoteka infile atvara se i ra om
fclose)infile*2

Primer.
6E FOP%].57 .Ais =rogram o=ens ,i-es named 3data3 E and 3data23.It +ses ,;-ose to ;-ose 3data3 and E _,;-osea-- to ;-ose a-- remaining ,i-es. E6 ,tin;-+de Kstdio.AL FIL% Estream, Estream2 void main&void' 9 int n+m;-osed 6E O=en ,or read &Oi-- ,ai- i, ,i-e 3data3 i,& &stream = ,o=en&3data3, 3r3'' == ]0LL '

does

not

exist'

E6

227

Predrag S. Stanimirovi

Osnove programiranja

=rint,&3.Ae ,i-e 2data2 Oas not o=enedSn3 ' e-se =rint,& 3.Ae ,i-e 2data2 Oas o=enedSn3 ' 6E O=en ,or Orite E6 i,& &stream2 = ,o=en& 3data23, 3O"3'' == ]0LL ' =rint,&3.Ae ,i-e 2data22 Oas not o=enedSn3' e-se =rint,&3.Ae ,i-e 2data2r Oas o=enedSn3' 6E 5-ose stream E6 i,&,;-ose&stream'' =rint,& 3.Ae ,i-e 2data2 Oas not ;-osedSn3 ' 6E A-- otAer ,i-es are ;-osed7 E6 n+m;-osed = _,;-osea--&' =rint,&3]+mDer o, ,i-es ;-osed DQ _,;-osea--7 R+Sn3, n+m;-osed' B
'utput $he file _data_ was opened $he file _data_ was opened "umber of files closed by 7fcloseall 1 9

?0 ,6#.$ 4*$'69: # 4(0'69:


5unkcija fget#$& uitava jedan po jedan karakter i speci)icirane datoteke. Slina je )unkciji get#&ar$&. Ala ni argument )unkcije fget#$& je uka atelj na strukturu /29.> a re ultat je vrednost tipa int. +aglavlje ove )unkcije je o#likaF
int fgetc)0(IE Ginfile*

Pretpostavimo da promenljiva infile do#ija vrednost pomou )unkcije fopen$&> koristei opciju IrI. Hko je # promenljiva tipa int> tada se iska om
c3fgetc)infile*2

uitava jedan nak datoteke koja je pove ana sa pointerom infile. Hko je dostignut kraj datoteke> )unkcija get#$& vraa vrednost .:/. 5unkcija fp%t#$& upisuje karakter u speci)iciranu datoteku. Po iva se i ra om o#lika
int fputc)char c, 0(IE Goutfile*

4(0'6
+aglavlje ove )unkcije je o#lika
int fputc) int c, 0(IE Gstream *2

i pi8e karakter # u stream. 2rednost koju ova )unkcija vraa je karakter koji se upisuje> ako je upisivanje uspe8no> ili KO5 ako je nesupe8no upisivanje. Primer. % ra ima
FIL% Eo+t,i-e o+t,i-e=,o=en&3,i-e3,3O3' ,=+t;&2<2, o+t,i-e'

u datoteku o%tfile upisuje se nak ZzZ. Primer. -apisati program kojim se sadr@aj datoteke Iula I $)ormiran od veliki0 slova a #uke& 8i)rira i upisuje u datoteku Ii la I. 8i)riranje se sastoji u tome da se svaki nak ra liit od ZJZ amenjuje sledeim HSC%% nakom> dok se nak ZJZ amenjuje nakom Z)Z.
Jin;-+deKstdio.AL void main&' 9 FIL% Ein,i-e, Eo+t,i-e

228

Predrag S. Stanimirovi

Osnove programiranja

int ; in,i-e = ,o=en&3+-a<3,3r3' o+t,i-e= ,o=en&3i<-a<3,3O3' OAi-e&&;=,get;&in,i-e'' V= %OF' 9 i,&2A2 K= ; UU ; K 242';"" e-se ;=2A2 ,=+t;&;,o+t,i-e' B ,;-ose&in,i-e' ,;-ose&o+t,i-e' B

Primer>
6E FY%.5.57 .Ais =rogram +ses get; to read tAe ,irst E X0 in=+t ;Aara;ters &or +nti- tAe end o, in=+t' E and =-a;e tAem into a string named D+,,er. E6 Jin;-+deKstdio.AL Jin;-+deKstd-iD.AL void main&void' 9 FIL% Estream ;Aar D+,,erHX1I int i, ;A 6E O=en ,i-e to read -ine ,rom7 E6 i,& &stream = ,o=en&3,get;.;3, 3r3'' == ]0LL ' exit&0' 6E /ead in ,irst X0 ;Aara;ters and =-a;e tAem in 3D+,,er37 E6 ;A = ,get;&stream' ,or& i=0 &iKX0' UU &,eo,&stream'==0' i""' 9 D+,,erHiI = &;Aar';A ;A = ,get;& stream B B 6E Add n+-- to end string E6 D+,,er HiI = 2S02 =rint,&3RsSn3, D+,,er' ,;-ose&stream' B

Primer. 1opiranje sadr@aja ula ne datoteke u i la nu datoteku. %mena datoteka data su kao parametri )unkcije main$&.
Jin;-+deKstdio.AL void main&int arg;,;Aar EargvHI' 9 int ; FIL% Ein,i-e,Eo+t,i-e i,&&in,i-e=,o=en&argvH1I,3r3''==]0LL' =rint,&3datote@a Rs ne mo<e Diti otvorenaSn3,argvH1I' e-se i,&&o+t,i-e=,o=en&argvH2I,3O3''==]0LL' =rint,&3datote@a Rs ne mo<e Diti otvorenaSn3,argvH2I' e-se 9 OAi-e&&;=get;&in,i-e''V=%OF' =+t;&;,o+t,i-e' =rint,&3Sn3' B ,;-ose&in,i-e' ,;-ose&o+t,i-e' B

Primer.
6E FP0.5.57 .Ais =rogram +ses ,=+t; E to send a ;Aara;ter arraQ to stdo+t. E6 Jin;-+deKstdio.AL void main&void' 9 ;Aar str=tr-HI = 3.Ais is a test o, ,=+t;VVSn3 ;Aar E= 6E Print -ine to stream +sing ,=+t;. E6 = = str=trOAi-e&&E= V= 2S02' UU ,=+t;&E&=""', stdo+t'V= %OF' B

229

Predrag S. Stanimirovi

Osnove programiranja

?0 ,6#.$ 4()# '49: # 4s6+ 49:


Ove )unkcije o#avljaju analogne operacije kao i )unkcije printf$& i s#anf$&> s tim 8to a0tevaju dodatni argument a identi)ikaciju datoteke u koju se upisuju ili i koje se itaju podaci. +aglavlje ovi0 )unkcija je sledeeg o#likaF
fprintf)file7pointer,konverzioni7niz,lista7argumenata* fscanf)file7pointer,konverzioni7niz,lista7argumenata*

pri emu jeF


file7pointer ukazatel- na tip 0(IE,

konver ioniCni je lista )ormata po kojima se upisuju ili itaju podaci> dok je lista6arg%menata lista vrednosti koje se upisuju u datoteku> odnosno itaju i datoteke koja je identi)ikovana pointerom file6pointer. 5unkcije fprintf$& i fs#anf$& imaju promenljivi #roj argumenata> avisno od #roja vrednosti koje se upisuju u datoteku> odnosno itaju i datoteke. -a primer> i ra om
fprintf)outfile,^string u datotekuan^*2

upisuje se string Istring % datotek%QnI u datoteku koja je identi)ikovana pomou pointera o%tfile. /ako3e> u istu datoteku se mo@e upisati i sledei sadr@ajF
fprintf)outfile,^string sadrza-a Vs u datotekuan^,x*2

Primer. % ra om o#lika
fscanf)infile,^Vf^,Hx*2

i datoteke koja je identi)ikovana sa infile uitava se vrednost u )ormatu `f i dodeljuje promenljivoj !. Primer. Procedure a uitavanje celog #roja i datoteke Izad2.datI i upis istog #roja u datoteku Izad2.resI.
Jin;-+deKstdio.AL void ;ita>&-ong En' 9 FIL% E, ,=,o=en&3<ad2.dat3,3r3' B void +=is&-ong n' 9 FIL% E, ,=,o=en&3<ad2.res3,3O3' B void main&' 9 void ;ita>&-ong E' -ong n ;ita>&Un' +=is&n' B

,s;an,&,,3R-d3,n'

,;-ose&,'

,=rint,&,,3R-d3,n'

,;-ose&,'

void +=is&-ong'

Primer. % prvog reda datoteke uitati #roj timova. A svakom od sledei0 redova datoteke adati sledee podatke a svaki timF - na iv tima> - #roj po#eda> - #roj nere8eni0 re ultata> i - #roj pora a. Sortirati ta#elu prema #roju osvojeni0 #odova. Hko dva tima imaju isti #roj osvojeni0 #odova> sortirati i0 prema #roju po#eda.

230

Predrag S. Stanimirovi Jin;-+deKstdio.AL Jin;-+deKstring.AL Jde,ine Dro> 10 str+;t @-+D 9 ;Aar na<ivH20I int i<g+D->ene int neresene int doDi>ene B taDe-aHDro>I

Osnove programiranja

void strsOa=&;Aar str1HDro>I, ;Aar str2HDro>I' 9 ;Aar strHDro>I str;=Q&str,str1' str;=Q&str1,str2' str;=Q&str2,str' B void sOa=&int E=, intET' 9 int =om =om=E= E==ET ET==om B void +;ita>&int En, str+;t @-+D aHDro>I' 9 int i FIL% E, ,=,o=en&3@-+Dovi.dat3,3r3' ,s;an,&,,3Rd3,n' ,or&i=0 iKEn i""' 9 ,s;an,&,,3Rs3,aHiI.na<iv' ,s;an,&,,3RdRdRd3,UaHiI.doDi>ene,UaHiI.neresene,UaHiI.i<g+D->ene' B ,;-ose&,' B void is=is&int n, str+;t @-+D aHDro>I' 9 int i =rint,&3Sn3' ,or&i=0 iKn i""' 9 =rint,&3Rs Rd Rd Rd3,aHiI.na<iv, aHiI.doDi>ene, aHiI.neresene,aHiI.i<g+D->ene' =rint,&3Sn3' B B void main&' 9 int i,>,n, DodoviHDro>I +;ita>&Un,taDe-a' ,or&i=0 iKn i""' DodoviHiI=taDe-aHiI.neresene"3EtaDe-aHiI.doDi>ene ,or&i=0 iKn#1 i""' ,or&>=i"1 >Kn >""' i,&&DodoviHiIKDodoviH>I'WW &&DodoviHiI==DodoviH>I' UU &taDe-aHiI.doDi>eneKtaDe-aH>I.doDi>ene'' ' 9 sOa=&UDodoviHiI, UDodoviH>I' strsOa=&taDe-aHiI.na<iv, taDe-aH>I.na<iv' sOa=&UtaDe-aHiI.i<g+D->ene, UtaDe-aH>I.i<g+D->ene' sOa=&UtaDe-aHiI.neresene, UtaDe-aH>I.neresene' sOa=&UtaDe-aHiI.doDi>ene, UtaDe-aH>I.doDi>ene' B is=is&n,taDe-a' B

?0 ,6#.+ 4$!49:
Ova )unkcija ispituje da li je dostignut #roj datoteke. -jen op8ti o#lik je
231

Predrag S. Stanimirovi
int feof)0(IE Gfile pointer*

Osnove programiranja

5unkcija feof$& vraa nenultu vrednost ako je dostignut kraj datoteke. Primer. 5unkcija feof se koristi a ispitivanje kraja datoteke.
if)feof)infile** printf)^kra- datotekean^*2

Primer. (etka matrica se mo@e predstaviti #rojem ne-nula elemenata kao i sledeim in)ormacijama a svaki ne-nula elementF - redni #roj vrste tog elementa> - redni #roj kolone tog elementa> i - realan #roj koji predstavlja vrednost tog elementa. Predstaviti retku matricu #rojem ne-nula elemenata i ni om slogova> u kome svaki slog sadr@i redni #roj vrste i kolone kao i vrednost svakog ne-nula elementa. -apisati procedure a )ormiranje ni a slogova koji predstavljaju repre entaciju retke matrice ). Podaci a matricu ) se uitavaju i datoteke Zsparse.datZ. -apisati proceduru a ispis matrice. -apisati proceduru a )ormiranje sparse repre entaciju predstavlja matricu )/. -apisati )unkciju koja a adate vrednosti i> ' preko tastature i raunava vrednost elementa )Vi>'W.
Jin;-+deKstdio.AL str+;t s-og 9 int i,> ,-oat ai> B void =ravimatri;+&str+;t s-og xH10I, int En' 9 int =,T,i ,-oat x=T FIL% Ein,i-e in,i-e=,o=en&3s=arse.dat3,3r3' ,s;an,&in,i-e,3Rd3, n' ,or&i=1 iK=En i""' 9 ,s;an,&in,i-e,3RdRdR,3, U=,UT,Ux=T' xHiI.i== xHiI.>=T xHiI.ai>=x=T B ,;-ose&in,i-e' B void trans=on+>&str+;t s-og xH10I, int n, str+;t s-og QH10I' 9 int =,T,i ,-oat x=T ,or&i=1 iK=n i""' 9 QHiI.i=xHiI.> QHiI.>=xHiI.i QHiI.ai>=xHiI.ai> B B void =isimatri;+&str+;t s-og QH10I, int n' 9 int =,T,i ,-oat x=T =rint,&3RdSn3,n' ,or&i=1 iK=n i""' =rint,&3&Rd Rd'7 R10.3,Sn3,QHiI.i, QHiI.>,QHiI.ai>' B ,-oat vrednost&int n, str+;t s-og xH10I, int @, int -' 9 int i ,or&i=1 iK=n i""'

232

Predrag S. Stanimirovi i,&&xHiI.i==@' UU &xHiI.>==-'' ret+rn&xHiI.ai>' ret+rn&0'

Osnove programiranja

void main&' 9 int i,>,n str+;t s-og =H10I, TH10I =ravimatri;+&=, Un' =rint,&3Matri;a >e 7 Sn3' =isimatri;+&=,n' trans=on+>&=,n,T' =rint,&3.rans=onovana matri;a7 Sn3' =isimatri;+&T,n' =rint,&3i,>= _ 3' s;an,&3RdRd3, Ui,U>' =rint,&3R10.3,Sn3,vrednost&n,=,i,>'' B

?0 ,6#.$ 4*$'s9: # 4(0's9:


5unkcija fgets$& ima sledee aglavljeF
char Gfgets)char Gstring, int maxl, 0(IE Ginfile*2

Ovom )unkcijom se> i datoteke na koju uka uje pointer infile> uitava string koji se avr8ava prela om u novi red ili sadr@i ma!l-1 nakova. Prema tome> drugi argument> o naen sa ma!l> predstavlja maksimalnu du@inu uitanog stringa. -a kraj uitanog stringa postavlja se nak Z\0Z. A sluaju da linija i koje se uitava sadr@i vi8e od ma!l karaktera> linija se ne ignori8e> ve se preostali nakovi uitavaju sledeim po ivom )unkcije fgets$&. (a lika i me3u )unkcija gets$& i fgets$& je u tome da gets$& amenjuje nak a prela u novi red null karakterom Z\0Z> dok fgets$& ostavlja nak a prela u novi red> pa tek onda postavlja nak Z\0Z. 5unkcija fgets$& vraa vrednost ;099 kada nai3e na nak .:/. 5unkcija fp%ts$& po iva se i ra om
int fputs)char Gstring, 0(IE Goutfile*2

Po ivom ove )unkcije upisuje se ni karaktera> sadr@ani u vrednosti parametra string> u datoteku na koju uka uje pointer o%tfile. A sluaju %GO gre8ke ova )unkcija vraa re ultat .:/. 5unkcije p%ts$& i fp%ts$& ne dopisuju karakter Z\0Z na kraj upisanog stringa. +a ra liku od )unkcije p%ts$&> )unkcija fp%ts$& ne dopisuje nak a prela u novi red na kraj stringa koji se upisuje. gets Bita string i )ajla )har J gets4 )har Kstring* int n> 0I/* Kstream &X 2raa string inae -A** ako je gre8ka ili je do8lo do kraja )ajla. 1oristiti eo ili error a odre3ivanje da li je do8lo do gre8ke. ParametriF string n stream ;esto a sme8tanje odataka ;aksimalni #roj karaktera a itanje Pointer na 5%*K strukturu

5unkcija ita string sa ula a adatog argumentom stream i patmi ga u stringu. Bita karaktere od tekue po icije u )ajlu do i ukljuujui prvi ne:line karakter> do kraja )ajla ili do #roja karaktera jednakog n-1> 8ta se prvo desi. (e ultat apamen u stringu je avr8en n%ll karakterom. ;e4line karakter ako je proitan je ukljuen u string. 5unkcija fgets je slina gets )unkciji> mada gets amenjuje ne4line karakter sa -A**.
6E FY%.1.57 .Ais =rogram +ses ,gets to dis=-aQ E a -ine ,rom a ,i-e on tAe s;reen.nE6

233

Predrag S. Stanimirovi Jin;-+de Kstdio.AL void main& void ' 9 FIL% Estream ;Aar -ineH100I i,&&stream = ,o=en&3,gets.;3, 3r3'' V= ]0LL' 9 i,&,getst -ine, 100, stream ' == ]0LL' =rint,&3,gets errorSn3' e-se =rint,&3Rs3 , -ine' ,;-ose& stream ' B B

Osnove programiranja

46%!s$H N46%!s$+%%
+atvara )ajl ili sve otvorene )ajlove. int )lose4 0I/* Kstream &X int K )loseall4 void 6G

4$!4
/estira end-o)-)ile na streamuF int eo 4 0I/* Kstream &X /0e )eo) routine $implemented #ot0 as a )unction and as a macro& determines :0et0er t0e end ofstream 0as #een reac0ed. 90en end o) )ile is reac0ed> read operations return an end-o)-)ile indicator until t0e stream is closed or until reBindA setposA seekA or )learerr is called against it.

;# +) $ 1+'!'$,$ read
Bita podatke i streama. si eCt )read$void Kb%ffer* si eCt size* si eCt #o%nt* 5%*K Kstream &X 5unkcija read vraa #roj aista proitani0 itema> 8to mo@e #iti manje ili jednako parametru count ako se desi gre8ka ili se stigne do kraja )ajla. 1oristiti )eo) ili )error da #i se ra likovao u rok. ParametriF b%ffer *oakcija a podatke size 2eliina jednog itema u #ajtovima #o%nt ;aQimalni #roj itema a itanje stream Pointer na 0I/* structure. 5unkcija ita do count itema a svaki je si e #ajtova sa ula nog strima u #u))er. 5ile pointer pove an sa streamom je povean a #roj #ajtova koji je aista proitan. Hko je stream otvoren u tekstualnom modu carriage return-line)eed par je amenjen ejdnom line)eed c0aracterom. 5ile pointer nije odre3en ako se desila gre8ka.

Brite
Apisuje podatke u stream. sizeKt Brite4 )onst void Kb%ffer* sizeKt size* sizeKt #o%nt* 0I/* Kstream &X Brite vraa #roj potopuni0 itema koji su upisani> a sve ostalo je slino )unkciji )read. Primer.
6E F/%AD.57 .Ais =rogram o=ens a ,i-e named F/%AD.O0. and E Orites 2! ;Aara;ters to tAe ,i-e. It tAen tries to o=en E F/%AD.O0. and read in 2! ;Aara;ters. I, tAe attem=t s+;;eeds, E tAe =rograrr. dis=-aQs tAe n+mDer o, a;t+a- items read. E6 ,tin;-+de Kstdio.AL void main& v;id ' 9 FIL% Estream ;Aar -istH30I

234

Predrag S. Stanimirovi

Osnove programiranja

int i, n+mread, n+mOritten 6E O=en ,i-e in text mode7 E6 i,&&stream = ,o=en&3, read. o+t3 , 3O"t3'' V= ]0LL' 9 ,or & i = 0 i K 2! i"" ' -ist HiI = &;Aar'&2<2 # i' 6E `rite 2! ;Aara;ters to stream E6 n+mOritten = ,Orite&-ist, si<eo,& ;Aar ', 2!, stream' =rint,&3`rote Rd itemsSn3, n+mOritten' ,;-ose& stream B B e-se =rint,&3ProD-em o=ening tAe ,i-eSn3' i,&&stream = ,o=en& 3,read.o+t3, 3r"t3 '' V= ]0LL' 9 6E Attem=t to read in 2! ;Aara;ters E6 n+mread = ,read&-ist, si<eo,&;Aar', 2!, stream ' =rint,&3]+mDer o, items read = RdSn3, n+mread' =rint,&35ontents o, D+,,er = R.2!sSn3, -ist' ,;-ose&stream' B e-se =rint,&3Fi-e ;o+-d not De o=enedSn3'

seek
Preme8ta )ile pointer na speci)iciranu lokaciju. int seek4 0I/* Kstream* long offset* int origin &X Hko uspe )seek vraa inae vraa vrednost ra liitu od 0. ParametriF stream Pointer na strukturu 5%*K. offset Droj #ajtova od i vori8ta $-um#er o) #<tes )rom origin&. origin Startna po icija. seek )unkcija pomera )ile pointer asociran sa streamom na novu lokaciju koja je offset #ajtova od o&gin1 /ako sledea operacija na streamu u ima po<iciju od nove lokacije. Hrgument origin mora #iti jeadn odF SKK1 CA( Current position o) )ile pointer SKK1 K-6 Knd o) )ile SKK1CSK/ Deginning o) )ile tell 2raa tekuu po iciju )ajl pointera. long tell4 0I/* Kstream &X +a rad sa tekstualnim )ajlovima na raspolaganju su i )unkcije pandani po natim )unkcijama pront) i scan).
int ,=rint,& FIL% Estream, ;onst ;Aar E ,ormatH, arg+ment I . . . ' int ,s;an,& FIL% Estream, ;onst ;Aar E,ormat H, arg+ment I... '

235

Predrag S. Stanimirovi

Osnove programiranja

D#)$,' # ()#s'0( 1+'!'$,+&+


Primer. A #inarnoj datoteci je ure3en ni od m celi0 #rojeva> dodati prirodan #roj n na odgovarajue mesto. 1oristiti sekvencijalno pretra@ivanje.
Jin;-+de Kstdio.AL Jin;-+de Kstd-iD.AL void main&' 9 int ni<H21I, m,n,i FIL% E,=,o=en&3,i-e.txt3, 3O"D3' ni<H0I=0 =rint,&3:o-i@o Dro>eva + ni<+_Sn3' s;an,&3Rd3,Um' ,or&i=1 iKm i""' ni<HiI=ni<Hi#1I"2 ,Orite&ni<, si<eo,&int', m, ,' ,;-ose&,' =rint,&3Formirana >e s-ede;a datote@a7Sn3' ,=,o=en&3,i-e.txt3, 3r"D3' ,read&ni<, si<eo,&int', m, ,' ,or&i=0 iKm i""' =rint,&3Rd 3, ni<HiI' =rint,&3Sn3' =rint,&3Bro> @o>i se +me;e_ 3' s;an,&3Rd3,Un' i=0 OAi-e&&ni<HiIKn'UU&iKm'' i"" ,see@&,, iEsi<eo,&int', 1%%:_1%.' ,Orite&Un, si<eo,&int', 1, ,' ,Orite&ni<"i, si<eo,&int',m#i, ,' ,;-ose&,' ,=,o=en&3,i-e.txt3, 3r"D3' =rint,&3Datote@a sa +metn+tim Dro>em Rd7Sn3,n' ,read&ni<, si<eo,&int', m"1, ,' ,or&i=0 iK=m i""' =rint,&3Rd 3, ni<HiI' ,;-ose&,'

7. DINAMIKE STRUKTURE PODATAKA


7.1. S'+'#5,$ # 1# +&#5,$ s')0,'0)$ (!1+'+,+
Strukturni tipovi podataka opisani u pret0odnom poglavlju mogu se koristiti a re8avanje 8iroke klase pro#lema. A svim ra matranim sluajevima radi se o statikim strukturama podataka> odnosno o strukturama koje se generi8u u )a i prevo3enja programa> #e mogunosti da se struktura memorijskog prostora koji au imaju menja u toku i vr8avanja programa. ;e3utim> postoji jedna klasa pro#lema kod koje je potre#no strukturu podataka generisati dinamiki> u toku i vr8avanja programa> #ilo da je to #og toga 8to se radi o strukturama koje su po prirodi #eskonane ili #og toga 8to je #roj potencijalni0 elemenata strukture unapred nepo nat. Osnovne dinamike strukture su liste i one su osnova a de)inisanje linearni0 struktura podataka tipa magacina> redova> ra liiti0 ta#lica sa unapred nepo natim #rojem elemenata> kao i nelinearni0 struktura kao 8to su sta#la> gra)ovi i mre@e. 1ao primer gde je prirodnije kori8enje dinamike strukture podataka umesto statike u mimo retku ili sla#o popunjenu matricu u kojoj vei #roj elemenata ima vrednost nula> a samo su neki elementi de)inisani vrednostima ra liitim od nule. Amesto statikog pamenja cele ovakve matrice> pri cemu se a svaki od elemenata $#e o# ira da li su u pitanju nule ili ne& re ervi8e odgovarajui memorijski prostor> racionalnije je ovakvu matricu memorisati tako 8to se pamte samo vrednosti elementa ra liiti0 od nule sa podacima o nji0ovoj lokaciji u matrici. A ovom sluaju nije potre#no da se unapred na #roj elemenata matrice> jer je on odre3en svakom konkretnom strukturom.

236

Predrag S. Stanimirovi

Osnove programiranja

6inamike strukture podataka imaju prednosti u odnosu na statike i u pogledu nji0ovog menjanja.

7.2. P!,+/#"+5# 0 .$/#,0 P+s6+%


A mnogim programskim je icima $Pascal> ;odula> C> Hda& postoji mogunost de)inisanja tipova podataka koji se sastoje od neogranienog skupa poka ivaa na vrednosti odre3enog tipa podataka. -ad poka ivaima su de)inisane jedino operacije pore3enja u smislu jednakosti i nejednakosti. Svakom tipu poka ivaa pripada i vrednost ;29 $pra an poka iva& koja ne poka uje ni na jedan element strukture. A programskim je icima se koriste ra liite o nake a predstavljanje poka ivaa> ali je sintaksa nared#i a nji0ovo de)inisanje slinaF
tip7pokaziva8a 3 K(dentifikator7tipa

/ip poka ivaa se o#ino pove uje sa nekim tipom podataka. -aje8e je to neki strukturni tip podataka kojim se de)ini8u slogovi koji se pove uju u dinamiku strukturu podataka. A ovakvim sluajevima o#ino je potre#no da se kao sastavni deo sloga pojavi jedan ili vi8e poka ivaa istog tipa preko koji0 se slogovi pove uju u odre3enu strukturu podataka. Ovde se javlja potre#a a odstupanjem od jednog od osnovni0 pravila koje se striktno po8tuje u programskim je icima. /o pravilo se sastoji u tome da svi o#jekti $mo@emo to posmatrati i kao i sva imena& koji se koriste u programu moraju pret0odno #iti de)inisani. A sluaju kada de)ini8emo tipove poka ivaa doga3a se da moramo da upotre#imo ime tipa podataka na koji de)ini8emo poka ivae a da taj tip jo8 nismo de)inisali. -aime pove ivanje tipa poka ivaa sa tipom podataka odgovarajue strukture posti e se po jednom od sledei0 modelaF
'=($ 6okaziva8 3$2 $ 3 )$6!)1 ... A "+) 6 1 6okaziva82

ili
'=($ $ 3 record ... A "+) 6 1

$2

7.2.1. D# +&#5,$ ()!&$ %.#"$


2ideli smo da se pomou prosti0 i strukturirani0 tipova podataka mo@e re8iti vrlo 8iroka klasa adataka. ;edutim> postoji i klasa adataka kod koje tipovi koje smo do sada koristili te8ko da mogu #iti od pomoi. /o su adaci u kojima #roj o#jekata sa kojima se radi nije unapred po nat. (adei sa ni ovima slogova uvek smo morali procenjivati maksimalni #roj slogova> da #i prevodilac re ervisao dovoljno memorijskog prostora. A PHSCH*-u postoje tako vane dinamike promenljive koje se kreiraju i uni8tavaju u toku i vr8avanja programa. One se ne pojavljuju u odeljku a opis promenljivi0> tako da im se ne mo@emo o#raati pomou unapred de)inisani0 imena. Pristup dinamikim promenljivim se reali uje samo pomou poka ivaki0 promenljivi0.

7.2.2. P!,+/#"+5,$ ()!&$ %.#"$


Poka ivaka promenljiva - je promenljiva koja Ipoka ujeI na drugu promenljivu> odnosno sadr@i adresu memorijske lokacije u kojoj se uva dinamika promenljiva. Sintaksni dijagram poka ivakog tipa je dat na sledeoj slici.

Prema tome poka ivaki tip mo@emo de)inisati na sledei nainF


.Q=e int=o@a<iva; = Zinteger

237

Predrag S. Stanimirovi

Osnove programiranja

A ovom primeru intpokaziva# de)ini8e poka iva na memorijsku lokaciju koja sadr@i celo#rojnu vrednost. +nak Istrelica na goreI ispred imena tipa o naava da se radi o poka ivakom tipu. Sada se mogu opisati poka ivake promenljiveF
Gar =o@- ,=o@27 int=o@a<iva;

;o@e se koristiti i ekvivalentan opis


Gar =o@-, =o@27 Zinteger

+a kreiranje dinamiki0 promenljivi0 se koristi standardna procedura ne4> koja se esto na iva procedura dinamikog ra me8tanja. Hko je dat opis promenljive pF
Gar P7Zt

o#raanjem proceduri dinamikog ra me8tanja ne4$p& kreira se nova potpuno nede)inisana dinamika promenljiva tipa t i nova vrednost poka ivakog tipa a poka ivaku promenljivu p> koja poka uje na upravo nastalu promenljivu. Prema tome> procedura ne4 i vr8ava dve akcijeF - re ervi8e memorijski prostor a dinamiku promenljivu tipa tX - dodeljuje poka ivakoj promenljivoj p adresu te promenljive. %me dinamike promenljive se do#ija navodenjem strelice na gore i a imena odgovarajue poka ivake promenljiveF p2 Hko se poka ivakoj promenljivoj dodeli konstanta nil $nil je re ervisana re&> tada ona ne poka uje ni na koju memorijsku lokaciju. /re#a imati na umu da se poka ivaka promenljiva cija je vrednost nil #itno ra likuje od promenljive ija je vrednost nede)inisana. Poka ivaka promenljiva ija je vrednost nil mo@e se porediti na jednakost ili nejednakost sa drugom poka ivakom promenljivom> 8to je nedo voljeno a poka ivaku promenljivu ija je vrednost nede)inisana> jer e doi do gre8ke u toku i vr8avanja programa. -a primer> do voljeno jeF
i, i=ni- tAen Orite-n&2i >e ni-2' e-se Orite-n&2i =o@a<+>e na2,i2'

;ogunosti manipulisanja sa poka ivakim promenljivim su ograniene> one se ne mogu porediti operacijama poredenjaF T> TS> U> i USX ali mogu na jednakost ili nejednakost. Po8to su dinamike promenljive iY i 'Y integer tipa sa njima se mo@e operisati kao sa #ilo kojom promenljivom istog tipa. -a primer> iY mo@emo dodeliti drugu vrednost. Po8to poka ivaka promenljiva nema tekstualnu repre entaciju> ona se ne sme itati i tekstualne datoteke> ali ni upisivati u nju. A PHSCH*-u se mora po8tovati praviloF ime #ilo kog tipa se mora prvo de)inisati> pa tek ondakoristiti. Eedini i u etak je u sluaju de)inisanja poka ivakog tipa> koji se mo@e de)inisati kori8enjem ve uvedenog tipa> kao i tipa koji e se kasnije de)inisati. -a primer>
.Q=e =o@a<iva;=Zt t=...

Hko je potre#no da se ukloni #eskorisna dinamika promenljiva> i tako oslo#odi memorijski prostor> koristi se procedura dispose. -a primer> dispose$pokl& stavlja na raspolaganje memorijski prostor koji je au imala dinamika promenljiva pok1Y na koju poka uje promenljiva pokl. Ovo ne tre#a s0vatiti kao ukidanje promenljive pokl. Ona je samo postala nede)inisana> jer vi8e ne poka uje na neku memoriisku lokaciju.

7.3. D# +&#5,$ s')0,'0)$ (!1+'+,+ 0 .$/#,0 P+s6+%


Poka ivai se o#ino koriste a de)inisanje struktura podataka tipa listi. (a motriemo neke od ovi0 struktura podataka koje imaju naj8iru primenu. A narednom primeru je de)inisan i generisan magacin kao dinamika struktura podataka. ;agacin je kreiran kao ni me3uso#no pove ani0 slogova od koji0 svaki sadr@i in)ormativni deo 2nfo i poka iva na sledei slog strukture. Bitanje i upis novi0 elemenata mogu je samo na vr0u magacina.

238

Predrag S. Stanimirovi program maga;in type L1= Z1-og 1-og = re;ord In,o 7 ;Aar Lin@ 7 L1 end$ var .OP,: 7 L1 5F 7 ;Aar begin .OP 7= ]IL (#i)e not %OF do begin read&5F' neO&:' :Z.Lin@ 7= .OP :Z.In,o 7= 5F .OP 7= : end$ end.

Osnove programiranja

.OP In,o Lin@

In,o Lin@ In,o

Lin@ ]IL

A radu sa magacinom koriste se dve osnovne operacije od koji0 jedna a upis novi0 slogova u strukturu> a druga a i #acivanje slogova i magacina. Sa datim opisom magacina ove operacije se mogu de)inisati na sledei nain. $1& Apis slogova u magacinF
var ]ovis-og 7 L1

3
read&5F' neO&]ovis-og' ]ovis-ogZ.Lin@ 7= .OP ]ovis-ogZ.In,o 7= 5F .OP 7= ]ovis-og

$2& % #acivanje sloga i magacina $posti@e se jednom nared#om&F


.OP 7= .OPZ.Lin@

Sledei primer ilustruje de)inisanje i generisanje reda kao dinamike strukture podataka. Poka iva M poka uje na kraj reda> dok 9 poka uje na poetak reda.

3
var L, /, : 7 L1

5F 7 ;Aar

read&5F' neO&:' :Z.In,o 7= 5F :Z.Lin@ 7= ]IL / 7= : L 7= : (#i)e not %OF do begin read&5F' neO&@' :Z.In,o 7= 5F :Z.Lin@ 7= L L 7= : end$ end.

L In,o Lin@ In,o Lin@ :


In,o Lin@ ]IL

239

Predrag S. Stanimirovi

Osnove programiranja

+a i #acivanje sloga i reda koristi se poka iva 9> a posti e se samo jednom nared#omF
L 7= LZ.Lin@

Primeri.
Primer. Svaki element liste deklarisan je sledeim tipovimaF
tQ=e =o@a<iva;=Z s-og s-og=re;ord =re<ime7stringH20I adresa7stringH30I s-ede;i7=o@a<iva; end

a& -apisati proceduru a dodavanje elementa na pocetak liste. #& -apisati procedure a )ormiranje liste i ispis u inver nom poretku. c& -apisati )unkciju koja ispituje da li postoji slog u listi ije je polje pre ime jednako vrednosti neke string promenljive. d& -apisati proceduru a #risanje prvog sloga liste> pri emu se oslo#a3a au eti memorijski prostor.
=rogram dinam! tQ=e =o@a<iva;=Z s-og s-og=re;ord =re<ime7stringH20I adresa7stringH30I s-ede;i7=o@a<iva; end var =o;eta@-iste7=o@a<iva; s7stringH20I =ro;ed+re ;ita>s-og&var ts-og7s-og' Degin OitA ts-og do Degin Orite&20nesi ime i =re<ime7 2' read-n&=re<ime' Orite&20nesi adres+ 2' read-n&adresa' end end =ro;ed+re =isis-og&ts-og7s-og' Degin Orite-n OitA ts-og do Degin Orite-n&=re<ime' Orite-n&adresa' end end =ro;ed+re doda>na=o;eta@&var =o;eta@7=o@a<iva;' var novi7=o@a<iva; Degin neO&novi' ;ita>s-og&noviZ ' noviZ .s-ede;i7==o;eta@ =o;eta@7=novi end =ro;ed+re ,ormira>&var =o;eta@7=o@a<iva;' var ts-og7=o@a<iva; ;A7;Aar Degin =o;eta@7=nire=eat doda>na=o;eta@&=o;eta@' Orite&24e-ite >os_ 2'

240

Predrag S. Stanimirovi read-n&;A' +nti- not &;A in H2d2,2D2I' end

Osnove programiranja

=ro;ed+re is=is-iste&=o;eta@7=o@a<iva;' var ts-og7=o@a<iva; Degin ts-og7==o;eta@ OAi-e ts-ogKLni- do Degin Orite&2Pritisni K%].%/L <a is=is s-ede;eg s-oga2' read-n =isis-og&ts-ogZ ' ts-og7=ts-ogZ .s-ede;i end end =ro;ed+re i<Da;i=rvi&var =o;eta@7=o@a<iva;' var =om7=o@a<iva; Degin i, =o;eta@KLni- tAen Degin =om7==o;eta@ =o;eta@7==o;eta@Z .s-ede;i dis=ose&=om' end end ,+n;tion =osto>i&@od7string =o;eta@7=o@a<iva;'7Doo-ean var ts-og7=o@a<iva; Degin i, =o;eta@=ni- tAen =osto>i7=,a-se e-se Degin ts-og7==o;eta@ OAi-e &ts-ogZ .=re<imeKL@od' and &ts-ogKLni-' do ts-og7=ts-ogZ .s-ede;i i, ts-og=ni- tAen =osto>i7=,a-se e-se =osto>i7=tr+e end end Degin ,ormira>&=o;eta@-iste' Orite-n&2Formirana >e s-ede;a str+@t+ra2' is=is-iste&=o;eta@-iste' Orite&2Ime @o>e tra<ite_ 2' read-n&s' i, =osto>i&s,=o;eta@-iste' tAen Orite-n&2.a@vo ime =osto>i2' e-se Orite-n&2.a@vo ime ne =osto>i2' Orite-n&2Lista De< =rvog e-ementa72' i<Da;i=rvi&=o;eta@-iste' is=is-iste&=o;eta@-iste' end.

Primer. Svaki element liste deklarisan je sledeim tipovimaF


tQ=e =o@a<iva;=Z s-og s-og = re;ord in,o7integer s-ede;i7=o@a<iva; end

-apisati proceduru a nadove ivanje dve liste.


=rogram dinam( tQ=e =o@a<iva;=Z s-og s-og=re;ord in,o7integer

241

Predrag S. Stanimirovi s-ede;i7=o@a<iva; end var =o;1,=o;2,=o;7=o@a<iva;

Osnove programiranja

=ro;ed+re ,ormira>&var =o;eta@7=o@a<iva;' var novi7=o@a<iva; ;A7;Aar Degin =o;eta@7=nire=eat neO&novi' read-n&noviZ.in,o' noviZ.s-ede;i7==o;eta@ =o;eta@7=novi Orite&24e-ite >os_ 2' read-n&;A' +nti- not &;A in H2d2,2D2I' end =ro;ed+re is=is-iste&=o;eta@7=o@a<iva;' var ts-og7=o@a<iva; Degin ts-og7==o;eta@ OAi-e ts-ogKLni- do Degin Orite&ts-ogZ.in,o,2 2' ts-og7=ts-ogZ .s-ede;i end Orite-n end =ro;ed+re nadove<i&=1,=27=o@a<iva; var =7=o@a<iva;' var =om7=o@a<iva; Degin i, =1=ni- tAen =7==2 e-se Degin =7==1 i, =2KLni- tAen Degin =om7==1 OAi-e =omZ .s-ede;i KL ni- do =om7==omZ.s-ede;i =omZ .s-ede;i7==2 end end end Degin Orite-n&2Prva -ista2' ,ormira>&=o;1' Orite-n&2Dr+ga -ista2' ,ormira>&=o;2' Orite-n&2Formirane s+ s-ede;e str+@t+re2' Orite-n&2Prva -ista2' is=is-iste&=o;1' Orite-n&2Dr+ga -ista2' is=is-iste&=o;2' Orite-n&2Liste =os-e nadove<ivan>a2' nadove<i&=o;1,=o;2,=o;' is=is-iste&=o;' end.

Primer. Svaki element liste deklarisan je sledecim tipovimaF


tQ=e =o@a<iva; = Z s-og s-og = re;ord in,o7integer s-ede;i7=o@a<iva; end

a& -apisati proceduru a )ormiranje liste sa strukturom reda. #& -apisati )unkciju koja odre3uje aritmetiku sredinu elemenata nepra ne liste.

242

Predrag S. Stanimirovi

Osnove programiranja

c& -apisati proceduru koja u listi amenjuje svako pojavljivanje #roja i1 #rojem i2. d& -apisati proceduru koja amenjuje prvi i poslednji element nepra ne liste.
=rogram dinam) tQ=e =o@a<iva;=Z s-og s-og=re;ord in,o7integer s-ede;i7=o@a<iva; end var =o;7=o@a<iva; i1,i27integer =ro;ed+re ,ormira>&var =o;eta@7=o@a<iva;' var novi,@ra>7=o@a<iva; ;A7;Aar Degin =o;eta@7=nineO&novi' read-n&noviZ .in,o' noviZ .s-ede;i7=ni=o;eta@7=novi @ra>7==o;eta@ Orite&24e-ite >os_ 2' read-n&;A' OAi-e ;A in H2d2,2D2I do Degin neO&novi' read-n&noviZ.in,o' noviZ .s-ede;i7=ni@ra>Z .s-ede;i7=novi @ra>7=@ra>Z .s-ede;i Orite&24e-ite >os_ 2' read-n&;A' end end =ro;ed+re is=is-iste&=o;eta@7=o@a<iva;' var ts-og7=o@a<iva; Degin ts-og7==o;eta@ OAi-e ts-ogKLni- do Degin Orite&ts-ogZ .in,o,2 2' ts-og7=ts-ogZ .s-ede;i end Orite-n end ,+n;tion sredina&=o;7=o@a<iva;'7reavar n,s7integer =7=o@a<iva; Degin s7=0 n7=0 =7==o; OAi-e =KLni- do Degin s7=s"=Z .in,o =7==Z .s-ede;i end sredina7=s6n end

n7=n"1

=ro;ed+re <ameni&i1,i27integer var =o;7=o@a<iva;' var =om7=o@a<iva; Degin i, =o;KLni- tAen Degin =om7==o; OAi-e =omKLni- do Degin i, =omZ .in,o=i1 tAen =omZ .in,o7=i2 =om7==omZ .s-ede;i end

243

Predrag S. Stanimirovi end

Osnove programiranja

end

=ro;ed+re <ameni=rvi<adn>i&var =o;7=o@a<iva;' var =om7=o@a<iva; =m7integer Degin =om7==o; OAi-e =omZ .s-ede;iKLni- do =om7==omZ .s-ede;i =m7==omZ .in,o =omZ .in,o7==o;Z .in,o =o;Z .in,o7==m end Degin ,ormira>&=o;' Orite-n&2Formirana >e s-ede;a str+@t+ra2' is=is-iste&=o;' Orite-n&2Aritmeti;@a sredina e-emenata + -isti >e 2,sredina&=o;'' Orite&2:o>i e-ement da <amenim_ 2' read-n&i1' Orite&2:o>im e-ementom da <amenim_ 2' read-n&i2' <ameni&i1,i2,=o;' Orite&2Pos-e <amene >e doDi>ena str+@t+ra 2' is=is-iste&=o;' <ameni=rvi<adn>i&=o;' Orite&2Pos-e <amene =rvog i =os-edn>eg e-ementa doDi>amo7 2' is=is-iste&=o;' end.

Primer. Hko je data deklaracija


tQ=e ste@= Zs-og s-og = re;ord in,o7;Aar end var vrA7ste@ s-ede;i7ste@

napisatiF a& proceduru a postavljanje $Ipus0I& elementa u stekX #& proceduru a u imanje $IpopI& elementa i nepra nog stekaX c& proceduru kojom se )ormira stek od ni a nakova> sve do naka Z.ZX d& proceduru kojom se ispisuje sadr@aj stekaX e& program koji koristi ove procedure.
=rogram dinam8 tQ=e ste@=Z s-og s-og=re;ord in,o7;Aar s-ede;i7ste@ end var vrA7ste@ =ro;ed+re =+sA&;A7;Aar var vrAste@a7ste@' var novi7ste@ Degin neO&novi' noviZ .in,o7=;A noviZ .s-ede;i7=vrAste@a vrAste@a7=novi end =ro;ed+re =o=&var ;A7;Aar var vrAste@a7ste@' var =om7ste@ Degin ;A7=vrAste@aZ.in,o =om7=vrAste@a vrAste@a7=vrAste@aZ.s-ede;i dis=ose&=om' end 244

Predrag S. Stanimirovi

Osnove programiranja

=ro;ed+re ,ormira>ste@&var vrAste@a7ste@' var ;A7;Aar Degin vrA7=nire=eat read&;A' =+sA&;A,vrAste@a' end =ro;ed+re is=is&vrAste@a7ste@' var ;A7;Aar Degin OAi-e vrAste@aKLni- do Degin =o=&;A,vrAste@a' Orite&;A' end Orite-n end Degin ,ormira>ste@&vrA' end. is=is&vrA'

+nti- ;A=2.2

Primer. Hko se sa tastature uitava #e gre8ke i ra o#lika Ti ra U FFS Tci)raUJ;$Ti ra U>Ti ea U& J m$Ti ra U>Ti ra U& Tci)raU FFS 0J1J2J!J"J,J'J7J4J. gde H o naava maksimum> a m - minimum dva #roja> i raunati vrednost unetog i ra a. -a primer> ;$,>m$'>4&&S'.
=rogram dinam10 tQ=e ste@=o@=Z s-og s-og=re;ord <na@7;Aar s-ede;i7ste@=o@ end var x7ste@=o@ =ro;ed+re =+sA&;A7;Aar var vrA7ste@=o@' var novi7ste@=o@ Degin neO&novi' noviZ .<na@7=;A noviZ .s-ede;i7=vrA vrA7=novi end =ro;ed+re =o=&var ;A7;Aar var vrA7ste@=o@' var =om7ste@=o@ Degin ;A7=vrAZ .<na@ =om7=vrA vrA7=vrAZ .s-ede;i dis=ose&=om' end ,+n;tion ra;+na>7integer var vrA7ste@=o@ ;,o=,x,Q7;Aar Degin vrA7=niOAi-e not eo-n do Degin read&;' i, ; in H2M2,2m2,202..282I tAen =+sA&;,vrA' e-se i, ;=2'2 tAen 9 @ra> i<ra<a oD-i@a O=&x,Q' B

245

Predrag S. Stanimirovi

Osnove programiranja

Degin 9na vrA+ ste@a >e tro>@a Q x o= @o>a se +<ima i< ste@a, i<vrsava se o=era;i>a o= i re<+-tat +Da;+>e + ste@ B =o=&Q,vrA' =o=&x,vrA' =o=&o=,vrA' ;ase o= o, 2M27 i, xLQ tAen ;7=x e-se ;7=Q 2m27 i, xKQ tAen ;7=x e-se ;7=Q end =+sA&;,vrA' end end =o=&;,vrA' end ra;+na>7=ord&;'#ord&202'

Degin Orite-n&ra;+na>' end.

Primer. Hko se sa tastature uitava #e gre8ke i ra o#lika Ti ra U FFS/J5J$T^i ra U&J$Ti ra URTi ra U&J$Ti ra U=Ti ra U& gde / i o naavaju redom logike konstante tr%e i false> a ^> = i R redom logike operacije negacije> disjunkcije i konjunkcije> i raunati vrednost unetog i ra a. Anos i ra a avr8ava se pritiskom na taster Knter. -a primer> $$^ &=$ R/&&S/.
=rogram dinam11 tQ=e ste@=o@=Z s-og s-og=re;ord <na@7;Aar s-ede;i7ste@=o@ end =ro;ed+re =+sA&;A7;Aar var vrA7ste@=o@' var novi7ste@=o@ Degin neO&novi' noviZ .<na@7=;A noviZ .s-ede;i7=vrA vrA7=novi end =ro;ed+re =o=&var ;A7;Aar var vrA7ste@=o@' var =om7ste@=o@ Degin ;A7=vrAZ .<na@ =om7=vrA vrA7=vrAZ .s-ede;i dis=ose&=om' end ,+n;tion @on>&x,Q7;Aar'7;Aar Degin i,&x=2F2' or &Q=2F2' tAen @on>7=2F2 e-se @on>7=2.2 end ,+n;tion dis>&x,Q7;Aar'7;Aar Degin i,&x=2.2' or &Q=2.2' tAen dis>7=2.2 e-se dis>7=2F2 end ,+n;tion neg&x7;Aar'7;Aar Degin i,&x=2F2' tAen neg7=2.2 e-se neg7=2F2 end

246

Predrag S. Stanimirovi

Osnove programiranja

,+n;tion ra;+na>7;Aar var vrA7ste@=o@ ;,o=,x,Q7;Aar Degin vrA7=niOAi-e not eo-n do Degin read&;' i, ; in H2.2,2F2,2V2,2E2,2"2I tAen =+sA&;,vrA' e-se i, ;=2'2 tAen 9 @ra> i<ra<a oD-i@a &xEQ', &x"Q' i-i &VQ' B Degin 9 na vrA+ ste@a >e tro>@a QEx i-i Q"x B 9 i-i dvo>@a Q V@o>a se +<ima i< ste@a, B 9i<vrsava se o=era;i>a o=B 9 i re<+-tat se +Da;+>e + ste@ B =o=&Q,vrA' =o=&o=,vrA' i, o==2V2 tAen 9 vrA ste@a >e Q V B ;7=neg&Q' e-se Degin =o=&x,vrA' i, o==2E2 tAen ;7=@on>&x,Q' e-se ;7=dis>&x,Q' end =+sA&;,vrA' end end =o=&;,vrA' 9 0 ste@+ >e osta-a vrednost i<ra<a B ra;+na>7=; end Degin Orite-n&ra;+na>' end.

Primer. Hko je data deklaracija


tQ=e red=Z s-og s-og=re;ord in,7;Aar s-ede;i7red end var =rvi,=os-edn>i7red

napisatiF a& proceduru kojom se element postavlja na kraj redaX #& proceduru kojom se o#e #e3uje i la ak elementa i redaX c& proceduru a )ormiranje reda koji se sastoji i ni a nakova avr8eni0 takom. d& proceduru kojom se ispisuje sadr@aj stekaX e& program koji koristi pret0odne procedure.
=rogram dinam12 tQ=e red=Z s-og s-og=re;ord in,7;Aar end var =rvi,=os-edn>i7red

s-ede;i7red

=ro;ed+re +red&;A7;Aar var =rvi,=os-edn>i7red' var novi7red Degin neO&novi' noviZ .in,7=;A noviZ .s-ede;i7=nii, =rvi=ni- tAen Degin

247

Predrag S. Stanimirovi =rvi7=novi =os-edn>i7=novi end e-se Degin =os-edn>iZ .s-ede;i7=novi end end

Osnove programiranja

=os-edn>i7=novi

=ro;ed+re i<reda&var ;A7;Aar var =rvi7red' var =om7red Degin ;A7==rviZ .in, =om7==rvi =rvi7==rviZ .s-ede;i dis=ose&=om' end =ro;ed+re ,ormiran>ereda&var =rvi,=os-edn>i7red' var ;A7;Aar Degin =rvi7=nire=eat read&;A' +red&;A,=rvi,=os-edn>i' +nti- ;A=2.2 end =ro;ed+re is=isreda&=rvi7red' var ;A7;Aar Degin OAi-e =rviKLni- do Degin i<reda&;A,=rvi' Orite&;A' end Orite-n end Degin Orite-n&20nos @ara@tera <avrsite sa . 2' ,ormiran>ereda&=rvi,=os-edn>i' Orite-n&2Formiran >e red s-ede;eg sadr<a>a72' end.

is=isreda&=rvi'

Primer. Odrediti o#im poligona i onog kada se iskljui svako drugo teme> ako je #roj temena paran> odnosno svako tree> ako je #roj temena neparan.
tQ=e =o@=Zs-og s-og=re;ord x,Q7reas7=o@ end var =,<,n7=o@ Dr,i7integer ,7text =ro;ed+re oDim&=7=o@' var a7reai7integer Degin a7=0 ,or i7=1 to Dr do Degin a7=a"sTrt&sTr&=Z.x#=Z.sZ.x'"sTr&=Z.Q#=Z.sZ.Q'' =7==Z.s end Orite-n&a707!'

248

Predrag S. Stanimirovi end Degin assign&,,2;76ivan6=as;a-6=o-.txt2' reset&,' neO&=' read&,,=Z.x,=Z.Q' <7== n7== Dr7=1 OAi-e not eo,&,' do Degin neO&n' in;&Dr' read&,,nZ.x,nZ.Q' <Z.s7=n <7=n end <Z.s7== ;-ose&,' oDim&=' ,or i7=1 to Dr do Degin i, i mod &2"ord&odd&Dr'''=0 tAen <Z.s7=<Z.sZ.s e-se <7=<Z.s end Dr7=Dr#&Dr div &2"ord&odd&Dr'''' oDim&=' end.

Osnove programiranja

Primer. Polinom o#ika !4 = ,!' - 7!, = '! = 1 se mo@e repre entovati parovima $1>4&>$,>'&>$-7>,&>$'>1&>$1>0& koji se mogu registrovati odgovarajuim redom. -apisati program koji omoguava registrovanje polinoma pomou reda i njegovo dekodiranje na osnovu adatog reda.
=rogram dinam13 tQ=e =o@a<iva;=Z s-og s-og=re;ord @oe,,e@s=7reas-ede;i7=o@a<iva; end var =rvi7=o@a<iva; =ro;ed+re ;ita>monom&var te@+;i7s-og' Degin OitA te@+;i do Degin Orite&2@oe,i;ient_ 2' read-n&@oe,' Orite&2%@s=onent_ 2' read-n&e@s=' s-ede;i7=niend end =ro;ed+re is=iss-oga&te@+;i7s-og' Degin OitA te@+;i do i, @oe,L0 tAen Orite&2"2,@oe,7$72,2xZ 2,e@s=7$72' e-se Orite&@oe,7$72,2xZ 2,e@s=7$72' end =ro;ed+re ,ormiran>e&var =rvi7=o@a<iva;' var ;A7;Aar novi,@ra>7=o@a<iva; Degin =rvi7=nire=eat neO&novi' ;ita>monom&noviZ ' i, =rvi=ni- tAen =rvi7=novi

249

Predrag S. Stanimirovi

Osnove programiranja

e-se Degin @ra>7==rvi OAi-e @ra>Z.s-ede;i KL ni- do @ra>7=@ra>Z .s-ede;i @ra>Z .s-ede;i7=novi end Orite&2^os_ 2' read-n&;A' +nti- not&;A in H2Q2,2P2I' end =ro;ed+re is=is&=rvi7=o@a<iva;' var te@+;i7=o@a<iva; Degin te@+;i7==rvi OAi-e te@+;iKLni- do Degin is=iss-oga&te@+;iZ ' te@+;i7=te@+;iZ .s-ede;i end Orite-n end Degin ,ormiran>e&=rvi' is=is&=rvi' end. Orite-n&2Formiran >e s-ede;i =o-inom72'

Primer. (etka matrica se mo@e de)inisati #rojem ne-nula elemenata> #rojem vrsta i kolona kao i sledeim in)ormacijama a svaki ne-nula elementF - redni #roj vrste tog elementa> - redni #roj kolone tog elementa> i - realan #roj koji presdstavlja vrednost tog elementa. Predstaviti retku matrica se mo@e predstaviti redom u kojoj svaki cvor sadr@i potre#ne in)ormacije o jednom ne-nula elementuF % datoteke uitati #roj ne-nula elemenata retke matrice> kao redni #roj vrste i kolone i vrednost a svaki ne-nula element. -apisati procedure a )ormiranje reda koji predstavlja repre entaciju retke matrice ). -apisati rekur ivnu proceduru a ispis matrice. -apisati proceduru a )ormiranje reda koji predstavlja matricu )/. -apisati proceduru a )ormiranje skupova koji sadr@e indekse ne-nula vrsta i ne-nula kolona. -apisati )unkciju koja i raunava vrednost elementa )Vi>'W.
=rogram s=arse tQ=e o=seg=1..200 =o@a<iva; = Zs-og s-og=re;ord i,>7o=seg ai>7reas-ede;i7=o@a<iva; end s@+= = set o, o=seg var =,T7=o@a<iva; i,>7o=seg sv,s@7s@+= ,7text =ro;ed+re =ravired&var =o;eta@7=o@a<iva;' var novi,@ra>7=o@a<iva; =,T7o=seg i,n,Dv,D@71..maxint x=T7reaDegin 250

Predrag S. Stanimirovi

Osnove programiranja

assign&,,2;7St=S<ada;iSs=arse.dat2' reset&,' read-n&,,n,Dv,D@' read-n&,,=,T,x=T' neO&novi' noviZ.i7== noviZ.>7=T noviZ.ai>7=x=T noviZ.s-ede;i7=ni=o;eta@7=novi @ra>7=novi ,or i7=2 to n do Degin read-n&,,=,T,x=T' neO&novi' noviZ.i7== noviZ.>7=T noviZ.ai>7=x=T noviZ.s-ede;i7=ni@ra>Z.s-ede;i7=novi @ra>7=@ra>Z.s-ede;i end ;-ose&,' end =ro;ed+re trans=on+>&red7=o@a<iva; var =o;eta@7=o@a<iva;' var novi,@ra>7=o@a<iva; =,T7o=seg x=T7reaDegin =7=redZ.i T7=redZ.> x=T7=redZ.ai> neO&novi' noviZ.i7=T noviZ.>7== noviZ.ai>7=x=T noviZ.s-ede;i7=ni- =o;eta@7=novi @ra>7=novi red7=redZ.s-ede;i OAi-e redKLni- do Degin =7=redZ.i T7=redZ.> x=T7=redZ.ai> neO&novi' noviZ.i7=T noviZ.>7== noviZ.ai>7=x=T noviZ.s-ede;i7=ni@ra>Z.s-ede;i7=novi @ra>7=@ra>Z.s-ede;i red7=redZ.s-ede;i end end =ro;ed+re is=is&=7=o@a<iva;' Degin i, =KLni- tAen Degin Orite-n&=Z.i,2 2,=Z.>,2 2,=Z.ai>7107$' end end

is=is&=Z.s-ede;i'

=ro;ed+re nen+-e&=7=o@a<iva; var sv,s@7s@+=' Degin sv7=HI s@7=HI OAi-e =KL ni- do Degin sv7=sv"H=Z.iI s@7=s@"H=Z.>I =7==Z.s-ede;i end end ,+n;tion vrednost&@,-7o=seg =7=o@a<iva;'7reavar s7rea-g7Doo-ean Degin s7=0 -g7=,a-se OAi-e &=KLni-' and &not -g' do i, &=Z.i=@' and &=Z.>=-' tAen Degin s7==Z.ai> -g7=tr+e end

251

Predrag S. Stanimirovi e-se =7==Z.s-ede;i vrednost7=s end

Osnove programiranja

Degin =ravired&=' Orite-n&2Matri;a >e 7 2' is=is&=' trans=on+>&=,T' Orite-n&2.rans=onovana matri;a7 2' is=is&T' nen+-e&=,sv,s@' Orite-n&2Inde@si ne#n+-a vrsta72' ,or i7=1 to 200 do i, i in sv tAen Orite&i,2 2' Orite-n Orite-n&2Inde@si ne#n+-a @o-ona72' ,or i7=1 to 200 do i, i in s@ tAen Orite&i,2 2' Orite-n Orite&2i,>= _ 2' read-n&i,>' Orite-n&vrednost&i,>,='71073' end.

Primer. -apisati program a sortiranje ni a realni0 #rojeva koristei strukturu ure3ene liste
=rogram 1ortList +ses ;rt tQ=e -ist=Zs-og s-og=re;ord x7reas7-ist end var -7-ist i<Dor7;Aar r7rea=ro;ed+re +Da;i&r7rea- var a7-ist' var =1, i<a,is=red7-ist Degin i<a7=a OAi-e &i<aKLni-' and &rLi<aZ.x' do Degin is=red7=i<a i<a7=i<aZ.s end neO&=1' =1Z.x7=r =1Z.s7=i<a i, i<a=a tAen a7==1 &E +Da;iti na =o;eta@ E' e-se is=redZ .s7==1 &E =ove<ati =retAodni sa novim E' end =ro;ed+re ,ormira>&var a7-ist' var i,n7integer r7reaDegin Orite&2:o-i@o e-emenata_ 2' read&n' a7=ni,or i7=1 to n do Degin read&r' +Da;i&r,a' end end =ro;ed+re is=is&a7-ist' Degin OAi-e aKLni- do Degin Orite&aZ .x7X73,2 2' end Orite-n end =ro;ed+re Drisi&var a7-ist' var r7rea-

a7=aZ.s

252

Predrag S. Stanimirovi

Osnove programiranja

=7-ist i<a, is=red7-ist Degin Orite&2:o>i e-ement_ 2' read-n&r' i<a7=a OAi-e &i<aKLni-' and &rKLi<aZ.x' do Degin is=red7=i<a i<a7=i<aZ.s end i, i<a=a tAen a7=aZ.s e-se i, i<a=ni- tAen Orite-n&2.a@av e-ement ne =osto>i2' e-se Degin =7=is=redZ.s is=redZ.s7=is=redZ.sZ.s dis=ose&=' end end Degin Orite-n -7=nire=eat i<Dor7=read@eQ ;ase i<Dor o, 2,2,2F27 Degin ,ormira>&-' is=is&-' end 2i2,2I27 is=is&-' 2D2,2B27 i, -=ni- tAen Orite-n&2Lista >e =ra<na 2' e-se Drisi&-' 2+2,2027 Degin Orite&2%-ement_ 2' read&r' +Da;i&r,-' end end +nti- i<Dor inH2@2,2:2I end.

(a motriemo pro#lem tra@enja odre3enog elementa u opisanoj strukturi tipa reda. -a primer> potre#no je da se prona3e slog ija je vrednost nak Z-Z. +a pretra@ivanje reda mo@e se koristiti sledea proceduraF
var Point 7 L1 ... Point 7= L A 7= .r+e (#i)e &Point 0, ]IL' and A do if PointZ.In,o = 2]2 t#en A7= Fa-se e)se Point 7= PointZ.Lin@

Hko slog sa nakom Z;Z postoji u redu tada e poka iva Goint poka ivati na taj slog reda> u suprotnom Goint e poka ivati na ;29. 7ore data procedura mo@e se dopuniti> tako da se slogu dodaje novi slog i a ve prona3enog sloga sa odre3enom sadr@inom. A na8em primeru i a sloga sa nakom Z;Z mo@e se dodati slog sa nakom qHZ> pomou sledee sekvence nared#iF
var ]ovis-og 7 L1 ... ]eO&]ovis-og' ]ovis-ogZ.In,o 7= MMN ]ovis-ogZ.Lin@ 7= PointZ.Lin@ PointZ.Lin@ 7= ]ovis-og

6odavanjem samo jedne nared#e gore dati program se mo@e trans)ormisati u program a generisanje ciklinog redaF

253

Predrag S. Stanimirovi /Z.Lin@ 7= L

Osnove programiranja

+a generisanje dvostruko spregnutog reda mo@e se koristiti sledea sekvenca nared#i


var :, Levo, Desno. d 7 L1 5F 7 ;Aar ... read&5F' neO&:' :Z.In,o 7= 5F :Z.D-in@ 7= ]IL :Z.L-in@ 7= ]IL Desno 7= : d 7= : OAi-e not %OF do begin read&5F' neO&:' :Z.In,o 7= 5F :Z.D-in@ 7= d d 7= : end dZ.Lin@ 7= ]IL Levo 7= d ...

:Z.Lin@ 7= :

Poka ivai i tipovi poka ivaa mogu se e)ikasno koristiti a de)inisanje i generisanje i slo@eni0 struktura podataka kakva je struktura dvostruko pove anog reda prika ana na slici. A ovom sluaju potre#no nam je da u okviru svakog sloga imamo po dva poka ivaa> pa je ato tip podataka Slog de)inisan na sledei nainF
type L1 = Z1-og 1-og = record In,o 7 ;Aar LLin@ 7 L1 DLin@ 7 L1 end

% #acivanje i reda sloga koji je susedni u odnosu na slog na koji poka uje poka iva Point mo@e se postii primenom sledei0 nared#iF
PointZ.D-in@ 7= PointZ.D-in@Z.D-in@ PointZ.D-in@Z.LIin@ 7= Point

% #acivanje elementa i dvostruko spregnutog reda 6odavanje novog sloga redu susednog u odnosu na slog Point na koji se po icioniramo mogue je pomou sledei0 nared#iF

254

Predrag S. Stanimirovi var ]ovis-og 7 L1 ... read&5F' neO&]ovis-og' ]ovis-ogZ.In,o 7= 5F ]ovis-ogZ.D-in@ 7= PointZ.D-in@ ]ovisiogZ.L-in@ 7= Point PointZ.D-in@Z.L-in@ 7= ]ovis-og PointZ.D-in@ 7= ]ovis-og ...

Osnove programiranja

P)#&$)#.
Primer. a& -apisati proceduru kojom se dvostruko pove anoj listi dodaje element sa leve strane. #& -apisati proceduru kojom se dvostruko pove anoj listi dodaje element sa desne strane. c& -apisati proceduru a )ormiranje dvostruko pove ane liste koja se sastoji i ni a nakova koji se avr8ava takom. d& -apisati proceduru kojom se ispisuje sadr@aj dvostruko pove ane liste.
=rogram dvo-ist1 tQ=e =o@a<iva;=Z s-og s-og=re;ord x7;Aar =retAodni,s-ede;i7=o@a<iva; end var -evi,desni7=o@a<iva; i<Dor7;Aar =ro;ed+re 0Da;iLevo&;A7;Aar var -evi,desni7=o@a<iva;' &E =ostav->a @ara@ter s-eva + dvostr+@o =ove<an+ -ist+ E' var =17=o@a<iva; Degin neO&=1' =1Z .x7=;A i, -evi=ni- tAen Degin =1Z .=retAodni7=ni- =1Z .s-ede;i7=ni-evi7==1 desni7==1 end e-se Degin =1Z .s-ede;i7=-evi =1Z .=retAodni7=ni-eviZ .=retAodni7==1 -evi7==1 end end =ro;ed+re Formiran>e1-eva&var -evi,desni7=o@a<iva;' var ;A7;Aar Degin -evi7=ni- desni7=nire=eat read&;A' 0Da;iLevo&;A,-evi,desni' +nti- ;A=2.2 end =ro;ed+re 0Da;iDesno&;A7;Aar var -evi,desni7=o@a<iva;'

255

Predrag S. Stanimirovi

Osnove programiranja

&E =ostav->a @ara@ter s-eva + dvostr+@o =ove<an+ -ist+ E' var =17=o@a<iva; Degin neO&=1' =1Z .x7=;A i, desni=ni- tAen Degin =1Z .=retAodni7=ni- =1Z .s-ede;i7=ni- -evi7==1 desni7==1 end e-se Degin =1Z .=retAodni7=desni =1Z .s-ede;i7=nidesniZ .s-ede;i7==1 desni7==1 end end =ro;ed+re Formiran>e1desna&var -evi,desni7=o@a<iva;' var ;A7;Aar Degin -evi7=ni- desni7=nire=eat read&;A' 0Da;iDesno&;A,-evi,desni' +nti- ;A=2.2 end =ro;ed+re Is=is]aDesno&a7=o@a<iva;' Degin OAi-e aKLni- do Degin Orite&aZ .x' a7=aZ .s-ede;i end Orite-n end =ro;ed+re Is=is]aLevo&a7=o@a<iva;' Degin OAi-e aKLni- do Degin Orite&aZ .x' a7=aZ .=retAodni Orite-n end Degin Orite-n&2Dodavan>e s -eve strane2' Formiran>e1-eva&-evi,desni' Orite-n&2Is=is na desno72' Is=is]aDesno&-evi' Orite-n&2Is=is na -evo72' Is=is]aLevo&desni' Orite-n&2Dodavan>e s desne strane2' Formiran>e1desna&-evi,desni' Orite-n&2Is=is na desno72' Is=is]aDesno&-evi' Orite-n&2Is=is na -evo72' Is=is]aLevo&desni' end.

end

Primer. A krugu se nala i n oso#a. Poev8i od m-te oso#e vr8i se i la ak i kruga po sledeem praviluF oso#a koja i la i i kruga govori vrednost sledeeg koraka $ceo #roj ra liit od 0&> tj. koliko se tre#a kretati una ad $ukoliko je korak negativan& ili unapred $ako je korak po itivan& da #i se i a#rala sledea oso#a. Postupak traje dok svi ne napuste krug. -apisati program koji a adate vrednosti n> m> imena n oso#a i korake koje govori svaka od nji0 ispisuje na standardni i la redosled imena kojim se vr8i i la ak i kruga. +a opisivanje kruga koristiti strukturu kru@ne liste.
=rogram =m,a=r2 tQ=e -ista=Z .osoDa .osoDa=re;ord ime7stringH20I 256

Predrag S. Stanimirovi =ret,s-ed7-ista end

Osnove programiranja

=ro;ed+re ,ormira>@r+g&var g-ava7-ista Dr7integer' var =,T7-ista Degin i, DrL0 tAen Degin neO&g-ava' Orite&2Ime osoDe_ 2' read-n&g-avaZ .ime' Dr7=Dr#1 =7=g-ava OAi-e DrL0 do Degin neO&T' Orite&2Ime osoDe_ 2' read-n&TZ .ime' =Z .s-ed7=T TZ .=ret7== =7=T Dr7=Dr#1 end =Z .s-ed7=g-ava g-avaZ .=ret7== end e-se g-ava7=niend =ro;ed+re i<Da;ivan>e&g-ava7-ista Dr, =o;etna7integer' var =7-ista i,@ora@7integer Degin @ora@7==o;etna OAi-e DrL0 do Degin ,or i7=1 to aDs&@ora@'#1 do i, @ora@L0 tAen g-ava7=g-avaZ.s-ed e-se g-ava7=g-avaZ.=ret Orite-n&2I<-a<i osoDa7 2, g-avaZ.ime' Dr7=Dr#1 i, DrL0 tAen Degin Orite&21-ede;i @ora@7 2' read-n&@ora@' end 9 I<-a<a@ osoDe i< @r+gaB g-avaZ.=retZ.s-ed7=g-avaZ.s-ed g-avaZ.s-edZ.=ret7=g-avaZ.=ret =7=g-ava i, @ora@L0 tAen g-ava7=g-avaZ.s-ed e-se g-ava7=g-avaZ.=ret dis=ose&=' end end var n,m7integer g-ava7-ista Degin Orite&2Bro> ->+di7 2' read-n&n' Orite&2/edni Dro> osoDe od @o>e =o;in>e i<Da;ivan>e7 2' read-n&m' ,ormira>@r+g&g-ava,n' Orite-n i<Da;ivan>e&g-ava,n,m' end.

1. 4PA'.A/6 A krugu se nala i n oso#a. Poev8i od m-te oso#e vr8i se i la ak i kruga po sledeem praviluF oso#a koja i la i i kruga govori vrednost sledeeg koraka $ceo #roj ra liit od 0&> tj. koliko se tre#a kretati una ad $ukoliko je korak negativan& ili unapred $ako je korak po itivan& da #i se i a#rala sledea oso#a koja i la i i igre. Postupak se avr8ava kada svi napuste krug. -apisati program kojim se prvo uitava po itivan ceo #roj n koji predstavlja #roj oso#a u igri> kao i ceo #roj m koji predstavlja redni #roj oso#e koja i la i i igre. Svako sledere #rojanje poinje od mesta na kojoj je #ila oso#a koja

257

Predrag S. Stanimirovi

Osnove programiranja

je napustila igru. %gra se prekida kada svi igrai i a3u i igre. -a standardni i la ispisati imena oso#a kojim se vr8i i la ak i kruga. +a opisivanje kruga koristiti strukturu kru@ne liste.
=rogram Bro>a-i;a tQ=e -ista=Z .osoDa .osoDa=re;ord ime7stringH20I =ret,s-ed7-ista end =ro;ed+re ,ormira>@r+g&var g-ava7-ista Dr7integer' var =,T7-ista Degin i, DrL0 tAen Degin neO&g-ava' Orite&2Ime osoDe_ 2' read-n&g-avaZ.ime' Dr7=Dr#1 =7=g-ava OAi-e DrL0 do Degin neO&T' Orite&2Ime osoDe_ 2' read-n&TZ.ime' =Z.s-ed7=T TZ.=ret7== =7=T Dr7=Dr#1 end =Z.s-ed7=g-ava g-avaZ.=ret7== end e-se g-ava7=niend =ro;ed+re i<Da;ivan>e&g-ava7-ista Dr, =o;etna7integer' var =7-ista i,@ora@7integer Degin @ora@7==o;etna mod Dr OAi-e DrL0 do Degin ,or i7=1 to aDs&@ora@'#1 do i, @ora@L0 tAen g-ava7=g-avaZ.s-ed e-se g-ava7=g-avaZ.=ret Orite-n&2I<-a<i osoDa7 2, g-avaZ.ime' Dr7=Dr#1 9 I<-a<a@ osoDe i< @r+gaB g-avaZ.=retZ.s-ed7=g-avaZ.s-ed g-avaZ.s-edZ.=ret7=g-avaZ.=ret =7=g-ava i, @ora@L0 tAen g-ava7=g-avaZ.s-ed e-se g-ava7=g-avaZ.=ret dis=ose&=' end end var n,m7integer g-ava7-ista Degin Orite&2Bro> ->+di7 2' read-n&n' ,ormira>@r+g&g-ava,n' Orite-n Orite&2/edni Dro> osoDe @o>a se i<Da;+>e_ 2' i<Da;ivan>e&g-ava,n,m' end.

read-n&m'

258

Predrag S. Stanimirovi

Osnove programiranja

Primer. -apisati proceduru kojom se slog ije in)ormaciono polje sadr@i jedan karakter postavlja na odgovarajue mesto #inarnog sta#la prema al)a#etskom poretku. +a sortiranje elemenata u #inarnom sta#lu koristiti inorder poredak $levo podsta#lo> koren> desno podsta#lo&. -apisati )unkciju kojom se ispituje da li se vrednost nakovne promenljive ob'ekat nala i u #inarnom sta#lu. 2rednost )unkcije je ili nil ako se nakovna promenljiva ob'ekat ne nala u #inarnom sta#lu> ili poka iva na vor iji je in)ormacioni deo jednak vrednost promenljive ob'ekat. -apisati program a )ormiranje #inarnog sta#la i ispis pri sledeem o#ilaskuF levo podsta#lo> koren> desno podsta#lo. A #inarno sta#lo ugraditi sve karaktere do naka Z.Z +atim uitati jedan nak i proveriti da li se nala i u )ormiranom #inarnom sta#lu.
=rogram staD-o$ tQ=e =o@a<iva;=Z s-og s-og=re;ord <na@7;Aar -evi,desni7=o@a<iva; end var =o@,@oren7=o@a<iva; ;7;Aar =ro;ed+re novi;vor&var ;vor7=o@a<iva; ;7;Aar' Degin neO&;vor' OitA ;vorZ do Degin <na@7=; -evi7=ni- desni7=niend end =ro;ed+re +metan>e<na@a&;7;Aar var =7=o@a<iva;' Degin i, ==ni- tAen novi;vor&=,;' e-se i, ;K=Z .<na@ tAen +metan>e<na@a&;,=Z .-evi' e-se +metan>e<na@a&;,=Z .desni' end =ro;ed+re inorder&=7=o@a<iva;' Degin i, =KLni- tAen Degin inorder&=Z.-evi' Orite&=Z.<na@72' inorder&=Z.desni' end end ,+n;tion Dintrag&=7=o@a<iva; oD>e@at7;Aar'7=o@a<iva; Degin i, ==ni- tAen Dintrag7=nie-se i, =Z .<na@=oD>e@at tAen Dintrag7== e-se i, =Z .<na@LoD>e@at tAen Dintrag7=Dintrag&=Z .-evi,oD>e@at' e-se Dintrag7=Dintrag&=Z .desni,oD>e@at' end Degin @oren7=nire=eat read&;' i, ;KL2.2 tAen +metan>e<na@a&;,@oren' +nti- ;=2.2 read-n inorder&@oren' Orite-n Orite&21imDo-_ 2' read-n&;' =o@7=Dintrag&@oren,;'

259

Predrag S. Stanimirovi i, =o@=ni- tAen Orite-n&;,2 se ne sadr<i + staD-+2' e-se Orite-n&;,2 se sadr<i + staD-+2' end.
$est primer. Hko korisnik unese ni

Osnove programiranja

nakova ackijbd. )ormira se sledee #inarno sta#lo .a .; .d .@ .i .d .> a na i la u se ispisuje a b c d i j k.

Primer. Hko vor sta#la osim in)ormacionog polja sadr@i i polje u kome se registruje #roj pojavljivanja njegove vrednostiF t<pe poka ivacSY slogX slogSrecord nakFc0arX #rFintegerX levi>desniFpoka ivacX endX napisati proceduru kojom se nak u#acuje u ure3eno #inarno sta#lo. -apisati program a )ormiranje #inarnog sta#la i ispis pri sledeem o#ilaskuF levo podsta#lo> koren> desno podsta#lo. A #inarno sta#lo ugraditi sve karaktere do naka Z.Z
=rogram staD-o! tQ=e =o@a<iva;=Z s-og s-og=re;ord <na@7;Aar Dr70..maxint -evi,desni7=o@a<iva; end var =o@,@oren7=o@a<iva; ;7;Aar =ro;ed+re +metan>e<na@a&;7;Aar var =7=o@a<iva;' Degin i, ==ni- tAen Degin neO&=' =Z.<na@7=; =Z.Dr7=1 =Z.-evi7=ni=Z.desni7=niend e-se i, =Z.<na@=; tAen =Z .Dr7==Z .Dr"1 e-se i, ;K=Z.<na@ tAen +metan>e<na@a&;,=Z .-evi' e-se +metan>e<na@a&;,=Z .desni' end =ro;ed+re inorder&=7=o@a<iva;' Degin i, =KLni- tAen Degin inorder&=Z .-evi' Orite-n&=Z.<na@72,2 2,=Z.Dr,2 2' inorder&=Z .desni' end end Degin @oren7=nire=eat read&;'

+metan>e<na@a&;,@oren'

+nti- ;=2.2

260

Predrag S. Stanimirovi inorder&@oren' end. Orite-n

Osnove programiranja

7.3. D# +&#5,$ s')0,'0)$ (!1+'+,+ 0 8


+a ra liku od vektora i skalarni0 promenljivi0> kojima se implicitno dodeljuje memorija prilikom nji0ovog stvaranja i oslo#a3a prilikom #risanja> ne avisno od volje programera> dinamike strukture a0tevaju eksplicitno dodeljivanje i oslo#a3anje memorije. A #i#lioteci stdlib1& nala e se de)inicije )unkcija mallo#> #allo#> free i reallo#> kojima se mo@e eksplicitno upravljati memorijom. 6e)inicija i semantika ovi0 )unkcija je sledeaF
9. char Gmalloc)size*

re ervi8e memorijski #lok veliine size u astopni0 #ajtova. Hrgument size je tipa %nsigned. A sluaju da re ervacija memorije uspe> ova )unkcija vraa pointer na tip #&ar> koji uka uje na re ervisani memorijski #lok> a inae vraa 0. Ova )unkcija ne menja sadr@aj memorije koja je i dvojena.
;. char Gcalloc)n, size*

re ervi8e memorijski #lok dovoljan a sme8tanje n elemenata veliine size #ajtova> tj. re ervi8e nRsize u astopni0 #ajtova. (e ervisani memorijski prostor se inicijali uje na 0. Hko je re ervacija uspe8na> re ultat je pointer na #&ar> koji uka uje na re ervisani memorijski #lok> a inae 0.
@. void free)point*

oslo#a3a memorijski prostor koji je re ervisan )unkcijama #allo# ili mallo#. Hrgument point je pointer na #&ar> koji uka uje na memorijski prostor koji se oslo#a3a. Ova )unkcija ne vraa vrednost. Poka iva point mora da ima vrednost koja je do#ijena primenom )unkcija mallo#$& i #allo#$&.
4. char Grealloc)point, size*

oslo#a3a re ervisani memorijski #lok i re ervi8e novi> veliine size #ajtova. Hrgument point je pointer na #&ar i uka uje na memorijski #lok koji se realocira. Hrgument size je tipa %nsigned i odre3uje veliinu realociranog memorijskog prostora. Primer. -ared#ama
int E=int =int = &int E'ma--o;&$00'

i dvaja se "00 u astopni0 #ajtova. Ovaj memorijski prostor je dovoljan a sme8tanje 200 celi0 #rojeva u je iku C> odnosno 100 celi0 #rojeva u C==. /ako3e> vrednost i ra a
=int = &intE'ma--o;&$00'

je poka iva na tip int> koji se do#ija konver ijom poka ivaa na #&ar pomou kast operatora. Hko tip int au ima " #ajta> tada pint=1 uveava poka iva a " #ajta> i predstavlja adresu sledeeg celog #roja. -a taj nain> "00 #ajotva se koristi a sme8tanje 100 celi0 #rojeva. Hko @elimo da i dvojimo onoliko memorije koliko je potre#no a a uvanje vrednosti i ra a ili podataka odre3enog tipa> koristi se operator si eo) na jedan od sledea dva nainaF si<eo,&i<ra<' - vraa memorijski prostor koji je dovoljan a sme8tanje i ra a izrazX si<eo,&.' - vraa memorijski prostor koji je dovoljan a uvanje vrednosti tipa . Primer. Pomou operatora
=int = &int E'ma--o;&si<eo,&int''

i dvaja se memorijski prostor a celo#rojnu vrednost. Hdresa te o#lasti se dodeljuje promenljivoj pint. -oviji C prevodioci ne a0tevaju promenu tipa poka ivaa koji vraa )unkcija mallo#$&> jer je njen re ultat t v. generiki poka iva o#lika void R> koji poka uje na o#jekat #ilo kog tipa. Primer. Operatorima
-ong E=-ong

261

Predrag S. Stanimirovi =-ong = &-ongE';a--o;&100, si<eo,&-ong''

Osnove programiranja

i dvaja se $i inicijali uje na 0& memorijski prostor dovoljan a sme8tanje 100 vrednosti tipa long $"00 u astopni0 #ajtova&.

>.3.1. N#/!"# # 1# +&#5,+ +%!,+6#.+ &$&!)#.$ 0 8


Primer. % adatog ni a i #aciti sva pojavljivanja njegovog maksimalnog elementa. +adatak uraditi dinamikom alokacijom memorije.
Jin;-+deKstdio.AL Jin;-+deKstd-iD.AL void main&' 9 int i,n,im,@=0 ,-oat max, Ea s;an,&3Rd3,Un' a=&,-oat E'ma--o;&nEsi<eo,&,-oat'' ,or&i=0 iKn s;an,&3R,3,UaHi""I'' im=0 max=aH0I ,or&i=1 iKn i""' i,&aHiILmax' 9 max=aHiI im=i B @=im#1 ,or&i=im"1 iKn i""' i,&aHiIV=max'aH""@I=aHiI a=&,-oat E'rea--o;&a,&@"1'Esi<eo,&,-oat'' ,or&i=0 iK=@ =rint,&3aHRdI=R, 3,i,aHi""I'' B

Primer. -i ovi kao skupovi pomou dinamike alokacije memorije.


Jin;-+deKstdio.AL Jin;-+deKstd-iD.AL int sadr<i&;onst ,-oat Es1, int n1, ,-oat D' void doda>&,-oat EEs1, int En1, ,-oat D' void =rese@&;onst ,-oat Es1, int n1, ;onst ,-oat Es2, int n2, ,-oat EEs3, int En3' void +ni>a&;onst ,-oat Es1, int n1, ;onst ,-oat Es2, int n2, ,-oat EEs3, int En3' 6E void ra<-i@a&;onst ,-oat Es1, int n1, ;onst ,-oat Es2, int n2, ,-oat EEs3, int En3' nE6 void ;ita>&,-oat EEs, int En' void =isi&;onst ,-oat Es, int n, ;onst ;Aar E,' int sadr<i&;onst ,-oat Es1, int n1, ,-oat D' 9 int d=0, g=n1#1,= OAi-e&dK=g' i,&s1H==&d"g'62I==D'ret+rn 1 e-se i,&s1H=IKD'd=="1 e-se g==#1 ret+rn 0 B void doda>&,-oat EEs1, int En1, ,-oat D' 9 ,-oat Es=Es1 int n=En1,i i,&Vsadr<i&s,n,D'' 9 Es1=s=&,-oat E'rea--o;&s,&n"1'Esi<eo,&,-oat'' ,or&i=n#1 iL=0UUsHiILD i##'sHi"1I=sHiI sHi"1I=D En1=n"1 B B void =rese@&;onst ,-oat Es1, int n1, ;onst ,-oat Es2, int n2, ,-oat EEs3, int En3' 9 int n=0,i1=0,i2=0 ,-oat Es=&,-oat E' ma--o;&&n1Kn2 _ n1 7 n2'Esi<eo,&,-oat''

262

Predrag S. Stanimirovi OAi-e&i1Kn1 UU i2Kn2' i,&s1Hi1IKs2Hi2I'i1"" e-se i,&s1Hi1ILs2Hi2I'i2"" e-se sHn""I=s1Hi1""I,i2"" Es3=&,-oat E'rea--o;&s,&En3=n'Esi<eo,&,-oat''

Osnove programiranja

void +ni>a&;onst ,-oat Es1, int n1, ;onst ,-oat Es2, int n2, ,-oat EEs3, int En3' 9 int n=0, i1=0, i2=0 ,-oat Es=&,-oat E'ma--o;&&n1"n2'Esi<eo,&,-oat'' OAi-e&i1Kn1 WW i2Kn2' i,&i1==n1' sHn""I=s2Hi2""I e-se i,&i2==n2'sHn""I=s1Hi1""I e-se i,&s1Hi1IKs2Hi2I'sHn""I=s1Hi1""I e-se i,&s2Hi2IKs1Hi1I'sHn""I=s2Hi2""I e-se sHn""I=s1Hi1""I,i2"" Es3=&,-oat E'rea--o;&s,&En3=n'Esi<eo,&,-oat'' B void ;ita>&,-oat EEs1, int En1' 9 int n,i ,-oat Es s;an,&3Rd3,Un' En1=n i,&nL=0' 9 Es1=s=&,-oat E'ma--o;&nEsi<eo,&,-oat'' ,or&i=0 iKn s;an,&3R,3,UsHi""I'' B e-se Es1=0 B void =isi&;onst ,-oat Es, int n, ;onst ;Aar E,' 9 int i =+t;Aar&292' ,or&i=0 iKn i""' 9 i,&iL0' =+t;Aar&2,2' =rint,&,,sHiI' B =+t;Aar&2B2' B void main&' 9 ,-oat Es1, Es2, Es3 int n1,n2,n3,i OAi-e&1' 9 ;ita>&Us1,Un1' i,&n1K0'Drea@ ;ita>&Us2,Un2' i,&n2K0'Drea@ =rint,&3s1 3' =isi&s1,n1,3R.2,3' =+t;Aar&2Sn2' =rint,&3s2 3' =isi&s2,n2,3R.2,3' =+t;Aar&2Sn2' =rese@&s1,n1,s2,n2,Us3, Un3' =rint,&3s1Es2 3' =isi&s3,n3,3R.2,3' =+t;Aar&2Sn2' +ni>a&s1,n1,s2,n2,Us3, Un3' =rint,&3s1"s2 3' =isi&s3,n3,3R.2,3' =+t;Aar&2Sn2' ,ree&s1' ,ree&s2' ,ree&s3' B B

Primer. +a svaku vrstu ro#e u magacinu #ele@i se njena 8i)ra i koliina> kao dva cela #roja. +a magacin ) dati su ni ovi sa i ka od na elemenata> sa naenjem da ro#e sa 8i)rom saViW ima u koliini kaViW> i da ukupno ima na vrsta ro#e u magacinu. +a magacin + dati su analogni podaci u ni ovima sb i kb od nb elemenata. Podaci o ro#i su ure3eni po rastu 8i)ara. 5ormirati ni ove sz i kz koji daju podatke o #irnom stanju u magacinima ) i +> i koji su tako3e ure3eni po si)rama artikala. 1oristiti dinamiku alokaciju ni ova.
Jin;-+deKstdio.AL

263

Predrag S. Stanimirovi

Osnove programiranja

Jin;-+deKstd-iD.AL void main&' 9 int Esa,E@a,EsD,E@D, Es<,E@< int i,ia,iD,i<,na,nD,n< =rint,&3Bro> vrsta roDe + maga;in+ A_ 3' s;an,&3Rd3,Una' sa=&int E'ma--o;&naEsi<eo,&int'' @a=&int E'ma--o;&naEsi<eo,&int'' ,or&i=0 iKna i""' 9 =rint,&3;i,ra i @o-i;ina <a Rd. arti@a-_ 3,i' s;an,&3RdRd3, UsaHiI, U@aHiI' B =rint,&3Bro> vrsta roDe + maga;in+ B_ 3' s;an,&3Rd3,UnD' sD=&int E'ma--o;&nDEsi<eo,&int'' @D=&int E'ma--o;&nDEsi<eo,&int'' ,or&i=0 iKnD i""' 9 =rint,&3;i,ra i @o-i;ina <a Rd. arti@a-_ 3,i' s;an,&3RdRd3, UsDHiI, U@DHiI' B s<=&int E'ma--o;&&na"nD'Esi<eo,&int'' @<=&int E'ma--o;&&na"nD'Esi<eo,&int'' ia=iD=i<=0 OAi-e &iaKna UU iDKnD' i,&saHiaIKsDHiDI' 9 s<Hi<I=saHiaI @<Hi<""I=@aHia""I B e-se i,&saHiaILsDHiDI' 9 s<Hi<I=sDHiDI @<Hi<""I=@DHiD""I B e-se 66 saHiaI=sDHiDI 9 s<Hi<I=saHiaI @<Hi<""I=@aHia""I"@DHiD""I B OAi-e&iaKna' 9 s<Hi<I=saHiaI @<Hi<""I=@aHia""I B OAi-e&iDKnD' 9 s<Hi<I=sDHiDI @<Hi<""I=@DHiD""I B n<=i<#1 s<=&int E'rea--o;&s<,n<Esi<eo,&int'' @<=&int E'rea--o;&@<,n<Esi<eo,&int'' ,or&i=0 iKn< =rint,&3si,ra Rd @o-i;ina RdSn3,s<HiI,@<Hi""I'' ,ree&sa' ,ree&sD' ,ree&@a' ,ree&@D' ,ree&s<' ,ree&@<' B

1. 4.6 Sastaviti na je iku C program a transponovanje matrice celi0 #rojeva. Pola nu matricu a i transponovanu matricu b smestiti u dinamiku onu memorije i deklarisati i0 sa int EEa, EED. Program #i tre#alo da u #eskonanom ciklusu o#ra3uje proi voljan #roj poetni0 matrica. Deskonani ciklus prekinuti kada se a dimen ije ula ne matrice ada vrednost koja je 0.
Jin;-+deKstdio.AL Jin;-+deKstd-iD.AL void main&' 9 int EEa, EED, m,n,i,> OAi-e&1' 9 =rint,&3SnBro> vrsta i @o-ona_ 3' s;an,&3RdRd3, Um,Un' i,&mK=0 WW nK=0'Drea@ a=&int EE'ma--o;&mEsi<eo,&int E'' ,or&i=0 iKm i""' 9 aHiI=&int E'ma--o;&nEsi<eo,&int'' =rint,&3%-ementi R2d. vrste7Sn3,i"1' ,or&>=0 >Kn s;an,&3Rd3,UaHiIH>""I'' B D=&int EE'ma--o;&mEsi<eo,&int E'' ,or&i=0 iKn i""' 9 DHiI=&int E'ma--o;&mEsi<eo,&int'' ,or&>=0 >Km >""'DHiIH>I=aH>IHiI B =rint,&3.rans=onovana matri;a7Sn3' ,or&i=0 iKn i""' 9 ,or&>=0 >Km =rint,&3Rd 3,DHiIH>""I''

264

Predrag S. Stanimirovi =rint,&3Sn3' iKm iKn ,ree&aHi""I'' ,ree&DHi""I'' ,ree&a' ,ree&D'

Osnove programiranja

B B ,or&i=0 ,or&i=0

Primer. 6inamika matrica se predstavlja strukturom koja sadr@i dimen ije i poka iva na elemente matrice. Sastaviti na je iku , paket )unkcija a rad sa dinamikim matricama realni0 #rojeva koji sadr@i )unkcije aF i dodeljivanje memorije matrici dati0 dimen ija> i oslo#a3anje memorije koju au ima matrica> i kopiranje matrice> i itanje matrice preko glavnog ula a> i ispisivanje matrice preko glavnog i la a> i nala@enje transponovane matrice a datu matricu> i nala@enje #ira> ra like i proi voda dve matrice. Sastaviti na je iku , glavni program a proveru ispravnosti rada gornji0 )unkcija.
Re]en-e1

Jin;-+de Kstd-iD.AL Jin;-+de Kstdio.AL tQ=ede, en+m 9M%M, DIMB Yres@a 6E ji,re gre[a@a. E6 tQ=ede, str+;t 9 ,-oat EEa int m, n B Din_mat 6E 1tr+@t+ra matri;e. E6 Din_mat stvori &int m, int n' 6E Dode-a memori>e. E6 void +nisti &Din_mat dm' 6E Os-oDad>an>e memori>e. E6 Din_mat @o=ira> &Din_mat dm' 6E :o=iran>e matri;e. E6 Din_mat ;ita> &int m, int n' 6E 5itan>e matri;e. E6 void =isi &Din_mat dm, ;onst ;Aar E,rm, int max' 6E Is=isivan>e matri;e.E6 Din_mat trans=on &Din_mat dm' 6E .rans=onovana matri;aE6 Din_mat <Dir &Din_mat dm1, Din_mat dm2' 6E 4Dir matri;a. E6 Din_mat ra<-i@a &Din_mat dm1, Din_mat dm2' 6E /a<-i@a matri;a. E6 Din_mat =roi<vod &Din_mat dm1, Din_mat dm2' 6E Proi<vod matri;a. E6 6E dimmat.; # De,ini;i>e =a@eta <a rad sa dinami;@im matri;ama. E6 ;onst ;Aar E=or+@eHI = 6E Por+@e o gre[@ama.E6 9 3]e+s=e-a dode-a memori>e3, 3]e+sag-asene dimen<i>e matri;a3 B stati; void gres@a &Yres@a g' 9 6E Is=isivan>e =or+@e gre[;i. E6 =rint,&3SnEEE Rs V EEESnSa3, =or+@eHgI' exit&g"1' B Din_mat stvori &int m, int n' 9 6E Dode-a memori>e. E6 int i Din_mat dm dm.m = m dm.n = n i,&&dm.a = &,-oat EE'ma--o;&mEsi<eo,&,-oatE''' == ]0LL' gres@a &M%M' ,or&i=0 iKm i""' i,&&dm.aHiI = &,-oat E'ma--o;&nEsi<eo,&,-oat''' == ]0LL' gres@a &M%M' ret+rn dm B void +nisti &Din_mat dm' 9 6E Os-oDad>an>e memori>e. E6 int i ,or &i=0 iKdm.m ,ree&dm.aHi""I'' ,ree &dm.a' B

265

Predrag S. Stanimirovi

Osnove programiranja

Din_mat @o=ira> &Din_mat dm' 9 6E :o=iran>e matri;e. E6 int i, > Din_mat dm2 = stvori &dm.m, dm.n' ,or &i=0 iKdm.m i""' ,or &>=0 >Kdm.n >""' dm2.aHiIH>I = dm.aHiIH>I ret+rn dm2 B Din_mat ;ita>&int m, int n'9 6E 5itan>e matri;e. E6 int i,> Din_mat dm = stvori&m,n' ,or&i=0 iKm i""' ,or&> = 0 >Kn s;an,&3R,3,Udm.aHiIH>""I'' ret+rn dm B void =isi&Din_mat dm, ;onst ;Aar E,rm, int max'9 6E Is=is matri;e. int i,> ,or&i=0 iKdm.m i""' 9 ,or&>=0 >Kdm.n >""' 9 =rint,&,rm,dm.aHiIH>I' =+t;Aar &&>Rmax==max#1 WW >==dm.n#1' _ 2Sn2 7 2 2' B i,&dm.n L max'=+t;Aar &2Sn2' B B Din_mat trans=on&Din_mat dm' 9 6E .rans=onovana matri;aE6 int i, > Din_mat dm2 = stvori&dm.n, dm.m' ,or &i=0 iKdm.m i""' ,or&>=0 >Kdm.n >""' dm2.aH>IHiI ret+rn dm2 B Din_mat <Dir&Din_mat dm1, Din_mat dm2' 9 6E 4Dir matri;a. E6 int i,> Din_mat dm3 i,&dm1.mV=dm2.m WW dm1.n V= dm2.n' gres@a&DIM' dm3 = stvori&dm1.m, dm1.n' ,or&i=0 iKdm3.m i""' ,or&>=0 >Kdm3.n >""' dm3.aHiIH>I=dm1.aHiIH>I " dm2.aHiI H>I ret+rn dm3 B Din_mat ra<-i@a &Din_mat dm1, Din_mat dm2' 9 6E /a<-i@a matri;a.E6 int i,> Din_mat dm3 i,&dm1.mV=dm2.m WW dm1.n V= dm2.n' gres@a &DIM' dm3 = stvori &dm1.m, dm1.n' ,or &i=0 iKdm3.m i""' ,or &>=0 >Kdm3.n >""' dm3.aHiIH>I = dm1.aHiIH>I#dm2.aHiIH>I ret+rn dm3 B Din_mat =roi<vod &Din_mat dm1, Din_mat dm2' 9 6E int i, >, @ Din_mat dm3 i, &dm1.nV=dm2.m' gres@a &DIM' Proi<vod matri;a. E6 E6

266

Predrag S. Stanimirovi dm3 = stvori&dm1.m, dm2.n' ,or&i=0 iKdm3.m i""' ,or&@=0 @Kdm3.n @""' ,or&dm3.aHiIH@I=>=0 >Kdm2.m >""' dm3.aHiIH@I "=dm1.aHiIH>IEdm2.aH>IH@I ret+rn dm3 B int main &' 9 OAi-e &1' 9 Din_mat dm1, dm2, dm3 int m, n =rint, &3n1, m1_ 3' s;an, &3RdRd3, Um, Un' i, &mK=0 WW nK=0' Drea@ =rint,&3Matr-_ 3' dm1 = ;ita>&m,n' =rint, &3n2, m2_ 3' s;an, &3RdRd3, Um, Un' i,&mK=0 WW nK=0' Drea@ =rint, &3Matr2_ 3' dm2 = ;ita>&m, n' i,&dm1.m==dm2.m UU dm1.n==dm2.n' 9 dm3 = <Dir&dm1, dm2' =rint, &34BI/7Sn3' =isi&dm3,3RX.2,3, X' +nisti&dm3' dm3 = ra<-i@a&dm1, dm2' =rint, &3/A4LI:A7Sn3' =isi&dm3, 3RX.2,3, X' +nisti &dm3' B i,&dm1.n == dm2.m' 9 dm3 = =roi<vod&dm1,dm2' =rint,&3P/OI4GOD7Sn3' =isi&dm3, 3RX.2,3, X' +nisti &dm3' B =+t;Aar &2Sn2' +nisti &dm1' +nisti &dm2' B ret+rn 0 B

Osnove programiranja

7.3.2. J$1 !s')0,! (!"$/+ $ %#s'$


Eedan o#lik dinamiki0 struktura podataka jesu jednostruko pove ane liste. Ovakve strukture podataka su organi ovane i skupa vorova koji su pove ani poka ivaima u jednom smeru. Svaki vor je strukturna promenljiva koja ima najmanje dva elementaF jedan a registrovanje in)ormacija> a drugi a sme8taj poka ivaa koji uka uje na sledei element liste. +avisno od prirode in)ormacija koje se uvaju> in)ormacioni deo vora mo@e da sadr@i vei #roj elemenata. Eednostruko pove ane liste se mogu o)ormiti pomou poka ivaa sledeeg o#likaF
tQ=ede, ;Aar .IP tQ=ede, str+;t ;vor 9 .IP in, str+;t ;vor Es-ede;i B L5GO/ L5GO/ E=o;eta@

Poka ivaka promenljiva po#etak uka uje na pocetak liste. Poslednji vor u listi u svom polju slede#i sadr@i vrednost -A**. 6a #i se o)ormila jednostruko pove ana lista> u poetku se inicijali uje na pra nu listu nared#om
=o;eta@=]0LL

6a #i se dinamiki kreirao #ilo koji vor potre#no je da mu se dodeli odgovarajui memorijski prostor i ra om o#lika
novi=&L5GO/ E'ma--o;&si<eo,&L5GO/''

2e je napomenuto da se kast operator $9,=:3R& mo@e i ostaviti u je iku C. Podra umeva se deklaracija o#lika
267

Predrag S. Stanimirovi L5GO/ Enovi

Osnove programiranja

2rednosti elemenata u novom dinamikom o#jektu $voru liste& novi mogu se de)inisati na sledei nainF
novi#Lin,=2A2 novi#Ls-ede;i==o;eta@ 6E t>. ]0LL E6

6a #i poka ivaka promenljiva po#etak uka ivala na poetak liste potre#na je sledea dodela vrednostiF
=o;eta@=novi

Proi voljan #roj novi0 elemenata mo@e se dodavati u listu koristei gore opisani postupak. -a primer> mo@emo pisati
novi=&L5GO/ E'ma--o;&si<eo,&L5GO/'' novi#Lin,=2B2 novi#Ls-ede;i==o;eta@ =o;eta@=novi

Primer. Opisani postupak je kori8en u sledeem programuF


Jin;-+de Kstd-iD.AL Jin;-+de Kstdio.AL tQ=ede, ;Aar .IP tQ=ede, str+;t ;vor 9 .IP in, str+;t ;vor Es-ede;i B L5GO/ void =isi&L5GO/ Ete@+;i' 9 OAi-e&te@+;iV=]0LL' 9 =rint,&3#LR;3,te@+;i#Lin,' =rint,&3Sn3' B

te@+;i=te@+;i#Ls-ede;i

void main&' 9 L5GO/ E=o;eta@, Enovi ;Aar ;A =o;eta@=]0LL =rint,&30nesi sadr<a> -iste7Sn3' OAi-e&&;A=get;Aar&''V=2Sn2' 9 novi=&L5GO/ E'ma--o;&si<eo,&L5GO/'' novi#Lin,=;A novi#Ls-ede;i==o;eta@ =o;eta@=novi B =rint,&31adr<a> -iste7Sn3' =isi&=o;eta@' B

1apomena. A je iku C== mo@e se koristiti tip #vor deklarisan pomou strukture
tQ=ede, str+;t ;vor 9 .IP in, ;vor Es-ede;i B L5GO/

A programu se atiom mo@e koristi i tip #vor umesto tipa 9,=:3.

7.3.3. S'$,!"#
Stek je takva struktura podataka i koje se prvi u ima vor koji je poslednji ugra3en. /o nai da se sa stekom manipuli8e prema *%5O principu $*ast %n 5irst Out&. Svaki vor mora da sadr@i najmanje dva elementaF jedan element a uvanje in)ormacija> i jedan poka iva na sledei vor steka. Odgovarajua struktura je data sledeim deklaracijamaF
tQ=ede, str+;t ;vor 9 .IP in, str+;t ;vor Es-ede;i B 15GO/

268

Predrag S. Stanimirovi 15GO/ EvrA

Osnove programiranja

Poka iva vr& poka uje na vr0 steka> u kome se nala i vor koji je poslednji ugra3en u stek> tj. vor koji se prvi u ima i steka. -ared#om
vrA=]0LL

konstrui8e se pra an stek. 5unkcija kojom se postavlja novi vor u steku $p%s&& je o#lika
void =+sA&;Aar ;A, 15GO/ EE=vrA' 9 15GO/ Enovi novi = &15GO/ E'ma--o;&si<eo,&15GO/'' 6E re<ervise memori>+ E6 novi#Lin, = ;A 6E =ostav->a @ara@ter + =o->+ in, E6 novi#Ls-ede;i = E=vrA 6E =o@a<iva; ;vora >e stari vrA E6 E=vrA=novi 6E vrA ste@a =osta>e novi ;vor E6 B

Sledea slika prika uje postavljanje novog elementa na vr0 steka.

5unkcija kojom se u ima vor $i vr0a& steka $pop& mo@e se napisati na sledei nainF
void =o=&;Aar E;A, 15GO/ EE=vrA' 9 15GO/ E=omo;ni E;A =&E=vrA'#Lin, =omo;ni=E=vrA E=vrA = &E=vrA'#Ls-ede;i ,ree&=omo;ni' B

Princip u imanja elementa sa steka je relativno prost adatak pri kom se mora uraditi sledeeF a& A eti sadr@aj vora koji se nala i na vr0u steka. #& Premestiti da poka iva vr0a steka poka uje na vor koji sledi odma0 i a vora na koji trenutno poka uje poka iva vr0a stekaX c& Bvor steka iji je sadr@aj preu et vi8e ne #i tre#alo da se nala i u steku> odnosno listi> pa tre#a da #ude i #risan.

Primer. -apisati program koji koji koristi )unckije p%s& i pop i manipuli8e stekom u ijim su vorovima sadr@ani karakteri.
Jin;-+de Kstd-iD.AL Jin;-+de Kstdio.AL

269

Predrag S. Stanimirovi tQ=ede, ;Aar .IP tQ=ede, str+;t ;vor 9 .IP in, str+;t ;vor Es-ede;i B 15GO/

Osnove programiranja

void =+sA&;Aar ;A, 15GO/ EE=vrA' 9 15GO/ Enovi novi = &15GO/ E'ma--o;&si<eo,&15GO/'' 6E re<ervise memori>+ E6 novi#Lin,=;A 6E =ostav->a @ara@ter + =o->+ in, E6 novi#Ls-ede;i=E=vrA 6E =o@a<iva; ;vora >e stari vrAE6 E=vrA=novi 6E vrA ste@a =osta>e novi ;vor E6 B void =o=&;Aar E;A, 15GO/ EE=vrA' 9 15GO/ E=omo;ni E;A=&E=vrA'#Lin, =omo;ni=E=vrA E=vrA=&E=vrA'#Ls-ede;i ,ree&=omo;ni' B void =isi&15GO/ EE=vrA' 9 ;Aar ;A OAi-e&E=vrAV=]0LL' 9 =o=&U;A,=vrA' =+t;Aar&;A' B B void main&' 9 15GO/ EvrA ;Aar ;A vrA=]0LL =rint,&3Sn0nesi sadr<a> ste@aSn3' OAi-e&&;A=get;Aar&''V=2Sn2' =+sA&;A, UvrA' =rint,&31adr<a> ste@a >e7Sn3' =isi&UvrA' =rint,&3Sn3' B

Primer. 6e)inisana je struktura


str+;t stog 9;Aar Eg-ava str+;t stog Ere= B

i )unkcija a )ormiranje novog vora u steku.


Jde,ine novi&x' x=&str+;t stog E' ma--o;&si<eo,&str+;t stog''

Aitavati stringove sve dok se ne unese string koji poinje nakom qfr. Od uitani0 stringova )ormirati stek iji vorovi odgovaraju de)inisanoj strukturi. %spisati sadr@aj steka kao i njegovu du@inu.
6E 1te@2.;==7 1.OYOGI sa stringovima Jin;-+de Kstdio.AL Jin;-+de Kstd-iD.AL Jin;-+de Kstring.AL str+;t stog 9 ;Aar Eg-ava str+;t stog Ere= B Jde,ine novi&x' x=&str+;t stog E' ma--o;&si<eo,&str+;t stog'' E6

void +=is&str+;t stog EE=' void is=is&str+;t stog E=' int d+<&str+;t stog E=' void main&' 9 str+;t stog Ea novi&a' +=is&Ua'

270

Predrag S. Stanimirovi =rint,&3SnSn%GO I1PI1A 7Sn3' is=is&a' =rint,&3D+<ina ste@a >e RdSn3,d+<&a'' B

Osnove programiranja

void +=is&str+;t stog EE=' 9 ;Aar OH!0I str+;t stog Ere<,E=riv re<=]0LL =rint,&3Sn Po <e->i da> ;-anove,<a =re@id @+;ati <na@ k 7Sn3' gets&O' OAi-e&OH0IV=2k2' 9novi&=riv' =riv#Lg-ava=&;Aar E'ma--o;&si<eo,&O'' str;=Q&=riv#Lg-ava,O' =riv#Lre==re< re<==riv gets&O' B E==re< B void is=is&str+;t stog E=' 9 i, &===]0LL' 9=rint,&3P / A 4 A ] 3' ret+rn B OAi-e&=V=]0LL' 9=rint,&3RsSn3,=#Lg-ava' ===#Lre= BB int d+<&str+;t stog E=' 9 int Dr=0 i, &===]0LL' ret+rn&0' OAi-e&=V=]0LL'9 ""Dr ===#Lre= B ret+rn&Dr' B

Primer. % graditi strukturu steka.


Jin;-+de Kstdio.AL Jin;-+de Kstd-iD.AL str+;t stog 9 int g-ava str+;t stog Ere= B Jde,ine novi&x' x=&str+;t stog E'ma--o;&si<eo,&str+;t stog'' void +=is&str+;t stog EE=' void is=is&str+;t stog E=' int d+<&str+;t stog E=' void main&' 9 str+;t stog Ea,ED novi&a' +=is&Ua' =rint,&3Sn %GO I1PI1A 7Sn3' is=is&a' =rint,&3D+<ina >o> >e RdSn3,d+<&a'' novi&D' +=is&UD' =rint,&3DA 3' is=is&D' B void +=is&str+;t stog EE=' 9 int x str+;t stog Ere<,E=riv re<=]0LL =rint,&3Sn Po <e->i da> ;-anove7Sn3' OAi-e&&s;an,&3Rd3,Ux''==1' 9 novi&=riv' =riv#Lg-ava=x =riv#Lre==re< re<==riv B E==re< =rint,&3:ra>Sn3' B void is=is&str+;t stog E=' 9 i, &===]0LL' 9=rint,&3P / A 4 A ] 3' ret+rn B OAi-e&=V=]0LL' 9 =rint,&3%GO RdSn3,=#Lg-ava' B int d+<&str+;t stog E='

===#Lre=

271

Predrag S. Stanimirovi 9 int Dr=0 i, &===]0LL' ret+rn&0' OAi-e&=V=]0LL'9 ""Dr ===#Lre= B ret+rn&Dr' B

Osnove programiranja

Odgovarajua rekur ivna )unkcija du je de)inisana na sledei nainF


int d+<&str+;t stog E=' 9 int Dr=0 i,&===]0LL' ret+rn&0' e-se ret+rn&1"d+<&=#Lre='' B

Primeri.
Jin;-+de Kstdio.AL Jin;-+de Kstd-iD.AL str+;t stog 9int g-ava str+;t stog Ere= B Jde,ine novi&x' x=&str+;t stog E'ma--o;&si<eo,&str+;t stog'' void +=is&str+;t stog EE=' void is=is&str+;t stog E=' int d+<&str+;t stog E=' str+;t stog Eo@ret&str+;t stog E=' str+;t stog E doda>&int x,str+;t stog E=' void main&' 9 str+;t stog Ea novi&a' +=is&Ua' =rint,&3SnSn%GO I1PI1A 7Sn3' is=is&a' =rint,&3D+<ina >o> >e RdSn3,d+<&a'' a=o@ret&a' is=is&a' B void +=is&str+;t stog EE=' 9 int x str+;t stog Ere<,E=riv re<=]0LL =rint,&3Sn 4a =re@id dati ne#Dro> 7Sn3' OAi-e&&s;an,&3Rd3,Ux''==1' 9 novi&=riv' =riv#Lg-ava=x =riv#Lre==re< E==re< B

re<==riv

void is=is&str+;t stog E=' 9 OAi-e&=V=]0LL' 9 =rint,&3RdSn3,=#Lg-ava' ===#Lre= B B int d+<&str+;t stog E=' 9 int Dr=0 OAi-e&=V=]0LL'9 ""Dr ===#Lre= ret+rn&Dr' B

str+;t stog E doda>&int x, str+;t stog E=' 9 str+;t stog E re< novi&re<' re<#Lg-ava=x re<#Lre=== ret+rn&re<' B str+;t stog Eo@ret&str+;t stog E=' 9 str+;t stog Ere<,E=riv =riv=]0LL OAi-e&=V=]0LL'

272

Predrag S. Stanimirovi 9 novi&re<' ret+rn&re<' B re<=doda>&=#Lg-ava,=riv' ===#Lre=

Osnove programiranja =riv=re< B

2. 6ata je struktura
str+;t stog 9 int g-ava str+;t stog Ere=

B -apisati )unkcijeF
void +=is&str+;t stog EE='

koja u strukturu steka pod na ivom stog postavlja cele #rojeve> sve dok se ne uita vrednost koja nije ceo #roj.
void is=is&str+;t stog E='

koja ispisuje sadr@aj steka.


int d+<&str+;t stog E='

koja ispisuje sadr@aj steka.


str+;t stog Eo@ret&str+;t stog E='

koja invertuje sadr@aj steka.


str+;t stog E doda>&int x,str+;t stog E='

koja u stek p dodaje ceo #roj !.


;Aar e-em&int x,str+;t stog E='

koja vraa vrednost 1 ako se ! nala i u steku p> inae vraa re ultat 0.
;Aar >e_s@+=&str+;t stog E='

koja vraa vrednost 1 ako sadr@aji vorova u strukturi p> ine skup $nema ponavljanja isti0 vrednosti&> inae vraa re ultat 0.
str+;t stog Eos@+=&str+;t stog E='

koja na osnovu sadr@aja vorova u steku p gradi novi stek u ijim vorovima nema ponavljanja isti0 vrednosti. -apisati test program.
Jin;-+de Kstdio.AL Jin;-+de Kstd-iD.AL str+;t stog 9 int g-ava str+;t stog Ere= B Jde,ine novi&x' x=&str+;t stog E' ma--o;&si<eo,&str+;t stog'' void +=is&str+;t stog EE=' void is=is&str+;t stog E=' int d+<&str+;t stog E=' str+;t stog Eo@ret&str+;t stog E=' str+;t stog E doda>&int x,str+;t stog E=' ;Aar e-em&int x,str+;t stog E=' ;Aar >e_s@+=&str+;t stog E=' str+;t stog Eos@+=&str+;t stog E=' void main&' 9 str+;t stog Ea novi&a' +=is&Ua' =rint,&3SnSn%GO I1PI1A 7Sn3' is=is&a' =rint,&3D+<ina >o> >e RdSn3,d+<&a'' a=o@ret&a' is=is&a' =rint,&311 >e e-em 7 RdSn3,e-em&11,a'' =rint,&31@+= >e RdSn3,>e_s@+=&a'' a=os@+=&a' =rint,&3]>egov 2os@+=2 >e Sn 3' is=is&a' B void +=is&str+;t stog EE=' 273

Predrag S. Stanimirovi

Osnove programiranja

9 int x str+;t stog Ere<=]0LL,E=riv =rint,&3Sn Po <e->i da> ;-anove,<a =re@id dati ne Dro>7Sn3' OAi-e&&s;an,&3Rd3,Ux''==1' 9 novi&=riv' =riv#Lg-ava=x =riv#Lre==re< re<==riv B E==re< B void is=is&str+;t stog E=' 9 i, &===]0LL' 9=rint,&3P / A 4 A ] Sn3' ret+rn B OAi-e&=V=]0LL' 9=rint,&3RdSn3,=#Lg-ava' ===#Lre= B B int d+<&str+;t stog E=' 9 int Dr=0 OAi-e&=V=]0LL'9 ""Dr ===#Lre= B ret+rn&Dr' B str+;t stog Edoda>&int x,str+;t stog E=' 9 str+;t stog E re< novi&re<' re<#Lg-ava=x re<#Lre=== ret+rn&re<' B str+;t stog Eo@ret&str+;t stog E=' 9 str+;t stog Ere<,E=riv i,&===]0LL' ret+rn&]0LL' =riv=]0LL OAi-e&=V=]0LL' 9 novi&re<' re<=doda>&=#Lg-ava,=riv' ret+rn&re<' B ;Aar e-em&int x,str+;t stog E=' 9 i, &===]0LL' ret+rn&0' OAi-e&=V=]0LL' 9 i, &x===#Lg-ava' ret+rn&1' ===#Lre= B ret+rn&0' B ;Aar >e_s@+=&str+;t stog E=' 9 i,&===]0LL' ret+rn&1' e-se i, &e-em&=#Lg-ava,=#Lre='' ret+rn&0' e-se ret+rn&>e_s@+=&=#Lre='' B str+;t stog Eos@+=&str+;t stog E=' 9 i, &===]0LL' ret+rn&]0LL' e-se i,&e-em&=#Lg-ava,=#Lre='' ret+rn&os@+=&=#Lre='' e-se ret+rn&doda>&=#Lg-ava,os@+=&=#Lre=''' B

===#Lre= =riv=re<

7.3.4. U)$<$ $ (!"$/+ $ %#s'$


Ponekad je potre#no da se vorovi liste urede u al)a#etskom poretku na osnovu sadr@aja u in)ormacionim vorovima. Eedan od naina a re8enje ovog pro#lema jeste upotre#a )unkcije kojom se sortiraju vorovi strukture pre ispisa nji0ovog sadr@aja. Dolji nain a do#ijanje generisanje sortirane liste je da se svaki vor postavi na odgovarajue mesto u toku )ormiranja liste. +a prvi vor postoji samo jedna mogunost - mo@e se postaviti samo na poetak liste. Svaki od preostali0 vorova se postavlja na osnovu pore3enja sadr@aja in)ormacuioni0 delova u vorovima. Pri postavljanju vora u

274

Predrag S. Stanimirovi

Osnove programiranja

listu neop0odno je samo da se promeni sadr@aj elemenata a pove ivanje sa susednim vorovima. Ametanje vora na odgovarajue mesto mo@e se reali ovati rekur ivnom )unkcijom umetni. Primer. -apisati program kojim se preko tastature unosi ni nakova. Anos nakova se prekida tasterom Knter. Aitani nakovi se ugra3uju u sortiranu listu> i na taj nain sortiraju u neopadajuem poretku. Prika ati elemente sortirane liste ra dvojene nakovima #L.
Jin;-+deKstd-iD.AL Jin;-+deKstdio.AL tQ=ede, ;Aar .IP tQ=ede, str+;t ;vor 9 .IP in, str+;t ;vor Es-ede;i B L5GO/ void =isi&L5GO/ Ete@+;i' 9 i,&te@+;iV=]0LL' 9 =rint,&3#LR;3,te@+;i#Lin,' =rint,&3Sn3' B

=isi&te@+;i#Ls-ede;i'

void +metni&L5GO/ Enovi, L5GO/ EE-ista' 6E /e<+-tat >e =o@a<iva; na =o;eta@ -iste E6 6E t>. =o@a<iva; na L5GO/ E6 9 i,&E-ista==]0LL' 9 novi#Ls-ede;i=]0LL E-ista=novi B e-se i,&novi#Lin,K=&E-ista'#Lin,' 9 novi#Ls-ede;i=E-ista E-ista=novi B e-se +metni&novi, U&E-ista'#Ls-ede;i' B void Drisi&L5GO/ EE-ista' 9 i,&E-istaV=]0LL' 9 Drisi&U&E-ista'#Ls-ede;i' ,ree&E-ista' B B void main&' 9 L5GO/ E=o;eta@, Enovi ;Aar ; =o;eta@=]0LL =rint,&3Sn0nesi ni< <na@ova @o>i oDra<+>+ -ist+, =a %].%/.Sn3' OAi-e&&;=get;Aar&''V=2Sn2' 9 novi=&L5GO/ E'ma--o;&si<eo,&L5GO/'' novi#Lin, =; +metni&novi, U=o;eta@' B =rint,&31adr<a> -iste7Sn3' =isi&=o;eta@' Drisi&U=o;eta@' B

>.3.5. V+I #.+ s"!.s'"+ (!,+/#"+5+


Ponekad se promenom vrenosti jednog pointera posredno menja vrednost drugog pointera.

Primer.

Jin;-+de Kstdio.AL Jin;-+de Kstd-iD.AL str+;t stog 9 int g-ava str+;t stog Ere= B Jde,ine novi&x' x=&str+;t stog E'ma--o;&si<eo,&str+;t stog''

275

Predrag S. Stanimirovi

Osnove programiranja

void main&' 9 str+;t stog Ea,ED,E; novi&a' a#Lg-ava=! a#Lre==]0LL novi&D' D#Lg-ava=) D#Lre==]0LL novi&;' ;#Lg-ava=123 ;#Lre==]0LL =rint,&3Y-ave s+ a Rd D Rd ; Rd Sn3, a#Lg-ava,D#Lg-ava,;#Lg-ava' a#Lre==D D#Lre==; =rint,&3Sn 1ADA ^% a POG%4A]O 1A D, A D 1A ;Sn3' =rint,&3Y-ava od a >e RdSn3,a#Lg-ava' =rint,&3Y-ava od a#ovog re=a >e RdSn3, a#Lre=#Lg-ava' =rint,&3Pos-edn>a g-ava od a >e Rd Sn3, a#Lre=#Lre=#Lg-ava' B

-eka su P i p pointeri> i neka je postavljeno I S p. % ra o#lika


` .rep3,neki7pointer.

menja p> dok i ra o#lika


` 3 ` .rep

ne menja p. Ova oso#ina je ilustrovana sledeim primerom. Primer. %lustracija neki0 va@ni0 svojstava pointerske jednakosti.
Jin;-+de Kstd-iD.AL Jin;-+de Kstd-iD.AL str+;t stog9 int g-ava str+;t stog Ere= B Jde,ine novi&x' x=&stm;tstog E' ma--o;&si<eo,&str+;t stog'' void is=is&str+;t stog E=' main&' 9 str+;t stog Ea,ED,E;,Ed,Ee novi&a' novi&D' novi&;' novi&d' novi&e' a#Lg-ava=111 a#Lre==]0LL D#Lg-ava=222 D#Lre==a ;#Lg-ava=333 ;#Lre==D e#Lg-ava=))) e#Lre==]0LL =rint,&3=rvo ;=Sn3' is=is &;' d=; d#Lre==a =rint,&3dr+go ;=Sn3' is=is&;' d=d#Lre= =rint,&3tre;e ;= Sn3' is=is&;' d#Lre==e =rint,&3;etvrto ;=Sn3' is=isi&;' 6E 333 111 ))) E6 B void is=isi&st+nt stog =' 9 i,&==]0LL' ret+rn OAi-e&=V=]0LL' 9=rint,&3Rd 3,=#Lg-ava'

===#Lre=

B B

Primer. Sastaviti na je iku C paket )unkcija a rad sa jednostruko pove anim listama celi0 #rojeva koji sadr@i )unkcije aF i odre3ivanje #roja elemenata liste> i ispisivanje liste preko glavnog i la a> i dodavanje #roja na poetak liste> i dodavanje #roja na kraj liste> i itanje liste preko glavnog ula a dodajui #rojeve na poetak liste> i itanje liste preko glavnog i la a dodajui #rojeve na kraj liste> i umetanje #roja u ure3enu listu> i #risanje svi0 elemenata liste> i i i ostavljanje i liste svako pojavljivanje datog #roja.
276

Predrag S. Stanimirovi

Osnove programiranja

Sastaviti na je iku C glavni program a proveru ispravnosti rada gornji0 )unkcija.


Jin;-+de Kstdio.AL Jin;-+de Kstd-iD.AL tQ=ede, str+;t e-em 9 int Dro> str+;t e-em Es-ed

B %-em

6E %-ement -iste E6

int d+< &%-em E-st' 6E Bro> e-emenata -iste. E6 void =isi &%-em E-st' 6E Is=isivan>e -iste. E6 %-em Ena_=o;eta@ &%-em E-st, int D' 6E Dodavan>e na =o;eta@. E6 %-em Ena_@ra> &%-em E-st, int D' 6E Dodavan>e na @ra>. E6 %-em E;ita>- &int n' 6E ;itan>e -iste stav->a>+;i Dro>eve na =o;eta@. E6 %-em E;ita>2 &int n' 6E ;itan>e -iste stav->a>+;i Dro>eve na @ra>. E6 %-em E+metni &%-em E-st, int D' 6E 0metan>e + +red>en+ -ist+. E6 void Drisi &%-em E-st' 6E Brisan>e sviA e-emenata -iste. E6 %-em Ei<ostavi &%-em E-st, int D' 6E I<ostav->an>e sva@og =o>av->ivan>aE6 int d+< &%-em E-st' 6E Bro> e-emenata -iste. E6 9 int n = 0 OAi-e&-st' 9n"" -st=-st#Ls-ed B ret+rn n B void =isi &%-em E-st' 6E Is=isivan>e -iste.E6 9 OAi-e &-st' 9 =rint,&3Rd 3, -st#LDro>' -st = -st#Ls-ed B

%-em Ena_=o;eta@ &%-em E-st, int D' 6E Dodavan>e na =o;eta@. E6 9 %-em Enovi = &%-emE'ma--o;&si<eo,&%-em' ' novi#LDro> = D novi#Ls-ed = -st ret+rn novi B %-em Ena_@ra> &%-em E-st, int D' 6E Dodavan>e na @ra>. E6 9 %-em Enovi = &%-emE'ma--o;&si<eo,&%-em'' novi#LDro> = D novi#Ls-ed = ]0LL i,&V-st' ret+rn novi e-se 9 %-em Ete@ = -st OAi-e&te@#Ls-ed' te@ = te@#Ls-ed te@#Ls-ed = novi ret+rn -st B B %-em E;ita>- &int n' 6E 5itan>e -iste stav->a>+;i Dro>eve na =o;eta@. E6 9 %-em E=rvi = ]0LL int i ,or &i=0 iKn i""' 9 %-em Enovi = &%-emE'ma--o;&si<eo, &%-em' ' s;an, &3Rd3, Unovi#LDro>' novi#Ls-ed = =rvi =rvi = novi B ret+rn =rvi B %-em E;ita>2 &int n' 6E 5itan>e -iste stav->a>+;i Dro>eve na @ra>. E6 9 %-em E=rvi = ]0LL, E=os- = ]0LL int i ,or &i=0 iKn i""' 9 %-em Enovi = &%-emE' ma--o; &si<eo, &%-em' ' s;an, &3Rd3, Unovi#LDro>' novi#Ls-ed = ]0LL i, &V=rvi' 9 =rvi = novi =os-=novi B e-se 9=os-#Ls-ed = novi =os- = novi B B

277

Predrag S. Stanimirovi ret+rn =rvi

Osnove programiranja

%-em E+metni &%-em E-st, int D' 6E0metan>e + +red>en+ -ist+. 9 %-em Ete@ = -st, E=ret=]0LL, Enovi OAi-e &te@ UU te@#LDro> K D' 9 =ret = te@ te@ = te@#Ls-ed B novi = &%-emE'ma--o;&si<eo,&%-em'' novi#LDro> = D novi#Ls-ed = te@ i, &V=ret' -st = novi e-se =ret#Ls-ed = novi ret+rn -st B void Drisi &%-em E-st' 9 OAi-e &-st' 9 %-em Estari = -st -st = -st#Ls-ed ,ree&stari' B B

E6

%-em Ei<ostavi &%-em E-st, int D' 6E I<ostav->an>e sva@og =o>av->ivan>a .E6 9 %-em Ete@ = -st, E=ret = ]0LL OAi-e &te@' i, &te@#LDro> V= D' 9=ret = te@ te@ = te@#Ls-ed B e-se 9 %-em Estari = te@ te@ = te@#Ls-ed i, &V=ret' -st = te@ e-se =ret#Ls-ed = te@ ,ree &stari' B ret+rn -st B void main&' 9 %-em E-st = ]0LL int @ra> = 0, i<Dor, Dro>, n =rint, &3Sn-. Dodavan>e Dro>a na =o;eta@ -isteSn3 32. Dodavan>e Dro>a na @ra> -isteSn3 33. 0metan>e Dro>a + +red>en+ -ist+Sn3 3$. I<ostav->an>e Dro>a i< -isteSn3 3!. Brisan>e sviA e-emenata -isteSn3 3(. 5itan>e +< oDrtan>e redos-eda Dro>evaSn3 3). 5itan>e +< ;+van>e redos-eda Dro>evaSn3 3X. Odred>ivan>e d+<ine -isteSn3 38. Is=isivan>e -isteSn3 30. 4avrseta@ radaSnSn3 ' OAi-e &V@ra>' 9 =rint, &3Gas i<Dor_ 3 ' s;an, &3Rd3, Ui<Dor' sOit;A &i<Dor' 9 ;ase 17 ;ase 27 ;ase 37 ;ase $7 =rint, &3Bro>_ 3' s;an, &3Rd3, UDro>' sOit;A &i<Dor' 9 ;ase 17 6E Dodavan>e Dro>a na =o;eta@ -iste7 E6 -st = na_=o;eta@ &-st, Dro>' Drea@ ;ase 27 6E Dodavan>e Dro>a na @ra> -iste7 E6 -st = na_@ra>&-st, Dro>' Drea@ ;ase 37 6E 0metan>e Dro>a2+ +red>en+ -ist+7 E6 -st = +metni&-st, Dro>' Drea@ ;ase $7 6E I<ostav->an>e Dro>a i< -iste7 E6 -st = i<ostavi&-st, Dro>' Drea@ B Drea@ ;ase !7 6E Brisan>e sviA e-emenata -iste7 E6 Drisi&-st' -st = ]0LL Drea@

278

Predrag S. Stanimirovi

Osnove programiranja

B /est primerF

;ase (7 ;ase )7 6E 5itan>e -iste7 E6 =rint, &3D+<ina_ 3' s;an, &3Rd3,Un' =rint, &3%-ementi_ 3' Drisi&-st' sOit;A &i<Dor' 9 ;ase (7 6E +< oDrtan>e redos-eda Dro>eva E6 -st = ;ita>-&n' Drea@ ;ase )7 6E +< ;+van>e redos-eda Dro>eva7 E6 -st = ;ita>2&n' Drea@ B Drea@ ;ase X7 6E Odred>ivan>e d+<ine -iste7 E6 =rint,&3D+<ina= RdSn3, d+<&-st'' Drea@ ;ase 87 6E Is=isivan>e -iste7 E6 =rint,&3Lista= 3' =isi&-st' =+t;Aar &2Sn2' Drea@ ;ase 07 6E 4avrseta@ rada7 E6 @ra> = 1 Drea@ de,a+-t7 6E Pogre[an i<Dor7 E6 =rint,&3EEE ]eo<vo->eni i<DorV EEESaSn3' Drea@ B

-. Dodavan>e Dro>a na =o;eta@ -iste 2. Dodavan>e Dro>a na @ra> -iste 3. 0metan>e Dro>a + +red>en+ -ist+ $. I<ostav->an>e Dro>a i< -iste !. Brisan>e sviA e-emenata -iste (. 5itan>e +< oDrtan>e redos-eda Dro>eva ). 5itan>e +< ;+van>e redos-eda Dro>eva X. Odred>ivan>e d+<ine -iste 8. Is=isivan>e -iste 0. 4avrseta@ rada Gas i<Dor_ 1 Bro>_ 2 Gas i<Dor_ 2 Bro>_ $ Gas i<Dor_ 8 Lista = 2 $ Gas i<Dor_ ) D+<ina_ 3 %-ementi_ 0 3 ) Gas i<Dor_ 8 Lista= 0 3 ) Gas i<Dor_

7.3.5. ;# +) ! s'+3%!
A #inarnom sta#lu svaki vor sadr@i dva poka ivaa. Poetni vor #inarnog sta#la se na iva koren. Eedan poka iva de)ini8e levo podsta#lo> dok drugi poka iva de)ini8e desno podsta#lo. Ovakva struktura omoguava e)ikasno lociranje> #risanje i umetanje vorova. -ajjednostavnija #inarna sta#la se mogu repre entovati sledeom strukturomF
tQ=ede, ;Aar .IP tQ=ede, str+;t ;vor 9 .IP in, str+;t ;vor E-evi str+;t ;vor Edesni B B5GO/ B5GO/ E@oren

Poka iva levi poka uje na levo podsta#loX analogno> poka iva desni poka uje na desno podsta#lo. 1raj #inarnog sta#la je vor ije je i levo i desno podsta#lo jednako n%ll. Dinarno sta#lo se

279

Predrag S. Stanimirovi

Osnove programiranja

mo@e posmatrati kao rekur ivna struktura podataka> ato 8to njegov koren poka uje na dve analogne strukture> koje se na ivaju levo i desno podsta#lo. Dinarna sta#la se mogu koristiti a konstrukciju ure3eni0 struktura podataka. Eedno od mogui0 ure3enja je opisano u sledeem. Prvi element takve strukture se postavlja u koren sta#la. Svaki sledei element se poredi sa korenom. Akoliko taj element pret0odi korenu> postavlja se u levo podsta#lo> a inae u desno podsta#lo. /o nai da vorovi levog podsta#la pret0ode korenu> a svi vorovi desnog podsta#la slede i a korena ili su mu jednaki. Primer. Hko vor sta#la osim in)ormacionog polja sadr@i i polje u kome se registruje #roj pojavljivanja njegove vrednostiF
tQ=ede, str+;t staD-o 9 ;Aar <na@ int Dr str+;t staD-o E-evo str+;t staD-o Edesno B 5GO/

-apisati proceduru kojom se uitani nak u#acuje u ure3eno #inarno sta#lo. -apisati program a )ormiranje #inarnog sta#la i ispis pri sledeem o#ilaskuF levo podsta#lo> koren> desno podsta#lo. A #inarno sta#lo ugraditi sve karaktere do naka Z.Z
Jin;-+deKstd-iD.AL Jin;-+deKstdio.AL tQ=ede, str+;t staD-o 9 ;Aar <na@ int Dr str+;t staD-o E-evo str+;t staD-o Edesno B 5GO/ void +redi &5GO/ Enovi, 5GO/ EE=o@@oren' void is=isi &5GO/ E=o@' void main&' 9 5GO/ E@oren, Enovi ;Aar ; @oren=]0LL OAi-e &&;=get;Aar&''V=2.2' 9 novi=&5GO/E'ma--o;&si<eo,&5GO/'' novi#L<na@=; +redi&novi,U@oren' B is=isi&@oren' B void +redi& 5GO/ Enovi, 5GO/ EE=o@@oren' 9 i,&E=o@@oren==]0LL' 9 E=o@@oren=novi &E=o@@oren'#LDr=1 novi#L-evo=novi#Ldesno=]0LL B e-se i,&novi#L<na@==&E=o@@oren'#L<na@' &E=o@@oren'#LDr"" e-se i,&novi#L<na@K&E=o@@oren'#L<na@' 9 +redi&novi, U&E=o@@oren'#L-evo' B e-se 9 +redi&novi, U&E=o@@oren'#Ldesno' B B void is=isi &5GO/ E=o@' 9 i,&=o@V=]0LL' 9 is=isi&=o@#L-evo' =rint,&3R(; RdSn3, =o@#L<na@,=o@#LDr' is=isi&=o@#Ldesno' B B

280

Predrag S. Stanimirovi

Osnove programiranja

7.4. P!# '$)# + 40 ,6#.$ 0 8


A je iku C mogu se de)inisati pointeri na )unkcije> kojima se mogu dodeljivati vrednosti i koji se mogu smestiti u strukture> preneti u )unkcije ili vratiti kao vrednosti od strane )unkcija. Primer. Aoimo sledee deklaracijeF
int f)*2 int Gf)*2 int )Gpf*)*2 intG )Gpf*)*2

% % % %

ra ra ra ra

int f$& deklari8e )unkciju koja vraa vrednost tipa int. int Kf$& deklari8e )unkciju f koja vraa pointer na vrednost tipa int. om int $Kpf&$& deklari8e pf kao uka atelj na )unkciju koja vraa vrednost tipa int. int K$Kpf&$& de)ini8e uka atelj pf kao uka atelj na )unkciju koja vraa pointer na int.

Primer. Eedna )unkcija se prenosi u drugu )unkciju kao argument pomou pointera.
Jin;-+deKstdio.AL ,-oat aDs&,-oat x' 9 ret+rn&&xK0' _ #x 7 x' ,-oat ,+n&,-oat x' 9 ret+rn&1.6&xEx"1.'' B B

,-oat @oren&,-oat &E=,'&,-oat', ,-oat arg' 9 ,-oat T=1.0, e=.001, x x=&E=,'&arg' OAi-e&aDs&TET#x'L=e' T=&x6T"T'62 ret+rn&T' B void main&' 9stati; ,-oat xHI=91.1,2.2,3.3,$.$B int i ,or&i=0 iK$ ""i' =rint,&3:vadratni @oren ,+n&R.3,'=R.3, >e R.3,Sn3, xHiI, ,+n&xHiI', @oren&,+n,xHiI'' B

Primer. 1onstruisati )unkciju /$&& S R$!$k& =&.s$k&& a adatu )unkciju R$!&> adati vektor !k S !$k&> adati pravac s S s$k& i parametar koraka &. 1onstrukcija ovakve )unkcije predstavlja po nat pro#lem optimization along a line.
Jin;-+deKstdio.AL ,-oat ,+n1&,-oat Ex' 9 int i ,-oat ,=0.0 ,or&i=0 iK3 i""',"=&xHiI#1.0'E&xHiI#1.0' ret+rn&,' B ,-oat LineF+n&,-oat&E,+n'&,-oat E',,-oat Ex@,,-oat Es,int n,,-oat A' 9 int > ,-oat xtH!0I,, ,or&>=0 >Kn >""'xtH>I=x@H>I"AEsH>I ,=&E,+n'&xt' ret+rn&,' B void main&' 9 ,-oat r,A, xH!0I, sH!0I int i,n s;an,&3Rd3, Un' ,or&i=0 iKn i""'s;an,&3R,3,UxHiI'

281

Predrag S. Stanimirovi ,or&i=0 iKn i""'s;an,&3R,3,UsHiI' r=LineF+n&,+n1,x,s,n,A' =rint,&3R,Sn3, r' s;an,&3R,3, UA'

Osnove programiranja

Primer. % raunati 41$!="&=42$2!-"&.


Jin;-+deKstdio.AL do+D-e ,+n1&do+D-e x, do+D-e Q' 9 ret+rn&x"Q' B do+D-e ,+n2&do+D-e x, do+D-e Q' 9 ret+rn&2Ex#Q' B do+D-e `1+m&do+D-e&E,+n1'&do+D-e, do+D-e',do+D-e&E,+n2'&do+D-e, do+D-e', do+D-e O1,do+D-e O2, do+D-e x, do+D-e Q' 9 do+D-e , ,=O1E&E,+n1'&x,Q'"O2E&E,+n2'&x,Q' ret+rn&,' B void main&' 9 do+D-e x,Q,r,O1,O2 s;an,&3R-,R-,R-,R-,3,UO1,UO2, Ux,UQ' r=`1+m&,+n1,,+n2,O1,O2,x,Q' =rint,&3R-,Sn3, r' B

L#'$)+'0)+
V1W V2W V!W V"W V,W V'W V7W V4W
E.E. 6ujmovi> Grogramski 'ezi#i i metode programiran'a> Hkademska misao> Deograd> 200!. ;. Stankovi> Grogramski 'ezi#i> Klektronski )akultet u -i8u> KdicijaF osnovni ud@#enici> 2000. 6.H. 9att> Grogramming lang%age design #on#ept> Eo0n 9ile< a Sons> *td> 200". ;. Ba#arkapa> 3a%narstvo i informatika> 1rug> Deograd> 200,. ;ike 7rant> C0ristian Skalka> Scott Smit0> Grogramming 9ang%ages> 2ersion 1.01> 0ttpFGG:::.cs.j0u.eduGpl#ook> 200!. *. 1raus> Grogramski 'ezik ,EE sa reAenim zada#ima> Hkademska ;isao> Deograd> 200". 2. 2ujii> 0vod % , 'ezik* Aniver itet u Deogradu> %nstitut a nuklearne nauke tDoris 1idriu> 2ina. 6.H. 9att> 9illiam 5indla<> Programming language design concept> Eo0n 9ile< a Sons *td.> 200".

282

You might also like