VTC Novo

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 36

IR1P2, OO1P2, EF2PJ Materijal za vebe na tabli i pripremu ispita programs i jezi !

verzija" #$%, 2&$11$2##&$


'rana verzija, verovatno postoje gre( e, zato je pre treba oristiti pre ao po)setni nego ao je)ini izvor znanja*
Detaljna objanjenja vezana za bilo koji deo gradiva vezanog za teoriju se mogu pronai u belekama sa predavanja, kao i u knjizi koja opisuje jezik C dovoljno precizno: Laslo Kraus Programski jezik C !ie zadataka se mo"e pronai u odgovarajuoj zbirci pro# Krausa: Laslo Kraus, $birka zadataka iz programskog jezika C %ve ove knjige se mogu pronai u skriptarnici ili u biblioteci #akulteta $adaci koji su tipa ispitni& pitanja su prilo"eni u celosti, uklju'ujui i obrazlo"enje reenja tamo gde je to potrebno ( materijal je uklju'eno i nekoliko ispitni& zadataka, koji su reeni u potpunosti i detaljno komentarisani )o ispitni& pitanja i zadataka se mo"e pronai na *nternet stranici predmeta Programski jezici +,-.P)/, u delu koji se odnosi na ispitne rokove, odnosno na *nternet stranici predmeta Programiranje . 0aterijal se stalno unapre1uje, nove verzije e redovno biti dodavane na *nternet stranice relevantni& predmeta: http://rti7020.etf.bg.ac.yu/rti/ir1p2 http://rti7020.etf.bg.ac.yu/rti/ef2pj %ugestije, primedbe i uo'ene greke poslati putem elektronske pote na adresu andrija@etf.bg.ac.yu

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

+,-R.,J
%adr"aj $adatak C3 $adatak C56 $adatak C53 $adatak C.6 $adatak C.3 $adatak C46 $adatak C43 $adatak C76 $adatak C73 $adatak C79 $adatak C7: $adatak C36 $adatak C33 $adatak C39 $adatak C86 $adatak C83 $adatak C96 $adatak C93 $adatak C:6b $adatak C;6 $adatak C;3 $adatak C566 $adatak C567 $adatak C556 $adatak C553 $adatak C5.6 $adatak C5.. $adatak C5.3 . 4 7 3 8 9 : ; 56 55 5. 54 57 53 58 59 5: 5; .6 .5 .. .4 .7 .3 .9 .: .; 4. 48

0aterijal za ve"be na tabli i pripremu ispita

%trana . od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !0
%ledei program za odre1ivanje reenja linearne jedna'ine <=>2?6, za <@A6, napisan na programskom jeziku C, sadr"i vie greaka *spraviti sve grekeB
main #l at $%&a&b * scanf!'+f +f'&a&b", $%/0b/a, printf!1+f1&$2" main predstavlja funkciju treba da st ji main!" ' je 'ase(ensitive je)ik !ra)likuje mala i velika sl va" deklaracija treba da st ji unutar pr gramsk g bl ka ni) )nak va u je)iku ' se granicava par m )nak va scanf )ahteva adresu& a ne vredn st, .rev dilac )a je)ik ' ne prijavljuje v ka gresku. $2 nije d br & jer sm deklarisali $%

Re(enje" *spravljeni program izgleda ovako:


4include 5stdi .h6 main!" * fl at $%&a&b, scanf!-+f +f-&9a&9b", $%/0b/a, printf!-+f-&$%", 3 /7 na p 8etku svak g pr grama d la)e direktive 7/ /7 $% ne smeta !.r menljiva m )e sadr)ati )nak $ " 7/ /7 svaka naredba je)iku ' )avr:ava se )nak m tacka0)are), 7/

1omentar" Ceispravno napisan program je testiran i kompajliran u programskom paketu !isual %tudio net Poruke kompajlera su sledee:
' mpiling... c;.c c;.c!;" : err r '20<1: synta% err r : identifier 1#l at1 c;.c!;" : err r '20;=: synta% err r : 1,1 c;.c!7" : err r '21>?: synta% err r : missing 1,1 bef re 1*1 c;.c!7" : err r '2>>=: f und 1*1 at file sc pe !missing functi n header@" c;.c!A" : err r '201;: t many characters in c nstant c;.c!1>" : err r '20;=: synta% err r : 131

Ca po'etku svakog programa koji neto u'itava ili ispisuje mora postojati direktiva include sa parametrom 5stdi .h6. Dvo predstavlja uputstvo prevodiocu da iz datoteke stdi .h treba da pro'ita osobine bibliote'ki& #unkcija za ulaz i izlaz podataka

0aterijal za ve"be na tabli i pripremu ispita

%trana 4 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !1#
%astaviti program na programskom jeziku C za ispisivanje tablice <%C** kodova za sve tampajue znake Re(enje" <%C** kod sa brojem 4. je blanko simbol ili razmak Prva 4. <%C** koda +od 6 do 45/ i svi <%C** kodovi vei ili jednaki 5.9 predstavljaju specijalne simbole koji se koriste u razli'ite svr&e i naj'ee nemaju neko jasno slovno zna'enje Koristili su se za iscrtavanje DD% prozora, i na taj na'in simulirali gra#iku u tekstualnom re"imu rada Konkretno, prozori razvojnog okru"enja Eurbo C su napravljeni na ovaj na'inB <%C** kodovi izme1u 4. i 5.8 su tampajui znaci, i ima i& ukupno ;3 $naci se prikazuju po kolonama ( jednoj koloni se prikazuje po 5; znakova, a u jednom redu se prikazuje po 3 znakova +3=5;?;3/ Prikazaemo sve <%C** kodove od 4. do 5.8 Program za prikazivanje tablice <%C** kodova mo"e se realizovati na vie na'ina prvi na'in:
4include 5stdi .h6 main!" * char c, int i, printf !BCtCtDablica E('FF k d va Cn CnG", f r!c/H H,c5H HI1=,cII", * f r!i/0,i5=;,iI/1=" printf!B+?d+c B&cIi&cIi", putchar!JCnH", 3

drugi na'in:
4include 5stdi .h6 main!" * char c/1 1, int i, printf !-CtCtDablica E('FF k d va Cn Cn-", linija: i/0, )nak: printf!-+?d +c -&cIi&cIi", i/iI1=, if !i5=;" g t )nak, printf!-Cn-", c/cI1, if !c51 1I1=" g t linija, 3

1omentar" ( drugom reenju se koristi skok sa proizvoljnim odreditem: g t Korienje naredbe g t treba izbegavati +bilo koji algoritam koji sadr"i g t mo"e se ostvariti na neki drugi na'in, to i pokazuje prvo reenje/ Flavni razlog za izbegavanje naredbe g t je taj to ta naredba ima veliki stepen slobode u izboru odredita skoka tako da omoguava sastavljanje nestrukturirani&, vrlo nepregledni& programa, koji jako 'esto imaju puno greaka uzrokovani& upravom loom strukturom

0aterijal za ve"be na tabli i pripremu ispita

%trana 7 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !10
Ddrediti 'emu su ekvivalentni sledei izrazi +koristiti zagrade da bi se eksplicitno odredio redosled izra'unavanja/
1. 2. ?. >. ;. 1. 2. ?. >. %I/y0/m n+/yIm mII 0 00j %/j 7 jII IIj//mK/y72

O)govor"
%/!%I!y/!y0m"" n/!n + !yIm"" m0!j01", m/mI1, j/j01 %/j 7 jII , v )avisi d t ga k jim se red m racuna& sa leva na desn Ldg v r: implementaciono zavisno ;. !!jI1"//m"K/!y72", j/jI1

ili

brnut

0aterijal za ve"be na tabli i pripremu ispita

%trana 3 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !2#
%astaviti program na programskom jeziku C koji u'itava srednje temperature po mesecima za 5. meseci i na osnovu nji& izra'una i ispie srednju temperaturu za celu godinu Re(enje"
4include 5stdi .h6 4define MNLO$PQ(Q'F 12 main!" * enum meseci *OER/1&#QM&REN&E.N&PEO&OSR&OST&EUV&(Q.&LWD&RLU&XQ'3, enum meseci mesec/OER, /7 P guce je umest g rnje dve linije napisati sam jednu: enum meseci *OER/1&#QM&REN&E.N&PEO&OSR&OST&EUV&(Q.&LWD&RLU&XQ'3 mesec/OER, 7/ fl at temperatureYMNLO$PQ(Q'FZ, fl at srednja$temp/0, [hile !1" * printf!-Demperatura )a mesec +2d: -&mesec", scanf!-+f-&9temperatureYmesec 0 1Z", /7 ni) u '0u uvek ide srednja$tempI/temperatureYmesec 0 1Z, if !mesec//XQ'" break, mesecII, 3 srednja$temp//MNLO$PQ(Q'F, printf!-(rednja temperatura je +.2fCn-&srednja$temp", 3 /7 Oasn je da nam ni) nije p treban )a racunanje srednje vredn sti d v ljn je da mesecnu temperaturu ucitavam u neku p m cnu 0 fl at pr menljivu i da nju d dajem na srednja$temp

d 0 7/

7/

1omentar" Prikaz neki& vrednosti adresa i niza temperature:


9temperature&p: 22#'!((":0#'' 9temperatureY0Z&p: 22#'!((":0#'' 9temperatureY1Z&p: 22#'!((":0#X0 0 adresa clana 0 0 adresa clana 1

temperature: * ?.0&A.0&12.0&1;.0&20.0&2<.0&2=.0&?0.0&2<.0&20.0&1?.0&7.0 3 0 prika) cel g ni)a temperatureY0Z: ?.0 0 vredn st clana sa indeks m 0

