Professional Documents
Culture Documents
Osnove Programiranja
Osnove Programiranja
Stanimirovi
Osnove programiranja
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
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
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!'
Predrag S. Stanimirovi
Osnove programiranja
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.
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
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.
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
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.
3.0
#0.31$
".31$%#2
Predrag S. Stanimirovi
Osnove programiranja
$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%.
$Pascal> Hda& $5O(/(H-& $Pascal> Hda> C& $Pascal> C& $CODO*& $;H/LK;H/%CH& $;H/LK;H/%CH&
#$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-
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.
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'
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.
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
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.
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.
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
i7=+
*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.
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&.
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
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.
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 #
+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
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.
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
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
/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
Primer.
=rint,&3S3AB5S33' =rint,&32AB523'
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
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>>
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.
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&.
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"<
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
Operatori
x=Q=1 x=Q=1 <=&x"&Q""''E3 t=&x"Q""'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
<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
*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
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
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:.<*, #:, #,:.
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.
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
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
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
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.
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.
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
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".
*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
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'
$#& =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.
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
;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.
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
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.
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
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
_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.
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.
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
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.
-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
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. 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
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
47
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
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
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
+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 2. Hko je i ra posle ZFZ tako3e uslovni i ra > do#ijamo else-i) operator.
Primeri.
49
Predrag S. Stanimirovi
Osnove programiranja
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'
true
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
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.
% 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.
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
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
Osnove programiranja
mo@e se pisati
switch)a.b* + 6+s$ :1 max3b2 break2 6+s$ 91 max3a2 /
55
Predrag S. Stanimirovi
Osnove programiranja
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/-%
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*.
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 :
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".
%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
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'
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
Osnove programiranja
!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. 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.
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&.
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
B 2 2 3 3
6E 1 $ $E6
2 !E6
!E6
63
Predrag S. Stanimirovi B
Osnove programiranja
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
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
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
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
i
while)9* operator.
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""'
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. 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
68
Predrag S. Stanimirovi
Osnove programiranja
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
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
$,&
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
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.
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
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.
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
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'
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*
ili
?BDA 3 ?BD)FFF*
5unkcija se koristi u sluaju kada se vraa jedna veliina u re ultujuu programsku jedinicu.
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
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
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
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
s;an,&3Rd3,Un'
80
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.
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
=rint,&3RdSn3,i'
,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
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
84
Predrag S. Stanimirovi
Osnove programiranja
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.
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
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
Osnove programiranja
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.
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
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
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=(
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
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.
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
/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
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.
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
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(.
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.
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
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
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
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
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
+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
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
-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
100 0 0 0 10000
#10
110
Predrag S. Stanimirovi
Osnove programiranja
nR$n-l&^> n^ S 1>
a nU0 anS0
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
ret+rn ret+rn B
=rint,&3R2d3,n'
ret+rn
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
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
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
115
Osnove programiranja
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.
118
Osnove programiranja
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
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' ...
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.
121
Predrag S. Stanimirovi
Osnove programiranja
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
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 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.
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
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
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 <
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.
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
131
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.
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' 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
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
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=, ""='
-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
-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
=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
Osnove programiranja
6E 1 E6 6E X E6
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!;%.
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
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
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.
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
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.
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
=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
Osnove programiranja
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
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*.
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&.
/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
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.
;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
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
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
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
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
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
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.
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
/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
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
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. (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
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 s""
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 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*
169
Predrag S. Stanimirovi
Osnove programiranja
Ova )unkcija prevodi string s sastavljen od HSC%% nakova u ekvivalentan realni #roj. Ova )unkcija se nala i u standardnoj #i#lioteci stdlib1&.
""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. 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
171
Predrag S. Stanimirovi
Osnove programiranja
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:
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.
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
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
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
(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
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
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
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 /
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 /
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. 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
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'
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'
@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
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
+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
187
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.
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
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,&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
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
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
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
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
%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
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.
pokrtetni jednodelni
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
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
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
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%.
A o#a navedena dodeljivanja> logika promenljiva + do#ija vrednost navedene relacije i me3u skupova su istinite.
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
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.
-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
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!'
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 ;=:* '-$ ...
-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.&.
/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
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.
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*
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 .
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
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
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 ¬ ima' and ¬ 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, ¬ 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.
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 ################ ################
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'
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
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
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 ¬ 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 ¬ 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
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'
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
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
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
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
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
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
236
Predrag S. Stanimirovi
Osnove programiranja
6inamike strukture podataka imaju prednosti u odnosu na statike i u pogledu nji0ovog menjanja.
/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
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;
+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.
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
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
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.
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
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.
241
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.
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
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.
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'
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.
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 ¬ -g' do i, &=Z.i=@' and &=Z.>=-' tAen Degin s7==Z.ai> -g7=tr+e end
251
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
Osnove programiranja
: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
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
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
Osnove programiranja
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
Osnove programiranja
i dvaja se $i inicijali uje na 0& memorijski prostor dovoljan a sme8tanje 100 vrednosti tipa long $"00 u astopni0 #ajtova&.
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
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
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
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
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/
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
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
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
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
===#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
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
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 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<
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
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
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
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
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
% % % %
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
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