You are on page 1of 164
pone Vupak 2A eyed 7 UNIVERZITET U BEOGRADU INSTITUT ZA NUK! EARNE NAUKE "BORIS KIDRIC", VINCA, ‘Centar za permanenino obrazovanie — Mikrohit. Mc Viadan Vujicie UVOD UC JEZIK { Coto edarjo = ~MikRonie 36 ~ Beograd, 19 od uC jezite surto ladane JNSBN 6-805! 04-2 aor ir Viadan Vujitie, dipling. etekarotetu ike eoencest Cfhiteslay cockovie, docent Elekrrotohnickog fakuteta Univeraiteta u Novem Sadu TrSvetoinie Ojdanie, diplinz. elekarotehnike wavac (0 instiut 24 nuktecme nauke "Baris Kidrie’, Vines Senter 2a permanentio obrazovanie Seograd, Nemaniina 4X ‘leon: (0111685-290, 682-486, 641-265/107.181 lolax, (0111082486 # lzdavaca. fr Dragen Stojanovic, rukovodilae Centra tor : era Ristie Naslovna streaia Stevan 2 Tenis urea Mr Viagan Vujicie Stampa Stampursko izdavacko preduzece "Bahar, Bor Tieaz 1000 primeraka Resenjoin Komisie za i2davachu delatnost i udabenike Skupstine Univeizteta u Beogtala pad 96 bro] 86/1 od 1407-1988. gudine odobren [9 status usverdeishog udaberika, BADRZAS 1. WOD.. 2. OSNOVNI POJMOVI U PROGRAMIRANU, 2.1 Programirane |algortmi 2.2 Tpowl programskitjezika 2.3 perativn! sistem. 2.4 Proces prevodenja programa 25 Ktelisml za ocenu kvaliteta programa 2.6 Verba 8. OSNOVE C JEZIKA. {31 Skup karaktora C jezik. 3.2 Kijucne rot... 2.3 Osnovnl element C jezika 3.4 Elomentarn! waz Siz 9.5 Verbs. 4, OSNOVNI TIPOVI PODATAKA I ARITMETICK! IZRAZ. 41 Osnovni tipow! podataka. 41. Tip int =] at ai ai 4.1.2 Tip Mloat double 44.3 Tip char 4.2 Artmetick lara! | operator! 4.2.1 Operator! dodelvanja vrodnostt 4.2.2 Koverailatpova podataka 43 Verbe. 5, KONTROLATOKA PROGRAMA 5.1 Relacton! operatod | lrazl 5.2 Logichi operator! ixazi 5.3 Operator Inkrementiranja | dekramertrania 5.4 Slozenl I bozetektn Iskaal 5.5 whlle Iskaz 5 for iskaz 6.7 do-while ska, S.8itiskaz 59 Itelse iskaz, 5.10 else-tfiskaz 5.11 switch iskaz. 5.12 Iskazl bezuslovnog grananja. 5.12.1 break iskaz 5.122 goto iskaz, 5.123 continue iskaz. 5.19 Operator uslovnog lzraza, 5.14 Vozbe. 6. VEKTORI 6.1 Jednodimenzlonalel veltor. 6.2 Visedimenzionalnl vaktor 6.3 Verbe. 7. STRUKTURE, UNWJE | ENUMERISANI TIPOV! 7.4 Svukture 7.2 Strukture | voktori 72.1 Veltorl strultura 7.2.2 Steulture u struktur 7.2.8 Vektori u strukturi 7.3 Uni. 7.4 Enumerlsait tp podataka, 7.5 typedet Iskaz T5Ve2be, 24 26 2 Bt 53 37 a7 38 at gareeeas 61 61 62 67 67 80 cy a2 37 87 92 96 100 8, FUNKOUE, DCMEN! | MEMORIUSKE KLASE, 8.1 Detiniefa funkeije 8.2 Argument funkola 8.9 Rezuitatlfurkoja {84 Voktor kao argument furkcla, 5 Strukture kao argument! funkcila {86 Rokurzivna funkoje 187 Domonl Kentifiatora 8.8 Memoriske klase idontikatora 5.8.1 Automatske promeniive 8.8.2 Ekstore promenva. 8.8.3 Staticke promentive 8.8.4 Hoglstarske promenijve. 8.9 Vorbe, 9. UKAZATELII 9.1 Poa 2 ukazatola 9.2 Ukazatel i stukture, 6.2.1 Ukazatel strukturama 9.22 Samorefesisane struktur. 19.3 Dinamicke strukture podataka 9.3.1 Funkelje malloc. calloc, ree Irealloc \ 9.5.2 Lincame list, { 9.3.3 Redovl 9.3.4 Magacini ' 9.35 Binama s 9.4 Leazatelll veltor. I 9.4.1 Ukazatlfska arkimatika 915 Urazatolfunkelje ' 9.5.1 Ukazatellina funkclle 9.6 Prenos argumenata u furkellu main, 9.7 Vorbe, abla 10, NIZOVI KARAKTERA ' 40.1 Polam nlzava karatera 10.2 Nizow karaktera, vektorl| strukure 103 Artmeticke operacije I karaktori 10.4 Verbe. 11. OPERACJE NA BITOVIMA 102 102 105 107 an 47 120 124 427 427 128 131 133 138 136 136 140 3 144 147 147 14g 155 158 161 165 168 171 179 77 178 180 +90 187 190 190 195 ae Se ee OE 11.1 Pojam bit 11.2 Operaciia na btovima 11.241 Jedinier! kemploniont 11.2.2 Inkluzivnl OR. 1123.00 11.24 Ekskluzivnl OF 11.25 Lovo pomeranje. 11.26 Desno pomeranje 11.4 Bitsko poll, 11.4 Vonbe. 12, PAE? HOCESOR, 12. Simbolioka imena i makrol- #deti 12.2 Uiljuchanje catotka - #inelude 12.3 Uslowno prevodenie 123.1 Iskaal wilde, #ifndel, #else | #endit 12.3.2 Iskaz wi 12.3.9 Iskez #undet, 12.4 Verbe. 13, AZIIZLAZ, 19.1 Ulaziziaz karahtera - getchar( | putchar(), 12 Forinatizovani wazsalaz 19.2.1 Punkeja print() 132.2 Funkoja seand, 18.3 Upravianje datotokama, 13.3.1 Funkcia fopend, 13.3.2 Funkofe getc( | puted. 13.3.3 Furkoje fprint {scant 13.3.4 Funke fgets( | tuts) 13.35 Funkcja teot). 13.3.6 Funkcla felose), 13.3.7 Funkcija ext) 13.8.8 Standavdie datotoke stdin, stdout | stderr. 13.4 verve. PRILOG &,- Fregled C jezik PRILOG 8 - Najcesce programske greske. PRILOG C- Osnovne komande © prevadioca PRILOG - Proycam lint PRILOG € - Program make PRILOG F - eK! probileml prenasivostl C programa, w 207 212 a4 214 220 222 222 224 225 225 226 226 zr 20 24 235 237 238 239 239 240 241 249 284 268 273 216 a0 282 PRILOG G - Tutbo-C | njogova gralicka bilioteka G.1 Turbo C- Spoeitienost ee A 287 209 6.2 Graficka biblioteka PRILOG H - Siup karaktera ASCH UVERATURA, INDEKS. 310 ate a4 f.UVOD CC Jezik Je programskd jezik opste namene sa moxiernom konirolom toka programa, oll podrzava sistamsko prograniianje, sa mogucnoscu definisanja razlicih struktura ppodataka | sa bogatim skupom operatora I tipova podataka, Programski jezik C razvio je Donis Ric! (Dennis Fitchie)u Bel- ovim laboratorjama 1972. gadine Yao ealk visokog nivoa pogodan za sistamsko programhanje. Prethodnic’ Cezika su BCPL I, ko su bill Koriscori za proloktovanja operativah sistema ijezickin procesora. Glavno podoljsanfe C jezika Jo wvodanje tipova podataka (8 i BCPL su bez Tipova padataka). Godine 1977. razvjona jo verzja C prevodioca no2avisna od racunara, poznata kao jcengshi C prevodilae, sa cijem pojednostayjvania prenosa C prevodioca na nove ractinare. Ovakav razvo] rezutiraa je u pojavi C prevodioca za velki bro] racunara od mikr>-o superracunara. Jeziknije u sustint-veoma visoko9 civoa", nit je spectializavan 28 odredenu oblast primene. Njegove univerzainost I siobodne forme progcamiranja cine ga pogodnijim i ‘afkasnilim 2a Siok! spelter aplikacja od drug Jeatka opste namene. © e20« je potpuno Istisnuc asemborski jezik u UNIX” programma. Operatinl sistem UNIX (auzev oko. 1000 tna pocetnog bootstrap.) svi njogov! apikacioni program sam C prevodilac su napisani u C jaziku, Mada na UNIX sistemima postoje prevodioc! 2a FORTRAN, PAS: CAL, ALGOL 58, SNOBOL, APL I dr, vacina programera na racunarima sa ovim Coperativnim sistemom nalradija korist C jozik. Posto Je C jezik relatvno rskog nivoa, dovol}ro je efiasan, da mote zamenit asamblerskl jezik u odgovarajucim aplikacijama, I dovoljno Jezgrovit | lrazajan, da Je pogodnili od, recimo, PL| | drucih jezika visokog rivoa, {Nie rattenno Ine opting salsa axing v al Labora @ Lod uC jezik 9 C jezik je posobno pugodan 22 projektuvanje opera'ssih sistoma | nlogovih ome in programa, nauenin aplikacis | sistema za upravijanje u reainom viemonu S rage stene, jezik nije najpxjodnfl za postovne aplkacije, 200 udsustva Llaznola luznit» spevactia na nivou apisa, daictoka sa labelama | decimaine artmetike. va knjlya je osovni kurs C jezika, Namenjena je chaocma sa Ml bez progi«me:skoq iskustva, Ako imate programerskog ‘skustva, nacl cete da © juzk Ima Jesin-ivere mogucnostl, koje se ne srecu u drugim jezicima, Ste wise, ako Imate lskustva 88 PASCAL-om, na kojeg C jezik najviso lic, nacl cote nove konstrukcla, koje rane rikadi niste upoznali kao sto su nacin deflnisanja ukazatelja | oporacije sa njima, nizovt karakiora: operacie sa bitovima. Kako je knliga namenjena sirokom krugu Ctalaca, nije koriscena EBM notacja 2a detinisanje sintakse C jek, E ovo! fnjizi opisane su sve bitne moguenosti C jezika. Nakow opisa svake konstrukcje, naveden je kratak | Komplotan programnski primar za lustraetu opisane Sonstrakcije, Goblin predavacina je poznato da Hustrativan primer moze viodall vise 04 hitjadu rec opisivanja. U ovo] kni2, sve opisane programske | Bitlet Novidli karaltont blank (grazno me ova lina tab (prazna mesta) ‘ijuena ree entry se trenutno ne kodst| u C prevodiocima, all je rezervisana za buducu upotrebu.Slieno tome, ada, pascal, enum, void I fortran se ne koriste w svim prevodiocima. U poredenju sa drugim jezicima C ma mali broj Hjuenih reci (Ada*, na pine, ima 62), al ime njagave mogucnost nisu un anjene. Tabsla 32 Wzene real ada double goto static asm ‘lca if struct auto entry int switch ‘break enum tong typedat case exem pascal union char float roglster unsigned continue for return void dolaut fortran shor wile _99. sizeot J 3.2 Osnoval lementi C jezika programs sastol od osnovnih gracini slamenata: donate sk ara operator separator td NapismojadsnstavanC program, koja terminal ti CAT eke rand lspisuje poruku “Zoravo, Kako ste | yocmo csnome gradhne elemento (Program 3.1). Razamavanjo own polmova clsksace ctarj narednh pogiavia Prog ‘maie() ( riot!("Zdrave. Kako ste?\-); "a raicnno ie pogrametogosika 000, USA. 2 vod u Cjozik & ) Program 21 I2laz Zdravo. Kako. ‘main | printf su identifikatorl, Wantitkator je sekvenca velkih it matin slova, cifara | karaktera "(dona crta). Slovo il donja erta moraju bil pel karakter identfkatora. Na primer, ispfavnl Identifkatori su x 2.255 _suma nos met prezime fabela_ Sika_256 a pogresni matt 2.main Skrug 235 met it main zapromina max+1 nije identikater, voc raz, jer sadr2l karakter'+', 2.main potine citror, a skrug karakterom '$, 235 je bro}, a ne Identifkator, Ime 1 sadtai blank, in je Kljucna rec, main je rezervisan 2a sistemsku funkejju, a-zapremina je iraz Identitkatori se korlte 2a dodalvanje mena objektima u programy ((unkeije, promenijve, td), Dobra programerska praksa je zabrati mnomonicke Kentfikatore ob: Jekata (npr, identifikator povrsina ukazuje na povrsinu nekog kruga), u ciju povecanja, Citljvost! | dokumentovanostl programa. Broj kerektera u identikatoru nije ogranicen, alije u mnogim sistemima broj znacajnih karaktera ogranicon, npr. na 8. To znacl, da su identikator temperaturat i temperatura? identicn, jer Je kdenticro prvih 8 karaltera, Na primer, C prevodiac na slstemu DEC VAX.11 VMIS* ogranicava bro] znacaoih cifara pa 31, ana sisternu UNIX System V Release 2 identkatori mogu bit proiavoljne dune Identikatori main { printt su imena sistemskih funkcja. main informise sistem 0 tome gde treba zapocet!levrsavanje programa, a ")" oznacava da main nema ar- {gumenata. U C programu obavezna je Jedna i samo jecna funkcija main, Jer program ne moze zapocetl vrsavanje sa dva Il vise mestaistosremeno. printf je funkelja za stampanje poruke"Zdravo. Kako ste?","Zdravo. Kako ste?\n" riz Karaitera |u slucau programa 3.1 predstavia argument funkcije print. Karakter {obrnuta Kosa erta) I 'n’ eine Jedan karakter'\n’, koji se zove nova linjat znaci da C program siodece stampanje obavje na novo] ijl. odmah ispod tetuce. print{(Zdravo. Kako ste?\rr); je iskaz C [ezika| predstauja elementary obradu, kolu program treba da obavi, Na§ program ge sastoll od samo jodnog Iskaza. Svaki Iskaz’se mora zaveshl Karakterom, kojiIma ulogu terminatora iskaza VR IT VMS 3 uipent Corporation, ina sae rar | opnratvnog sistema kompanle DEC (Digital ¢ Dsnove C jezik Karaktor ("IY (Alcaste zagrade) obledinjlu vise pojedinacih iskaza u jodnu programsku ealinu, aduesno, u slozent iskaz, analogno komandams BEGIN i END u PASCAL. Pojedinatn'lskazi se ne moralu objedinjavall sa'{'1")', jor vec pradstavia, programsku clinu, elementary obradu. U nasem prlmoru karakter"{'i'}Informisuy Sta program treba da okavi | obavezne su, baz obzira sto [ou pitanju samo jedan iskaz. Poglecalmo program 3.2, kol wvodl nove sastavne dlemente C Jezika Program 32 maint) { int restika; razlika = 100 - 90; print((Razlika 100 - 90 ~%d\, recto}: ) Program 32 Izlaz azlika 100 - 99 = 10 U programu3.2 skaz Int raaika; Je doklaraclja, Kojom so promenijva raztka dostaris2 kao tip int, 1}. kao celobrojna pronieniiva. Celobrojno] promanijvo] se mogu codeliti samo cell brojevi, odnosno, brojevl bez deckmalnog 2areza, Primer cain brojeva su Oh eestor 786-52 128980 Jas vont 28> © lasno eda, koje radnostizaza.a vce od ost kata eta tz a> ‘int Um sas noe doa ess na in Vergo a ah vest aan arjlfesac ooon iran Jeera a> nol U ovo sau Lae adobe saron! 9p nt Zed easy he ednost atae> it hc toa oe ane run ao opt Sede sansa pra a omer fpve pov at Reaclon operator rato <, <=, > 1 >= imal jada print vis I= (Operator! = = 1 1= su jednakug prior ‘ dest peal au aeg potter us par Ts Sena prada) Aira cpt Nes) 5.2 Logickl operatoii | izrazi Loc ak! operator, prkazani uta ok! operator, prikazani utabel 6.2, realzuju logicke operaciie AND, OR i NOT. Taba logick! AND. logick! OR a logickl NOT CogI6W Saeko —————— | ue ite a cae ee tipa Int, Ako izraz ima nenuitu vrednost bilo kag ty bes Int. Gpsta forma iogicke negaclie je Droog i. debe se rence dpa ‘epreuni primed su ho bone fxr 3.14 HIG ry) 43 +'a) PS. ee 1s Kontrola toka prograina « 29 alnb Cporatoe logleke negacije uC jez se razikujo od negacije u matematic, Ako Je x matoinatich az, ada 2a operator matematicke neyacje veal jednakost not(not x) = x Medutim, ako !zraz x Ima nenultu vrednost bilo kog tipa, tada 2a operator logicke rnagacie Vaz jodnaliost ost S druge strane, ako larazx ima veednost 0, tac vaz Jednakost Wx) = 0 Operator | Ima jodnak proctet | asocftivnost (s desna na lev) kao |ostall unarn ‘operator ‘Binarn fogicki operator! && || reaizujulogicke operacje AND | OR, respoktivno, Cpsta forma leraza sa ovim operatorima je lerazt 88 leraze teraz’ {{ iraz2 Operator 48 ||| dau kao rezuat vrednost Oi 1 tipa int, Operator && daje kao rozulat vrednost 1, ako oba cperanda Imaju nenuitu vrednost. U protwnom, rezultat Je (©, Operator || ajc kao rezukat vrednost 0, ako oba oparanda Imaju vrednost 0. U protkmnom, dele vrednost 1. Semantika operatora && ||| Je data utabell 3 (koraktort +40 oznacavals nenultu viednos). Priotfel uperatora && |e visl od priorteta operatora { |, all su obs operatora rizeg prlofteta od unamin, artmetickiralacionih operatora.Asoclationost operatora 88! || Je slovana desno. Loglck! operator slede standarana pravia 22 korwverziu tipova podataka u ati smetickim lzazima, 1U loyiekim razkma leracunavanje se prokida, tim se rezullatcelog lzraza moze odrodi na osiovu dotadasnih racunavanja. Na primer, ulerazu larazt && lraz2 taraz2 neco Lil zracunavan, ako araz1 ime yrodnost 0. Steno, w ierazy tarazt || teraz 40 2 Uvod uC jezik © 4 laraz2 nece bil izracunavan, ako tzrazi ima vrednost 1. Program 5.1 potvrduja ove rnavode. Na osnovy izlaza programa §.1 promenijvex I imalu vrednost 0. Kako se us kazu Operator | ee X= 088 (| = 999); 5.3 Operator Inkrementiranja | dekrementiranja ese ee erate Operator inkremontiranja ++ i doisomentianja — su unarnl operate ‘stog priorteta kao | unarnl operator - ii ast | asocijativnost! s dasna na levo. Oba cperatora primanjuju se isk|ue'vo na promanljve | avjaju seu prefksnom | postfisnom obi, ‘Operator inkrementiranja + + promenijvo] p dodalo vrednost 1, pa va2l 999 nije lzvrsio. Drugim recima, lracunava se vrednost evog operanda, pa kako tal operand ima vrednost 0, desnl operand se ne lzracunava. Iz th razioga promeniiva | zadr2av.. ppotetnu vrednost. Slcna pravila vaze Ia operator ||. Kako lev operand operatora || Ima vrednost 1, desni operand s@ ne Izracunava I vrednost 9999 ne dodel)uje ppromenijvo . Promenijva} zadrzava pocetnu vredncst p+ + Ja okvWvalontno p=p+1 + +p a ekvivalentno p=p+t ‘Operator dekromentiranja — promentiNol p eduzima vrednost 1, a vazl Fabala 8.3 Semaniika operaiora @&T|| p- Je okvivalenina p= p-t “pe okvivalentno p= fet teraz teraz? berazt && teraz? larazt || teraz? ‘Ako u nekom lzrazu posioll p+ + (postfiksn! oblk) vrednost promeniive s@ prvo ° 0 ° koristu teazu, pa tek onda inkrementira U slucafu da t arazu postofl + +p (preiiksnl ° #0 0 ‘oblik) promenlva se prvo inkrementia, pa se tek onda njene vradnost korstu izrazu ° 0 Slicno prothodnom, ako ulzrazu postoll p— (postfksnl obtk) vrednost se prvo Koris- #0 1 Wu Lrrazu, pa tek onda dekrementira, a u slutalu —p (prefiksnl oblk) vrednost $6 dokramentiza ltako azurlrana korlt ularaz. (Operator! inkrementiranja | dokrementiranja su predstaviion! v programu 5.2 Program si maint) Program 62 - — { int |= 0,}=0,%, 95 mmairt) { X= 088 (I~ 999); Im a=0,b=0,0=9; printt(Operator 88\0) printl(e=%d ltd, x, I) priot(C\nam%d boMet CoN, 8 6); i aH Hc; Y= 11 (J = 9998); printi(e=%d b-%d e=%d\n a, b, print! Operator Nr) ambit tort printe'y=%s =A, y, 1: printiCated bec c=%d\r; 8, bc) } : an Hb + oH; printi(ated bard cm%d\ 0, b,c) an Hehe: print(Ca%d batid e=%d\r 8, b,c): } Program 52 Izlar Program 51 I2laz Operator 8& x=0 I=0 vod uC fox @ lwraz a= + F646 lz programe 5.2 ukazuje na lzvur custih gresaka. Nalme, oval teraz zavsl od realtzace C prevotiaca, pa ga stoga treba izbegevatl Zboy caga? C revodiac moze, zraCunavajucl + +¢+., prvo dainkramestiva + +6, pa tok onda da prewzme vrednost promenijve e kao vrednost d'ugog operanda, Drugl C prevodiac meza prvo da preuzme vrednost promenva ¢ kao vrednost drugog operanda, oa tek ovo da icnreraentia + +6. Colylodno da ovakve neodredenost! nisu pozeljne u programima,Zato lzraz + + +e treba pisatl u obiiky anor (+ te), cime $2 exsplicitno navodi redos'ed lzracunavanja gornjih raza | tine lzbeguva ‘acrasznostredasleda leratunavanje De sada smo obradil artmalicke, relacione Hlogicke operatore, UtabellS 4 prikazan Je p-iortt | asccijativnost svn d9 sada oplsanin operatora, ~Fabaia S @ Prisital asecjatisnost operators a ss desra na love vi slevana desno ae 'slevana desno slovana desno slevana desno 7 ‘slova‘na desno leva na desno ss desna na levo S leva na desno. U tabell 54 pojavijuu se dve nova operator, (zarez) | alzeot Cperator, ima naj! priontet meds operatorima C jezika. To je binarni operator sa \ararima kao Operandima. U erazu | tees «= Kontrofa toka programa @ 8 lerazt , esa? opasor, tedster) aoa 9 raz? rakon lacunae aca cr fa Sprite, Rao cla na vednost |p desnoy operand Ne pe, ose epertra, Ina est 2 taint ah eprom dofasana ka ip, da az operator dei ot kao raat dle wrognox tie in, koje fe jodnaka xu Batova potas mamotars oporaca, Opsta fora voy opertorae sizoultip_podatka) Na primer, sizeof) ka rzutt to] bajova Ko zayzne tpn, rogram 5.2 Kast operator size Sh afta oaganenne tpove podaaka, Na osnovu Zaza prog 53 ered Bo SO oe alt bafta tp anor? bai 8 I 2 bala aoe en antpancigned 2 ba, 2a foat afi |2a tp double ®baove (iB-bitnl racunar), Programa ‘maiot) Irmicenarid aj, szottcher print (short-% bajta\, sizeol(short)) printCint=%l beta, size ine) print!(long=%di bajta\,sizeot(1ong)); pelnti(unsigned=%d balte\,sizeot{unsigned): pprint(Vioat=% bajta\, sizeof(tloat); print"deubis~sd bajtova\,sizeor(double)} } Program 53 t2laz bajta Tongint bufia uunsigned=2 bsjte “4 2 Uvod wy C jezik @ float=4 bejta double~8 bajt 5.4 Slozeni | bezefektnl Iskazl Stozonl iskaz Jo sokvonca ickaza objedinjona vitlcastim zagradama ‘{'1")”. Osnovnt raziog definlsanja slozenog Iskaza jo gruplsanle Iskaza u ednulzvrsnu colin, UC }aziky ‘ade god Jo koraino stavitJodan iskaz, korektno Jo stavit slozen! Iskaz. Drugim reelma, sSlozanl iskaz Jo sam za sabe Iskaz. Primer slozanth iskaza su { Xeeh YX +10; PURI Hy = BAT Bozefelanl iskaz ne sadr2ilzmaze. pa stoga ne obavijerikakwy obradu. Bezetoidn! Iskaz sadr2l samo terminator Iskaza (tacka-2ar62). Korte! ge na mestima gde Je Iskaz ppotreban, shodno sintaks! C Jezika. Na primer, Bezetektn! Iskazl $0 rajcesce korlsta kod iskaza za kontrol toka programa, ko su coplsanl u daljem tekst 8 Kont a toka programa @ _ 5.5 whlie Iskaz Kontroina strutura whi'e omogucava ustovno ponavija) ‘onsirukeil forme Jodnog Bt vige Iskaza, U while (uslov_potie) wile ikea stedec!_Iskaz: pevo 0 lzratunava uslov_patije, Ako uslov_petife Ima vrevinost 0 (nelstin), kontrola programs se pronos! na sledecl_iskaz. Ako Jo razlicit o¢ mulo (istinl) Izvrsava se ‘whille_Iskaz | kontrola prenosi na pocetak while strukture | uslov_patlje ponovo Ipracunava. Stoge, while_lakaz se izvscva sve dok je uslow pelle raziit od mul (is: tint) Efokat steuisure while Jed se while leker levrsava nl jodnom Wi vie puta zavisna, ‘od vradnostl uslova_pelia. uslov_petlje moze bit! raz prolevoljne slozenost. ‘Sirukturom while moze se jadricstavno reazovatl hoskenacna peta whit) { /* beskonacna_potia } kao primer Horiscenja strulture while 2a realizaciju usione patio posladalmo program 5.4 a nalazanje nalvecag zajacnickog delloca (NZD) dva nenegatina broja 'NZD Je najvect bro) koi de! dva broja bez ostatka, Na primer, 2a brojove 12116 NZD 06. U programu 5.4 koriscen |e algortam, kajie definisae Euclid 300 g p.ne Program 54 I" Program z6 nalazenje najveceg zejednickog Gotioca dva nenegativna cela broja*! rai Int prvi, drugl, pomecni; print{CUkucajte dva nenegativna cola broje 7); scan/(%0%0", prvi, drug!) whity (drug! != 0) Pomoen! = prvl % drugl evi = drugi: drugl = pomoenl; } 1 Uvod uC jezik intl Najowel eajxtsien’ ceriiae ov A Presi x in ofeva jo %a\er, vl) Prograin 54 I2lez Uhuesjte dva nonegat'vna cela broja? 364118 lilac ovih brojeva Je m8 Yajvecl zajednickd so SIN Muda) ik} sant nage tee dha ala of Pi aih sma upromeninu peta glu pomeniu droga tase zion vu pr aX nom nom eto hen ='d 88o<='7) print’ Karaktor % je ceo sivvo\yr, W(c>='a &&e<='Z) print(Karakter % je veliko slovo\yr, c); i(e>="9 &bo 9) ‘pritl(‘Karakter %2 Jo citra\, ); Wle>e'' she cet lo> eon 8s ™|o>=¥) ‘Ke Je speclfaini saraktor\r, c); Program 811 ilaz Ukucajte karaktor? 4 Keraktor 1 ja citra Uhucajte karaktor ? a Karaktar a fe melo slove Uhucajto karakter ? D Koraktor C jo veliko slova Usucajtea karaktor ? > Kuraktor > Je speclfali! karaktor 5.9 If-cise Iskaz 1! Iskaz ostvarujo Jodnostixko odluclvanje Ml grananje. Konstrukcjom it-else costveryjeino dvostruko adiuelvarje tl grananje. Opsta forma Helse iskaza Je (raz) loka; use Isha sledect_Iskaz; Semartka ihelse iskaza je siedocar Ako jo vrodnost raza razilcta o€ nule (stint) levisava 50 Iskazt, Iskaz2 prosiace | kontrola prenos! na sledecl_lskaz. Ako Jo vr: ama e eee) ‘¢ Kontrole toka pre . J moze bl proilan baz ssa, & nostra oda l(t) proskace 98 moe Bl pro sia, ar oa hl su Gowler © jezk Primer Haas haz FALSE) He ost (pen Ueda new rodu\ ns pn 28% i Uredja jou rods ° a Nj uctana gina prestupe tne Program 6.12 kris Iie ska creda feuoana a evo della box ostlka sa 4a a 100, pi cemu je svaka 400 oda presupra Program 512 [+ Program za odredjivanje da Il je godine prestupne ii nije *) main) Int godin, ost 4, ost_100, ost_400; prinkt('Ukvcalte godinu ? seani(%ct, godina); os 4 gedina % 4 st 100 = yoda % 10; Ost 400 » godine 40; If (ost 4 == 0 88 ost 100 f= 0 0st_400 == 0) (teGotina 2 Jo prasupna\, god) else ‘printf (“Godina %d nije prestupne\yr, goding): ) Prograin 512 i2lez sueaite godinu ? 1972 Godina 1972 je prestupna Ukucajte godin? 1970 Godina 1970 ne prestupne Pogloda|ino sta se desava ako su iteise iskazl ugnjezdenl na sladecer primory Wd=60) 58. Uvod uC jozik @ '$ obztom da Ja el U gornjem primeru pripada nalblizem prethodnom If Iskazu. U gornjem primeru If Haste skazu posto]! dvosmistenost kojom if iskazu Iskaz, U C Jeziku pravilo |e da else iskaz pripada onstrukella ey) eso bey: predstavia jedan komplatan Ihelse iskaz. Ako hocomo else iskaz u gornjem primeru da pripojimo spoljnjem i skazu moramo upotrebit vilcaste zagrado,t. Kd==0) { H(x>y) COvakve greske suvito Ceste Itesko se pronalaze u programima, 5.10 else-If iskaz Jezk obezbedule kontrolnu strukturu 2a visestruko grananje, To Je else-tfiskaz (Opsta forma ove kontroine strukture je sledaca H (araxt) teat; slso (orez2) iskaz2 tise (era2N) iskaaN aise iskazo slodecl kaz; 1 Kontrola toka programa » ST Uhojo]iskaz! (= ...\N) moze bit slozenIskaz. Semantika ove slozone kontrolne struk- ture e sledeca: Ako [a tzrazt N) Istnt (raze od 0} tr8ava ge Iskaz! (1-=1...N) preskate se preostall doo konstrukclje kontrola prenosina sledec!_Iskaz Ako |o‘zraz- Fit tg -N}notetit (oa od 0) lskanl (re 1X) a0 prostate, iaconava se izrazl + 1 | postupak s@ ponavlja kao 2a lerazl. ako nijedan izraz! (/=1....N) rj stint lnutsava se iskaz0, koj je opcionalan u konstruksijl.Bino Je uosti da se izvrseva samo Jedan Iskaz w struktur, ci! Je odgovarajucltzrax stint (azlict od 0), rakon cega se kontrola prenos! na sledecl_Iskaz. €lso-if Konstrukcju bollé camo razumeti na primary. Program 6.11 Je skoiskl primor Josag I neaflkasnog programranja. Program 6.12 Je reprogtamian program §.11 ur origcenye alee-itiskaza Programm 573 It Progiam za odred|ivanje da 1! je karaktor malo ih veliko siovo, lira ill spocijaini karaktor - else Iskaz * maint) { char ¢ print{Ukucajte karakter ?°); seani('%c', &e); It (c>='a 880 <='2) printf("Karakier %e Jo malo slovo\yr, ), else it (c>='A' 88 c <='Z) printf(‘Karakter % Je veliko slovo\", c) olso it (c >= '0 && c <=!) printl("Karakter %e Je cifra\, c); else priotl("Karakter %e je specl/ainl kerakter\r,c), Program 519 I2/az Ukucajte karakter ? 4 Karaktes 1 Jo citra Ukucajte karsiter ? a Karakter a je malo siovo Ukucajto karaktor ? D Karakter D je veliko stovo # vod uC jezik @ Ukucaite karaktor 2 § __Keraktor § Je spectjaini 5.11 switch iskaz ‘Konstrukcija switei omogucava visosttuko grananje. Silena Je konstrukei elseif, ail Je pregiodnija Kod bora jedne od vise moguclh alternativa, Medutim, dok se u onstrukel] else-f w nalgorem slucalu lracunava N leraza | lvrsava samo jedan skup 'skaza, kojl su prideuzsni istivtom Wazu {1 do N), dolle se uw Konstivscii awiteh leracvnava samo Jedan iaraz | txvsava samo jedan skup [taza, koll Je prktvuzen laracunatoj vrecnost raza. switch konstrukela kma opstu fori ‘sultch (raz) case vrodnostt Iskazts break: case vrednost2 Iskaz2, break ase vrednostN ska2N break; dotaut Tskaz0; ‘break sledocl_iskaz; ‘Semantika switch Iskaza je sledeca: racunava se laraz. Dobijena vrednost suk: cceslino se uporeduje s2 viednostima vrednostt, ... wednostN, Koj moraju bi onstante i konstantni izazl. Ako Je pronaden case, tla je pridruzena vrednost vrednost (I= 1....N) Jodnaka izracunato| viednost iaraza lzraz, lavrsava se IskaZ, Koll slodl cese, 1), Iskezl. Treba primettl da nlsu potrebne vileaste zagiade 2a objedin lavanje skupa iskaza u programsiu celinu, al cola konsirukcja switch mora bit ‘bjedinjena viicastim zagradama, ‘ijecna rec break il drugacie break iskaz,Informise 0 kralu odgovarajuceg ca: 2, 2avrsavajucl switch iskaz_ break skaz se ne sme ostavt na kraj svakog case a, U Protivnom, izvisavaju se iskazi Koj slede, bex obzlra sto pripadaju dragon eee ~ EE — Kontrola toka programa 59 dofauit se evrsava ako vrednost raze rj jadnaka nijadno] od deluiskaza else-It Ekvvalenan elao-i iskaz Je slecoct Hi (urax { Iskazt, veednostt) else tf (zraz = = wednost2) { Iskaz2, } biao if (2raz ~~ vrodnostN) San } alse Iskaz0) ) sladect_Ishaz, Program 54 * Program za lzracunavanja prostih arlumetickih izraza U form! operandi operator operand? *! ‘mair() { oat operandt, operand; ‘char op; inkl (Uhucalte lzraz ? \e); Seanl(xtacik, operandi, Bop, Soperand2); fa # Uvod uCjozik « 7 switch (op) { ase printi(%f\"", oporandt+operand2); broak; case printt( WI, operandt-oparand2): break; case” prinetCSKh\n, operandt*operand2);: break; case: priott(Si/\r, operandtloperand2); break; dofault print Nepoznet operator\'): } Program 514 Izlaz Ukucajte tzraz ? 12920 70500000, Ukucajte izraz ? 129820 Nepoznat operator Pil pisanju Iskaza treba Imatl na umu da sve yradnostl v cage-ovima moraju bit raatlcite, fled, mozemo pridruztl dva Il vise cexe-ova stom skupu Iskaza, na primer seitch (oP) { caso: ‘rint(*%6f\e",opetadnd oprand2): break, Kortrola toka programa ¢ 6 5.12 Iskazi bezuslovnog grananja Udaljem tokstu predstavieemo nokollko spacial Iskaza C jozica, koje traba| {tly tacno odredenim slucajovima. V ostalim slucajevima ypotreba ovlh iskaza taba da bude dobro dokumantovana, Jor se narusave konicept strultulranog program anja. To ‘Su: brosk, continue | goto iskaz! 5.12.1 break iskaz break iskaz se najcesee pojadjye u switch iskazira. Medutim, break la opstlly \wogu UC pragramima. Ponekad se u pragramima java po.reba da se for pelia prekinn nakon odredenng usiova. U delu programa for (1=0;1eN; + +0 { I tost break; FALSE) testira se deo nokog uredaja. Kada so dotektule otkaz, {0° pela s2 prekids koristect break Iskaz, break iska2 trentno zavrsava peli | kontrola Programa pianas! se na is kaze koji slode poste for pata, ‘break iskaz so moze kosstt u for, while, do-while i switch Iskarima. Ako se break korist u ugnjezdenim petjama, zavréava se unutrasnja peta v kojo] Se break nalazi Upotreba brask iskaza u switch Iskazu Je prirodna Ineophodna, Med:tim, udrugin slucalevima upotroba break fskaza nile pozalna, jer zamagljuje programsku logiku | narusava selvercalnl tok programa, Na primer, prethodnl deo programa se more napisatl kao test »: TRUE: for (1=0;leN 88 test l= FALSE; + +) t } UUkojem <9 break iskaz ne koslstl, a uslov zavrgetka pote Last= FALSE} Jo pronct u fer Iskaz 8.12.2 goto Iskaz 1, Koj] Je odredisna mesio skoka, | mora bit Z 2019010 goto poruka; | | ‘ovan lubelom poruka, Ova labela maze bith cirana bilo gde u program, pru tl posla goto iskaza. Na primer, potuka:print!(Prikaz goto iskaza\n'); Naki programer! g scl? ogramer goto haz costo hoists kao srodive las ugha programa vanjezdenih pet thar: ose istnitost raza teat tl araza test = = FALSE, lzvrsava se goto iskaz | kontrola prenosi na iskaz Idantiixavan labelom olka. Upotr al !poWreba goto Iskaza moze se Izbec! jednostavnim test = TRUE: for (1=0; 1c N A& tost!= FALSE: +44 i : for(Je0: st aB test = FALSE, ++ ' } Kontrola toka programa Usiov Llaska iz pollo, test= = FALSE, Jo unet u oba for Iskaza, a goto iskaz se ne upotrebijava goto isk Jozka, gota nljo savremen met ‘az treba labogavati bez obzita Sto postol u vecinl modernih programski tod kontrola toka programa, koji Jo u modernim jezicima versary Kada Iskaz goto troba korlsth? U retkim stucajavina, Koll moralu bil dobro Honumentovanl, goto moze povecatl effkasnost programa. Takods, u neki Scajovira iskaz goto pojednostavijue kontrolu toka programa. 6.12.3 continue Isxaz continue Iskaz zavisava Heracll pete | start sledecu, Drugim vecima,Iskazi nakon eontinue iskaza autoratski sa preskacu | kontrola prenosi na potetak pete Tehninue Iskaz moze s0 naplsatl «for, while | do-while pet). Kao sto sledecl primer $elarul, contince prenos! karteoly na kral tekuce peti (break zavisava pete) Sledeca for pelja sa continue iskazom for (raat; iaraz2;lraz3) { ‘continue } moze se prkazatl ekvivalentnim fskazom teraz; while (lzaz2) {goto slacect slodect terazs: ' Bol) nacin 2a zavrsetak tohuce horace pe | startovane sedece jo Koriscene Iekaze Uso ull akazu jo suprotan od usiove koi uzrokuje lvrsavanje continue Iskaza 6 ___2 Wvod uC jezik « 5.13 Operator uslovnog izraza ‘Operator uslovnog tzraza jo nalneobien|i operator u C jeziku. Do sada smo imal un- ame i binarne operatore. Operator vslovnog zraza je ternarn! operate, Jer zahtova ti Operanda. Za oznacavanje se Koriste dva karaktera: znak pitanja "| dvotacka :. Prvi Sperand jo pre znaka pitanja, drugl lmedu znaka ptanja | dvotacke, a tree! posle <0 lstint. Zagrade se pisu radi ciljvostl I nisu obavezne. Prlortat operatora uslov- thog tzraza jo rl od operatora dodaljvania vrednosti | relacionog operatora <. [Ako so lzraz, Koji se koristi posle dvolacke sastoji a drugog uslovnog raza dobijamo efekat else-if Kauzule. Na primer, pogledalmo iskaz Oro} < 0) 7-1: ((oro] = = 0)7.0: 1): ‘Ako |e vrednost promenlive bro} manja od 0, promeniivo] 8 2 dodsuje vednost-1. U protinom, ivrsava se drugi uslovnileraz. Ako u drugom uslovnom izrazu promenijva broj ima vodnost 0, promenijiva s dobija vrednost 0. U slucaju da je vrednost promenlive bro} veca od 0, promenliva s dobila vrednost 1. Zagrade risu obavezne, Pato sto je asociationost uslovnog operatora s desna na levo. Znac, uslovn! trax ur 7it 027128 leracunave se kao ur 7: (271213) UC Jezku operator ustovnog lzraza trotra se kao svakl drugl lzraz i operator. toga, operator usiovnog lzraza moze se pisatl svuda gde so mogu pisalostal lazl! coperatorl Program §.18 uctava bro} stampa 1,01 uzavisnostl da lje uckan! bro] manji od (0, jedoak 0 Hi eel od 0, rospektiono, Usiownl Iaraz Je smesten kao argument funkelle Kortiola toka programa @_ cy print, cime dobijamo kratak, ali orstan program. Evidentno je da ustovni izraz pojed: rostawjuje program, Program 615 I" Program za odredjivanje znaka broja*/ maint) ( froat bro}; printi(Ukuca[te brof ?\e); seanf%r, 8bro]); printi(Znak=%S\e, (br0] <0)? -1: (bro =~ 0)? 0:1): } Program 516 tzlez Ukucajte bro] ?0 Zral Ukucajte bro] 7 12.0 Znak=t 5.14 Vorbe 1, Napiste prograra koji uctave dve colobroine vradnost, spit ds Ie prvi deliv sa drugim bez ostatka | stampa odgovarajucu poruku. 2. Napisite program koji uctava dve colobrojne vradnostl, dell pri sa drugim | stampa rozulat stl decimalne tacke, Program troba da detekivje pokural dolienja s2 ° 3. Napisite orogram kojl uctava celobrojnu vrednost i stampa svaku city na sxpskohrvatskom Joziku. Na primer, ako se vkuca 82 treba stampa!“ dva" 4. Program 5.9 invertue elie calog broja Ine radi korekino 2a nagativne vrecnostl Dopunite prograin 5 9 tako da moze da Invertuja i nagativne cele brojove. Na prliner, 195 Invertijo USS 65. Napisite program Kol! uckav# ceo bro} n. sumira brojeve od n dc 2¢r ako Jo regativne il od 2*n do n ako Jo f porttimno, Napisite verlju sz for petliom | verzu 63 while pottiom. GRecuitat sodecey prograina zavis! of rac yaaa sosscag wo il Of racunara. Ako program radi nokorekino, maing { chere; c= OnE; (c= = oxtF) taht wrod rina luca tueba objesnit\n); Jozi, k20 vecina drugih programskihjazika visokog nlvoa, obezbaduje stedsiva ‘2a doHlaisanje skupa homogenih podataka*. Oval tip podatak naziva se vektor (engl array). Ova poglavie opisule nacin 2a dotlaisanje voktora | njhovu upotrebu u G programime. U narednim poglavijima opisan je upotreba vektora u funkclama, suk turama, rizovima karaktera | ukazateljina 6.1 Jednodimenzionalni vektori Programl Costo koriste homogene podatke. Na primer, pretpostavimo da hooemo dda napisemo program koji manipulise Isplinim ocenama stusenata { da th ocena po SStudenty ima 20. Na osnova predenog materjaia o C Jeziky moral bismo da dek larigemo svaku Ocenu ponaosob, 1, Int ocenat,..ocena20; ‘Ocigledno jo, da Jo ovakav nacin deXarisanja ocena glomazan. C jezik obezbedule moguenost deklarisanja vektora, Koj! se defrisu kao skup homogenh podataka, Vek fore toba razikovatl od struitura (naredno poglavie). koje predstavjalu skup heterogenih podataka. Drugim recima, element vektora su istag tipa, dok sv element Sruricra razici htipova. Primer sa ocenama mozemo jednostavno resi deKiaracjom wpa atage pa, ma pier in Int ocenaf20}; Voktor so moze smatrall kao promenlva sa Indeksom. Tip int deklarise tip svih elemenata vektora, koji ima 20 (bro] lzmedu uglastih zagrada). Dakle, doklaracija Jod- nodimonzionalnog voktora je tip podatia (uv gorjem slucaju Ini) pracona Identikatocom sa celobrojnim konstantnim izrazom u udlastim zagradama, Vrednost konstantnog izraza, koja mora bil pozltvna, Je velicina veltora | odreduje bro} elomenata u veltoru. Indeks vektora uC Jeziku Je v opsegu od 0 do veliine vektora lumanjenog ze 1. Na primer, u dakiarac Int ocenal20}; , gde prvlin- doks ukazuje na vistu, a drugl na kolonu. Ako gu. ju matricu oznacimo sa M, tada za ‘ozhacavanje elernenala u drugo] vest! | drugo} Kolont koristimo notacily ML), gd Je ‘opseg 2a lndaks vrste lod 1 do 4, a opseg za Indeks kolone | od 1 do 3. UCC jeziku horisti se analogna notacja za selekcilu elemenata dvodimenzionalnih Veltora, Madutim, posto u C jeziku Indeksi potinju od 0, prva vsta matrice je vista 0, @ prva Kolona Je kolona 0, Gorja matrca Ima sledecu prodstavu u C jeziky byco}kolone () o4 bro} iste () 0 13 48 a 1 35 108 ° 2 8 0 3 3 4 1 9 Notacja 2a oznacavarje elemonata matice jo MUU) 1 Uyod uC jek & do jo prt indeks bro] viste, a drugl bro] Kolone. Na primer, u irazu suma = Mfo}[2} + M(2II21 sabireu so element 1 nulto] vrst | drugo} Koloni (~21) | eloment u drugo] vist | drugo} ko'oni (~-9). ‘Dvodimonzlonalnl veldot ge inicjalizuluna scan nacin kao jednodimenzlonai.in- Iclalizacion! element se navode po vistara, Vilcaste zagrade se mogu koristtl 2a ‘odvajane inilalizacionih elermenata jedne vst od druge. Iniljalzacija matrice M Je static it Miao} = { (19, -18,24), {96, :01,0} (5.0.5), (3.1.9) k Inicijaizaciont element! jadne vrste su objadinjenl vitcastim zagradama | odvojent zatezom od ostallh, izuzev zadnje grupe. Upotraba viicastlh zagrada je opclonalna, Goma Inicalzaclja se moze napisat kao statle nt M[4][3] = {19, 418,21, 96, 101, 0, 5,0,-9,3, 1,9}; Slicno jednodimenzlonalnim vektorima nije neophodno iniijzaovatl sve elemente vektora. U dekiaraci static lt MII} = { {19,19 {esto (so). oy i inijalauy so prva dva elemerta u svako| vist. stall element se inicjaizyuna 0. U ‘ovom slitalu viicaste zagrade 2a objedinjavanfeInicfalizacioniholemenata pojadinih ‘usta su potrebne 2boq zeljene iniljaizacje. Ako se vitaste zagrade ne navedt In igjazyu se element nite Iprve vsti prva va olementau drugo) vet. U programu 6.6 realizqvano fe skalarno mnozenje mattica, Maria fe dimenala 3*5 sa elomentimatipa float, Skalarkojim so moze element matric fo tipa float. Vrednos- Welemenata matice su lilatzovar programa. Vrednos skalara se uckava. Program 66 1 Program za skalarno mnozenje matrica */ main) { in vrst, kos Host scalar; Static float matrica (3}{5] = { (7.07689,58191,317291), {1600942990077}, be2i122.4499) printi(Originalna matrice \%'); for (ursta=0: vistac3, +1vrsta) for (kol=0; kol 10); do ( print!(’Bro) kofona ? [1.1 Seanl(%a, 8n_ko!); while (n_kol <1 |» hol > 10); Vator ¢ 3 1 Prva matcica *] printt(\nPrva matrlea:\"); for (vrste=0; vestacn_viste: +4vrsta) priratElomone ed, vste\, vata) f for (kol-; kol= epsilon) Kx = (kx + kx) 72; returi{kk_x); t maint) elnt{(Kvadratni Koren broja 144 je %8N\n", kvadratni_koren(1440)); prioti¢kvadratni koren broja ? ja %.8A\r, kvadratni_koren(20)) } Program 85 I2laz ‘Kvadratr! Koren broja 144 Je 1200000000 Kyadratn| koren broja 2 fe 141421356 U sim dosadntjin kam ptosis da argued dob pravne wrodnoal cosy deo sk vl krarant Koen u pogamu 82x oad rare or Usow wt pao veka a had nec suse Dobia so be. Sroraon po 8 rego cane, ata erro bora onpiean Drgin vin ule raran karen oe tena za nogthre vednos! tna rom arguneria (th adoga pororo jp wedrae sgurantsra poeta frat unico, iaho be ina onsne srr za elica Wedron guna’ Een trie srt tren tea cas shar ro ple weno a hepane steno vaca “19- Ne ova) hain trkla fo zaslcena” od axdhvina pekorektnih argumenata lz pozlvaluceg programa. Kompletna funkcija kvadre ni_koren jo double ivadratnt_Koren() double x; double epsilon ~ 0,0000000!, kk x = 1.0 Ho<9) returnt-1 0); 2 uv Chaz hk 8 Ie 2) (KIRK KN 2 ~ epson) resunth 9 rolevljua tunkeljafQ se poziva pomocu ‘ste, argumenata) Fankuija raze bt poxvana Iskazom kelja so moze Kors u svi. Sutajavima U koma Je Cozvoljt lerae C jezik ‘Hists_argumenata) Prevodilac Zahvaljujuct kiwenc} ree! void signalizira sintaksnu presku 7 iain( 1 ii ‘oid print_charg; he ot_char(x) ‘de je tuncifa print_char definisana kao ‘ola print chart) char 6 { rine sec ima wedhost an & > sancti aca fue u pais program, kv isaertu 2 Ni cclasiom na bra) pete, \wednos! koja se fom pritkom evenuaino Kors Rorialycam ogra isn, Ako woven vedo dalek up oa, fogiamr nije o tome upozoren. Na 2a!0st | pored prednost, ennogi programer Kors tip voldwdadaragjamaturkela. ae pall Josadasnja diskusia 9 © funkeijama, Funke s& Letsavaju pozlvanjern imeniom | specifickanjam liste stvaenin ar ‘qumonata, Lista st arn argumenats more edgovaral broju)ipu formalin argumenat a Getnil tunkeje. Swi argument sy prenose vrednoscu, Ovo znaci da se Svaki arg. meet Lracunava | Kopirana viednost Korst lokalno umesto formalnog agument Otuda, ako se promenljva kori kao argument, v:enost promenlive senece promentt b poshajucem progratm4, menja se koplla vredaost! promenlve. Prenos arguriinat wrodnoseu |e razliot of prenosa retersanjom, Pri prenasu argumenata relerisarjer. operaciie nad argumentina u funkell se obavjaju nad vednoscu promenljvin pozvejucem programs. Sve promene agumenaia odrazavelu se na vrodnost romenijus u pocivajucem prageanis, U C jeztku de0 argumenata se moze prenet! Srodnoseu, & deo relersanjem. U poglavlu o ukazateljima objasnjen jo tmetod 28 Toalzaciu prenosa referisanjom. Metod se sast}u prenosu adress promeniivh, cime Je funkc4i emoguceno da kris! rednost promenijve u pozivajucom program Funkeje se detarisy kao iodividuain’ objokt, cle definicje ne mog bi ‘ugnjeadane, Medusim, pragram se sastoi od serie Jedne il vise detinicijatunkija, Ove ankeje se mogu meduscbno pozlvat, Funkcie se mogu karst u svim slutajevima, ‘ode So mnogu keristtl izrazi saglasno zadatom tipu funkle (ako tip nije naveden, onda {8.90 dotiici ny Pozvanje fankclje podrazumeva sledece aktivnost: 1. taraatullst argumenata se eracunavalul njhove vrednosti dodeljul forma argumertinal 2. levisava co tolo funk, 3. ako Tunkel levrsava relurn, kontrola programa se viaca U pozivajcl program {funkcija maia ii neka druga funkcja). Ako return sadr2ilraz, on se lzracunava {ia veednost vraca u pozivajucl program. Ako return ne sadratizraz, nikakva ‘rednost se ne vraca u pozivajici program: 4. ako funkola ne sad return kona programa so vraca u pozivajucl program: psa Kray ela funkeje (oznaten zadnjom ~ .vorenom viticastam zagcadorn ( nikakva viednost se ne vraca, 8.4 Vektori kao argumenti funkeija Prenos vektora kao argumenata funkcija obuhvata prenes pojedinacnit olemenata prenos celih vakicta(jedno- | vigedimenzionalnin) Prenos pojerlinacnih elemenata ne razlkuje se od prenosa promentjvn i Konstan. AL Na primar, ishcz za lzragunavanje kvadratncg korena 1+ 1-09 elementa vektora x | dodellivanje iracunate vrednosti promenijvoj Korer Je karen = kvecratn_koren xi) cod pretpostavkom da ¢ tip H+ 1-09 elementa Jadnak tip formainog element funk fivadretnl koren {-double), U protinem, ako up elements vektora x ne odgowar tats ne 1 Uvod u Clezik @ formainog argumenta, neophodna je konverzia u korektan tip. Na primer, ako Jo voktor Xxtipa Int, orda se Iskazom koten = kvadtatn_ koren(double) x: doblja koroktan rezutat U funkeij kvadratal_ Koren nista ne treba biti Korigovano il dodato za obradu clomenata vektora x. Furiecja kvadratni_koren, prihvata element vaktora x kao I Saki drugl argument tipa double. Vrednost efemonta voktora x se dodeljuje formainom ar ‘gumenta u trenutku pozivanja funkcije. Program 8.6 korst funkeju kvadratni_koren, U main tunkciil oklarlsan je voktor sa elementima tip Int, Koj su iniljalizovanl u dekiaraci,Funkclla kvadratnl_koren se potiva sukcesivno za svakl element vektora. Operatorom kast vrednost int se konver- {uje u vrednost double, koju kvadratni_koren prihvata kao argument. U programu 8 6 |e evidentno da funkeija kvadratn_koren pritwata elemente vektora x kao | svaku drugu wednost Frogram 66 1 Program za izracunavanje kvadratnog korena - Newton-Raphson-ov metod */ 1 fja 2a laracunavan double @_vrednost(x) double x; P* apsolutne vrednosti */ reture(x<0)? x: x) } double kvadratni_koren(x) |* {fa za tzracunavanje */ double x; If kvadratnog korena*/ Gouble kk_x = 10, epsilon ~ 200000001; white (a_vrednosi(kk_x * kk_x - x) >= epsifon) k= (x | Ri x KX) 7 returifkk_x); } maint) Int static Int x/5) = (4,144, 2.3, 5}; for (i=0; fe5; +41) printi(’Kvadratr? Koren broja %d je %8N\r. i), 1 Funkcll, orien! memorske Hse. us kvadratn!_koren({double) v{i])) } Program 86 I2lez ‘vadrstal koren broja 4 Je 20¢000000 ‘Kvadratni koron broja 144 je 1200000000 ‘Kvadratni koren bro}a 2 Je 141421353. Kvadratni koren broja 3 fo 173205001 Kvadrainl Koran oroja'§ Ja 223605798 Pranos celth vektora (jedno- | vitedimenalonainih) razlikuje se od pronose pojedinacin elemenata. P-enas Jadnodimenzlonainih vektora ostvavuje 69 navodenjars imena vektora u pozivu funacije bez Ikakvihindoksa. Na oval nacin, ufunksfu se prenos' Informaciia (adresa: o lokacli vektora u pozivajucam programu, Znaci, Jadnodimen. Zlonalni vekior! se prenose Iskjucivo raferlsanjom. Pranos coll: vektora metodom prenosa vrednoscu nije mogue u G jeziku, Na primer, prenos vektora a sc 11 olomenats ke rmaxirmum(a.a) U defini formalnh argumenata funkelje maximum odgovaralucl argument more bt definisan kao vektor. Na primer, funkcija maximum mora bit detnisana kao nt maxima, 9) int all. } Prethodna dofinicja definise funkalju maximum, Koja vraca vrednost tipa Int, kao argument prihvata Jedniogimenzionaini vektor sa elementima tipa int | vrednost n tipa Int, Dimer2ija vektora u defini formalnog argumenta a je pclonalna. Program 8.7 realzuje jednostavnu statistiy na olomentima vektora tipa int Funkcja minimum, maximum i suma lzracunavalu minimainu | mai-simalnu rednost + sumy glemenata vektora. Argument! funkella su vektortipa It | vrednos tia Int, Kola droduje bro} elemenata u vektoru. Funkcjo minimum, maximura | suma vr2caju calobrojnu vrednost. Funkcja st_wsdnost izracunava srednju vrednost alemenata vok. tora | priwata kao argumente véktor tipa Int I colobrojnu veednost, Moja odraduja bro} slomenata u vektoru, sr_vrednost vraca viednosttipa float, Uoeite operator Kast return isbazu finkcjo sr_wednosi. U main Tunkel deklarisan jo vokior aaa sa ti slamanata tipa Int. pratt Tunkcijom, koristecl definisane statsticke funkelia, stampa se ‘maksimaina, minimeina, suma | srednja vrednost lemenata voltore a Frogmine7 1 Program 23 elomentarnu atisthu *] mina) Pj za itracunavanje miimuna ‘1 { ie, i mu= alo}: To: (F-4; fen; 441) HW (ali} max) ‘may = afi]; eturs{enax); ] sumata 9) (+ 2a evacunvane sme Int n, all: y " g ( Int suri = 0,4 for (1-0; Jen: sua += afi, +41); roturn{suma); } joat sr_vrednast(a,n) ("Hla za z-acunavanfe *! int nf) 1 srednie vrednostl "1 raturn( (teat) sural, 0)) 1) main’) Sule af = W957 941019,7 19.20, Pe. umonlsre Mase ‘unkelje, doment prinl'inin: nusnSed\nmaximums%el\asr_vredinost—%! sume, ‘minirmuto(a, 1), maximuny., 11), ‘r_vredeost(a, 1), uaa, 1); ) Programm a7 I2'ez ‘maximun=21 ‘st_vrednost=1100000, _suina=s24 Visedimenzionaint vektori se prenose relerisanjem, slieno prenasu jednodimen- sionainh vextora, s twa razikom 3t0 je epcionalna semo prva dimonzija vektora. Druga dimenzia uw riz sve naredne mora se spectcirall Na primer u defini funkclje 11 Int ti(a.y ko) ira POTS vo argument a se detnise kao toulmenzionain! vektor, Oruga i treca dimenaia voltore autalu bil specticiane. lz th razloga, C prevodtiac signalizra gresku u stedeco} deficit Inn ala.) iat af]QE5). ve } Jor nje spocticrona deuga dinenzia arguinenta & Razlozt za ovakvo speciticrarje {dimenalja su oplsenl u poylauu o ukazatejira. Prokos dvadimenzionalnih vektora je identican prenosu visedimenzionaliih vek- tora Deocimenaionalni vektoc prenose $e tavodenjem imena bez indeksa, odnosmio thrmenaia stim sto je u defini formalnh argumenata cbavezna dimenaia lone, dok Jedmenajaveste opcionalna. Program 8.8 uvodl dvodimenzionalne vektoreu definicju foakela Funkola trans_matriea realizuje transponovanje matrica, Argument funkcije fu matiieg mt, Kola se tansponuje, dve colobrojna vrednosti vk, koje odroduly Bro} ia | kolona u mathicl mt, respektivno | inatrica m2, Koja prihvata wansponovany thatricy m1. “ransponovanje matica Je operacija nad matricama pal kojo| viste triginalng matice pastaju kolone, a kolone wste1 rezultantno| matric. Stoga, argumon- us + Wvod uC jenk © _ |X su bro) kolona I rsta u matricl m2, respeltivno. main funkelja poziva funky trans_matrica | stampa originalnu | transponovanu matric, Program 68 1 Program za transponovanje matrica *! trans_matrica(m,v,k,m2) |? ffa za transponovane */ Int, ki PF float matrica *! fioat | enti}, m2{It9: ( ine i, fs for (i-0; icv; +41) for (j=0; ek; +1) mf gti] = mii return; } maint) { Int ij static lost ma[4}{3], mi[3}f4] = {1020304050, 607 0.8090,00,510,20}; trans_mateica(, 3, 4, m2); printi(Matrica pre transponovan|a\rr); litter \ for (i=0; 3; ++i) tor (J=0; J4; +#1) print 5 2%", mai}, (9 == 1) 20 2} int(\natcica poste transponaven|a\) print Ne Forti fea 41) Tor (-0; fed +41) ris tc, mat (2 Program 88 Izlaz ‘Matcica pre transponovanja 400 200 300 400 Funkcile, doment | memorliske Kase « 500 600 700 300 9.00 1000 1100 12.00 Matrica posla transponovanja 100 500 909 200 669 1000 300 7.00 1100 __400 800 1200 8.5 Strukture kao argumenti funkcija C prevodlocl dazvoljavaju da se struktulrane vredinostl penose kao argument funkela I veacalu kao rezutal funkcl]a. Statlle verzije C provoulaca ne dozvoljavaly da 0 strultulrane vrecinost! prenose kao argument, pa so svak! cian strukture prenos! pojedinacno. Ovo ogranicenje |e otezavalo rad sa strukturama, Hove verzjo C prevodllaca dozvollavalu pianosenje colh siruktura, stim Sto se, za raziku od vektora Drenose vrednoseu. Program 89 Ispituje natin prenosa struktuiranog arguenenta, Funkcla azsignt kao argumente Ima struktuirany vrednost x !dve vrednosti rea | imag tipa float. U funk main struldulrano| aromentiva| x dodelulu se vradnosti 12 | -10.5 | stampaju prvom printf funkcijom. U funkcill assign? argumentu x dodolju se vrednost 56 1651 stam- pale printf funkcljom u funk mssign, Nokon vracanja lz unkele assign’ ponovo se stampo)u clanovi promenljve x Vrednost clanova se nije promenia u funkcil exalgnt | pored eksplictnog dodeljvanja viednost! u funkcill assignt. Ocigledno da se struk- tuiranl argument prenos! vrernoscu, Jer bi u protivnom po tzasku iz ‘unkcile assigns mao vrodnostl 55 166. Program 69 1 Program za provaru racina prenosa struktuiranth vrednosti*/ typedef struct { float re; Moat im;} COMPLEX; assign(x, real, eg) ‘COMPLEX x, ‘oat real, imac; { x10 = real; im = imag: print(‘Clanov! u fi\a"): /* fia 2a proveru retode. +! 1 prenosa strukture a fo */ AP cll EI a anal RE 2 vod uC jezik priiit(X19 = 90 im = yt x20, lm; mei) PORPLES x; «re = 120; x1m =-105; pei! ( Chany! pro pozivacy a tia\n') print (2 = 8 Adm = fr x6, xl); essiont{x, $50, 66.0); DrinlifClonovi posle vracanja iz f}e.\) iin Ase= 8d edi ANE, 28, xd): Frogeam 69 I2lez Clenovi pro pozivanya tye X59. 12000000. x1m « -10500000 Clanov! wtf sua = 551000000 x1 = 63000000 Clanovi poste vracan/a iz ta: x40 = 52000900 _x/m = 10.500009 Program €.10 realizulo sabiranig + mrozenje Komploksnih brajeva. Kompieksn b:9jevi su predstavjeni strukturom COMPLEX u kolo clare j.odstavja realan deo, a an Imag imaginal deo kompleksnog broja, viruktura COMPLEX j¢ definisana pomucu typedef rapisana fe na pocetku programa van svinfunkclja. U ovom siucaliy ‘oblast definsanosti strukture COMPLEX Je e8 lzvornl program. Zato tip CORIPLEX ‘mazcino korstl y svim funke‘Jama. Drugina socima, struktura COMPLEX Jo globalna u progtemu. U drugom slucaju, da smo strukturu definisa wv neko} > tank, onda bi una mogla da se Korist! samo u to funkeij. Ovakva defini strukwure je iokalna u to) funkeif. Za ostale funkelle ava struktura ne bi bla ida (i detinisana), pa bl stuktura (COMPLEX morall da definlsamo u svako) funk u kolo} se korist Program 670 I" Fvogram za sablranje i mnozenja Sowoleksct brojeva *t ype steuct { float 19; Hot in;} COMPLEX; COMPLEX essign(rea, nag)/* {ja 28 dodeljivanja *! ‘cat ceal, imag; J" vrodnasti kumpleksnimn */ # Funkgle, domentj memorlice Mas 4 /* brojevima *) COMPLEX 2; 220 100; im = Ime: return(z); COMPLEX edd(x, y) COMPLEX x,y 1a 2a sablranfe *! J* Kompleksalh Erojove *i { COMPLEX 2; wren x10 + ¥10; zim = xlm-+ yn, raturngz); y COMPLEX multiply(x, y) — [*t]a za mnozenje*) COMPLEX x, Yi 1 Kompleksnin brojeva *i { COMPLEX 2; ze xre* yse-xim* yim; air xo * ym + xim* y20; returntz} } ‘mair() { COMPLEX x, y. 2; x = assign(120, 140) assign(b5, 105) Fo dabeay: ; pr BFPO) 2t9(%621 A212. ro, xh, re, yi, 2,2) z= mutily% ¥) tain eat ea han MC%21))-8 (KAUN, ze, xlm, yre yl, 22,2): ) Program 810 !zlaz s200+I*(4400)}+{B501)"1 10.50))-20.50+(3.50) ‘2001i%(14001I"(8504I"(1050))-24900¥4-700) _ 20 __s WuoduCjorie e _ Funkolla assign kao argumerte prtvata float veednostl. dodeljuje clanovira promenijve z vtedhostl reat |Imag tako dobijenu vrednost vraca u maln Kako assign Picea resulta tipa COMPLEX, u deiaracil se mora zadatl tip COMPLEX. Funkcila add wehie ava Kompleksna broja prodstavijana strukturom COMPLEX. Argument funkcije Sd su wrednost xy tipa COMPLEX. Definise se lokalna promenijva z Kola memorise Soir vredhostixly po clanovima. Funkclja vraca vrednosttipa COMPLEX. Funkcija mu {ply pivata kao argumente dve strubtulrane vrednost tha COMPLEX, dafiise lokalny Promoniu 2 tipa COMPLEX, mno2l realne | imaginame delove | veaca prolzvod tps POMPLEX. cunkelje assign, edd | multiply mogu bith realizovane | bez lokalne promanljve z 8.6 Rekurzivne funkeije [Aigortnl mogu bk! Herativn! i rekurzh,Iteratvne funkelje realizju terativne a gortme | Korscene su u dosadasniim programima vise puta, na primer, funkcla Wradratnl_koren u programy 85, C[ezk takode podraava rekurzvne algortme, Rekur “no funk realizlu rekurzivne algocime | to su funkcjo kojo pozkalu same sebe, Skokino Il indiraktno. Program 8.11 Je jednostavan primer rekurzjo funkcla man, koja se nikada ne zavrsava (dallje bas tako?).tskaz main; ‘uprogramu 8.11 Je rokurzivni poz iste funkcije matn. Program a 1 Rekurzija fe main + main{) & rRekuraita te malo): maint); ) Program 811 Iziaz Rekurzifa te main Rokurija fa main Program 8.42 esledecl ednostavan primar rkurije za tzracunavanje sume port wih brojova | poeta ha rekurzinom aigorimu da Je suman pozkvnlh coh rojeva Ce sin) Jodnaka sur brojan I sume n-t prethoe'nin brojova (= (0-1). t __ Funke, doment i memoriske ase So) = 9 + S(n-t) onto zeta ohio om < = 1. Funk malnpozha inky sume za n= 19 Keontla programa so pron! ufunkchy sume, Kako Jeusiovn< = {nes visa ve skaz com urazu J po turk num, al zat =8 ako radon, so dok $9 no Ispun slov n<'= 1. U tom moments lpunjn Jo usw zo esavane naa feturn(n). Sada so dosnva cbt proce wacaniaupozhaluce nk sum 0 9 {unkco koja adgovara arguments n= 10, kada s orton waea uma, Ka amps racunalu sumu. Proces vracanja u pozlvajuce funkeije sua je prikazan u taball 8.1 Lova kolona sadr2i pozlvfunkcije sume, a desna vracenu vrednost Faas 6 Rakai proces tunkaje sume(ay iY poz funk wracena vrednost sua} 1 suma(2) 24suma(t) 2+ Saale) B+ sura()Ha+7+6+5+4+94241 sura(s) 9+ suma(@) N9+847+6+5+449+2+1 suma(io, 1+ suma(e) 11049484 7464845494244 Prograni 672 — If Program za rekurzivno izracunavanja sume n pozitivnih celih brojeva *! int suman) 1 fja 79 izracunavanje sume *) int n; { / pozitivnih colin brojeva Ven 1 pozitivnih cotih broje return(n); alse returo{n + suma(n-t)); y maint { nt n = 10; rine ua rojova cd ¥ do Mey Mh, un) Program 812 I2laz ol ol, 2 IS RS NON... SAT oe iNet a 2 Uvod uC jez « Li sjnea od Mavlslma funk 2a rekuralvno lzrecunavanja faktorjla, Faltorjet smo racun avait Revallvag u program § 7. U programy 6.13 faktorit se racunava rekurzivnio Funkclla fal:torljel na osnovu rekureivnog algositma Flo) = 9" F(oa) (962 je F(a laktonifet brojs 2, 2 F(a-t) taktonljl broja n-t. Stoga, funkcija faktorjet Foiuraimna paiva sama s2be 2a vrednostl argumenta, koje 2a 1 manjl od prethcanog ‘ergumnnta, Kada $0 spunl uslov n= =0, nastajs 2bmnut proces vracanja u pozvaluce faa soj fakuorje, Svaka furs.ca vraca faktoxljl broja 1, ode Je I veednost argumente toluce poz'ajuce funkcll, 2adnja funkeija vaca u main faktorjl brojan, mt, Koj) tunsoja printt stampa. Funkelja main aracunava faktorjl za brojevy od 0 do 10. Bropran B53 1 Prograsn za rekurzivng I2racuniavanjo taktorijela *| Jong int iaktorij(a) 1 F)a.28 laracunavanje *} inn; P fabtorijela it(n retura((long)1): else returnin * taktarifel{nt)f } smsind) { Int I fer (1-0; femt0; +41) ‘peintl (2d! = ld, Fascortfel())s ’ Progresn 813 Izlaz net Hat wee a6 ale 24 __» Funkeile, domont t mumorijsie Kase 9 123 81720 71= 5040 a = 40320 9 = 962880 101 = 3628000, U programy 5.2 lzracunavall smo Fibonacijeve brojeve koristect terativni postupak. U programu 8.14 detinisana ja ekvlvalentna rekuratme funkcija bona, Kola se pozlva main funkcll 2a argument |, pr Cemu je =O... 19, Funkoja fibonaci u elge iskazu sadr2l dva rekurtivna poziva tunkoje fibonach pr! 2 argument net f dtugh 2a n-2 FRekurzivni proces $0 nastalja do istintost!uslova n< = 1, kada se avrsava return(n) | proces prekida, Kontraia so vraca u pozivajuce funkcie fibonact Program a4 J" Program za rekuezivno lzracunavanje Fibonactjevin brojava *) long tibonaci(a) If tja za tzracunavanje *| Int 0; 1" Fioanacifev'h brojeva *) { (nem) return((long)}; alse ‘raturntibonaclin) + Hbanscin-2)h maint) ( Int is for (jt; 1o=20; +41) pelt 510%, bcnaci(-1), (65 ) Progrars a4 Izlaz yaa Sh Oueeaess) 5 8 19 M34 55 a9 tH 293 07 610987 i597 25@4 4161 Mogi algoritm! imaju ekvivaleninu Reratiny | rekuraivnu formu. Rekurivna predstava ja clagantnja | zableva marje promoniivdh, alé zahteva memorsanje 124 # Uvod uC jezik & relovantnh parametara, Kako za pozlvanje, tako | 22 vracanje u pozhaluc funkel Momorsanje oh parametara, mada novidlivo 2a programera, "Wosr vrema, | Nomorskt posto. Na primer, na racunary DEC VAX-11, rekurzhnl pozW a, jadnin Celobrojrin argumentom zahteva remorisanje osam @2-bknih parametara. Zato Pd fisarju Tokura treba vod racuna o ovim resursima, Ponekad |e necphodna 200g Biranicenja u memorj! procesorskom vremenu reprogramiralrekurz}u kao Reraci ecgramat i ov razloga ne Koriste rekurzivne funkcle, Madu, la primena gale Je rekurajulako naplsatl | razumetl 8.7 Domeni identifikatora Domen fi oblast definisanosti (engl. scope) Wentifkatora, odnosno, objekata (promerive,funkcie, Konstante,labele | ipov) je podrutje programa u kojom Je kr: ikator prstupacan, Drugim reeima, u ckvrima domena odredanog Kentiikatora maze se pristuptl abjektu, kojag klontifikator imenuje. ‘lokom u jeziky nazvecemo siozenl skaz. kona svom pocetku sacra! dekiaracie promenlidh. Blokovt mogu bt! ugnje2deni, kad spojasnilbiok u petpunos! obutvata Chutrasn, ti paraelnt, kada su u potpunostl odvojer. Blokovi se ne mogu delimino preklapal_ Osnovno pravlo 2a edredivanjo domera Kontifkatora Je da Je kentifkator Botinigan u bloku u Kojem le deklarlsan, kao |u svim ugnjezdenim Glokovima izuzev U blokovima U Kojima je dekiarisan Isl idantfkator. Tada je spolasnitKdentikator mas- Fic unutrasnji, Identkator Je nedefiisan * nepoznat van granlca bioka (odredene vitieastim zagradama). Damene entikatorau razr slucalevima pokazacemo na konkretnim primerima U programy 8.15 u furkell main nalazo se dva bloka. U spolisnjem dloku dok larson Je promenijva x | Iijalizovana na 11. 3 unutrasnjem bioky delarisana Jo Frtenonifva pod Iti rnenom inllaizovana na 22. iednostpromontve sa kmenom ease stampa pre ulaska uy unutrasnj Blok, pre poste ziaska iz nutrasnjeg loka, Na os toe lara programa 6.15 lako se zaljcje da se u prvom trecem stampan stampa wethost spoljagnje promenljve x. U dragom stampanju Stampa se vrednost unutrasne tromenijve x. Znacl, v unutasnjem bioku spaliagria promenijva x Je mastlrana vrejenjor promenijvom sa itim Anenom. Posi laska lz unutrasreg bioka unutrasrja wrSliva x nestaje. Mozemo zakjuciti da Je domen unutrasnje promeniive x un ras lok. Program 8 1 Program za proveru domena promenljivih - 2 bloka */ 7 If Spoljasnji Blok *? inn x=; printf(Vrednost pre ulaska u un. Bok Je %d\-r, x); _+ Funke, domeal | memoriske Kase « 125 I" Unuteasnji Biok +f int x = 22, priatf(Vrednost pre Izlaska iz un bloke Je Sea, x) \ I" Spotjasnj! blok *! prt Vrednest pose Iaska lz un. Boks fe aX) Program 815 t2iar Vrednost pre ulaska u un. 10k jo 11 Vrednost pre islaska iz un. bloks je 22 —Vradnost poste alaska iz un bloka jo Promenve ke spaliasreg boka su srivene i maskiano od sta promoniivh s3 1 eee ee na Bk mote de bode uaion do Wine ‘dtedene sistem resus, Progra 8.16 sada! Vgole2dana baka. Promonve iy 12 su dekarsare kao Int |ilejalzovane na potelkprvog bloka. Ucrugom oki ponovo 29 dellase promerlva y kao foal, 2 u tecem promaniva z kao char. Promenivaxnje neve dearsana, pa prstypara ie sakog Binks Promenlivey FZponovo se deliaris,pasvy I piogtoke maskrane vom delaracjem Posie cravana pl ok dosupne su promerlve xy 12 dofarkane na pocethy (pred tae programa 8 6 9a edhostina x y!£ Bckoving). Program 816 1" Program za proveru domena promenljivih - 3 bicka *! main() { T°. blok */ int x = 11, y = 22, 2 = 93; print, blow: x = %sd ¥ =%I 2 %A\M, x, YZ) i "2. blok *) Hoat y = 55; Drinti("2. Blok: x = S60) y= %P 2 = mx, y, 2) { P73, blok char 2 ='w; ee ea [2 blok +) print(2, Blok: x~%O y= %t r= %AVWr, x,y, 2) eV 2) 2 Uvod uC jezik } hb POMC bloke x= Ra y= M2 = HAVE Bh Progra 618 lelae 1 dick x=1 y= 22 r= 33 2 blok: x= 11 y= £500000 2 = 33 2 blok: x= 17 y= 5500000 zw 2 blok: x = 11 y= 5500000 2 = 43 Lbickv=1 y=22 2233 tsa praia 0 derere prometish az 2a par bok, Y nt ns oko. programe 317 exe nk a Se rg Bh” eet akin Promotie selene yum farm boku netnisret Ne ‘nate u drugom paraleltiom blok 1 : " {nepee Prog #* Program za demonstraciju paratelnin blokova *) 1 Osnovnl siok */ In (= tt, y = 22, 2= 33 privtt( Osnovnl biok: x = eb y= Sed z= Ae x,y, 2): t [* Prvl paraleini Biok *1 lioat x = 44, y = 85,2 » 66; pprivi(, paralelni Biok: ¥ = %t y= Sui 2= NM, 2) { Dragi parateini biok *1 y= 0, prinut(2. paraielnl Blok: » See y= Me Ee MeN, x,y, Bh } ee re ee ae ee Program 817 Wziaz Osnovni blok: x = if y=22 z= 23 1. peraloini Blok: x = 4400000 y = 500000 2 = 6606200 4 Funkeije, domunt | memonjske Kas? 2 paraluini biok x =a y=bz=6 Osnovni Blok: x= 11 y= 22 £= 99 Navedena pravila 0 domenu promenlvk vaze za sve druge objekte u C jezik labele, konstante,tipove funk. Paralsin! | ugejezdeni biokov! mogu da budu proizvolno Kombinovanl. Najvazrija osobina blokove je da dodelluje meme promenlvim, onda kad je potrebna. Ako je fromoria ketican resurs, klaskom iz bloka oslobada se rezerdsana memoria, Trmagueavajucl jenu baju Iskoriscenost, Bloke omogucavaju deblarisanle | Parkeenje derttiatora u neposredno Bizhi, sto progam eh ctjMiim. Doxnen iden” tihatre je usko povezan sa pojmam memoriske Hase. Dall toxst opauje mamoriske ase kdontikatora 8.8 Memorijske klase identifikatora Promenive {funkcie uC jeziky imaju dva atributa: memorisku Has | to Memorloka Kissa odreduj iokacj | vere postojarja memrskog Boks dodelienog Mromen|fvo| i funkel. Tip odreduje znacenje memorisane vrednostl u tezervisancin Pika U C feziku postoje catiri mamorske Kase: okstorn, automatsk, staticid | racis- task. Odgovaraluco Kjuene reel, kojo se dodaju deklaracj dl defincyj su: extern, auto, sale i register, respektivno, 8.8.1 Automatske promenijive U prethodiom tekstu vise puta su pomenute automatske Fokalne promerifve Promenlive dokarsane u furkc}l su po defnici automatske, Takode, promeniive de cane na pocetku bloka su automatske, Nastaju pi uasku u bok il funk, nesta ead ce biok i funkcija zavrse. Deklaracile automatskin promenijvin mogu opeionain imal Kjuend toe auto. Na primer, dekiaracia { Inx y: } je ebvvalentna debtarach auto Int x, Ye } 2 Uvod uC jezik @ ‘Kad se Ulaziu biok il lunkeiju rezervise se memorja za automatske promenijve, koja 60 oslobada nakon ziaska i bioka il funkcia, a vrednost automatskih promenijvth {QubL Zhacl, domon ill oblast definisanost! automatske promeijive su granice bloka i funkoje. Pri ponovnom izvtsavanju bloka Il funkcije nova se rrzorvise memoria, all je pprathodna vrednost nepoznata. 8.8.2 Eksterne promenljive U dosadasnjim primetima pretpostavil smo da so program nalaz! u Jedno] datotect Zajedno sa svim funkclama, Kole program poziva, izuzev sisteniskln tunkoja print { Scant, Oval prlaz je dobar 2a male programe. Medutim, u slucaju veeih programa oval priaz nije dobar, posebno u usiovima timskog rada. C jezik omiogucava, kao | svi Fnoderni jezic, modulaeno programiranje. Veet program se moze sastojat iz vise ‘modula ll datotoka,C prevodiiac omogueava novo odvojeno pravoder|e | kasnije ob- jedinjavanje uievrsni progcam. Primer su funkcije iz sistemske bibloteke, Baz obz\a da Tise program nalazi U Jedno} il vise datoteks neohodna su programska sredstva Za komunikaciju Emedu istovrereno ill odvojeno prevedenih moidula. Jedan od natina Komunikacie lzmedu modula, blokova | funkoja je kori8cenje globalnih | eksternih promenijvih. Promenijva je globalna na nivou modula, ako je dekarisana van svlh fUnkaia u moduly. Memoriski prostor se trajno dodeljue njena memorjska Masa Jo ex torn, Doklaracja globalne promanive se ne razlikuje od deklaraclie blo koje druge promenijve, globalnost je odredena mestom njene deklaracije. Na primer, ako dek Traci Int prom = 0; stavimo na potetak programa, van svin funkcija, onda se promenijivo prom moze pris: tupiti 2 svih funkelja u programy. U ovom siucaju, promenijiva prom je globalna promenjva™ Uprograny 8.18 demonstrano je korsconje global promenih,dok farsanih van svih funkcija U modulu, Injhovo maskiraaje lokainim: promenijkim. Naime, lobelna promenijiva moze da bude masklrana lokalniom promenijvom istog imena Program 8 * Program za demonstraciju globelnih i lokainih promentjivih *1 int ys Tunscjp spo dais plobal cist halve dodatnasbejanje porabna ds bse Anko ‘ellsnaln ie lobaina oh moda whoo defieana, inkcile, domenl| memoriske Kase © 129 int 1() { int y = 22; returoty); y maint) { Prntraatobaly-s YolballBd yloel)-Ret xy H) Program 818 izlaz x{giobal)=11_y(qiobal)=0_y(loc Globalnl promo] prom maze ee print tz drugh moda, o gom|a ok lsacje cette prom tan goons estou proof Svaka global oromajree Iekstorapromertva. Ca promentha prom ots dostupna ts cruh moda, mora Utim moda delnsa dovaarjm Kjune ve! extent, ‘extern int prom: COvim Iskazc.n promenijva prom se ne deklarise, voc se definise. Definiclom se ne dodallyje memorifskl prostor, nego se C pravodiac informisa 0 tipu promeniiva. U gomjom siueaju C prevodilac so informise da Jo promerijva prom tipa Int | da je dok larisana kao globalna u nekom drugom moduli programa. Na oval nacin C provodiocu Je omogucen tretman peomenive prom u sklacu sa njenim tipomn | xasnia povezlvanje 52 modulom u Kore je promenijiva prom dekarisana. Ekstema promenijiva moze do buds Inicijalizovana samo na jednom mest Io ickjutivo na mestu svoja devaraciio* Razmottimo Jednostavan program, koji se nalazi u dva modula (datotake). U prvor modulu rodult.¢ nalazi se program char ¢ main) print Pre funkclet:¢ = %e\n" c); ‘0: PrhutPodetuniclotc o\n" 4 Uvod u 3 erik « Dirac lobar proms amogueava da laa © onoyucava da ae promonjvole moze pitupl 1 mesa utoline pos aula oe promoniiesalfucrom rel ester, Pais ivan da Seu modu modula. nla rkeat stem char ¢; tw Provodenjem modsla modult.c | modula, genersanjem avs lzvisavanjem lavrsnog programa kao izlaz dubijamo Prog Pretuskoje tc = Posletunkojetc = a Otigiednoe bi se efinicla funkclja tmenja viednost ekstorne promeniive . Nista se ne monja ake exter char 6 replsela unutar funkele ft 1g { ‘extor shar; Alo u modula module pesto velki Wo} funkeda koje Karte promenivu 6 Jogi fe vaplsa gon dein na pocetku mda, van ev unica, Avo pak pos. __ {oj mat bro funkela W modu, foes gor dai pial svako unk er i otnsienjs ne romero kre Sorento souks dete jednodimnciona veka, aman a ptr Na pln, extern int vokt{h; jetsgalna. U slucaju visedimensionlah vektora, samo e prva dimenzija opcionalna, o: fale Su obavozna, Na primer, Iskaz ep i opslonana, os extern int matical einise dvodimenzionain’ oksterl vektor sa 10 kolona, __» Furkeije, domeni | memorishahiase @ san Informacija inoze da bude preneta u funksu na dva nacina: koriscenjem eksterriy promenlivih|istom argumenata. Made Ima zuzetaxa, Kerscenje sie argumonata Je Pie attemative, zato sto 90,0684 unverzalnostfunkela | smanjuje moguencst naze Jenin i Uspuinih elekata (eng). sido eftcs). Jedna forma nezejonin elokata je kad HRnkela mena globainu promenlivu ne Korlsted stu argumenata. Oval nacin je fako podloten greskama. Prstup glotalnir: promenivan Koristecl stu argumenaia Cll program siivjin, joe s@ na jadnom mestunalaza sve promenijve, koje funkcja Kors fo je racocito zaacajno za odrzavanje vecih programsklh sistema. Frankel 24 po defini eksterl global objekt. Funkuja defnsana u jodnom modula neze da bude Koriscéna u drugom modulu bez dopisivanje bilo kaki kjucniy ret MMeduti, 1 modullna u Kojima se funkcijakorit (opcionalno umadulima u Kojima Jedotinisana, nora se dafiisal ip poate vrodnost funk: Defines vpa povratne te tnoat[e giobalna, ako so nalal na pocetku modula | van svi funkela. Tada Jo pris- Tupmona Ze sve funkolje u modulu. Suprotno, defini je okalna, ako je napisana u Oeil noke furkeje. Tada Jo pristupacna samo u funkci u Kojo je definsana, Na primer, pretpostavimo da modul mod.c sadr2l sledecu funky nar 10 ‘ } |da se main fenikoja nalazi u modula modt.c main { char 10; ) Na mestu dekieracie promenljvn u main funkeije, navadon Je ska char 10 so} dteso da J tip povr:ne wednost funke pa char. Axo je powatna vednost eee tipa it, onda je detnica opcionalna, er C prevodlac po dei uzima tp In PeeespPtiutiom slucau tip poveatne viednosti mora bil definisan. U protivnom, © provodiae ne sigalzra gresku po dfn pretpostava da j2 poviztna wrodnos pe Pit Nolkorektnfapraksa je ekeplcitno dafinsattp poretne vrednost bez obra na Up Int tne drug. 4.8.3 Stati¢ke promenijive Statleke promenlve Imalu dve vazne osobine. Prva osobina je elemontarila | comogueavalokalno] promenijvo| da zadr2i vrednostKada se zavrsi biok u korne e dek 192 2 Uvod uC jezik © _ larlsana, Ovo jo u suprotnost! sa defincijom automatske fokalne promenljvo, koja yubt svolu vrednost. Druga vaznija osobina Je da u sprezi sa globalnom deklaracijom sivaia mehanizam za privainost global promenijvh, koja Je veoma vazna 2a pronramsku ‘modularnost ‘Peva osobina staicklh promenijvih jo predstajena u programs 8.19. Funkclja main ‘vise puta pozlva funkoju fun, Kola Inkrementia staticky | autoratsku promenlivu Vrednoststaticke promenljive se 2adr2ava, dok vrednost automatske promenijive nes taje nakon [alaska te funie fun Program 878 + Program za ilustraciju staickih promehjivin *! int tura() Static int x= 0; ity =0; prinitstatio = et auto = AVF, VI eas Hy; } maint) { ini; tor (i=0; 15; +41) font) } Program 619 t2laz static ~0 auto=0 statio=1 auto =0 Statio= 2 auto~0 Static ~9 auto=0 o static = 4 auto Giobalne promeniive su I eksterne. Postoje situacije kada Je potrebno da promenljva bude globalna, aline | ekstema. Drugim recima, promen}va treba da bude fokaina U okvirima modula, Isljucivo funkelje, definisane u Istom moduli, mogu pris- tupt statlcko} promenljvo}. Satcka globalna promanliva je nevilva za funkelle van tog modula, Ova privatnost postize se koriscenjem kjucne recl state. Iskaz ‘2 Funkolie, domenl memorishe Kase # 125 static double prom = 0; ettarse promenl|*u prom kao staticku, adnosno, globsalnu samo 1 okviima dotionog modula, Staticke promenijive smanjuju mogucnost "konflkata’ Izmadu modula, Ke" koristeraalcte globalne promenlve sa slucalnc ist imenima. lebo: lzmedu automaiske | stticke promerijve zavisl od namene promonive. Ako 2elimo da promenijva za‘r2l svolu vrednost | posle vracanla u pozivaluct program (0a primer, funkeja odtrojava pojeviivanjo nekog dogadaja), treba koristilstatcks: promenijvu. U ovesn slucalu, treba bitl paziv ako se vrednost takve promonijve korist Uufunkeljama, Jer sa poretne vrednostl Godeljuju samo fednom ito utrenutku dekarisar Ja promenijve. Ako viednost promenlive treba reincjalizovatl posle svakog poziva treba koristil automatske promenljve. Slicno promanljvim. unkelle mogu bit definisane kao exiern il static, pri emu se extern uaa po definci, Staticke funkcije mogu da so kotista iskiuchvo u funkcljama, koje su deflnisane u istom modu. Staticka funkcija fe "novia za funkcife definisario van tog modula. Ako w nekors modulu iname funkell fun2, Koja ne smo bil pozvana iz funkelfa van modula u kolom Je fun2 definisana, Ispred Imena funkcle u define funkelfe pise 9 stat, 1), static double fun2(e) oat x; { Dofinicjafunkeije fun2 e lokalna u modu u Kolem so polavjuje. tun2:ne moze bil po7- vana Iz funkelja van tag modula, a za svakl pokusaj pozivanja takve funkclje © prevodiac signalziza gresku 0 nadefinisanom objoktu 4 Registarske promenljive C pravodiac pruza sredstva, kola dozvoljavaju programeru da utice na efikasnost levrsnog prograina, Ako funklja Cesto karistl odredenu promenljv, moze se zahtevatt dda se vrednost promeniive memovise u brzim registrima centralne procesorske jadinice (CPU), uvek kada se funkcija ixvrsava*. Ovo Je moguce ako se Ispred deklaracia promenlve stax Kjuena rec register. Na primer, register char e; Farad 2a vogisiaetapromenive wu ratatce;remaniive xa Yon ol pte ok 334 ____s Yeo uC ert Automatske lokalne promanijve | formainl argument! mogu bil deklarisani kao ‘ecistarske promsalve, Tipov promenlv, Koje se mogu memerisa! u registrima, CPU zavlse od raduneta, Osnovnl \pov. podataka In? | char, uz mogucnost koriscena ve skstore unsigned, fong {short gu bit mermorisanl u regstrima, kuo | ukazatel ‘Voktot | strukture ne mogu Dit doklarisanl kao registarskl. Posto CPU Ima ogranicen bro} reolstara, od kojh s@ mncglkoviste u druge svthe, promeniliva dektaiisana kao ro’ starska postaje automatska, ako nema slobodnih registara Wl ih nema uopste. C prevodiae pr! tome na signailza grasku. Na primer, C prevodilac 1a racunary DEC VAX-I1 Ignevisa rogistarsko promenive, posto sve registre CPU Korst u druge svihe. Rogistarska promenijva treba da bude deklarisara sto blze mestu gde se korstl, to posoea.a leunvlscanastraspaliazilh registra, jer $9 rezervisu samo onda kada se av no ‘oriste, Na primer, u sledecein delu programa promeniva ili se deklarise kac toytstarsna, noposted”o pre koriscenja v for pat ( rog'stor it tar (=0;1<8; +1) { I } ‘Zav'setak bloka u kome Je deklavisana registarska promenjiva oslobada regis Registarske promanijve se ponasalu kao aviomatske promenjive, izuzev sto se, ako ima rascolozivinregistara, memodsu u registrima. 8.0 Vezbe 1. Koristeci funkclu kvadratnl_Koren, definisanu u programu 8S, napiste funkcijy koja lrzeunava cetvt kcren broja tipa double. funky koja naazl sve faktore fa2tivnog celog broja. Na primer, ya=20285 an 1824343 2, Napisite fenkellu koja ceo ba] x stepenule na k. Funkoija prtwata kao argus.oet (6ve €6'8 Broja x! K. Funkcla vraca fong Int BR lat: ARE = Ess iil, tna 4 Fukolle, doment i memorliske Kase 435 4. Prosite grogram 8:9 funkojom za eduzimanje | daljenje kompleksnih brojeva. Pokusalts da napravite rogram ko uJedno| ln ucltava dva kompleksna broja med kof |e jedan od arimatickh operatoca (8 +, *,f). slleno programa 5.14, 5. Nepistte funkelju koja lsplscle plramidu sara, Koristocl ugnjezdene peti, 1 232 24649 4567654 507898765 67390109876 ‘yeooi23210987 890129454921098 90125456765432109 0129456789676543210 6, Naplste interaktiinu funkoju koja prolzvaiian pozkivan ceo bro} konvertule u rimski bro}. Program troba da radi dok se sa tastalure ne ukuca 0 B.UKAZATELH U ovom pogiavlu opisani su ukazatelli (engl, pointers) u C jeziku. Fleksibinost i moguenost!u radu sa ukazatelima | pravla ukazatelfske artmetike cine C jezik znatno moeniim | pogodnim za sistemsko programiranle u odnosu na ostale programske Jezike, kao sto Je PASCAL. Ukazatolli uC Jeziku omogucavalu formiranje stozenin dinamckih strukture podataka (iste, magacini, stabla, redovl I dr) | s tlm u vezi dinamicko dodeljvanje memorlle, prenos argumenata funkolje referisanjem, efkasnii rad sa vektorima | pronos funkeija kao argumenata u droge funk 9.1 Pojam ukazatelja Razumevanje rada sa ukazatejima zahteva opis pojma Indirekcije. Pojam indirok je vlo Cesto Koristmo u svakodnavnam zivotu. Na primer, pretpastavimo da hocete a nabavite taku 2a 5v0] Stampac. U firm! u kolo] radite sve nabavke se vrée preko rrabavne slu2be. Zraci, morate 2vatl Peru Perica lz nabavne sluzbe | dati zahtev za hnabavku traxe za stampac. Pera Perle poziva lokalnog snabdevaca | narucuje traku 2a ‘fampae. Na kraju cvog procesa dobijate tako Zel/enu traku, Nacin na koji sta nabavil traku je inditektan, jer niste ditektno kontaktiral sa lokalnim snabdevacem. Siltno so delinige Inditokcja u C jezku, Prolzvolina programska promenljva memorisana |e u fodredenom memoriskom bloku, na odredenc] programskojlokacij ti adresl, Ukazatol Jomogueavalu Inirektninacln 2a pristupanje programskim promenivim, koriscenjem| anipulaciom adresama promenvih. Pretpostavime da postoll sledeca deKiaraci}a celobrojne promenijve prom int prom ~ 6 azatel 137 UC eztku mazerno deklarisat! promanijvu, ukaz, prom Int *ukaz_prom, koja omogucave da so indicoktno orlstupl vrednost! promenljive prom. Karaikto: zve2- dica "*’ doklarso promenlivy ukaz_prom kao ukazatel), @ tip Int da le promaniva tvkaz_prom ukazatel| na celobrojnu promenljv. Znatl, kombhacla Int * devlarise da Je promenijva uks_prom tipa “ukazatal)na tip int, oznacavajucl de ce u programy bhi korlscena 2a Indirekian pristup celobrojrim promenijiin, Sitka 9.4 Ukazatelj na int, | ukaz_prom — prom Adresal operator & je Koriscen u furkelji scant 2a prenos ucltara vradnosil u pozWvajucu funkclu mair, Ako |e x promentiva proizvalinog tipa, tada |e vradnast raza ‘kx adesa promenliive x. Vrednost laraza &x more bil dodeljena promonljvj, koja je dekiasara kao vkaa‘l na tp kao oJ x Za promerive prom | wha, prom mozemo psa isaz - tukaz_prom = &prom; oll promenijivo] ukaz_prom dodelluja adresu promenijve prom. Na slic! 9.1 prkazar Je odnos ukazatella I promenijive na koju se ukazuje. Usmerena inlla pokazuje de ‘ukez_prona ne sadrzidireKino vrednost prom, nogo ukazatalj na prom. ‘Adresal oporator & je unaran istog priorteta kao ostall unarni operator. Asc=iaty ost operatora & jo s desna na levo. Opseg wiednosl, koje se mogu dodelti Lkazatelisko] promenivo] Je 0 | skup pozitivniy cellh brojeva, koje racunarsi sistem: moze interpreticatl kao memorijska adrase, Na primer, Colobrojnom ukazatelly tukaz_prom mogu se dodelt! vrednostl Ukaz_prom = 0: kaz_prom = (Int *)15320: nonin Ra eT 138. 1 Uvod uC jaz U pecom prtneru ukaz_prom: dabila vadnost 0. U drugom primeru, 0 ator kast je polrsoar, jer C prevadiac vruunos: 18320 trata kao celourojnu konstantu. U prot hon», G preveuiac signalizira nepodudarnosttipova podataka, Operator Indirskelje « cmogueava Indvekino pristupanje porrenijvo} koristec kaze! na ty promenjive, Ako jo x doxlaisara kao Int, tade se iskazon = *ukaz_prom; promen vo] x dedeljule vrednost promenljive na koju ukazctel] ukaz_prom ukazule Posto je promenljva ukaz_prom u ranijem Iskazu postavijena na vrednost &prom, fetekat prethodnog Iskaza je dodalvanje promenilvo) x vrednost promanijive prom 5). Na ova] nacin promenijivo} prom se pristupa indizoktno proko ukazatolja Uukaz_prom. Direktna Vrednost ukaz_prom Je adresa promenilive prom, doi je *ukez_prom ladiraktna vrednost prom, vrednost na adres! sadr2aro] u ukaz_ prom, Operator! *1& su inverznl Pretpostavimo da Imamo deklaracia wt y, tad su iskaal wm oe elie opet ekvvalontan Iskazu Operator! & | * su llustrovant u programu 9.1. Program 9.1 pokazule inverzncst operatcra & | *, Promeniive prom | x su deklarisane kao iat, dok je promenijiva ‘ukez_prom deklarisana a0 ukazatelj na tip int. Adresnire operatocom dodeljuje se ‘adr sa pron 2nl}ve prom, Operator indirekclje promenlNo| x lndrekine dodeljue vred- host prmenilive na kolu ukaz_prom ukazule, a to J@ promenijive prom. (=5). Na ‘snowy llaza programa 8.1 oticledno je da su operator! *|& Inverz ya oF (* Programm 2u ilustracifu adresrog | Indlrektnog oporatora */ { Tot x, prom = 5, *ukaz_pran; tn lS tom PB astm a lk 2 Uiaratoy « 139 ukaz_prom = &prom; x= Fukaz_prom; prleti( prom = %a\nx = %\r, prom, x): } Program 91 Izlaz prom = 5 5 Vecina ¢ prevodiiaca dozvoljava visestruku indtekciju. U programu 9.2 deklarlsani su ukazatel Wt, u2, U3, u4 | UB, pri comu u2 ukazule na ut, ud ukazuje na u2, ud tkazuje na u3 | uS ukazuja na ud, Ukazatel| ut ilcjalizue se na adresu promenijive © tipa char. Potostrukom prlnenom operatora * na ukazatel| uS dobja se vednost promerijve (=) Program: * Program za ilustraciju visestruke indirekclje *| mai) { he char w,tut ud = €u3, b6, u2 = Qut, ug = 8u2; U5 = dud; prince = ct, ***4u5); Program 92 lalaz ‘Adresn | Indlrekan! operator mogu se nacl u lzrazima ravnopravno sa ostalim operatorima C Jezika, Program 9.3 ustuje primenu ovlh operatora u jadnostavnim ar metickim arazima, Priore operatora * | & je vis! u odnosu na biname artmeticke operatore, J" Progrem zs ilustraciju pelmene ‘operatora *|& u aritmotickim izrazima */ man) 140 fe Uvod uCjok @ { Int x = 5, y =10, 2, "0x = &x, Uy printi(x = %d y= %d\O\F, XY): printl(? * & ux = Ayr, +88 ux): printl('5* = * ux | uy + 5° - tux) * uy +7) printf (uz = 8 2) =*ux** uy =%d\T, (ue = & 2) =" ux ** Uy): y Program 93 Izlaz UE; saNyr x5 y + tuxns gtetuc/tuy +7=5 Supe & pst uxt ty 60 ‘Adresnl onetator se ne moze pment na sve objekte C jozika. Operator & 92 ne primenitt na 4. konstante, 2raz &100 je legalan. Dadellivanje apsolutne adrese (na primer £55) ove se st oprtorom Ka : ° : 2a re eat sootrta i ptostav ares eitor, Sto, a fever th Ba ay ee Ne per €0 100 [2 oyaho : se a fo dvasana bao rgisarsha promerti tada je izraz & Hogalan. -dresnl operator se moze primenit na promenijive | temer.e voktora, Ako @ a vok- tor, tada su lrazl Bal'0] Salil] logan 9.2 Ukazatelji | strukture U poglavu o strulturama definisana Je struktura datum sa tri celobrojna cana dan, mesec i godine structdatum —{ unazatelt » 11 int dan; Int mesec: int godina; , Strukivirana promoniiva deHlaise se Iskazom struct datum prodala ok se ukazatolj na strukturu datum dektarite iskazom struct datum *ukaz_ datum: vrodele.cor . EES vrodain renee: ee ae | prods son ee ee | Promenljva ukaz_datum jo ukazetell na tip struct datem, Na primer, postaviianja ‘kazatelia ukaz_datum na adresu siruktuirane promenljve orodala je sledece vukaz_datum = &prodaja; Posla ovakvog postavijanja ukazataljske promenilive uaz datum, sirultuirano} Promenllivo} prodaja se moze pristupitl Indirektno, posredsivoin ukazatelja ‘ukaz_datum. Na slic! 9.2 prikazana |e povezanost ukazatelja ukaz_estum na stuktury struct datum | promenlive prodaje, takode tipa struct datum. Seio%cja slana godina Ustruktuirano} promenivo] na koju ukaaule ukaz. datum Je moguce sledacim iskazu ‘ukaz_ datum). godtina ~ 1987; Zagrado (1 su neophosine, Jer Je operator. Prothodni Iskaz Je okvivalentan Iskazu iseg priorteta u odnosu na operator * BP ea rs FE Fig, at “vod uCjezk eo prosaje godina = 1987 olin se clan godine promenlve proda| postavija na vrednost 1987, Umesto iskaza (car, datum). godina = 1987; koji Je glomazan zbog upotrove zagrada, u C Jeziku postoll specijain! operator 2a in oan sek anova suture Toe operacr->, Prod istareealoan ukez_datun-> godina = 1987 Operaior-> Je operator selekoje clanova strukture ukazatejom na stuktury, Sas tol se 09 eva haraktara (°>', Kol Se Ne smelu razdvaltl. Ima nasi prontet med ‘oparatorima Cjozka, u rangu jo $2 operatoima pozvanja funkcle, selekcje elements vero shee lana sikture mom slurs Asocfahost og operator Prograin 94 lustre primanu ukazatelja na strukture. Ukazatellska promenliva uzz_datum postavja so na adresu promenijve prodaja.Cianovi dan, mesec i godin kKorisGenjem ukazatela | operatora -> postavjalu se na vrednost 28, 6 | 1987, respekc tiano,& funklja print sarnpa njihove vradnost Program 2@ lustracifa ukazetol/a na strukturu *f main} { steuct { int dan; int msec; int godina; )} prodala, “ukaz_prodaja ~ &prodala; akaz_proda|adan = 28; lukaz _prodaja>mesec = 6; ka prodajagodina = 1987; ppriotlCDatum prociaje Je %as-S02d \%Ahs, (*ukaz_procaje)dan, (*ukez”prodaje)mesec, (*akaz_ prodaja) gostina%s100); Prog am 34 zlaz # Urazatoll « Datum proda;je Jo 28-06:87 9.2.1 Ukazatelji u sirukturama Uxazateli gu bit clanovl strukture. U skaxy struct Int chaz { vty int "2; B otiniso se struktura int_ukaz sa dva ukazatelja na tp Int, ut j 2. Koristeci gore elinisanu strubturu, moze se deMlarset struktuirane (ne ukazate!) promeniva uke struct Int ukaz ukaz; Promenijva ukaz mozo bitlkoriscena kao normaina struktura, saglasno tipu svojih Clanove, Progtem 25 iustruje primenu stukture struct int_ukez, Program 95 | Program za ilustracl|u struktura sa ukazatoljima *) ‘mair() ( Inti, 2: struct { Int ut Int *02; yokez: kazas = 811; tukazu2 ~ &f2; 1 tukazut = 1; sukazu2 = 222; princi = 6d *ukazut = Sa, i, *ukazt); pel 12 = eo *ukazu2 » BV", 2, *ukazal2): } Program 95 Izlaz 148 U progeamu 95 Iskazima ukaz.ut = git kag u2 » 8i2 dodellujemo adtese cetabrojih promenivin 111 i2 Clanovina struktuirane promenljve uukaz Modus, iskazima sulazut = 411 suka v2 = 222, indivektno se dodeljiu vrednoet 111 1222 promenivim Ht f12, zbog toga sto je operator vised priorieta od operatora incieekelje, Znadl, prvo se seloktuju Clanovi ut | w2, pa tok ‘onda primenjuje operator indirekcije. Prema tome, gor Iskaz! lzvsavaju se sledecim redosiedom sukazut) = 111 *(ukaz u2) = 222, Slike $9 Hustruje povezanost promenlivn ukaz, 11112 {ukazut ukaz.u2 9.2.2 Samoret ane strukture Koncept ukazatella na struitury | struktura sa ukazatojima mogu se objediit uv struitur sa ukazateljom na istu stukturu. Takve strudture nazivaly so samorefeisano strukture. Na primer, struktura struct element { __# Ukszatell « char vt doubie v2 Intvo: siruct element *slod; Je samoreferisana, Jer sadrzl clan struct element. C provodilzc tetra can sled kao |os- tale clanove u strukturi, saglzsno njegovom tipu. Shodno recenom. deklaracija promenjve x1 tipa struct element ja struct element x1 Ukazatel] sle¢ u promenijiv| x1 moze se postavitina adiesu promenve x, xt.sled = &xt Selokcla ostah cianova je xisled->vt ~ Ww xtisled->¥2 = 125; xisled. 33 = 10 pel comu treba iratlu vidu da operator. => Imolu sti priovtet, a ascellatinosts leva ‘na desno, Gorn iskazl su, dable, ekvivalentn skazima xiv W! xiv2 = 125, xiv = 10) Program 9.6 “ustrule koriscenje samoreferisanih siruktura, objecinjavajuct gomje |skazo U kompletan © program. Koristecl operstor & ukazatel) sled postaviia se na adresu promeriva xt u kojo se nalaz. Korstecltako postavijen ukazatel ndirekino so postaviaju ostaliCianovi promenive x1. Stampanjam vradnosti clanova promenijve x1 mozemo sa uvert u Ispravnost navedenth Iskaza. Program 96 * Program zailustracijia samoreterisanh struktura */ maint) { struct etement { char vi; double v2; ‘nt v3; sit ne Ae i AB tl et ET 1s UWvod vClozik « siruct ye xsled = be; xslod- out = Ww; xsled->v2 = 125; xsloc >v3 = 10; printi(Vi =o v2=%0 v3 = %d\¢r, xsied-2v1, xslod->v2, xsled->v3): ) Program 96 I2laz visiw_v2= 12500000 v3=10___ Koristectstiukturu element deklarisacemo ti struktuirane promeniivex1, x21x3,t suet elomore x1, 22,23 tus struxtulane promeniive se povazuju u jednu list (slita 9.4). Program 97 doklaiso ir [promenljve x1, x2 1x8 | povezuje I ulisty navedenim skupom iskaza, eos 72 \srazi xt.sled-> v1 Hxtsled-> sled-> vt zabtovajy kratko objasnjene,Waraz x1.v1 solokiuje iar v1 na uobieajen natin korlstect oporater . (tacka). raz x1.sled-> vt Solekiule Cian vt, ali u promenl}vo x2, Jor je x1.sled postavjan na adresu promenijive xe. Slicno, laraz'xt.sled-> sled-> v1 selektuje clan v1 u promenlivo) x3, Korlstoc {Gros cuk indivekelu er xt.sled ukazuje na x2, a x2.sie% ra x3. Cian x2.sled sele'aule ‘fe izazom x1.sled- > sled, sto fe legalno tC jeziku, Operator -> se primenjue s teva hha dusna, takode | Kombinacija operatora ./-> « Ukazatei Program 7 1° Program 2a llustraciju povecivanalinearaih lista */ maint) ‘struct eiament { ‘char vi; double v2; int v3; ‘struct element *sled; ) x1, 22, x3; vat xavi~ xavi~'¢: X1Shed = 8x2; X2Slod = 6x3; xasied = 0; Print xiv =e x2vI = %o XBT = %e\"r, xiv, xisied->vt, x1sled->slod.>¥1); } Programm 97 tzlar wvinwa x 9.3 Dinamicke strukture podataka Samoretarisane strukture Koriste se u definicil stozenih dinamick h struktura ‘podataka. Za razlku od vektora il skalarnih promenijivh, koja se implictno dodejuj ‘memoria priikom niovog stvaranja | ostobada priikom brisanja, st0 je novidjvo 2a programora, dinamicke stukture zahievaju eksplictno dodelvanje | oslobadanje memorie. 9.3.1 Funkeije malloc, calloc, tree | realloc Dinamicka strukture zahtevalu eksplicino rezervisanje | oslobadanje memorje. U sistemsko| biblloiec! svakog C prevodioca postole funkcle malloc, calloac, realloc i {re0, Kojina se rezervise | ostobada memoriskl blok. Detincijo ovinfunkolja je sledeca: 4. char *malioe(size). Rezervise memorlsk!biok veicine size baltova, koi sein leljalizujo na 0. Arguinent size Je unsigned. U slutaju usposne rezervacls ‘matioe vraca ukazatel] na tip char, koji ukazule na rezervisani memorjshl biok. U prctivnom, vaca 0 148 vod Corie 2, char *calloc{n, size). Reze:vise memorijski biok dovoljan za memortsanje n lemenata svaki velicine size bajtova, znaci n*size, Argumentin size su size. Rezervisan memorisk! blok je nilializovan na 0. U slu¢aju uspesne sezervacija calle vraca ukazatelj na char, koji ukazuje ne rezervisani memor]ski Blok. U protivnom, vraca 0. 43, void free ukaz). Oslobada memariiskl biok, ko}! je rezervisan tunkcliama ealloe ii malloc. Argument ukaz e ukazatel| na char, ko ukazuje na mentors blok 2a oslobadanje, Funkclja free ne vraca nikakwu vrednost 4, char *realloc(ukaz, size). Osiobada rezervisani memorisl blok | rezervise novi veligine size bajtova. Argument ukaz je ukazatel] na char | definise nemerjskl blok, koji se reatocita. Argument size je unsigned | odredulo Volitinu realociranog memorjsing bloka, Ako je realociranje uspesno realloc \raca ukazatelj na char, koji vkazuje na memarisktblok. U protivnom, reatloc viaca 0, Program 9.8 Tustruje funkcije malloc i free. Upotreba funkcije calle | realloc je stiera. Na sil 85 prkazano je formianje liste poste rezorvacile memoriskog bio. Prva tunkclja malloc rozorise memodiski blok velitine sizeot(OEMO_TIP). Ukazatel] na fxerisan memos Bok remorse se u romenio gave, Katt oe Ie neophodan, or malloc vraca ukazatell na cher, dok Je glava ukazatl ¥ Soe oe se aa kas sl omorbani oka sulratpa DEMO. Zato, koistecl ukazatelglava, mozemo indrekino pistupt memoriskom bloku pos: tavitl danove fait | sled na specticrane vrednost Program 93 * Program za ilustraciju funkeifa malic | tree */ maint) typedef struct demo{ char fakt; struct demo *slod; } DEMO _TIP, *LINK; DEMO_TIP *glava, char *inalloe), "alloc; ‘lave = (LINK) malloc(sizeo!(OEMO_TIP)); glava->fakt » 2’ (lava>sled = (LINK) malloe(sizeo!(DEMO_TIP)); glave->sled->fakt ='y: GGlava-ssied->sled = (LINK) malloc{sizeo!(DEMO_T/P))}; glava->sled->sled->fakt = '7; printi(’giava->fakt ~ %o\", glava->takt}; Drintt( glava->sled->fakt ~ %c\, glava->sled->fakt): 2 Ukazatell @ ei) printi('glava>sled->sled->fakt = %e\r, ‘alava->sled'>slad->takt); tree{glava->sled->sled); irexglava>sied); tres{giava): } Program 98 Izlaz lava fakt = x glava-slod->fak ‘glava->sled- Funkclla malloc 9 pozWva Jos dva puta, s tin sto vracon! ukazatel] memor'seme prethodno rezervisanl blok. Visestcukom primonom operatora Indirekla pristupamo lanodima dinarickih struktura, Funkclla print stamoa clan fakt u avi rezersisantin blokovima Na kralu, tunkclja free osiabada rozervisane memories blokove, pl Corr Je redosiod oslozadanja vo bitan, da ne bl kegutilIrformacy 0 rezervisanom Lloku. 9.3.2 Linearne \iste Unearne ste su naljednostavnije dinamicke strukture u Kojo} su str-ktuirani ‘lament! medusobno povezanl u sekvancu. Glava (engl. head, front) iste ukazuje na prvi element u list, svakl element lista ukazufe na naredni ulist, Zadny! element v lis sadi21 Ou ukazateljskor clanu, Na sicl 9.5 prikazana felista od Jednog, dv Iti elemen- ta, Protpostavimo da Je strubtura elesnent liste definisana iskazom ‘ypedel struct list { Unsigned tue; char fal, struct Ist “sled: )usT; pr! comu Je: kljuc podatak tipa unsigned za idertifkacliu alementa u list; fakt sadr2t korisne podatke elementa Iu nasem slutalu, rac jodnostavnostl, korlscen je tip char, medutlm moze bit korlzcen protevolin ip; sled Je ukazatej za povezNanje ulst Pret. postavicemo sluca| rastuce uredene liste, na osnovy vrednost! Clana kljuc. Radi preglednost programa definse se specialn tip ukazatolja na strukturu LIST kao typedet LIST *HEAD; Gtava 1 |e, radl Jecnostavnosti programa, takode strukturatipa LIST, u ojo Jo lan kljue iojalizovan na 0, Znatl glava iste je dofinisana Iskazar:

You might also like