Dvakav prikaz se mo"e dobiti pomou Gatc& prozora razvojnog okru"enja Eurbo C Cajpre se navodi izraz 'ija se vrednost posmatra, a onda na'in kako ona treba da bude ispisana (z pomo ovog dodatka, mo"e se isti izraz posmatrati na vie na'ina i)ra)&d kao broj i)ra)&c kao karakter i)ra)&p kao pokaziva' +adresa/

0aterijal za ve"be na tabli i pripremu ispita

%trana 8 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !20
%astaviti program na programskom jeziku C za odre1ivanje broja veliki& slova, mali& slova i ci#ara u tekstu koji se iz proizvoljnog broja redova u'itava preko glavne ulazne jedinice Eekst se zavrava znakom za kraj datoteke Re(enje"
4include 5stdi .h6 4include 5ctype.h6 /7 treba )a funkcije ve)ane )a ispitivanje sl va 7/ main!" * int )nak& vel$sl/0& mal$sl/0&cifra/0, printf!-Snesite )eljeni tekst Cn-", [hile !!)nak/getchar!""K/QL#" * vel$sl I/ isupper!)nak" K/ 0, /7 ctype.h 7/ mal$sl I/ isl [er!)nak" K/ 0, /7 ctype.h 7/ cifra I/ isdigit!)nak" K/ 0, /7 ctype.h 7/ /7 Lve funkcije su ve ma jedn stavne. FsSpper pita !)nak6/1E1" 99 !)nak5/1\1" FsT [er pita !)nak6/1a1" 99 !)nak5/1a1".FsXigit pita !)nak6/101"99!)nak5/1=1" (ve is$ funkcije vra]aju 0 )a l gicku neistinu& a ra)li8it d 0 !ne bave)n 1" )a l gicku istinu7/ 3 printf!-Uelikih sl va ima +dCn-&vel$sl", printf!-Palih sl va ima +dCn-&mal$sl", printf!-'ifara ima +dCn-&cifra", 3

0aterijal za ve"be na tabli i pripremu ispita

%trana 9 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !2#
%astaviti program na programskom jeziku C koji u'itava decimalan pozitivan celi broj u obliku niza znakova i ispisuje njegovu vrednost u binarnom obliku Pretpostaviti da se za interno predstavljanje celi& brojeva koristi 58 bitova Re(enje"
main!" * char decY10Z, sh rt int bin&i, printf!-Snesite decimalan br j: -", scanf!-+s-&dec", /7 ucitava string sa standardn g ula)a !dec/9decY0Z" 7/ /7 at i vraca 0 uk lik nije uspela k nver)ija Sk lik je strlen!dec"/0 nda se drugi de S(TLUE !i)a 99 perat ra" nece ni pr veravati. . p stavci )adatka cekuje se p )itivan br j& i takav usl v se jedn stavn & vim putem& m )e pr veriti. 7/ if !strlen!dec" 99 !bin/at i!dec""" * printf!-Minarni br j: -", i/01, [hile !IIi51<" * putchar!!bin 9 0%A000" @ 111 : 101", /7 0%A000 ima jedinicu na najvisem 1;0 m bitu V rnja naredba ce ispisati 1;0i bit br ja binK Rajpre ispisujem najvise bit ve& jer takav prika) )elim na ekranu bit1; bit1> ... bit2 bit1 bit0 7/ bin 55/ 1 , /7 bin / bin shl 1 , p meram bin ulev )a 1 bit 7/ if !i+> // ?" putchar!1 1", /7 prika) ra)maka i)medju svake p l vine bajta 7/ 3 printf!-Cn-", 3 else printf!-Reispravan br j ili nulaCn-", 3

1omentar" 58Hbitni binarni broj mo"e da ima najveu vrednost 83343, ukoliko se tretira kao unsigned, odnosno 4.989, ukoliko se tretira kao signed Eo konkretno zna'i da je za ovaj 58Hbitni prikaz dovoljno da koristimo niz brojeva char decY<Z +3 za ci#re i 5 za C(LL terminator/ %a druge strane, ako u ovom zadatku unesemo neki broj vei od 83343I4.989 rezultat nee biti ispravan +bie prikazano samo najni"i& 58Hbitova zadatog broja ako je s&ort int na datom ra'unaru du"i od 58 bita/ -unkcija at i se mo"e koristiti i za konverziju negativni& vrednosti Ereba imati na umu i sledeu 'injenicu: ako unesemo vie od 56 znakova nepredvidiv je is&od izvravanja ovog programa, kao i ostali& programa operativnog sistema koji su trenutno u memorijiB )er, niz JdecJ ima dodeljeno svega 56 bajtova u memoriji i nita preko togaB Dstatak memorije pripada drugim podacima ili drugom programskom kodu, tako da se upisivanjem van granica niza mo"e izazvati dosta problema

0aterijal za ve"be na tabli i pripremu ispita

%trana : od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !20
Koja od dati& konstrukcija na programskom jeziku C predstavlja ekvivalent iskaza na programskom jeziku Pascal: if !a6b" then begin a:/1, b:/1 end </ if !a6b" * a/1, b/1, 3 2/ if !a6b" a/1& b/1, C/ if !a6b" a/1, b/1, O)govor" <, ! +< i 2/, zavisno od toga kako se de#inie ekvivalentnost dva iskaza 1omentar" </ Dvo je upravo prepisana selekcija sa Pascala na C 2/ (koliko je ispunjen uslov bie izvrena jedna instrukcija u t&en grani, pri 'emu se ona sastoji od . izraza ,#ekat izvravanja ova dva izraza je u ovom slu'aju identi'an slu'aju pod </ C/ b?5 se izvrava u svakom slu'aju, to ne va"i za originalni segment

0aterijal za ve"be na tabli i pripremu ispita

%trana ; od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !&#
Kta ispisuje sledei programL a*
4include 5stdi .h6 main!" * int %, f r !%/0,%5100,%II" * /7 ak % nije deljiv sa dva vrati se na p cetak tela ciklusa 7/ if !%+2" c ntinue, /7 d vde d la)i sam ak je % deljiv sa 2 !% m d 2 / 0" 7/ printf!-+dCn-&%", 3 3

</ %ve cele brojeve od 6 ;; 2/ %ve parne brojeve od 6 ;; C/ %ve neparne brojeve od 6 ;; O)govor" 2 b*
4include 5stdi .h6 main!" * int %/0&i, f r !i/0,i5;,iII" s[itch !i" * case 1: %I/1, /7 uk lik je i/1 i)vrsava se de i)a case 1: i case 2: 7/ case 2: %I/2, break, /7 Ek je i/2 i)vrsava se sam de i)a case 2: !)b g case >: %I/?, /7 Ek je i/> i)vrsava se sam de i)a case >: 7/ 3 printf!-d/+dCn-&%", 3

break," 7/

</ 3 2/ 8 C/ ; O)govor" C 1omentar" Cajpre je =?6M $a i?6, = se ne menja +=?6/M $a i?5, =>?5M =>?.M ?A =?4M $a i?., =>?.M ?A =?3M $a i?4, = se ne menjaM $a i?7, =>?4M ?A =?:M

0aterijal za ve"be na tabli i pripremu ispita

%trana 56 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !&0
%astaviti program na programskim jeziku C koji #ormira slu'ajan celobrojni niz sastavljen od jednoci#reni& brojeva i izvri ure1ivanje niza po neopadajuem redosledu vrednosti brojeva Re(enje" $a sortiranje brojeva postoji niz algoritama !ie detalja o ovoj oblasti se mo"e pronai u knjizi N%trukture podatakaO pro#esora Eomaevia Dvde je predstavljen najjednostavniji algoritam pod nazivom +ele3tion sort, odnosno sortiranje metodom izbora *deja je sledea: u iHtom prolazu se odabere iHti +u ovom slu'aju/ najmanji broj, pa se smesti na iHto mesto
4include 5stdi .h6 4include 5stdlib.h6 4define XFP ;0 main!" * int n&aYXFPZ&i&j&b, f r !,," * printf!-CnCn Xu)ina ni)a !ma% +d": -&XFP", scanf!-+d-&9n", if !!n5/0" ^^ !n6XFP"" break, /7 break prekida f r ciklus. Lv je ciklus sa i)la) m u sredini 7/ printf!-Cn. cetni ni): CnCn-", f r !i/0,i5n,iII" printf!-+d+c-&aYiZ/rand!"/!!d uble"NERX$PE2"710&!i+?0//2=^^i//n01"@!1Cn1" : !1 1"", /7 Venerisace se slucajni br jevi u intevalu d 0 .. 10. rand!" generise slucajan br j d 0 .. NERX$PE2 !NERX$PE2 je u slucaju Durb '0a ?27<7 " 7/ /7 sledi s rtiranje 7/ f r !i/0,i5n01, iII" f r !j/iI1,j5n,jII" if !aYiZ6aYjZ" b/aYiZ&aYiZ/aYjZ&aYjZ/b,

/7 )amena 2 pr menljive 7/

printf!-Cn( rtirani ni):CnCn-", f r !i/0,i5n,iII" printf!-+d+c-&aYiZ&!i+?0//2= ^^ i//n01" @ !1Cn1" : !1 1"", /7 Xe !i+?0//2= ^^ i//n01" @ !1Cn1" : !1 1" predstavlja karakter k ji treba da se napise i)a br ja !'lana" ni)a. Sk lik se nala)im na kraju ni)a !p slednji element i//n01"& ispisujem )nak )a n vi red. Dak dje& radi jasnijeg prika)a p sle svak g ?00t g clana ni)a ispisujem ist )nak )a n vi red. S svak m drug m slucaju ispisuje se blank !ra)mak".7/ 3 3

Primer sortiranja 56 slu'ajni& brojeva: Prolaz 5: a: * 2& >& 1& <& ;& 0& Prolaz .: a: * 0& >& 2& <& ;& 1& Prolaz 4: a: * 0& 1& >& <& ;& 2& Prolaz 7: a: * 0& 1& 1& <& ;& >& Prolaz 3: a: * 0& 1& 1& 2& <& ;& Prolaz 8: a: * 0& 1& 1& 2& >& <& Prolaz 9: a: * 0& 1& 1& 2& >& ;& Prolaz :: a: * 0& 1& 1& 2& >& ;& Prolaz ;: a: * 0& 1& 1& 2& >& ;&

1& 1& 1& 2& >& ;& <& <& <&

A& A& A& A& A& A& A& <& <&

<& <& <& <& <& <& <& A& 7&

7 7 7 7 7 7 7 7 A

3 3 3 3 3 3 3 3 3

0aterijal za ve"be na tabli i pripremu ispita

%trana 55 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !&%
Koji od programski& segmenata na programskom jeziku C daju isti izlaz kao dati programski segment na programskom jeziku PascalL
j:/ 02, f r i:/ 02 t j7j d begin [rite!j:?", j:/jI1 end,

</ f r !i/j/01,i5/j7j,iII&jII" printf!- +?d -&j", 2/ i/02, [hile !printf!- +?d -&i"&iII 0>", C/ i/j/02, [hile !iII // > @ 0 : >" printf!- +?d -&jII", Obrazloenje" ( programskom jeziku Pascal se interval #or ciklusa odre1uje neposredno po ulasku u ciklus i ne menja se u toku izvravanja ciklusa, dok se u programskom jeziku C uslov kod #or ciklusa ra'una pre svakog ponavljanja Dvaj programski segment na programskom jeziku Pascal ispisuje H.,H5,6,5,.,4,7 Programski segment +</ na programskom jeziku C je logi'ki neispravan, jer i nikada nee prestii vrednost j7j Dodirna ta'ka im je za i??6,j??6 i i??5,j??5, ali posle toga zbog obostranog inkrementiranja i e biti uvek manje od j7j ( realnosti, u nekom trenutku e doi do prekora'enja opsega celi& brojeva, i j7j e postati manje od i, za vrednost j takvu da vrednost izraza j7j prekora'uje maksimalni celi broj Programski segment +2/ na programskom jeziku C je logi'ki ispravan i ispisuje iste vrednosti kao i dati programski segment na programskom jeziku Pascal $adnji ispisani broj je 7, tada se ne posti"e uslov za ulaz u petlju +iH7 ?? 6, to predstavlja logi'ku neistinu/, a kao bo'ni e#ekat i?3 Programski segment +C/ na programskom jeziku C je logi'ki ispravan 0e1utim, on ne ispisuje iste vrednosti kao i programski segment na programskom jeziku Pascal *spisuje jedan broj manje +tj sve od H. do 4/ *z ciklusa se izlazi kada je i??7 2roj koji se ispisao pre toga je bio 4, a bo'ni e#ekat je bio j?7

0aterijal za ve"be na tabli i pripremu ispita

%trana 5. od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !&4
Data su tri segmenta programa na programskom jeziku C: I
f r !i/%/y/0, , IIi" *%II, if !i//n" break, yII, 3 printf!B+ld +ldG&%&y",

II
%/0& y/0, f r !i/0, i5/n, iII" *%/%I1, if !i5n" c ntinue, y/yI1,3 printf!B+ld +ldG&%&y",

III
%/i/0, [hile !i5/n" * iII, II%, y/%6n,3 printf!B+ld +ldG&%&y",

<ko su sve promenljive celi brojevi koja dva segmenta daju isti izlaz za nA6L </ * i ** 2/ ** i *** C/ * i *** Obrazloenje" * uvek ispisuje =?n>5, P?n,a ** i *** uvek ispisuju =?n>5, P?5 +n ne uti'e na vrednost P/

0aterijal za ve"be na tabli i pripremu ispita

%trana 54 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !0#
Capisati na programskom jeziku C program koji analizira tekst koji se unosi sa standardnog ulaza, prepoznaje realne brojeve po #ormatu cc...c.ddd...d i ispisuje i& po #ormatu c.ddQIee, a sve ostale u'itane znake ispisuje bez izmene Re(enje"
4include 5stdi .h6 4include 5ctype.h6 4define XQ'FPETRE$DE'WE 1.1 4define \REW$\E$WNEO 1K1 main!" * int c& j& br j$cifara, d uble vredn st& decimala, d * /7 sve d k se ne p javi neka cifra& ispisuju se karakteri sa ula)a 7/ [hile !K !isdigit!c / getchar!"" ^^ !c//\REW$\E$WNEO"" " putchar!c", if !c // \REW$\E$WNEO" break, /7 Sk lik sm naisli na )nak K nda i)la)im 7/ ungetc!c& stdin", /7vratim pritisnutu cifru& kak bism bili p )ici nirani d p cetka br ja7/ vredn st / 0., br j$cifara / 0, /7 sve d k se ne naidje na tacku& d daje se vredn sti pritisnuta cifra na kraj 7/ [hile !isdigit!c / getchar!"" " vredn st / vredn st 7 10 I !c0101", if !c // XQ'FPETRE$DE'WE" /7 sve d k se un se cifre& d daju se na kraj decimaln g dela 7/ [hile !isdigit!c/getchar!" "" * br j$cifaraII, decimala/ c 0 101, f r !j/0, j5br j$cifara, jII" decimala/10, vredn stI/decimala, 3 ungetc!c&stdin", printf!-+1.?Q-&vredn st", 3 [hile !c K/ \REW$\E$WNEO", /7 1K1 je trenutn )nak )a kraj 7/ 3

Obrazloenje" *z programa se izlazi ukoliko se bilo gde u liniji upie znak JBJ Dd unete ci#re, broj koji ona predstavlja dobija se kada se od njenog <%C** koda oduzme <%C** kod znaka J6J Pitanje" Kta e se dobiti na izlazu za sledei redL 12?.12?.12? Ddgovor: 1.2?QI02.1.2?QI02

0aterijal za ve"be na tabli i pripremu ispita

%trana 57 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !00
Kta ispisuje sledei programL a*
/7';;a7/ 4include 5stdi .h6 main!" * int aYZ/*1&03& 7p, p/a, printf!-+d& -& 7pII", printf!-+dCn-& 7p", 3

</ 5, . O)govor" 2

2/ 5, 6

C/ 6, 6

1omentar" Prioritet Q i >> je isti, ali je asocijativnost ove grupe operatora sdesna ulevo b*
/7';;b& O..r tic7/ 4include 5stdi .h6 main!" * int aYZ/*0& 1& 2& ?& >3, int i& 7p, f r !p/a& i/0, p5/9aY>Z, pII" printf!-+d-& 7p", printf!-Cn-", f r !p/9aY0Z& i/0, pIi5aI>, pII& iII" printf!-+d-& 7!pIi"", printf!-Cn-", f r !p/aI>& i/0, i5/>, iII" printf!-+d-& pY0iZ", printf!-Cn-", 3

Re(enje"
012?> 02 >?210

3*
/7';;c& T.Wraus& primer& m difikacija O..r tic& F.Dartalja& d puna E.M snjak vic7/ 4include 5stdi .h6 4include 5stdlib.h6 main!" * int 77a& n& i& j, printf!-R/-", scanf!-+d-& 9n", a / call c!n& si)e f!int7"", /7al cira mem riju )a n p ka)ivaca na vrste7/ f r !i/0, i5n, iII" * 7!aIi"/ call c!n& si)e f!int"", /7al cira mem riju )a n elemenata vrste k ji su tipa int7/ f r !j/0, j5n, jII" 7!7!aIi"Ij" / rand!"/!!d uble"NERX$PE2 I 1" 7 10,
/* C55c.c(44) : warning C4244: '=' : conversion from 'do !le ' to 'int '" possi!le loss of data */

3 f r !i/0, i5n, printf!-Cn-"& iII" f r !j/0, j5n, jII" printf!-+d-& 7!7!aIi"Ij"", f r !i/n01, i6/0, i00" printf!-+d-& 7!7!aIi"In010i"", putchar!1Cn1", 3

</ sadr"aj matrice vrstu po vrstu, a potom sporednu dijagonalu, slevaHudesno 2/ sadr"aj matrice vrstu po vrstu, a potom glavnu dijagonalu, sdesnaHulevo C/ sadr"aj matrice vrstu po vrstu, a potom sporednu dijagonalu, sdesnaHulevo O)govor" < 0aterijal za ve"be na tabli i pripremu ispita %trana 53 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !0%
Da bi se u'itani znakovni niz +string/ precizno ispisao RunatragS +samo znaci koji su unoeni sa standardnog ulaza/, koja naredba se mo"e staviti umesto QQQL
scanf!+s+& string1", a / string1, 777 [hile !a6string1" putchar!7!00a"",

</ [hile !7a" aII, 2/ f r !, 7a, aII", C/ [hile !7aII", O)govor" ! +< i 2/ 1omentar" (mesto QQQ mora da stoji naredba koja e postaviti pointer a tako da pokazuje na C(LL !JC0H" karakter pointera string1& jer se u narednoj T&ile petlji pointer a najpre dekrementira pa se tek tada ispisuje odgovarajui znak Ddgovor C nije dobar jer postavlja +zbog bo'nog e#ekta/ pointer a na znak iza JC0H karaktera

0aterijal za ve"be na tabli i pripremu ispita

%trana 58 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !5#
Capisati program na programskom jeziku C koji u'itava jedan znakovni niz + string/ (1 i jedan ceo broj P, a zatim #ormira novi znakovni niz (2 samo od oni& znakova na 'ijim su pozicijama odgovarajui bitovi broja P jednaki 5 %matrati da se ceo broj predstavlja u 58Hbitnoj lokaciji, a da znakovni niz mo"e imati najvie 58 znakova Ca kraju, program ispisuje novi znakovni niz (2 Re(enje"
/7 '<0.c& =.>.1==>.& FF parcijalni ispit 7/ 4include 5stdi .h6 main!" * sh rt int P& maska, char (1Y17Z& 7s1& (2Y17Z& 7s2, printf!-+Snesi string (1 i br j P:Cn-", scanf!-+s+d-& (1& 9P", s1 / (1, s2 / (2, maska / 1, [hile !maska" * if !P 9 maska" *7s2 / 7s1, s2II, 3, s1II, maska55/1, 3 7s2 / 1C01, printf!-R vi string (2: +sCn-& (2", 3

1omentar" ( ovom programu promenjiva maska nam slu"i da ispitamo gde se nalaze jedinice u broju P koji zadaje korisnik 2roj bitova broja P +58/ odgovara broju znakova stringa (1 Ca osnovu pozicije ti& jedinica odre1uju se znakovi koji e biti u stringu (2. %vaki od stringova (1 i (2 zauzima ukupno 59 bajtova u memoriji 58 za same znakove i 5 za zavrni nulti znak

0aterijal za ve"be na tabli i pripremu ispita

%trana 59 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !50
Koji od sledei& izraza je ekvivalentan izrazu arY1ZY2Z& ako je data sledea deklaracija: int arYZY?Z/**0&1&23& *?&>&;33 </ 7!int7" ! !!char7"ar I !17?7>"" I !27>" " 2/ 7!arY1ZI2" C/ 7!!7arI1"I2" O)govor" 2 Obrazloenje"

</ zavisi od implementacije tipa int, u prikazanom slu'aju je u redu C/ bilo bi ispravno da stoji 7!7!arI1"I2"& ovako je u pitanju 7!arY0ZI?" 0aterijal za ve"be na tabli i pripremu ispita %trana 5: od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !%#
Capisati program na programskom jeziku C koji u'itava dva znakovna niza, izvri nadovezivanje drugog na prvi, okrene NnaopakoN dobijeni niz i ispie ga na standardnom izlaznom ure1aju Re(enje"
4include 5stdi .h6 4include 5string.h6 main!" * int n, char c& 7d& 7p& 7prvi& 7drugi, printf!BPaksimalna du)ina: B", scanf!B+dCnG& 9n", p / call c!27nI1& si)e f!char"" , d / call c!nI1& si)e f!char"", if !!RSTT // d" ^^ !RSTT // p"" printf!BRije m guca al kacijaKCnG", else * prvi / p, drugi / d, [hile !!7p / getchar!"" K/ JCnH" pII, 7p / JC0H, [hile !!7d / getchar!"" K/ JCnH" dII, 7d / JC0H, p / prvi, d / drugi, /7 k nkatenacija 7/ [hile !7p" pII, [hile !7pII/7dII", /7 kretanje 7/ p / prvi, f r !d/pI!strlen!p"01", p 5 d, pII& d00" c/7p& 7p/7d& 7d/c, printf!B+sCnG& prvi", 3 3

1omentar" $a string p alociramo duplo vie memorije zbog nadovezivanja nizova Cakon alokacije memorije radi se u'itavanje stringova, i to znak po znak, korienjem bibliote'ke #unkcije getchar!". $atim se vri konkatenacija, tako to se drugi string nadove"e na prvi Dkretanje dobijenog niza u datom reenju radi se tako to prvi 'lan menja mesto sa poslednjim, drugi sa pretposlednjim, itd

0aterijal za ve"be na tabli i pripremu ispita

%trana 5; od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !%0
Capisati program na programskom jeziku C koji ponavlja sledeu sekvencu operacija: 5 u'itava in#ormaciju o tipu podataka sa kojim e raditi +ceo broj ili znak/M . u'itava du"inu niza podatakaM 4 u'itava niz podataka zadatog tipa i du"ine u dinami'ki alociranu memorijuM 7 ispisuje u &eksadecimalnom obliku sadr"aj u'itani& podataka, bajt po bajt Re(enje"
4include 5stdi .h6 4include 5stdlib.h6 main!" * v id 7bl k$p& 7bajt$p, int lnt& n, char &7f rmat$p, [hile!1" * / 1n1 , [hile ! K/ 1c1 99 K/ 1\1 99 K/ 1k1" * printf!-Dip br jeva: !c"eli/!)"naci& ili !k"raj@-", scanf!-Cn+c-& 9 ", s[itch! " * case 1c1 : lnt / si)e f!int", f rmat$p / -+d-, break , case 1)1 : lnt / si)e f!char" , f rmat$p / -Cn+c- , break , case 1k1 : break , default: printf!-Reispravan un sK . n vite.Cn-", 3 3 if ! // 1k1" break , printf!-Mr j p dataka@-", scanf!-+d-& 9n", bl k$p / mall c!lnt7n" , printf!-. daci:Cn-", f r !bajt$p/bl k$p, bajt$p5!char7"bl k$pIn7lnt, !char7"bajt$pI/lnt" /7k nver)ija tipa& pretvaram generi8ki p ka)ivac u p ka)iva8 na char 7/ * printf!-@-", scanf!f rmat$p& bajt$p", 3 printf!-Majt vi:Cn-", f r !bajt$p / bl k$p, bajt$p5!char7"bl k$pIn7lnt, !!char7"bajt$p"II" printf!-+%-& 7!char 7"bajt$p", printf!-Cn-", free!bl k$p", 3 3

1omentar" Majt$p i bl k$p su generi'ki pokaziva'iM poto kod nji& nije odre1en tip pokazivani& podataka, takav pokaziva' ne mo"e se koristiti za pristup podacima, ve samo za 'uvanje in#ormacije o adresi nekog podatka Pre pristupa nekom podatku, neop&odno je generi'ki pokaziva', upotrebom operatora za konverziju tipa, pretvoriti u pokaziva' na "eljeni tip podataka Posledice su nepredvidive ako pokazivani podatak nije tipa koji je nazna'en u operatoru za konverziju tipa

0aterijal za ve"be na tabli i pripremu ispita

%trana .6 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !4#b
%astaviti program na jeziku C za u'itavanje imena gradova uz nji&ovo ure1ivanje po abecednom redosledu i ispisivanje rezultata ( svakom redu se u'itava po jedno ime sve dok se ne u'ita prazan red
/7 pr gram )a s rtiranje imena grad va 7/ 4include 5stdi .h6 4include 5string.h6 4include 5stdlib.h6 4define PE2$VNEX 100 4define PE2$XS\ ?0 main!" * char 7adreseYPE2$VNEXZ& 7adresa, int )nak& br$grad / 0& du)& i, d *

adresa / call c!PE2$XS\& si)e f!char"", f r !du) / 0, du) 5 PE2$XS\ 0 1, du)II" if !!)nak / getchar!"" K/ 1Cn1" 7!adresa I du)" / )nak, else break, 7!adresa I du)" / 1C01, if !Kdu)" * free!adresa", break, 3 adresa / reall c!adresa& du) I 1", f r !i / br$grad 0 1, i 6/ 0, i00" if !strcmp!adreseYiZ& adresa" 6 0" adreseYi I 1Z / adreseYiZ, else break, adreseYiI1Z / adresa, 3 [hile !br$gradII 5 PE2$VNEX", f r !i / 0, i 5 br$grad, iII" printf!-+sCn-& adreseYiZ",

1omentar" Dva tema je detaljno obra1ena u knjizi pro#esora Krausa %avetuje se studentima da detaljno prou'e primere iz knjige

0aterijal za ve"be na tabli i pripremu ispita

%trana .5 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !6#
Capisati program koji ispisuje redom binarne vrednosti brojeva koji su zadati putem komandne linije Flavnu obradu izdvojiti u potprogram, a potprogram smestiti u posebnu datoteku raspa $7
/7 limits.h 0 implementati n dependent values limits.h sadr)i vredn sti k je se ticu maksimalnih i minimalnih velicina p dataka& ka i br ja bit va k riscenih )a neke tip ve p dataka& a k je su )avisne d k nkretn g stvarenja pr gramsk g je)ika ' 7/ 4include 5limits.h6 4define RSP$MFD(! Dype " ! si)e f! Dype " 7 '_EN$MFD " v id raspak! unsigned& int YZ ",

raspa $3
4include -raspak.hv id raspak! unsigned k& int bitYZ " * int i / RSP$MFD(! unsigned ", [hile ! i " bit Y 00i Z / k 9 1& k 66/ 1, 3

36#$3
/7 Rapisati pr gram k ji ispisuje binarne vredn sti br jeva k ji su )adati na k mandn j liniji. Vlavnu bradu i)dv jiti u p tpr gram 7/ 4include 5stdi .h6 4include 5stdlib.h6 4include -raspak.hstatic c nst MFD($FR$VNLS. />, int main ! int argc& char 7argvYZ " * int i& j, int ni)Y RSP$MFD(! unsigned " Z, f r! i / 1,i 5 argc, iII " * raspak! at i! argvY i Z "& ni) ", printf!-Mit vi br ja +s: -& argvYiZ", f r! j /0, j 5 RSP$MFD(! unsigned ", jII " * printf! -+d-& ni)Y j Z ", if ! j + MFD($FR$VNLS. // MFD($FR$VNLS. 01 " putchar ! 1 1 ", 3 putchar! 1Cn1 ", 3 return 0, 3

1omentar" raspak.h de#iniciona datoteka u kojoj su deklarisani svi potrebni tipovi podataka, simboli'ke konstante, de#inicije makroa, kao i prototipovi korieni& #unkcija raspak.c sadr"i #unkciju za rad sa binarnim brojevima +to je ono to se tra"i u zadatku/ c=0.c ovde je smeten je glavni program, koji koristi de#inicije iz raspak.h i poziva #unkciju 'ija je implementacija u raspak.h

0aterijal za ve"be na tabli i pripremu ispita

%trana .. od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !60
Cavesti tip identi#ikatora % u sledeim deklaracijama: char 77%, H pokaziva' naU pokaziva' naU char int !7%"Y10Z, H +pokaziva' naU/ niz od 56U int int 7%Y10Z, H niz od 56U pokaziva'a naU int int 7%!", H #unkcija koja vraaU pokaziva' naU int int !7%"!", H +pokaziva' naU/ #unkciju koja vraaU int char ! 7 ! 7 %!"
___

"YZ

"

!",

#unkcija koja vraa VVVVVVVVVVVV pokaziva' na VVVVVVVVVVVVVVVVVVVVVVV niz VVVVVVVVVVVVVVVVVVVVVVVVVVVVV pokaziva'a na VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV #unkciju koja vraa VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV char char %Y?Z "!" " Y;Z, VVVV niz od tri VVVVVVVVVVVVVV pokaziva'a na VVVVVVVVVVVVVVVVVVVVVVVV #unkciju koja vraa VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV pokaziva' na VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV niz od 3 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV char Obrazloenje" Deklaracije se 'itaju po'ev od identi#ikatora ka spoljanjosti Post#iksni operatori kao to su !" i YZ imaju prioritet nad pre#iksnim 7 i drugim Dvo zna'i da se prvo uo'i identi#ikator, a zatim se, ako postoje obu&vatajue zagrade, unutar ti& zagrada 'ita po sledeem pravilu: prvo se 'itaju modi#ikatori desno od identi#ikatora, i to redom sleva na desnoM zatim se 'itaju modi#ikatori levo od identi#ikatora, i to redom sdesna na levo Postupak se ponavlja dok se ne obrade sve obu&vatajue zagrade, ako postoje Ca kraju se 'ita tip podatka koji stoji na po'etku deklaracije ! 7 ! 7

0aterijal za ve"be na tabli i pripremu ispita

%trana .4 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !1##
Capisati #unkciju na programskom jeziku C koja realizuje algoritam Wuick%ort -unkcija treba da sortira niz podataka proizvoljnog tipa Kriterijum sortiranja de#inisan je #unkcijskim parametrom Re(enje"
4include 5string.h6 4include 5stdlib.h6 4include 5stdi .h6 v id s[ap! v id 77p1& v id 77p2 " * v id 7temp / 7p1, 7p1 / 7p2, 7p2 / temp, 3 v id `uicks rt ! /7 rekur)ivna varijanta 7/ v id 7vYZ& int left& int right& int ! 7c mp "! c nst v id 7& c nst v id 7 " " * int i& last, if! left 6/ right " return, last / left, f r ! i / left I 1, i 5/ right, iII " if ! ! 7c mp "! vY i Z& vY left Z " 5 0" s[ap! 9vY IIlast Z&9vY i Z ", s[ap! 9vY left Z& 9vY last Z ", `uicks rt! v& left& last 0 1& c mp ", `uicks rt! v& last I 1& right& c mp ", 3 4define PE2$(DN 20 4define PE2$XFP 10 v id main!" * char 7ni)Y PE2$XFP Z, int i&n, f r ! i / 0, i5 PE2$XFP, iII " * ni)Y iZ / call c! PE2$(DN& 1 ", if ! ! ni)Y i Z // RSTT " ^^ ! fgets! ni)Y i Z& PE2$(DN& stdin " // RSTT " ^^ ! 7! ni)Y i Z " // 1Cn1 " " break, 3 n / i 0 1, `uicks rt! ni)& 0& n& strcmp ", f r ! i / 0, i 5/ n, iII " fputs! ni)Y i Z& std ut ", 3

1omentar" -unkcija s[ap ima dva argumentaM ovom #unkcijom se posti"e da 77p1 pokazuje tamo gde je pokazivao 77p2 i obrnuto -unkcija `uicks rt se zasniva na algoritmu particijskog sortiranja, realizovana je rekurzivno, i treba da uredi neure1en niz Xeklaracij m int !7c mp"!c nst v id7& c nst v id7" de#inie se pokaziva' na #unkcije 'ija je povratna vrednost tipa int i koje imaju dva argumenta tipa c nst v id7. Eamo gde se u programskom kodu nalazi !7c mp"!vYiZ& vYleftZ" imamo indirektno adresiranje koje se primenjuje na promenljivu c mp, to je prakti'no poziv #unkcije koja se u memoriji nalazi na adresi na koju pokazuje pokaziva' c mp Da bi ovo bilo ispravno, #unkcija na koju c mp pokazuje se mora slagati po tipuItipovima argumenata navedenim pored !7c mp" 0aterijal za ve"be na tabli i pripremu ispita %trana .7 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !1#&
Capisati program u programskom jeziku C za rad sa kompleksnim brojevima Preko argumenata programa zadaju se dva kompleksna broja i to tako da se prvo navodi realan deo prvog broja, zatim imaginarni deo prvog broja, zatim realni i imaginarni deo drugog kompleksnog broja, respektivno <ko korisnik ne unese ta'an broj argumenata potrebno je prekinuti izvravanje programa Eako1e treba napisati potprogram koji proverava da li znakovni niz sadr"i broj i pomou tog potprograma treba ispitati da li su svi navedeni argumenti zaista brojevi <ko bar jedan argument nije broj, potrebno je prekinuti izvravanje programa Program treba da sadr"i i potprogram za sabiranje dva kompleksna broja koji vraa kompleksni broj kao rezultat kao i potprogram za konjugovanje kompleksnog broja koji nema povratnu vrednost Flavni program treba da na standardnom izlazu ispie sve argumente programa, zbir kompleksni& brojeva i konjugovane vrednosti oba kompleksna broja *spis treba vriti pozivom odgovarajueg potprograma koji tako1e treba napisati Kompleksne brojeve predstaviti strukturom Re(enje"
4include5stdi .h6 4include5ctype.h6 4include5stdlib.h6 4define DNSQ 1 4define #ET(Q 0 /7 ist vremen definisem typedef struct (' mple% * d uble Ne& Fm, 3 D' mple%, i strukturu sa imen m !(' mple%" i tip p datka !D' mple%" 7/

/7 parsiram string da bism utvrdili da li predstavlja realni br j 7/ int XaTiOeMr j!c nst char 7pstr" * int bDacka / #ET(Q, if !7pstr//1I1 ^^ 7pstr//101" IIpstr, [hile!7pstr" * if !Kisdigit!7pstr" 99 7pstrK/1.1" return #ET(Q, if !7pstr // 1.1" * if !bDacka" return #ET(Q, bDacka / DNSQ, 3 pstrII, 3 return DNSQ, re)ultat funkcije 7/

/7 sabiram dva br ja i )bir vracam ka D' mple% \bir!D' mple% )1& D' mple% )2" * D' mple% cpl%, cpl%.Ne / )1.Ne I )2.Ne, cpl%.Fm / )1.Fm I )2.Fm, return cpl%, 3

0aterijal za ve"be na tabli i pripremu ispita

%trana .3 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu


/7 k njugujem k mpleksni br j& v id W njug!D' mple% 7p\" * p\06Fm / 0 p\06Fm, 3 peracija se

Programski jezik C
bavlja na sam m primerku strukture 7/

/7 ispisujem br j& u f rmatu % I jy 7/ v id Fspis!D' mple% )" * if !).Fm 6/ 0" printf!-+;.>f I j+;.>f-& ).Ne& ).Fm", else printf!-+;.>f 0 j+;.>f-& ).Ne& 0).Fm", 3 /7 glavni pr gram& ula)ne p datke )adajem int main!int argc& char 7argvYZ" * D' mple% )1& )2& )bir, int i, if !argc K/ ;" * printf!-Snesite tacn return 01, 3 putem k mandne linije 7/

cetiri argumenata pri startu pr gramaKCn-",

printf!-Sneli ste sledece argumente prek f r !i/1, i 5 argc, iII" printf!-+d +sCn-& i& argvYiZ",

k mandne linije:Cn-",

f r !i/1, i 5 argc, iII" * if !KXaTiOeMr j!argvYiZ"" * printf!-Sneli ste argument k ji nije br jKCn-", return 01, 3 3 )1.Ne / at f!argvY1Z", )1.Fm / at f!argvY2Z", )2.Ne / at f!argvY?Z", )2.Fm / at f!argvY>Z", printf!-Cn.rvi br j: -", Fspis!)1", printf!-CnXrugi br j: -", Fspis!)2", )bir / \bir!)1& )2", W njug!9)1", W njug!9)2", printf!-Cn\bir: -", Fspis!)bir", printf!-CnW njug!)1": -", Fspis!)1", printf!-CnW njug!)2": -", Fspis!)2", printf!-CnCn_vala na pa)njiKCn-", return 0, 3

1omentar" $adavanje argumenta putem komandne linije zna'i da glavni program ima dva argumenta <rgumenti komandne linije su stringovi, te i& moramo konvertovati pre korienja Ei argumenti omoguavaju prenoenje parametara glavnom programu koji se zadaju u sastavu komande operativnog sistema za izvravanje programa 0aterijal za ve"be na tabli i pripremu ispita %trana .8 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !11#
Date su sledee deklaracije:
typedef int 'e Mr j, typedef int 7. ka)ivacRa'e Mr j, typedef int Ri)'elihMr jevaY100Z, 'e Mr j 7p ka)E, . ka)ivacRa'e Mr j p ka)M, Ri)'elihMr jeva ni), struct * int %&y, 3 )apisE, struct * int %&y, 3 )apisM& )apis',

Koje od sledei& naredbi dodele su semanti'ki ispravneL


p ka)E / p ka)M, /7 LW 7/ p ka)E / ni), /7 LW 7/ ni) / p ka)E, /7 VNQaWE 7/ )apisM / )apis', /7 LW 7/ )apisE / )apisM, /7 VNQaWE 7/

Obrazloenje" Prvi primer je ispravan zato to je mogua dodela izme1u dve promenljive koje su istog tipa p ka)E i p ka)M su pokaziva'i na int Drugi primer je ispravan jer p ka)E sada pokazuje tamo gde pokazuje ni) Eip imena niza je tip nepromenljivog pokaziva'a na nulti 'lan, zato je trei primer pogrean, jer se ne mo"e nepromenljivom pokaziva'u dodeliti nova vrednost ( programskom jeziku C se koristi strukturna ekvivalencija tipova + typedef imena se pri tome zamenjuju odgovarajuim tipom/ osim u slu'aju struktura i unija $a strukture i unije koristi se ekvivalencija po imenu %vaka neimenovana struktura je poseban tip, 'ak i u slu'aju da su sva polja neke dve strukture me1usobno identi'na

0aterijal za ve"be na tabli i pripremu ispita

%trana .9 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !110
%astaviti program na programskom jeziku C za spajanje sadr"aja nekoliko sekvencijalni& tekst datoteka u jednu izlaznu datoteku *mena datoteka se zadaju kao parametri u komandnoj liniji *me izlazne datoteke je prvi parametar (koliko je prvi parametar XHX, izlazna datoteka je stdout Re(enje"
4include 5stdi .h6 4include 5string.h6 main !int argc& char 7argvYZ" * v id prepis !#FTQ 7& #FTQ7", #FTQ 7ula)& 7i)la), char 7pr g / argvY0Z, i)la) / std ut, if !argc 6 1" * argc00, if !strcmp!7IIargv& -0-" K/ 0" if !!i)la) / f pen!7argv& -[-"" // RSTT" * fprintf!stderr&-+s:greska u tvaranju dat teke +sCn-&pr g&7argv", e%it!1", 3 3 [hile!00argc 6 0" if !!ula) / f pen!7IIargv& -r-"" K/ RSTT" prepis!ula)& i)la)"& fcl se!ula)", else * fprintf!stderr&-+s: ne p st ji dat teka +sCn-& pr gr& 7argv", e%it!2", 3 fcl se!i)la)", e%it !0", 3 v id prepis!#FTQ 7ula)& #FTQ 7i)la)" * int c, [hile!!c/getc!ula)"" K/ QL#" putc!c& i)la)", 3

1omentar" ,lementi char 7argvYZ +niz pod imenom argv 'iji su elementi pokaziva'i na char, gde operativni sistem smeta stringove iz komandne linije/ se mogu tretirati u kodu sa 7argv zbog promocije niz se ne mo"e inkrementirati kao to se to radi u datom primeru, ali ako se kao parametar #unkcije navede neki niz, C to automatski tretira kao pokaziva' na tip podataka kome pripadaju elementi niza, a za pokaziva'e je inkrementiranje dozvoljeno

0aterijal za ve"be na tabli i pripremu ispita

%trana .: od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !12#
( binarnoj datoteci se nalaze zapisi o automobilima i voza'ima %vaki zapis sadr"i podatak o tipu entiteta, samom entitetu i celobrojnu vrednost sledeeg zapisa u logi'ki organizovanoj listi Prvi zapis u datoteci je i prvi zapis liste, a poslednji zapis liste je zapis u 'ijem polju ukazatelja na sledei zapis stoji 6 %vaki zapis u datoteci ima polje koje sadr"i broj logi'ki sledeeg zapisa u datoteci Capisati: 5 potprogram koji 'ita navedenu datoteku i #ormira listu zapisa u dinami'ki dodeljenoj memoriji, pri 'emu zapise povezuje u suprotnom smeru od smera u datoteciM . potprogram koji ispisuje na standardnom izlazu listu iz ta'ke a/ i 4 glavni program koji poziva gornje potprograme 3z12#$7
4include 5stdi .h6 enum tip *ESDL/1& UL\E'3, struct aut m bil *enum tip t, char reg$brY10Z& b jaY10Z& m delY10Z, 3, struct v )ac *enum tip t, char p lY2Z& br$d )v leY10Z& imeY10Z& pre)imeY10Z, 3, uni n )apis *struct aut m bil a, struct v )ac v, 3, struct element$dat *uni n )apis ), int b, 3, struct element$lis *uni n )apis ), struct element$lis 7 s, 3, v v v v v id id id id id pisi$aut ! struct element$lis 7", pisi$v )ac! struct element$lis 7", f rmiraj$listu! #FTQ7& struct element$lis 77", pisi$listu! struct element$lis 7", kreiraj$dat teku!char7",

3z12#$3
4include 5stdi .h6 4include -c)120.hv id main!int argc& char 7argvYZ" * #FTQ 7av$bin, struct element$lis 7lista, if !argc 6 2" kreiraj$dat teku!argvY1Z", if !av$bin / f pen!argvY1Z&-rb-"" * f rmiraj$listu!av$bin&9lista", pisi$listu!lista", 3 3

pisi8av$3
4include 5stdi .h6 4include -c)120.hv id pisi$aut !struct element$lis 7e" * printf!-Negistarski br j: +s, M ja: +s, P del: +sCn-& e06).a.reg$br& e06).a.b ja& e06).a.m del", 3 v id pisi$v )ac!struct element$lis 7e" * printf!-. l: +s, Fme i pre)ime: +s +s, Mr j d )v le: +sCn-& e06).v.p l& e06).v.ime& e06).v.pre)ime& e06).v.br$d )v le", 3

0aterijal za ve"be na tabli i pripremu ispita

%trana .; od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu 9ormlist$3


4include 5stdlib.h6 4include 5stdi .h6 4include -c)120.hv id f rmiraj$listu!#FTQ 7av$bin& struct element$lis 77ppTista" * struct element$lis 7preth/RSTT, struct element$dat bafer, 7ppTista / RSTT, bafer.b / 1, [hile !bafer.b 6 0" * fread!9bafer& si)e f!bafer"& 1& av$bin", fseek!av$bin& si)e f!bafer"7!bafer.b01"& (QQW$(QD", 7ppTista / call c!si)e f!struct element$lis"& 1", !7ppTista"06)/bafer.), !7ppTista"06s/preth, preth / 7ppTista, 3, 3

Programski jezik C

pisilist$3
4include -c)120.hv id pisi$listu!struct element$lis 7lista" * [hile!lista" * s[itch !lista06).a.t" * case ESDL: pisi$aut !lista", break, case UL\E': pisi$v )ac!lista", break, default: printf!-Reispravan element listeKCn-", 3 lista / lista06s, 3 3

r8)at$3
4include -c)120.hv id kreiraj$dat teku!char7 filename" * struct element$dat bafer, int i)b r / 1, #FTQ 7file / f pen!filename& -[b-", [hile!i)b r" * printf!-Eut Y1Z ili v )acY2Z ili kraj un saYbil staZ@ Cn-", scanf!-+d-& 9i)b r", s[itch!i)b r" * case ESDL: printf!-Snesite red m sledece p datke: b ja& m del& registarski br j& WTOS': Cn-", scanf!-+s+s+s+d-& bafer.).a.b ja& bafer.).a.m del& bafer.).a.reg$br& 9bafer.b", bafer.).a.t / ESDL, break, case UL\E': printf!-Snesite red m sledece p datke: ime& pre)ime& p l& br j d )v le: Cn-", scanf!-+s+s+s+s+d-& bafer.).v.ime& bafer.).v.pre)ime& bafer.).v.p l& bafer.).v.br$d )v le& 9bafer.b", bafer.).v.t / UL\E', break, default: i)b r / 0, 3 if !i)b r" f[rite!9bafer& si)e f!struct element$dat"& 1& file", 3 fcl se!file",3

0aterijal za ve"be na tabli i pripremu ispita

%trana 46 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

1omentar" Dvaj zadatak ilustruje korienje struktura i unija, kao i konstrukciju programskog sistema iz vie datoteka %&odno logi'kom ustrojstvu celog programskog sistema, programer treba da odlu'i koje e #unkcije imati u sistemu i kako e i& rasporediti po datotekama c)120.h de#iniciona datoteka u kojoj su deklarisani svi potrebni tipovi podataka, simboli'ke konstante, de#inicije makroa, kao i prototipovi korieni& #unkcija c)120.c ovde se nalazi glavni program, koji poziva odgovarajue potprograme ( slu'aju da datoteka sa podacima ne postoji, glavni program poziva #unkciju koja e je napraviti, a potom 'ita iz te datoteke u listu zapisa, koju na kraju na standardnom izlazu pisi$av.c ovde su smetene #unkcije pisi$aut !" i pisi$v )ac!", koje slu"e za ispis podataka o automobilima i o voza'ima f rmlist.c sadr"i #unkciju koja izvrava 'itanje datoteke, koju smo #ormirali pozivom #unkcije kreiraj$dat teku!", i #ormiranje lista zapisa u dinami'ki dodeljenoj memoriji pisilist.c ovde se nalazi #unkcija za ispis ve #ormirane liste zapisa, koja zavisno od tipa zapisa poziva jednu od #unkcija pisi$aut !" i pisi$v )ac!" kr$dat.c ovde se nalazi #unkcija kreiraj$dat teku!" koja kreira binarnu datoteku u kojoj e se nalaziti zapisi o automobilima i voza'ima

0aterijal za ve"be na tabli i pripremu ispita

%trana 45 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !122
Potrebno je realizovati u programskom jeziku C skup #unkcija za rad sa listom 'ije je ponaanje isto kao ponaanje podatka tipa liste iz pseudojezika -unkcije za rad sa listom treba da se zovu isto kao u pseudojeziku +#indVbolp, insert, moveV#orTard / i treba da budu realizovane u zasebnoj implementacionoj c datoteci Eako1e je potrebno napraviti odgovarajuu de#inicionu & +&eader/ datoteku u kojoj e biti deklarisani svi potrebni tipovi podataka i prototipovi korieni& #unkcija Podaci se u listi skladite preko generi'kog pokaziva'a + v id 7/, a potrebno je obezbediti brisanje podataka sadr"ani& u listi kroz callHback me&anizam Capraviti inicializacionu #unkciju koja inicijalizuje listu i koja postavlja odgovarajuu #unkciju koja se poziva kroz callHback me&anizam pri unitavanju liste Pointer na ovu #unkciju se prosle1uje kao argument #unkcije za inicijalizaciju liste ( listu je iz tekstualne datoteke potrebno pro'itati podatke o studentima Podaci su u #ajl slo"eni tako da je u jednom redu ime i prezime studenta, u drugom broj indeksa u #ormatu 2rojIFodina(pisa i u treem prosek studenta Cakon 'itanja iz datoteke, upisati sve podatke o studentima iz liste u novu binarnu datoteku i to tako da se upisuju samo podaci o studentima sa prosekom veim od : 3 pj8lista$7
4define DNSQ 1 4define #ET(Q 0 typedef enum * lsMLT. / 0& lsQLT.& ls'SNNQRD 3 DTist(tatus, struct (TistQlement /7 element liste 7/ * v id 7pXata, /7 p inter u k me se skladisti adresa p datka 7/ struct (TistQlement 7pRe%t, /7 p ka)ivac na sledeci element u listi 7/ 3, struct (Tist * DTist(tatus ls(tatus, /7 status 0 trenutni p l)aj u listi 7/ struct (TistQlement 7p_ead, /7 p ka)ivac na glavu liste 7/ struct (TistQlement 7p'urrent, /7 p ka)ivac na tekuci element 7/ v id !7destruct r"!v id 7", /7 p ka)ivac na funkciju k ja ima argument tipa v id7 3, typedef struct (TistQlement DTistQlement, typedef struct (Tist DTist, v id initiali)e$list!DTist 7pTist& v id !7destruct r"!v id 7"", v id find$b lp!DTist 7pTist", int m ve$f r[ard!DTist 7pTist", int insert!DTist 7pTist& v id 7pXata", v id 7get!DTist 7pTist", v id destr y$list!DTist 7pTist", int e lp!DTist 7pTist",

7/

pj8lista$3
4include 5stdlib.h6 4include -pj$lista.h/7 Ergumenti: pTist 0 p inter na pr menljivau tipa Dlist& destruct r 0 p inter na funkciju k ja se p )iva u t ku unistavanja liste )a svaki njen p datak 7/ v id initiali)e$list!DTist 7pTist& v id !7destruct r"!v id 7"" * pTist06p_ead / RSTT, pTist06ls(tatus / lsMLT., pTist06p'urrent / RSTT, pTist06destruct r / destruct r, 3

v id find$b lp!DTist 7pTist"

0aterijal za ve"be na tabli i pripremu ispita

%trana 4. od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu


* 3 pTist06ls(tatus / lsMLT., pTist06p'urrent / RSTT,

Programski jezik C

int m ve$f r[ard!DTist 7pTist" * if !pTist06ls(tatus // lsQLT." return #ET(Q, if !pTist06ls(tatus // lsMLT." * pTist06p'urrent / pTist06p_ead, if !pTist06p'urrent // RSTT" pTist06ls(tatus / lsQLT., else pTist06ls(tatus / ls'SNNQRD, return DNSQ, 3 pTist06p'urrent / pTist06p'urrent06pRe%t, if !pTist06p'urrent // RSTT" pTist06ls(tatus / lsQLT., return DNSQ, 3 /7 pTist 0 p ka)ivac na tip Dlist& pXata 0 p datak k ji ce biti ubacen u listu. 7/ int insert!DTist 7pTist& v id 7pXata" * DTistQlement 7pRe[Qlem, if !pTist06ls(tatus // lsQLT." return #ET(Q, pRe[Qlem / !DTistQlement 7"call c!1& si)e f!DTistQlement"", if !pRe[Qlem // RSTT" return #ET(Q, pRe[Qlem06pXata / pXata, pRe[Qlem06pRe%t / RSTT, if !pTist06ls(tatus // lsMLT." * pRe[Qlem06pRe%t / pTist06p_ead, pTist06p_ead / pRe[Qlem, pTist06p'urrent / pRe[Qlem, pTist06ls(tatus / ls'SNNQRD, return DNSQ, 3 pRe[Qlem06pRe%t / pTist06p'urrent06pRe%t, pTist06p'urrent06pRe%t / pRe[Qlem, pTist06p'urrent / pRe[Qlem, return DNSQ, 3 v id 7get!DTist 7pTist" * if !pTist06ls(tatus // ls'SNNQRD" return pTist06p'urrent06pXata, return RSTT, 3 v id destr y$list!DTist 7pTist"

0aterijal za ve"be na tabli i pripremu ispita

%trana 44 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu


*

Programski jezik C

DTistQlement 7pQlem& 7p_elpQlem, f r !pQlem / pTist06p_ead, pQlem K/ RSTT," * p_elpQlem / pQlem06pRe%t, if !pTist06destruct r" !7pTist06destruct r"!pQlem06pXata", /7 na v m mestu p inter na funkciju 7/ /7 se dereferencira i )atim se p )iva ta funkcija 7/ /7 sa argument m pQlem06pXata 7/ free!pQlem", pQlem / p_elpQlem, 3

3 int e lp!DTist 7pTist" * return pTist06ls(tatus // lsQLT., 3

3z122$3
4include 4include 4include 4include 5stdlib.h6 5string.h6 5stdi .h6 -pj$lista.h7/

typedef struct * /7 struktura u k j j se cuvaju p daci char strFmeY2;<Z, /7 studentu 7/ int nV dSpisa, int nMr j, fl at f.r sek, 3 D(tudent,

v id Snisti(tudenta!v id 7p(tudent" /7 funkcija ne ph dna )a call0back 7/ * /7 pri unistavanju liste 7/ if !p(tudent K/ RSTT" * printf!-Snisti(tudenta +sCn-& !!D(tudent7"p(tudent"06strFme", free!p(tudent", 3 3 v id main!" * #FTQ 7f1& 7f2, DTist list, D(tudent 7p(tudent, char 7pWrajTinije, f1 / f pen!-studenti.t%t-& -r-", /7 tvaram tekstualnu dat teku )a citanje 7/ if !f1 // RSTT" * printf!-Xat teka ne p st jiKCn-", /7 tvaram binarnu dat teku )a upis 7/ return, 3 f2 / f pen!-studenti.bin-& -[b-", if !f2 // RSTT" * printf!-Xat teka )a upis nece da se fcl se!f1", return, 3

t v riKCn-",

initiali)e$list!9list& Snisti(tudenta", /7 identifikat r funkcije je ujedn i p ka)ivac na funkciju 7/ [hile !Kfe f!f1""

0aterijal za ve"be na tabli i pripremu ispita

%trana 47 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu


* p(tudent / !D(tudent 7"call c!si)e f!D(tudent"& 1", fgets!p(tudent06strFme& 2;;& f1",

Programski jezik C

/7 #unkcija fgets cita string sve d kraja linije& ali ukljucuje i kraj linije u stringK \at cem k ristiti strchr funkciju k ja vraca adresu prv g karaktera k ji se )adaje ka drugi argument funkcije u kviru stringa k ji se )adaje ka prvi argument funkcije. Ek karakter nije pr nadjen strchr vraca RSTT. Wada pr nadjem karakter )a kraj linije& pr st cem ga i)baciti p stavljajuci ga na 1C01 st )nacava kraj stringa. 7/ if !!pWrajTinije / strchr!p(tudent06strFme& 1Cn1"" K/ RSTT" 7pWrajTinije / 1C01, fscanf!f1& -+d/+d Cn-& 9p(tudent06nMr j& 9p(tudent06nV dSpisa", fscanf!f1& -+f Cn-& 9p(tudent06f.r sek", if !Kinsert!9list& !v id 7"p(tudent"" * destr y$list!9list", printf!-Vreska pri ubacivanju u listuKCn.r gram prekinutKCn-", return, 3

fcl se!f1", find$b lp!9list", [hile !DNSQ" * m ve$f r[ard!9list", if !e lp!9list"" break, p(tudent / !D(tudent7"get!9list", printf!-Fme i pre)ime: +sCn-& p(tudent06strFme", printf!-Mr j indeksa: +d/+02dCn-& p(tudent06nMr j& p(tudent06nV dSpisa", printf!-.r sek: +>.2fCn-& p(tudent06f.r sek", if !p(tudent06f.r sek 6 A.;" * if !f[rite!p(tudent& si)e f!D(tudent"& 1& f2" // 1" printf!-Wandidat uspesn upisan u n vi fajl...CnCn-", else * printf!-Vreska pri upisuK .r gram prekinut.Cn-", break, 3 3 else printf!-Wandidat nije )ad v lji usl ve )a upis u n vi fajlKCnCn-", 3 fcl se!f2", destr y$list!9list", printf!-77 WNEO 77Cn-",

0aterijal za ve"be na tabli i pripremu ispita

%trana 43 od 48

,lektrote&ni'ki #akultet (niverziteta u 2eogradu

Programski jezik C

/a)ata !120
Pod pretpostavkom da su zapisi u datoteci ure1eni u leksikogra#ski ure1eno stablo, ta ispisuje dati program za zadatu datoteku +prvi argument komandne linije/ i zadati klju' +drugi argument/L
4include 5stdi .h6 4include 5string.h6 struct tree$elem * char keyY7Z, unsigned l ng left& right, 3, v id create!char7 filename" * struct tree$elem buffer, #FTQ 7file / f pen!filename& -[b-", [hile !Kferr r!file"" * printf!-CnWQb TQ#D NFV_D: -", scanf!-+<s +lu +lu-& buffer.key& 9buffer.left& 9buffer.right", if !strcmp!buffer.key& -QRX-" // 0" break, f[rite!9buffer& si)e f!struct tree$elem"& 1& file", 3 fcl se!file", 3 v id traverse! #FTQ 7file& char keyYZ& unsigned l ng n de" * struct tree$elem buffer, static int ukupn $aktivacija / 0, int va$akt, printf!-. cetak aktivacije +dCn-& va$akt / IIukupn $aktivacija", if ! n de // 0 " * printf!-Wraj aktivacije +dCn-& va$akt", return, 3 fseek! file& ! n de 0 1 " 7 si)e f! struct tree$elem "& (QQW$(QD", fread! 9buffer& si)e f!struct tree$elem "& 1& file ", if ! ferr r! file " " return, traverse! file& key& buffer.left ", if ! strcmp! key& buffer.key " 6/ 0" * printf! -+sCn-& buffer.key ", traverse! file& key& buffer.right ", 3 printf!-Wraj aktivacije +dCn-& va$akt", 3 v id main! int argc& char 7argvYZ " * #FTQ 7file, /7 vak dredjujem da li kreiram dat teku ili 7/ if !argc 6 ?" create!argvY1Z", /7 k ristim vec napravljenu nek m ranij m prilik m 7/ if ! ! file / f pen! argvY1Z& -rb- " " // RSTT " fprintf! stderr& -Vreska pri tvaranju dat teke +sCn-& argvY1Z ", else traverse! file& argvY2Z& 1 ", 3

</ klju'eve svi& zapisa u datoteci u leksikogra#skom poretku 2/ klju'eve svi& zapisa manji& do jednaki& zadatom, u leksikogra#skom poretku C/ klju'eve svi& zapisa manji& do jednaki& zadatom, u obrnutom leksikogra#skom poretku O)govor" 2 1omentar" promenljive ukupn $aktivacija i va$akt slu"e za pojanjavanje rednog broja aktivacije posmatrane rekurzivne #unkcije traverse, i nemaju uticaja na sutinu zadatka

0aterijal za ve"be na tabli i pripremu ispita

%trana 48 od 48

You might also like