Está en la página 1de 141

6. Voved vo programskiot jazik C Programskiot jazik C e relativno mlad programski jazik.

Toj e programski jazik na osumdesetite i deveesetite godini na minatiot vek. Se upotrebuva na mnogu {irok spektar na smeta~i od 8 bitni mikrosmeta~i, kako na primer KO O!O" #$ (COMMODOR 64), do super smeta~i, kako K"%& (Cray). C e ednostaven i eleganten programski jazik {to denes silno se nametnuva. Se koristi se' po~esto i so nego se pi{uvaat( operativni sistemi (KSENIKS), asembleri, programi za komunika)ii, preveduva~i (FORTRAN, APL, PASKAL, LISP, LOGO i drugi programski jazi)i naj~esto vo sklop na &*+,KS operativni sistemi-, interpreteri, standardni aplikativni programi .pro)esori na tekst, bazi na podato)i, tabelatori i sli~no-, komer)ijalni programi, igri i programi za spe)ijalni nameni .na primer nekoi gra/i~ki sekven)i od /ilmovite 0ra1a2eto na 3edaj i 4vezdeni pateki 5 se programirani vo C-. 6esti se diskusiite kade e mestoto na C vo 7ierar7ijata na programskite jazi)i, dali e toa vi{ ili ni8 programski jazik ili ne{to pome9u .kako naprimer programskiot jazik FORTH). C, me9u drugoto, ja popolnuva prazninata me9u vi{ite programski jazi)i i asemblerite. :idejki toj gi kombinira elementite od vi{ite programski jazi)i so /unk)ionalnosta na asemblerite, mo8eme da go nare~eme jazik so {iroko nivo {to 9i obedinuva svojstvata i na vi{ite i na ni8ite programski jazi)i. ;a tvore) na ovoj programski jazik se smeta !enis "i~i (Dennis Ri !"ie) od laboratoriite :el. Toj zaedno so Ken +orton (Ken N#r "#n) rabotel na dizajnira2e na operativniot sistem &*+,KS. Tie imale zada~a da go prepi{at operativniot sistem &*+,KS, {to bil napi{an vo asembler za PDP $$, na druga ma{ina. Prenesuva2eto na operativnite sistemi od edna na druga ma{ina i ~estite promeni na samata programa, vo /azite na nejzinata najrana primena, pretstavuvaat golem napor za programerite. ;a realizira2e na taa zada~a "i~i i +orton napravile pomo{en jazik {to go narekle C, bidejki pri negovata izrabotka se bazirale na jazikot :, razvien od Ken Tomson (Ken T"#%&s#n) za nekoja sli~na namena.

Informatika 2

!enis "i~i (Dennis Ri !"ie) <enealogijata na programskiot jazik C e slednava. Kako i za site drugi struktuirani programski jazi)i, taka i za programskiot jazik C, mo8e da se ka8e deka negov najdale~en predok e programskiot jazik ALGOL 6'. ALGOL ( ot #=, kako {to ka8uva i negovoto ime, bil razvien vo >?#= godina od strana na pove1ena)ionalna grupa. Toj nastanal samo nekolku godini po programskiot jazik FORTRAN. Pri sozdava2eto na ovoj jazik bilo posveteno golemo vnimanie na negovata sintaksa, modularna struktura i drugi ne{ta za koi denes se smeta deka se sovremeni i korisni. ;a 8al, ovoj programski jazik ne bil nikoga{ op{to pri/aten, verojatno poradi svojata pregolema generalnost, apstraktnost i op{irnost. 0o >?#@ godina na univerzitetot vo KembriA razvien e programskiot jazik CPL (CPL ( C#%)ine* Pr#+ra%%in+ Lan+,a+e). Ovoj jazik pretstavuva obid programskiot jazik ALGOL 6' da se poednostavi i svede na razumna merka. +o i ovoj programski jazik bil preop{iren i preslo8en, pa kako takov i te8ok za u~e2e i primena. artin "i~ards (Mar in Ri!"ar*s), isto taka od KembriA, vo >?#B godina go sozdal jazikot -CPL (-CPL ( -asi! C#%)ine* Pr#+ra%%in+ Lan+,a+e). Pri toa, poednostavuvajki go programskiot jazik CPL, se obidel da dojde do poednostaven i primenliv programski jazik. Ovoj programski jazik e sli~en na makroasemblerite i mo8e da se najde vo primena i na nekoi mikrosmeta~i (--C i Sin!.er /L). +atamo{no poednostavuva2e na ovoj programski jazik bilo napraveno od Tomson. Toj rabotel vo laboratoriite na :el na implementa)ija na ranite verzii na operativniot sistem &*+,KS. ;a taa )el, Tomson go sozdal programskiot jazik : vo >?B= godina. &azikot : pretstavuva natamo{no poednostavuva2e na programskiot jazik -CPL. Ovoj jazik bil primenet za realiza)ija na prviot &*+,KS operativen sistem na smeta~ot PDP(0. Poednostavuva2eto na ovie programskite jazi)i dovelo do toa tie da bidat upotreblivi samo za ograni~en broj na primeni. ;atoa !enis "i~i se obidel da ja povrati izgubenata generalnost konstruiraj1i go programskiot jazik C vo >?B5 godina.

Informatika 2

ALGOL 6' CPL -CPL C Programskiot jazik C bil konstruiran prvenstveno za potrebite na prenos na operativniot sistem &*+,KS od eden vid na smeta~ na drug. Ovoj operativen sistem bil napi{an vo asembler za PDP $$ i negovoto prenesuva2e ili prepi{uva2e za druga ma{ina pretstavuvalo golema i makotrpna rabota. ;a realiza)ija na taa rabota "i~i napravil pomo{en programski jazik {to vo po~etokot go narekol N- (N- ( n# -). So pomo{ na noviot programski jazik, {to "i~i duri pokasno go narekol C, bil prepi{an skoro )eliot operativen sistem &*+,KS so isklu~ok na samo nekolku asemblerski rutini. Programskiot jazik ne bil posebno populariziran od nikogo. Toj samiot se nametnal bez nikakvo reklamira2e, taka da i avtorot "i~i bil iznenaden koga videl kolku negoviot jazik stanal popularen. &azikot C ja poseduva kompaktnosta karakteristi~na za programskite jazi)i konstruirani od eden ~ovek. Takvi programski jazi)i se ve1e spomenatite : i -CPL i programskite jazi)i kako Pas1a., Lis&, APL i drugi. ;a razlika od niv programskite jazi)i {to se konstruirani od strana na timovi so pove1e avtori kako {to se PL2$, ADA, ALGOL 63 i drugi, se ~esto pati preslo8eni i ne tolku kompaktni. C e programski jazik za op{ta namena i so nego mo8at da se pi{uvaat najrazli~ni programi. Sepak, mo8eme da re~eme, deka negovite mo8nosti najmnogu doa9aat do izraz pri pi{uva2e na sistemski so/tver, {to i bila negovata prvenstvena namena i spe)ijalnosta na negoviot tvore). 0o odnos na goleminata C e ekstremno mal programski jazik. :rojot na klu~ni zborovi vo C iznesuva @5 .5B spored knigata na "i~i i Kernigam koja doskoro be{e edinstven standard za C i dopolnitelni C koi se vneseni vo D+S, standardot za C-, za razlika od naprimer ,: E oviot :%&;,K kade brojot na klu~ni zborovi iznesuva >C?. Klu~ni zborovi vo C spored standardot D+S, se( a, # )rea1 !ase !"ar !#ns 7 !#n in,e *#,).e e.se en,%(en ry) e6 ern 5.#a 5#r in .#n+ re+is er re ,rn s"#r si+ne* s r,! s4i !" y&e*e5 ,ni#n ,nsi+ne* 8#i* 7

Informatika 2

4 +# # i5 si9e#5 s a i! 8#.a i.e 4"i.e 7

*e5a,. *#

Pri toa so F se ozna~eni onie klu~ni zborovi koi ne se pojavile vo prvi~nata verzija na C, izrabotena od "i~i, a se pokasno vovedeni pri standardiza)ijata na jazikot. , vo dvete verzii mo8e da se zabel8i deka C gi sodr8i samo osnovnite naredbi i deka nema vgradeni vlezno E izlezni naredbi i naredbi za rakuva2e so nizi na znakovi. Gilozo/ijata na C e takva da site poslo8eni /unk)ii se realiziraat so pomo{ na osnovnite naredbi i kako takvi se ~uvaat vo taka nare~enite biblioteki na /unk)ii. So sekoj preveduva~ na C se ispora~uvaat i biblioteki na razni vidovi na /unk)ii. Programite vo C se sostojat od nizi na blokovi koi se vikaat /unk)ii. Pi{uva2eto na programite se sveduva na pi{uva2e na poedini /unk)ii i nivno vklopuva2e. Site /unk)ii se ravnopravni so toa {to edna mora da go ima imeto %ain(). Toa e /unk)ijata od koja otpo~nuva programata nezavisno od rasporedot na /unk)iite. 6ita2eto na programite vo C e te{ko i na prv pogled tie se prili~no nerazbirlivi. Toa e poradi golemiot broj na operatori koi se prisatni poradi tenden)ijata za bliskost so asemblerot. ;a ilustra)ija na pret7odno re~enovo, eve nekolku primeri kaj koi e te{ko da se zaklu~i koja vrednost se dodeluva na promenlivata 6, bez poznava2e na jazikot C( 6:(;74< (62= 6 : 6 >> y 7 ?? 9 6 @ : ( 6 @@ @ @@ y C ovozmo8uva i rabota so poka8uva~i. Poka8uva~ite najprosto re~eno soodvetstvuvaat so ma{inskite adresi. nogu ma{inski instruk)ii rabotat direktno so realnite adresi pa primenata na poka8uva~ite ovozmo8uva e/ikasni prevedeni programi. Od &*+,KS okolinata C se pro{iril na mini smeta~ite a potoa i na mikrosmeta~ite. Toj e osnovno orudie na mnogu poznati programerski ku1i kako {to se( As" #n Ta e, Mi!r#s#5 , Di+i a. Resear!", DEC, AT>T i t.n. Preneslivosta na C, za koja mnogu se zboruva, e realnost na nivo na prenos na programi {to inaku bi se prenesuvale kako asemblerski programi. ;a aplikativni programi preneslivosta na jazi)ite kako {to se FORTRAN i PASKAL e daleku pogolema poradi golemiot stepen na nivnata standardiza)ija. Programite vo C se prenesuvaat vo izvoren kod naj~esto me9u razni smeta~i so &*+,KS operativen sistem. 7. Op{t oblik na C programi

Informatika 2

:ilo koja kompjuterska programa se sostoi od dva entiteta podato)i i programi. Ovie dva entiteta se me9usebno zavisni i za podgotovka na dobra programa potrebno e vnimatelno planira2e i na dvata entiteta. Programite vo C moraat da imaat nekolku osnovni delovi. Strukturata na programite e takva da se tie sostaveni od edno mno8estvo na posebni /unk)ii koi se na nekoj na~in, zavisno od potrebite i 8elbite na programerot, povrzani.

%ain

%ain

%dna od /unk)iite go nosi imeto %ain i taa e onaa /unk)ija od koja otpo~nuva izvr{uva2eto na programata. Poradi toa sekoja programa vo C mora pokraj ostanatite da ja ima i ovaa /unk)ija. Ostanatite /unk)ii mo8at da se koristat vo sklop na razni programi. Pove1e za strukturata na /unk)iite i na~inite na nivnata rabota i upotreba 1e bide zboruvano pokasno. Strukturata na glavnata /unk)ija e slednata 8#i* %ain() A *e1.ara!iBa na &r#%en.i8iC &r#+ra%s1i nare*)iC D Kade %ain e imeto na glavnata /unk)ija a praznite zagradi {to sledat ozna~uvaat deka vo ovoj slu~aj na glavnata /unk)ija ne i se prosleduvaat parametri. <olemite zagradi A i D ozna~uvaat po~etok i kraj na /unk)ijata. Tie op{to ozna~uvaat po~etok i kraj na bilo kakvo mno8estvo na naredbi. Obi~no takvite mno8estva na naredbi se narekuvaat blokovi, i mo8at da se pojavuvaat neograni~en broj pati vo sklopot na /unk)iite. 0oobi~aeno e naredbite da se pi{uvaat po edna vo red iako e mo8no da se pi{uvaa i pove1e naredbi vo eden red. +a krajot na sekoja naredba se stava znakot H

Informatika 2

nare*)a $C ili nare*)a $C nare*)a EC nare*)a ;C

nare*)a EC

nare*)a ;C

Site promenlivi vo C moraat da bidat deklarirani pred da bidat upotrebeni. Sli~no kako i kaj drugite jazi)i se deklarira imeto i vidot na promenlivata. Se razbira i tuka kako i kaj razni drugi programski jazi)i postojat razni vidovi na promenlivi za koi podetalno 1e se zboruva pokasno. +ajednostavna C programa e slednava 8#i* %ain() A D ;a 8al ovaa programa ne raboti ni{to. Slednata programa ispi{uva tekst na ekranot Fin!.,*e Gs *i#."H 8#i* %ain() A &rin 5(IO8aa &r#+ra%a is&is,8a e1s na e1ran# .I)C D 0o ovaa programa ima samo edna naredba. +aredbata se sostoi od povikuva2e na /unk)ijata &rin 5(). Ovaa /unk)ija go ispi{uva tekstot vo navodni)ite na ekranot. Taa ne pripa9a na jadroto na C i se nao9a vo posebna biblioteka za vlezno izlezni /unk)ii. Ovaa biblioteka se vika stdio.7. ;a ovaa programa da raboti ispravno bibliotekata s *i#." mora da i se priklu~i na programata. Toa se postignuva so pretpro)esorskata naredba Fin!.,*e Gs *i#."H. Pove1e za vlezno izleznite bibliote~ni /unk)ii i pretpro)esorskite naredbi 1e bide ka8no pokasno. So slednava programa na edna promenliva 1e i bidat dodeleni nekolku vrednosti. Fin!.,*e Gs *i#."H 8#i* %ain() A in in*e6C in*e6 : $;C &rin 5(IJre*n#s a na &r#%en.i8a a in*e6 e <*KnI, in*e6)C in*e6 : E0C &rin 5(IJre*n#s a na &r#%en.i8a a in*e6 e <*KnI, in*e6)C in*e6 : $'C &rin 5(IJre*n#s a na &r#%en.i8a a in*e6 e <*KnI, in*e6)C D

Informatika 2

Kako dopolnuva2e na ovie op{ti pravila mo8e da se ka8e u{te deka e dozvoleno bilo kade vo programite da se smestat komentari koi otpo~nuvaat so IF i zavr{uvaat so FI. Komentarite 1e bidat ilustrirani so slednava programa. Fin!.,*e Gs *i#."H 27 O8a e 1#%en ar. K#%en ari e se i+n#riraa #* s rana na &re8e*,8a!# 72 8#i* %ain() 27 O8a e *r,+ 1#%en ar. I #8#B 1#%en ar De )i*e i+n#riran #* &re8e*,8a!# 72 A &rin 5(IO8a e &r#+ra%a 9a i.,s riranBe na &ri%ena a na 1#%en ari e I)C 27 D#98#.en# e 1#%en ari e *a se &r# e+aa 8# &#8e1e .inii 72 D 27 P#s.e*en 1#%en ar 72 Komentarite se mnogu va8en del od programite. nogu brzo i mnogu ~esto se zaborava {to e napraveno i kako e napraveno. Koga e potrebna modi/ika)ija na programa koja nekoj drug ja pravel ili koja samite sme ja napravile mnogu polesno e snao9a2eto vo programata koga taa e komentirana. Osven komentarite i samata /orma na pi{uva2e na programata vo mnogu mo8e da go olesni ili ote8ne ~ita2eto ili razbira2eto na programite. Sleduvaat dva primeri na ista programa koja e prvo dobro i ~itlivo napi{ana a potoa lo{o i ne~itlivo Primer za dobro napi{ana programa Fin!.,*e Gs *i#."H 8#i* %ain() 27 G.a8na a 5,n1!iBa # &#!n,8a ,1a 72 A &rin 5(ID#)ra a 5#r%a na &r#+ra%a a I)C &rin 5 (I8# %n#+, nes a %#9e *a +# #.esni I)C &rin 5 (Ira9)iranBe # na &r#+ra%a a KnI)C &rin 5(Ia .#sa a 5#r%a na &r#+ra%a a I)C &rin 5 (I%#9e *a Ba na&ra8i &r#+ra%a a I)C &rin 5 (Is#se%a ne!i .i8a I)C D Dko se pogledne listata na programata mnogu lesno se gleda sto ovaa programa raboti. Preveduva~ot na C gi ignorira site prazni mesta vo naredbite so {to na programerot mu ovozmozuva so vmetnuva2e na prazni mesta da ja zgolemi ~itlivosta na programata Primer za lo{o napi{ana programa

Informatika 2

Fin!.,*e Gs *i#."H 8#i* %ain() 27 G.a8na a 5,n1!iBa # &#!n,8a ,1a 72A&rin 5(ID#)ra a 5#r%a na &r#+ra%a a I)C&rin 5(I8# %n#+, nes a %#9e *a +# #.esni I)C &rin 5(Ira9)iranBe # na &r#+ra%a a KnI) C&rin 5(Ia .#sa a 5#r%a na &r#+ra%a a I)C&rin 5(I%#9e *a Ba na&ra8i &r#+ra%a a I)C &rin 5(Is#se%a ne!i .i8a I)CD ;a ~ita2e i razbira2e na ovaa programa od strana na ~ovek e potrebno zna~itelno pogolemo vreme. Preveduva~ot i ovaa verzija na programata ja preveduva so ista lesnotija kako i pret7odnata davajki pri toa ista prevedena programa. ;na~i ima dve programi koi ja izvr{uvaat sosema istata zada~a so toa {to se razlikuvaat po /ormata na koja se napi{ani. ;a ve8ba Sostavete programa koja 1e go ispi{e va{eto ime na ekranot odi/i)irajte ka programata od to~ka eden taka da pokraj imeto ja ispi{e i va{ata adresa 8. Vidovi na podato i! operatori i izrazi Podato)ite vo programskiot jazik C mo8at da bidat pretstaveni kako konstanti i promenlivi. Konstantite se /iksni vrednosti {to vo tekot na programata ne mo8at da se menuvaat, a promenlivite mo8at da dobijat bilo koja vrednost od edno mno8estvo na vrednosti. Sekoja promenliva vo C se karakterizira so na~inot na upotreba i so vidot na vrednosti {to mo8e da gi sodr8i. +a~inot na upotreba na promenlivata de/inira kade taa 1e se memorira i kolku dolgo 1e ostane memorirana. Prvo se de/inira na~inot na upotreba na promenlivata a potoa se deklariraat i nejziniot vid i ime. ,ma pove1e na~ini na upotreba na promenlivite. +aj~esto se koristat na~inite ALTO, STATIC i EMTERN, a poretko REGISTER koj vo sklopot na ovaa skripta nema da se primenuva. Dko ne e spe)i/i)iran na~iot na memorira2e toga{ toj e ALTO. ALTO promenlivite se deklariraat vo sklop na /unk)iite i egzistiraat se do zavr{uva2e na /unk)ijata. Jtom /unk)ijata zavr{i tie ja osloboduvaat dodelenata im memorija, a pri povtorno povikuva2e na /unk)ijata povtorno se generiraat i za/akaat nekoj drug del od memorijata. ;a razlika od promenlivite ALTO, promenlivite STATIC ja so~uvuvaat svojata vrednost i posle zavr{uva2e na /unk)ijata. emorijata za niv e postojano rezervirana i pri povtorno povikuva2e na /unk)ijata tie ja imaat vrednosta od pret7odniot povik. Pove1e za ovoj i ostanatite na~ini na upotreba na promenlivite 1e bide ka8ano pokasno.

Informatika 2

"

Pred promenlivata da bide upotrebena potrebno e programerot ekspli)itno da go spe)i/i)ira vidot na promenlivata {to se narekuva deklarira2e na promenlivata. Promenlivite kaj C mo8e da se podelat na dva vida( odnapred de/inirani vidovi na promenlivi ili standardni vidivi na promenlivi i spe)ijalni vidovi na promenlivi. Standardnite vidovi na promenlivi se onie vidovi na promenlivi {to naj~esto se koristat. Toa se broevi i bukvi odnosno znakovi. :roevite pak od svoja strana mo8at da bidat )eli, realni i so razli~ni dol8ini. Kaj jazikot C gi imame slednite standardni vidovi na promenlivi( in s"#r .#n+ ,nsi+ne* !"ar 5.#a *#,).e Prvite ~etiri vidovi se )eli broevi. Tie mo8at da se upotrebuvaat samostalno ili vo nekoi kombina)ii kako naprimer ,nsi+ne* s"#r Promenlivite od vidot !"ar se znakovi, a poslednite dva vidovi se realni broevi. Promenlivite, /unk)iite i spe)ijalnite na podato)i imaat svoi imi2a koi gi de/inira programerot. ,mi2ata se kombina)ii od bukvi, brojki i znakot za podvlekuva2e . K koj se tretira kako bukva. ,mi2ata moraat da po~nuvaat so bukva posle {to moe da sleduva bilo koja kombina)ija od ostanatite dozvoleni znakovi. ;nakot za podvlekuva2e se koristi za zgolemuva2e ~itlivosta na dolgite imi2a sostaveni od poveke zborovi kako naprimer i%ei&re9i%e i%eNiN&re9i%e

;nakot za podvlekuva2e, me9u drugoto, se koristi i na prvoto mesto vo imi2ata na nekoi od promenlivite i /unk)iite koi interno se koristat od preveduva~ot. Od taa pri~ina se prepora~uva, znakot za podvlekuva2e, da ne se koristi na prvata pozi)ija vo imi2ata na promenlivite i /unk)iite {to gi zadava korisnikot za da ne dojde do nesakano poklopuva2e na imi2ata. ,mi2ata na promenlivite mo8at da imaat proizvolna dol8ina no razni preveduva~i zemaat predvid samo opredelen broj znakovi zanemaruvajki gi ostanatite. aksimalnata dol8ina na imi2ata, spored standardot ANSI e @> znak. 0o su{tina imi2ata mo8at da bidat i podolgi od @> znak no preveduva~ot 1e gi ignorira site zna)i preku @> E ot znak.

Informatika 2

#$

C gi razlikuva malite i golemite bukvi taka da imi2ata MAM i %a6 ne ozna~uvaat isti promenlivi. 0oobi~aeno e imi2ata na promenlivite da se pi{uvaat so mali bukvi, a imi2ata na konstantite so golemi bukvi. +ekoi imi2a se klu~ni zborovi so spe)ijalno zna~nie za preveduva~ot pa kako takvi ne mo8at da bidat imi2a na promenlivi. +ekoi od klu~nite zborovi kako in , !"ar i sli~no se ve1e objasneti a ostanatite 1e bidat objasneti vo natamo{niot tek. Listata na klu~ni zborovi e dadena vo pret7odnoto poglavje Slednive imi2a na promenlivi se korektni a$ aN$ e 6NyN9 ).#!1 s,&er1a.a5ra*Be.is i1e1s&ira.i*#,s"n a ovie se nekorektni a.$ 0(%i O in en* *#,).e Pri de/inira2e na vidot na promenlivite, mo8e na promenlivite da im se dodeli po~etna vrednost ili kako {to toa obi~no se vika se vr{i ini)ijaliza)ija na promenlivite. Sintaksata na ini)ijalizira2e vrednosta na promenlivite e ednostavna. 0edna{ posle imeto na promenlivata so znakot za ravno na promenlivata i se dodeluva vrednost in 6 : =C in a, ) : 6, !, * s"#r 6, y : ;, 9 : 0C 0o natamo{niot tekst 1e im bide obrnato vnimanie na vidovite na )elobrojni promenlivi. Kaj C ima ~etiri vidovi na )elobrojni promenlivi i toa in s"#r .#n+ ,nsi+ne* Prvite tri se )eli broevi so predzna)i, a ~etvrtiot e )el broj bez predznak {to zna~i deka mo8e da bide = ili pozitiven. "azlikite pome9u in , s"#r i .#n+ se vo brojot na dodeleni bajtovi za broj i tie se razli~ni za razli~ni sistemi.

Informatika 2

##

Osven kako promenlivi vidovite in , s"#r i .#n+ mo8at da se koristat i kako konstanti. Pri toa konstantite od vidot in i s"#r se pi{uvaat kako i konstantite vo matematikata, a konstantite od tipot .#n+ so dodava2e na bukvata L na krajot. +a primer ;$;L e konstanta od vidot .#n+. Tuka mo8e da se upotrebi i malo I.I no voobi~aeno e golemoto bidejki te{ko se razlikuvaat malo I.I i )i/rata >. Osven kako dekadni broevi )elobrojnite konstanti mo8at da bidat pretstaveni i kako oktalni i 7eksade)imalni broevi. Dko kaj konstantata prvata )i/ra e nula toga{ taa konstanta se tretira kako oktalna i kako takva ja nosi so sebe soodvetnata vrednost. +aprimer 'E$ e oktalna konstanta i nejziniot dekaden ekvivalent e >B. Sli~no '6E$ e 7eksade)imalna konstanta i kako takva e interpretirana so dekaden ekvivalent @@. Pri toa 7eksade)imalnite konstanti mo8at da otpo~nuvaat i so =6 i so =M. 0idot ,nsi+ne* se deklarira isto kako i drugite )elobrojni vidovi na promenlivi so toa {to mo8e da se kombinira s# in , s"#r ili .#n+. Pri toa ,nsi+ne* in 6, y, 9C e isto {to i ,nsi+ne* 6, y, 9C pa po~esto se koristi pokratkata /orma. Se razbira mo8e da ima i deklara)ii od vidot ,si+ne* s"#r ili ,nsi+ne* .#n+ Ovoj vid na promenlivi mo8e da se koristi koga e potrebna sigurnost deka nekoi promenlivi nikoga{ nema da stanat negativni i za rabota so pogolemi pozitivni broevi. So vidot !"ar se de/inira promenliva bez predznak vo intervalot .E>58, >5B- {to obi~no se ~uva vo eden bajt od memorijata. Ovoj vid promenlivi e mo{ne sli~en na

Informatika 2

#2

)elobrojnite int promenlivi. +a sekoj broj od intervalot .E>58, >5B- mu soodvetstvuva po eden znak ili /unk)ija .bukva, brojka, spe)ijalen znak ili nekoja /unk)ija, naprimer so ==B se aktivira zvu~en signal-. 0rednosta na ovie promenlivi mo8e da se prika8e ili kako dekaden ekvivalent na kodot ili kako soodvetniot znak ili /unk)ija. Konstantite od ovoj vid se pretstavuvaat vo edine~ni navodni)i. +aprimer ako se saka na promenlivata 6 od tipot !"ar da i se dodeli vrednosta na simbolot D, toga{ se pi{uva sledniot programski otse~ok !"ar 6C 6 : PAPC ili !"ar 6 : PAPC pri {to treba da se ima na um deka na edna promenliva mo8e da i se dodeli samo eden simbol odnosno /unk)ija. Gunk)ionalnite vrednosti na !"ar promenlivite ne mo8at da se pretstavat so eden simbol bidej1i tie nemaat soodveten ekvivalent pa za nivno dodeluva2e se koristat oktalni broevi na koi im pret7odi simbolot za eskejp . K -. Dko se saka na nekoja )7ar promenliva da i se dodeli dekadniot ekvivalent B {to ne e simbol tuku /unk)ija .go aktivira zvu~niot signal- toga{ se upotrebuva sledniot programski otse~ok !"ar 9C 9 : PK'0PC pri {to levite nuli mo8at da bidat i izostaveni 9 : PK0P Tuka mora da se vnimava na razlikata me9u kodot i simbolot. +aprimer simbolot M$M ima kod C5 i toj kod go pretstavuva simbolot M$M a ne vrednosta $. Ka8anoto 1e bide ilustrirano so slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar !C !:PAPC &rin 5(IK#*# 9a <! e <*I,!,!)C D Se razbira ovaa programa 1e gi otpe~ati simbolot D i negoviot kod.

Informatika 2

#3

Ne bidat poglednati i realnite vidovi na promenlivi. Kako {to ve1e be{e re~eno vo jazikot C tie se deklariraat so 5.#a ;a dobiva2e na realni broevi so zgolemena to~nost se koristi *#,).e ili .#n+ 5.#a {to go zgolemuva brojot na dodeleni bitovi po broj obi~no od @5 na #$. Kaj nekoi preveduva~i postoi .#n+ *#,).e kade za interpreta)ija na brojot se koristat 8= bitovi. "ealnite konstanti se pretstavuvaat kako realnite broevi vo matematikata so taa razlika {to namesto de)imalna zapirka se koristi de)imalna to~ka. "ealnite konstanti mo8at da se prika8uvaat i vo taka nare~eniot te7ni~ki na~in na zapi{uva2e. 0o te7ni~kiot na~in na zapi{uva2e vrednosta na brojot se prika8uva kako de)imalen broj pomno8en so nekoj stepen na brojot >=. 8.5eC .8.5 O >=C P?eE@ .?.= O >=E@ E#.Be? .E#.B O >=? Toa se osnovnite vidovi na promenlivi koi se odnapred de/inirani. Dko ima potreba od drugi vidovi na promenlivi bazi~ni ili slo8eni toga{ mo8e da se de/iniraat so pomo{ na osnovnite vidovi za {to 1e se zboruva pokasno. ANSI standardot ne gi propi{uva grani)ite na vrednostite za site vidovi na podato)i. Kaj nepoznata ma{ina, koga se nema prira~nik pri raka, mo8e da se upotrebi slednava programa za utvrduva2e na dol8inite na raznite vidovi na promenlivi. Fin!.,*e Gs *i#."H 8#i* %ain() A &rin 5(Iin &r#%en.i8i <* )aB #8iKnI,si9e#5(in ))C &rin 5(Is"#r &r#%en.i8i <* )aB #8iKnI,si9e#5(s"#r ))C &rin 5(I.#n+ &r#%en.i8i <* )aB #8iKnI,si9e#5(.#n+))C &rin 5(I!"ar &r#%en.i8i <* )aB #8iKnI,si9e#5(!"ar))C &rin 5(I5.#a &r#%en.i8i <* )aB #8iKnI,si9e#5(5.#a ))C &rin 5(I*#,).e &r#%en.i8i <* )aB #8iKnI,si9e#5(*#,).e))C D

Informatika 2

#4

0o slednata tabela se dadeni tipi~nite golemini za razli~ni vidovi na promenlivi za ># bitni i @5 bitni broevi ># bitni broevi 0id na promenliva !"ar si+ne* !"ar ,nsi+ne* !"ar s"#r ,nsi+ne* s"#r in ,nsi+ne* in .#n+ ,nsi+ne* .#n+ 5.#a *#,).e .#n+ *#,).e @5 bitni broevi 0id na promenliva !"ar si+ne* !"ar ,nsi+ne* !"ar s"#r ,nsi+ne* s"#r in ,nsi+ne* in .#n+ ,nsi+ne* .#n+ 5.#a *#,).e .#n+ *#,).e broj na bajtovi $ $ $ E E 4 4 4 4 4 3 $' rang od E>58 do >5B od E>58 do >5B od = do 5CC od E@5,B#8 do @5,B#B od = do #C,C@C od E@5,B#8 do @5,B#B od = do #C,C@C od E5,>$B,$8@,#$8 do 5,>$B,$8@,#$B od = do $,5?$,?#B,5?C @.$ % PI E@8 .B )i/ri>.B % PI E@=8 .>C )i/ri >.5 % PI E$?@5 .>? )i/ri broj na bajtovi $ $ $ E E E E 4 4 4 3 $' rang od E>58 do >5B od E>58 do >5B od = do 5CC od E@5,B#8 do @5,B#B od = do #C,C@C od E@5,B#8 do @5,B#B od = do #C,C@C od E5,>$B,$8@,#$8 do 5,>$B,$8@,#$B od = do $,5?$,?#B,5?C @.$ % PI E@8 .B )i/ri>.B % PI E@=8 .>C )i/ri >.5 % PI E$?@5 .>? )i/ri -

Pri donesuva2e na standardot ANSI na klu~nite zborovi na C, de/inirani od negoviot tvore) "i~i, im se dodadeni u{te $ novi klu~ni zborovi %den od tie novi klu~ni zborovi e !#ns . Toj se koristi za deklarira2e na vrednosti koi ne mo8at da se promenat vo tekot na programata. Dko se napravi obid za promena na vrednost deklarirana so !#ns , preveduva~ot javuva gre{ka. So toa na programerot mu se ka8uva deka probal da napravi ne{to {to ne smee da se pravi. :idejki na konstantite ne mo8e da im se dodeluvaat vrednosti vo programata tie moraat da im bidat dodeleni pri deklara)ijata. Sleduvaat nekolku primeri za deklarira2e i ini)ijalizira2e na konstanti. !#ns in in*e6$ : EC

Informatika 2

#5

!#ns in*e6E : 6C !#ns 5.#a )i+N8a.,e : $E6.4C 8.#. %e&inira'e na novi imi'a za promenlivi so typedef C ovozmo8uva de/inira2e na novi imi2a za vidovi na podato)i so pomo{ na klu~niot zbor y&e*e5. +a toj na~in vo su{tina ne se de/inira nov vid na podato)i tuku samo novo ime za postoe~ki vidovi. +a ovoj na~in, ma{inski zavisnite programi, mo8at da se napravat pove1e preneslivi, bidejki pri prenesuva2eto na programite od eden sistem na drug, treba da se menuvaat samo y&e*e5 naredbite. Op{tiot oblik na y&e*e5 naredbata e y&e*e5 8i*NnaN&r#%en.i8a i%eC +a primer mo8e da se kreira novo ime za vidot na promenlivi 5.#a so y&e*e5 5.#a *e!i%a.niC Ovaa naredba mu ka8uva na preveduva~ot da go prepoznava zborot *e!i%a.ni kako drugo ime za 5.#a . Taka so deklara)ijata *e!i%a.ni 6, y, 9C se deklariraat promenlivite 6,y i 9 kako promenlivi od tipot 5.#a . Klu~niot zbor y&e*e5 mo8e da bide upotrebeno za sozdava2e na imi2a za poslo8eni /ormi kako {to se na primer strukturite. 8.2. Osnovnata aritmetika kaj programskiot jazik C Osnovnite ~etiri opera)ii( sobira2e, vade2e, mno8e2e i dele2e kaj C se koristat na sli~en na~in kako i vo matematikata. ala razlika ima vo koriste2eto na znakot za ednakvost koj kaj programskiot jazik C ima /unk)ija na dodeluva2e na vrednosti. ,meno so toj znak vrednosta na izrazot od levata strana se dodeluva na promenlivata od desnata strana. +a toj na~in mo8no e da se napi{e i i:i@$C {to vo matematikata ne e dozvoleno. "edosledot na izvr{uva2e na osnovnite opera)ii e ist kako i vo matematikata. Opera)iite se izvr{uvaat od levo na desno so prednost na mno8e2eto i dele2eto so toa {to koga se pojavuva operatorot E kako unaren operator toj ima najvisok prioritet. Pri toa operatorot P ne se pojavuva kako unaren operator. 8.3. (od)lo operator *.

Informatika 2

#6

Operatorot Q, koj se narekuva modulo operator, se koristi vo )elobrojnata aritmetika i go dava ostatokot na dele2eto na dvata )eli broevi od negovata leva i desna strana. 0aka de/iniraniot operator mo8e da ima mnogu korisni upotrebi. +aprimer edna od mo8nite upotrebi na ovoj operator e pretvara2e na vremeto izrazeno vo sekundi vo vreme izrazeno so minuti i sekundi. Ovaa primena na operatorot Q 1e bide ilustrirano so slednava programa. Fin!.,*e Gs *i#."H 8#i* %ain() A in se!,n*i : ='', %in, i, #s a #1C %in, i : se!,n*i 2 6'C 27 !e.#)r#Bn# *e.enBe 72 #s a #1 : se!,n*i < 6'C &rin 5(I<* se!,n*i se <* %in, i i <* se!,n*iKnI ,%in, i,#s a #1)C D "ezultatot od izvr{uva2eto na ovaa programa e sledniov ='' se!,n*i se 3 %in, i i E' se!,n*i 8.4. Operatori za zgolem)va'e i namal)va'e ++ i ,,. Ovie operatori se unarni operatori i imaat dosta ednostavno dejstvo. Tie ja zgolemuvaat ili namaluvaat vrednosta na operandot za eden. ,maat dva na~ina na upotreba. o8at da bidat staveni i pred operandot i posle operandot vo taka nare~enite pre/iks i post/iks modovi. Ne bide prika8ano kako toa vlijae na vrednostite na promenlivite. So programata Fin!.,*e Gs *i#."H 8#i* %ain() A in a : $, ) : $C in a&.,s, )&.,sC a&.,s : a @@C )&.,s : @@ )C &rin 5(I<* <* <* <*I,a,a&.,s,),)&.,s) D Ne bide otpe~ateno 5>55 Od otpe~ateniot rezultat mo8e da se vidi deka i a i ) gi zgolemile vrednostite za eden. +a a&.,s e dodelena vrednosta na a pred a da se zgolemi, dodeka na )&.,s e dodelena vrednosta na ) posle zgolemuva2eto na vrednosta.

Informatika 2

#7

Koga ovie operatori se upotrebuvaat sami vo izrazot a@@C @@)C

toga{ ne e va8na /ormata na nivnata upotreba, taa e va8na samo koga ovie operatori se primeneti vo aritmeti~ki izrazi. Prednosta na izvr{uva2e na ovie operatori vo aritmeti~ki izrazi e povisoka od ostanatite zemeni operatori. Samo zagradite imaat povisok prioritet od ovie operatori. Taka izrazot 6 7 y @@ e ekvivalenten so 6 7 (y @@) odnosno so 6 7 (y @ $) ;a ve8ba da se utvrdi koja vrednost 1e bide otpe~atena so sledniot programski otse~ok. a : EC ) : ;C 6 : (a @ ) @@) 7 6C &rin 5(I <*I,6)C Odgovorot e 6 : (E @ ;) 7 6 : ;' Prin)ipielno kaj C opera)iite se izvr{uvaat od levo na desno no ne sekoga{. Samiot preveduva~ donesuva odluka koi delovi na izrazot prvi 1e gi razvijat pa toa ponekoga{ doveduva do nesakani rezultati. +aprimer da se proba {to ke bide otpe~ateno so sledniot izraz. a : 62E @ = 7 ($ @ 6 @@)C "azni preveduva~i mo8at na razli~en na~in da go interpretiraat izrazot. Dko se izvr{i prvo 62E toga{ e eden rezultat, no ako preveduva~ot prvo go izvr{i ona vo zagradata toga{ namesto vrednosta 62E 1e ja imame vrednosta (6 @$)2E. 0akvite izrazi, inkrementira2e ili dekrementira2e na promenliva koja se koristi i na drugo mesto vo istiot aritmeti~ki izraz, treba da se odbegnuvaat. 8.5. Operatori za konverzija Op{tiot oblik na ovie operatori e

Informatika 2

#8

.vid- konstanta ili promenliva na primer sledniov programski otse~ok in i,BC B : ;.Q4 @ =.6 i : (in ) ;.Q4 @ (in ) =.6 gi dava slednive vrednost za promenlivite i i B. B:Q i:3 So slednava programa se ilustrira primenta na ovie operatori Fin!.,*e Gs *i#."H 8#i* %ain() A in a : EC 5.#a 6 : $0.$, y : 3.Q=, 9C !"ar !C ! : (!"ar)a @ (!"ar)6C ! : (!"ar)(a @ (in )6)C ! : (!"ar)(a @ 6)C ! : a @ 6C 9 : (5.#a )((in )6 7 (in )y)C 9 : (5.#a )((in )(6 7 y))C 9 : 6 7 yC D 8.6. -ela ioni operatori "ela)ioni operatori kaj programskiot jazik C se slednive R E pomalo RS E pomalo i ednakvo SS E ednakvo TS E pogolemo i ednakvo T E pogolemo US E neednakvo Pri toa izrazot ($' H E) e vistina i se interpretira so vrednosta $, a izrazot ($' :: E) e nevistina i se interpretira so '. Prioritetot na rela)ionite operatori e pomal od operatorite P i E a e pogolem od operatorot za dodeluva2e S.

Informatika 2

#"

8.7. .ogi/ki operatori Logi~ki operatori kaj programskiot jazik C se slednive >> ?? R i ili ne

*potrebeni vo sledniov izraz = H E >> 4 H 0 ja davaat vrednosta nevistina, a vo izrazot R (4 H 0) vrednosta vistina. Prioritetot na operatorot U e povisok od mno8e2e i dele2e, ist e so operatorite za inkrementira2e i dekrementira2e, a ponizok e od zagradite. Operatorot VV ima povisok prioritet od operatorot ?? , a i dvata imaat ponizok prioritet od rela)ionite operatori. Taka izrazot a H ) >> ) H ! ?? ) H * 1e bide razvien kako ((a H )) >> () H !)) ?? () H *) %ve nekolku primeri za rabotata so ovie operatori. ;a vrednostite na parametrite 6 : y : 9 : EC se dobiva 6 >> (y @ E) (6 ( y) >> 9 (6 ( y) ?? 9 R6 R(6 ( y) 8.8. Operator 01 Ovoj operator se primenuva na sledniov na~in 6 : (y G ' ) S ( y T yC : : : : : $ ' $ ' $ vistina nevistina vistina nevistina vistina

Informatika 2

2$

ova e nekoja /orma na i5 ( e.se operator i ovoj operator se vika usloven operator. ;na~enieto e slednoto( MDko izrazot vo zagradata e vistina toga{ na 6 mu se se dodeluva prvata vrednost .posle W-, a ako ne e vistina vtorata vrednost .posle (-. Toa mo8e da se pretstavi so IF ELSE naredba na sledniov na~in i5 (y G ') 6 : ( yC e.se 6 : yC 0o dadeniot slu~aj so primenata na ovoj operator se realizira /unk)ijata apsolutna vrednost .na promenlivata 6 i se dodeluva pozitivnata vrednost na promenlivata y-. ;godna primena na ovoj operator e i vo sledniov izraz %a6 : (a H )) S a T )C So ovoj izraz na promenlivata %a6 i se dodeluva pogolemata vrednost od vrednostite na promenlivite a i ). 8.". Operatori za manip)la ija so bitovi Operatori za manipula)ija so bitovi se slednive U E komplement V E binarno i ? E binarno ili V E ekskluzivno ili RR E pomestuva2e levo za > bit TT E pomestuva2e desno za > bit 8.#$. Operator ! "abotata na operatorot M,M 1e bide objasneta preku primer programa Fin!.,*e Gs *i#."H 8#i* %ain() A in 6, y, 9, 4C 6 : y : 0, 9 : =, 4 : 4C 9 : (@@6, ((y)C &rin 5(I6 : <*I,6)C &rin 5(Iy : <*I,y)C &rin 5(I9 : <*I,9)C 9 : (6 @ y, 4 : 9 < 4)C &rin 5(I9 : <*I,9)C &rin 5(I4 : <*I,4)C

27 6 : 3 72 27 y : 6 72 27 9 : 6 72 27 9 : E 72 27 4 : E 72

Informatika 2

2#

9 : 6 @ 4, 4 : 9 < 4C &rin 5(I9 : <*I,9)C &rin 5(I4 : <*I,4)C D 8.##. 2rioritetite na site operatori

27 9 : $E 72 27 4 : ' 72

0o prodol8enie se dadeni prioritetite na site operatori ./unk)iski povi)i WX indeksi na poli2a . operator to~ka .se upotrebuva kaj strukturiteET operator strela .se upotrebuva kaj strukturiteKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK U ne U komplement E unaren minus F se izvr{uva od desno na levo PP inkrement EE dekrement V adresa na F unaren operator Mna adresaM .vid- naprimer in , !"ar, ... si9e#5 golemina na KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK F mno8e2e I dele2e Q modulo KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK P sobira2e E vade2e KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK RR pomestuva2e na levo TT pomestuva2e na desno R pomalo od RS pomalo ili ednakvo T pogolemo od TS pogoleme ili ednakvo KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK SS ednakvo US neednakvo KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK V i na nivo na bitovi KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

Informatika 2

22

V ekskluzivno ili na nivo na bitovi KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK ? ili na nivo na bitovi KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK VV logi~ko i KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK ?? logi~ko ili KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK W( uslovna naredba Fse izvr{uva od desno na levo KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK S opera)ija za dodeluva2e Fse izvr{uva od desno na levo KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK , opera)ija zapirka

8.#2. 3ompresija na operatorot 4 Operatorot S za dodeluva2e na vrednosti C ovozmo8uva negova kombina)ija so razni drugi aritmeti~ki operatori i operatori na bitovi. Taka oblikot promenliva S promenliva operator izrazH mo8e da se ispi{e vo oblik promenliva operator S izrazH +a primer izrazot 6 : 6 @ yC postanuva 6 @: yC Osven za operatorot P ovaa kompresija mo8e da se napravi i za slednive operatori dodeluva2e 6 : i9ra9 6 : 6 @ i9ra9 6 : 6 ( i9ra9 6 : 6 7 i9ra9 kompresirana /orma nema 6 @: i9ra9 6 (: i9ra9 6 7: i9ra9

Informatika 2

23 6 6 6 6 6 6 6 2: i9ra9 <: i9ra9 GG: i9ra9 HH: i9ra9 >: i9ra9 ?: i9ra9 V: i9ra9

6 : 6 2 i9ra9 6 : 6 < i9ra9 6 : 6 GG i9ra9 6 : 6 HH i9ra9 6 : 6 > i9ra9 6 : 6 ? i9ra9 6 : 6 V i9ra9 8.#3. Ve5bi

>. So slednava programa se ilustrira primenata na operatorot za dodeluva2e 8#i* %ain() A in a, ), !C 27 Ce.#)r#Bni &r#%en.i8i 72 a : $EC ) : ;C ! : a @ )C 27 s#)iranBe 72 ! : a ( )C 27 8a*enBe 72 ! : a 7 )C 27 %n#9enBe 72 ! : a 2 )C 27 *e.enBe 72 ! : a < )C 27 #&era!iBa %#*,.# ! : $E7a @ )2E ( a7)7E2(a7! @ )7E)C ! : !24@$;7(a @ ))2; ( a7) @ E7a7aC a : a @ $C ) : ) 7 =C a : ) : ! : E'C a : ) : ! : a @ ) 7 !2 ;C a : () : (! : E'))C D Site dodeluva2a i izrazi, osven poslednite tri . pove1ekratno dodeluva2e-, se sli~ni kako i vo matematikata i drugite programski jazi)i. Pove1ekratnite dodeluva2a kaj C izgledaat mnogu ~udno. Tie se mo8ni bidejki preveduva~ot gi obrabotuva dodeluva2ata od desno na levo. Taka preveduva~ot prvo naiduva na vrednosta 5=, ja dodeluva na promenlivata s i prodol8uva vo levo nao9ajki deka rezultatot od poslednata opera)ija .toa e vrednosta 5=- treba da se dodeli na promenlivata ) i t.n. 5. Programa za ilustra)ija na operatorite za inkrementira2e i dekrementira2e 8#i* %ain() A in 6 : ', y : E, 9 : $'E=C 5.#a a : '.', ) : ;.$4$=Q, ! : (;0.E;4C 27

72

&#8e1e1ra n# *#*e.,8anBe

72

Informatika 2

24 27 in1re%en iranBe 72

6 : 6 @ $C 6@@C @@6C 9 : y@@C 9 : @@yC

27 Se in1re%en ira 6 72 27 Se in1re%en ira 6 72 27 Se in1re%en ira 6 72 27 9 : E, y : ; 72 27 9 : 4, y : 4 72 27 *e1re%en iranBe 72

y : y ( $C y((C ((yC y : ;C 9 : y((C 9 : ((yC D

27 Se *e1re%en ira y 72 27 Se *e1re%en ira y 72 27 Se *e1re%en ira y 72 27 9 : ;, y : E 72 27 9 : $, y : $ 72

@. Programa za ilustra)ija na operatorite za aritmeti~ki opera)ii i uslovni izrazi 8#i* %ain() A in 6 : ', y : E, 9 : $'E=C 5.#a a : '.', ) : ;.$4$=Q, ! : (;0.E;4C 27 ari %e i!1i #&era!ii #& 72 a : a @ $EC a @: $EC a 7: ;.EC a (: )C a 2: $'.'C 27 Se *#*a8a $E na 8re*n#s a na a 72 27 Se *#*a8a ,s e $E na 8re*n#s a na a 72 27 Se %n#9i 8re*n#s a na a s# ;.E 72 27 Se #*9e%a 8re*n#s a na ) #* 8re*n#s a na a 72 27 Se *e.i 8re*n#s a na a s# $'.' 72 27 ,s.#8ni i9ra9i 72 a : () H: ;.' S E.' T $'.= )C ! : (a H ) S a T ))C ! : (a H ) S ) T a)C D $. !a se razvijat slednive izrazi 5>FCQ5QB P > 5> E C E @FBQ5 27 A1# e ) H: ;.' na a se *#*e.,8a 8re*n#s a E.' a a1# ne na a se *#*e.,8a 8re*n#s a $'.= 72 27 Na ! 1e se *#*e.i &#+#.e%a a 8re*n#s #* 8re*n#s i e na a i ) 72 27 Na ! 1e se *#*e.i &#%a.a a 8re*n#s #* 8re*n#s i e na a i ) 72

Informatika 2

25

5F5F5Q>= 5>QCQ5FBP> 5> E 5> E 5>F5> P 5>Q5> C. So pomo{ na operatorite za pomestuva2e na levo i na desno da se napi{at izrazi ekvivalentni na slednive 6 7: ;EC 6 : 67$= @ $C 6 2: 3C 6 2: EEC 6 : (67E) @ (624)C #. Dko e 6 )elobrojna promenliva koi vrednosti 1e i bidat dodeleni so slednive izrazi 6 : (; @ 47= ( 6C 6 : ; @ 4<= (6C 6 : (;74<(62=C 6 : (0 @ 6)<=2EC B. Dko se 6, y i 9 )elobrojni promenlivi koi vrednosti 1e i bidat dodeleni na promenlivata 6 so slednava niza na izrazi 6 : EC 6 7: ; @ EC 6 7: y : 9 : 4C 6 : y :: 9C 6 :: (y : 9)C 8. ;a ve8ba da se utvrdi kakvi vrednosti 1e se dobijat so slednive izrazi a : () : $) @EC &rin 5(I<* <*KnI, a, ))C Ne bide ispi{ano @ i > a : ) : $ @ EC &rin 5(I<* <*KnI, a, ))C Ne bide ispi{ano @ i @ ?. Dko se 6, y, 9 i 4 )elobrojni promenliva koi vrednosti 1e i bidat dodeleni na promenlivata 4 so slednive izrazi 6 : EC y : $C 9 : 'C 4 : 6 >> y ?? 9C

Informatika 2

26

4 : 6 ?? Ry >> 9C 4 @: (6@@ @ @@yC >=. Dko 6, y, 9 i 4 se oktalni promenliva koi vrednosti 1e i bidat dodeleni na promenlivata 4 so slednive izrazi 6 : ';C y : 'EC 9 : '$C 4 : 6 ? y > 9C 4 : 6 ? y > (9C 4 : 6 V y > (9C 4 : 6 > y >> 9C >>. Dko 6 i y se )elobrojni promenlivi koi vrednosti 1e i bidat dodeleni na promenlivata y so slednive izrazi 6 :$C y : R6 ? 6C y : (6 ? 6C y : 6 V 6C >5. Dko 6, y, 9 i 4 se )elobrojni promenlivi koi vrednosti 1e i bidat dodeleni na promenlivata 4 so slednava niza na izrazi 6 : y : 9 : $C 6 @: y @: 9C 4 : 6 G y S y T 6C 4 : 6 G y S 6@@ T y@@C@ 4 : 6C 4:y 4 @: 6 G y S 6@@ T y@@C 4 : yC >@. Koi vrednosti ke bidat dodeleni na promenlivite *, 5, . i i so slednive naredbi *#,).e *C 5.#a 5C .#n+ .C in iC i : . : 5 : * : $''2;C * : 5 : . : i : $''2;C i : . : 5 : * : $''2;.C * : 5 : . : i : (*#,).e) $''2;C >$. Jto 1e bide ispi{ano so programata

Informatika 2

27

Fin!.,*e Gs *i#. H 8#i* %ain() A ,nsi+ne* !"ar 6C 6 : 0C &rin 5(I<*KnI,6)C 6GG$C &rin 5(I<*KnI,6)C 6GG;C &rin 5(I<*KnI,6)C 6GGEC &rin 5(I<*KnI,6)C 6HH$C &rin 5(I<*KnI,6)C 6HHEC &rin 5(I<*KnI,6)C D Ne bide ispi{ano B, >$, >>5, >?5, ?# i 5$ >C. Jto 1e bide ispi{ano so programata Fin!.,*e Gs *i#. H 8#i* %ain() A in s"i5 C s"i5 : '=0$C &rin 5(I<#KnI,s"i5 )C s"i5 : s"i5 HH 4C &rin 5(I<#KnI,s"i5 )C s"i5 : s"i5 GG 6C &rin 5(I<#KnI,s"i5 )C D Ne bide ispi{ano CB>, 5B i 5B== >#. Jto 1e bide otpe~ateno so programata Fin!.,*e Gs *i#."H 8#i* %ain() A in 6 : $C A in 6 : EC A

Informatika 2

28 in 6 : ;C &rin 5(I<*I,6)C D &rin 5(I<*I,6)C

D &rin 5(I<*I,6)C D Ne bide ispi{ano @, 5 i > so {to se ilustrira deka vrednostite na promenlivite nezavisno od dodelenite imi2a egzistiraat samo vo ramkite na blokovite vo koi se de/inirani

". Vlezno izlezni &)nk ii Poradi kompletnost na dosega{nite primeri na programi, vo niv be{e koristena izleznata /unk)ija &rin 5 od bibliotekata na /unk)ii s *i#.", bez da se objasnuvaat mo8nostite za nejzina primena. Toa ne e edinstvenata vlezno E izlezna /unk)ija. &azikot C gi ima pove1e no za po~etok pokraj izleznata /unk)ija &rin 5 1e bide objasneta samo u{te vleznata /unk)ija s!an5. Ovie dve /unk)ii ne se del od jadroto na jazikot. :idej1i vlezno E izleznite /unk)ii se karakteristi~ni za sekoja ma{ina tie se pi{uvat za sekoja ma{ina posebno. +o od pri~ini na kompatibilnost obi~no ovie dve /unk)ii se dodavaat na sekoe C jadro kako standardni bibliote~ni /unk)ii. ,ako postojat kaj site C preveduva~i ovie dve /unk)ii ne se sosema standardizirani pa ~esto se javuvaat problemi pri nivnata primena. Ne bide napraven obid so detalen opis na ovie /unk))i da se izbegnat mo8nite problemi pri nivnata primena. ".#. 6)nk ija printf

Informatika 2

2"

;a po~etok 1e bidat razgledani nekoi spe)i/i~nosti na ovie /unk)ii. Kako {to ve1e be{e re~eno /unk)ijata &rin 5 slu8i za ispi{uva2e na terminalot. Op{tiot oblik na ovaa /unk)ija e &rin 5(1#n r#.na ni9a, .is a &r#%en.i8i)C 0o kontrolnata niza mo8e da ima sekakov tekst i nekoi kontrolni znakovi predvodeni so Q ili K. Kontrolnite zna)i {to se zadavaat vo kontrolnata niza zavisat od vidot na promenlivata ~ija vrednost treba da se ispi{e ili od sakanata ak)ija {to treba da bide prevzemena. Taka naprimer, vo dosega{niot tekst, za ispi{uva2e vrednosta na )eli broevi be{e koristena kontrolnata niza <*, a za simbolite na znakovi <!. Ostanatite kontrolni nizi se slednite( <e <5 <+ <, <# <" <s za realen broj vo te7ni~ki zapis za realen broj vo de)imalen zapis za realen broj vo pokratkiot od zapisite <e i <5 za )el broj bez predznak za oktalen )el broj bez predznak za 7eksade)imalen )el broj bez predznak za niza znakovi

0o nizata promenlivi pokraj promenlivi mo8eme da ima i konstanti i aritmeti~ki izrazi. 0o slu~aj na aritmeti~ki izrazi izrazot prvo se presmetnuva, a potoa se ispi{uva negovata vrednost. Osnovniot na~in na ispi{uva2e mo8e da bide modi/i)iran so dodava2e na modi/ikatori. %ve nekoi od niv. <n* E kade n e konstanten )el broj .primer <=*, <$'*- i ovozmo8uva da se ispi{e sakanata vrednost desno pozi)ionirano vo pole od n mesta. <(n* E ako na pret7odniot slu~aj na n mu pret7odi znakot minus toa zna~i deka vrednosta 1e bide ispi{ana levo pozi)ionirana vo poleto od n mesta .primer <($'*-.

<n.% E na ova mu sleduva nekoj od kontrolnite znakovi. So toa se spe)i/i)ira sakanata pre)iznost na ispi{uva2eto. Dko e upotrebeno kaj de)imalnite broevi .naprimer <6.;5- ka8uva deka % mesta vo pole od n mesta se opredeleni za de)imalniot del na brojot.@ mesta od # 1e bidat upotrebeni kako de)imalni mesta-. Dko se upotrebi kaj niza znakovi ka8uva deka maksimalno % znakovi treba da bidat ispi{ani od predvidenit n znakovi. <.* E podatokot e golem )el broj .primer <.$'Ka8anite ne{ta 1e bidat ilustrirani so primer programi. Taka slednata programa. Fin!.,*e Gs *i#."H 8#i* %ain() A

Informatika 2

3$

&rin 5(I2<*2KnI,$E;)C &rin 5(I2<E*2KnI,$E;)C &rin 5(I2$'*2KnI,$E;)C &rin 5(I2($'*2KnI,$E;)C D 1e ispi{e I>5@I I>5@I I >5@I I>5@ I Dko se sostavi sli~na programa so kontrolnite zna)i 5 i e Fin!.,*e Gs *i#."H 8#i* %ain() A &rin 5(I2<52I,$E;4.=6)C &rin 5(I2<e2I,$E;4.=6)C &rin 5(I2<4.E52I,$E;4.=6)C &rin 5(I2<E.$52I,$E;4.=6)C &rin 5(I2<;.$e2I,$E;4.=6)C &rin 5(I2<$'.;52I,$E;4.=6)C &rin 5(I2<$'.4e2I,$E;4.=6)C D "ezultatot od ovaa programa 1e bide sledniov I>5@$.C#====I I>.5@$C#=eP=@I I>5@$.C#I I>5@$.#I I >.5eP=@I I >5@$.C#=I I >.5@$#eP=@I +aredbata &rin 5 mo8e da se iskoristi i za konverzii. So programata Fin!.,*e Gs *i#."H %ain %ain() A &rin 5(I<*I, ;;6)C &rin 5(I<#I, ;;6)C &rin 5(I<6I, ;;6)C &rin 5(I<*I, (;;6)C &rin 5(I<,I, (;;6)C D

Informatika 2

3#

Ne bide ispi{ano @@# C5= >C= E@@# #C5== Tuka ispi{anoto zavisno od toa kako kompjuterot gi tretira negativnite broevi. 0o primerot se upotrebeni dvobajtni )eli broevi pa #CC@C e E>, #CC@$ e E5, ... ..., #C5== e E@##. So <, konverzijata ne se otstranuva predznakot tuku se ispi{uva sevkupnata vrednost na brojot. Dko se pe~ati &rin 5(I<* <!I,;;6,;;6)C se dobiva @@# P ASCII za P e 8=. 0rednosta @@# e 5C# P 8= pa jasno e deka e izvr{ena opera)ijata modulo od 5C#. Sli~no se slu~uva ako se proba ispi{uva2e na )el broj pogolem od maksimalno dozvoleniot vo sistemot. +aprimer neka maksimalniot dozvolen )el broj e @5B#B so slednava naredba &rin 5(I<.* <*I, 6=6$6, 6=6$6)C se dobiva #C#># i 8= Seto ova va8i samo vo slu~aj koga .#n+ promenlivite imaat pogolem broj na bajtovi od obi~nite in promenlivi. Kontrolnite zna)i {to po~nuvaat so K .eskeip- mo8at da gi imaat slednive vrednosti Kn E K E K) ( Kr ( nov red odgovara na ASCII kod za ne4.ine za tabelira2e )a!1s&a!e .edno mesto nazadre ,rn .odgovara na kodot {to se dobiva so pritiska2e na dopirkata RETLRN K5 ( 5#r% 5ee* .nova strani)aK' ( n,.. znak KP E navodnik .nema drug na~in da se upotrebi vo kontrolnata nizaKK E toj znak K""" E oktalen broj

Informatika 2

32

".2. 6)nk ija scanf Oblikot na ovaa /unk)ija e sli~en so oblikot na /unk)ijata &rin 5. Op{tiot oblik na /unk)ijata s!an5 e sledniot s!an5(I1#n r#.na ni9a 9na1#8iI, .is a na &#1a9,8a!i na &r#%en.i8i)C Kaj /unk)ijata s!an5 namesto lista na promenlivi se koristi lista na adresi preku poka8uva~i na promenlivi. ;a konkreten slu~aj nejziniot izgled e sledniov s!an5(I<*I,>8re*n#s )C So ovaa naredba od tastaturata 1e bide pro~itana vrednosta na nekoj )el broj i taa vrednost 1e bide smestena vo memorijata na adresata na promenlivata so ime 8re*n#s Gunk)ijata s!an5 gi koristi istite kontrolni zna)i za vlez kako &rin 5 za izlez so slednive ograni~uva2a( E nema <+ op)ija E <5 i <e se ekvivalentni E ima <" op)ija {to se koristi za s"#r in Toa mo8e da bide ilustrirano so slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A in iC !"ar !C 5.#a 6C s!an5(I<* <! <5I, >i, >!, >6)C &rin 5(I<* <! <5I, i, !, 6)C D Dko kako vlez se zadade >5@ D >5@.$C# 1e bide ispi{ano >5@ D >5@.$C#=== ,zlezot 1e bide ist i ako vlezot bide daden vo oblik >5@ D >5@.$C#

Informatika 2

33

Praznoto mesto vo vleznata niza slu8i za razdvojuva2e na vleznite vrednosti. "azdvojuva2eto na vrednostite mo8e da se realizira i so znakot za nova linija i tabelator. Praznoto mesto kako znak mo8e da bide pro~itano so spe)i/ika)ijata <!. Pri ~ita2eto so <* spe)i/ika)ijata se prestanuva so ~ita2e {tom se naide na prviot znak {to ne e )i/ra. Taka vrednosta >5@.$C# 1e bide pro~itana kako >5@, a vrednosta >maj kako >. ;nakot F upotreben vo nizata za spe)i/ika)ija na vlezot predizvikuva ignorira2e na soodvetnata vlezna vrednost. Taa osobenost ke bide ilustrirana sos slednava programa. Fin!.,*e Gs *i#."H 8#i* %ain() A in iC 5.#a 6C s!an5(I<* <7* <5I, >i, >6)C &rin 5(I<* <5I, i, 6)C D Dko se vnese >5@ $C# B8.? 1e bide ispi{ano >5@ B8.?===== {to poka8uva deka )elobrojnata vrednost $C# vo vleznata niza e preskoknata. So slednava programa 1e bide ilustruirano kako nekoi drugi spe)i/ika)ii mo8at da bidat upotrebeni so /unk)ijata s!an5 Fin!.,*e Gs *i#."H 8#i* %ain() A in iC !"ar !C 5.#a 6C s!an5(I<! <;* <7E* <E5I, >!, >i, >6)C &rin 5(I<! <* <5I, !, i, 6)C D Dko vlezot e sledniov >5@$C#B8?=>5@$C# ,zlezot 1e bide

Informatika 2

34

> 5@$ B8.====== nogu pointeresen e sledniov primer Fin!.,*e Gs *i#."H 8#i* %ain() A in iC !"ar !C 5.#a 6C s!an5(I<! <;* <7E* <E5I, >!, >i, >6)C &rin 5(I<! <* <5I, !, i, 6)C s!an5(I<! <E* <E5I, >!, >i, >6)C &rin 5(I<! <* <5I, !, i, 6)C D Tuka se dobiva >5@$C#B8 > 5@$ B8.====== >5@$C#B8 >5 @$.====== O~igledno vtoriot red na izlezot ne gi dava o~ekuvanite rezultati. Pri~inata e vo toa {to vo su{tina nizata na znakovi {to se prosleduva so prvata linija vo su{tina e slednata $E;4=603Kn pa koga 1e se zadade slednata linija so istiot sostav namesto da se po~ne od nejziniot prv znak prvo se prevzema znakot Kn od prvata linija. 0o natamo{nite primeri 1e bide poka8ano kako /unk)ijata s!an5 mo8e da bide primeneta za vklopuva2e na znakovi razli~ni od praznoto mesto vo vleznata niza. Fin!.,*e Gs *i#."H 8#i* %ain() A in i$, iE, i;C &rin 5(Is!an5 : <*I,s!an5(I<*(<*(<*I, >i$, >iE, >i;))C &rin 5(Ii$ : <*, iE : <*, i; : <*I, i$, iE, i;)C D 0o prvata &rin 5 naredba, namesto vrednost na promenliva se bara ispi{uva2e na vrenost na /unk)ija. 0o ovoj slu~aj /unk)ijata s!an5 prvo 1e bide izvr{ena i posle toa 1e bide ispi{ana nejzinata vrednost. So slednive organiza)ii na vlezot se dobivaat rezultatite

Informatika 2

35

0L%; > >5@E$CE#B8? s!an5 : ; i$ : $E;, iE : 4=, i; : 603Q 0L%; 5 >5@E$C #B8? s!an5 : E i$ : $E;, iE : 4=, i; : ' 0L%; @ >5@,$CE#B8? s!an5 : $ i$ : $E;, iE : ', i; : ' ;na)ite {to treba da se vklopoat vo ovaa programa se zna)ite za minus .E-. +a /unk)ijata s!an5 i se dodeluva vrednost koja e ednakva so brojot na pro~itanite vrednosti. Ovaa osobenost na /unk)ijata s!an5 mo8e da bide primeneto vo dijagnosti~ki )eli. ,spi{anite vrednosti poka8uvat deka pri prvoto izvr{uva2e na programata se pro~itani @ vrednosti, pri vtoroto 5 i pri tretoto > vrednost. So kombina)ii na {irinata na poleto i vklopuva2e na zna)i mo8e da se pi{uvaat povi)i na s!an5 /unk)ii koi striktno 1e se vklopuvaat so vlezniot /ormat. Toa se ilustrira so slednava programa i nejzinite vlezni i izlezni vrednosti Fin!.,*e Gs *i#."H 8#i* %ain() A in i$, iE, i;C &rin 5(Is!an5 : <*I,s!an5(I<;*(<E*(<4*I, >i$, >iE, >i;))C &rin 5(Ii$ : <*, iE : <*, i; : <*I, i$, iE, i;)C D 0L%; > $E;(4=(603Q s!an5 : ; i$ : $E;, iE : 4=, i; : 603Q

Informatika 2

36

0L%; 5 $E(;4=(603Q s!an5 : E i$ : $E, iE : ;4, i; : ' 0L%; @ $E;(4=6(03Q s!an5 : E i$ : $E;, iE : 4=, i; : ' Programata vra1a vrednost @, {to zna~i deka site tri vrednosti se pro~itani, samo ako vrednostite se zapi{ani vo oblik 777E77E7777. ".3. 6)nk ii putchar i getchar Gunk)iite +e !"ar i &, !"ar se vlezno izlezni /unk)ii. +ivnite osnovni obli)i se slednive +e !"ar() i &, !"ar(i%e na !"ar &r#%en.i8a) Ovie /unk)ii ovozmo8uvaat ~ita2e i ispi{uva2e na po eden znak od standardnite sredstva za vlez i izlez. Pri toa +e !"ar ovozmo8uva prima2e na eden znak od tastaturata i go dodeluva na nekoja promenliva vo programata prika8uvajki go istovremeno i na ekranot &, !"ar ispra1a eden znak od programata na ekranot +ajednostavna programa za ilustra)ija na ovie dve /unk)ii e slednava Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar 6C 6:+e !"ar()C &, !"ar(6)C D

Informatika 2

37

So slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A &, !"ar(0)C &, !"ar(0)C &, !"ar(0)C &, !"ar(0)C &, !"ar(0)C &, !"ar(0)C D kade se ispi{uva konstanta, bidejki taa konstanta nema gra/i~ki ekvivalent . na kodot B mu odgovara zvu~niot signal-, 1e bide aktiviran zvu~niot signal ,stata rabota mo8e da se postigne i so. Fin!.,*e Gs *i#. H 8#i* %ain() A &rin 5(I<!I,0)C &rin 5(I<!I,0)C &rin 5(I<!I,0)C &rin 5(I<!I,0)C &rin 5(I<!I,0)C D ,nteresna e upotrebata na ovie /unk)ii vo sledniot oblik &, !"ar(+e !"ar())C ".4. Ve5bi >. Programa so primeri za ispi{uva2e na razni vidovi na vrednosti Fin!.,*e Gs *i#."H 8#i* %ain() A in aC .#n+ in )C s"#r in !C ,nsi+ne* in *C !"ar eC 5.#a 5C *#,).e +C

Informatika 2

38

a : $'E;C ) : EEEEC ! : $E;C * : $E;4C e : PMPC 5 : ;.$4$=QC + : ;.$4$=QE6=;=3Q3C &rin 5(Ia : <*KnI, a)C &rin 5(Ia : <#KnI, a)C &rin 5(Ia : <6KnI, a)C &rin 5(I) : <.*KnI, ))C &rin 5(I! : <*KnI, !)C &rin 5(I* : <,KnI, *)C &rin 5(Ie : <!KnI, e)C &rin 5(I5 : <5KnI, 5)C &rin 5(I+ : <5KnI, +)C &rin 5(IKnI)C &rin 5(Ia : <*KnI, a)C &rin 5(Ia : <0*KnI, a)C &rin 5(Ia : <(0*KnI, a)C &rin 5(IKnI)C &rin 5(I5 : <5KnI, 5)C &rin 5(I5 : <$E5KnI, 5)C &rin 5(I5 : <$E.;5KnI, 5)C &rin 5(I5 : <$E.=5KnI, 5)C &rin 5(I5 : <($E.=5KnI, 5)C D "ezultatite od ovaa programa se a : $'E; a : $000 a : ;55 ) : EEEE ! : $E; * : $E;4 e:M 5 : ;.$4$=Q' + : ;.$4$=Q; a : $'E; a : $'E; a : $'E; 5 : ;.$4$=Q' 5 : ;.$4$=Q' 5: ;.$4E 27 *e1a*en )r#B 72 27 #1 a.en )r#B 72 27 "e1sa*e!i%a.en )r#B 72 27 *e1a*en *#.+ )r#B 72 27 *e1a*en 1ra #1 )r#B 72 27 )r#B )e9 &re*9na1 72 27 is&iA,8a4e na 9na1 72 27 rea.en )r#B 72 27 rea.en )r#B s# *8#Bna #!n#s 72 27 e*n#s a8en !e. )r#B 72 27 !e. )r#B 8# &#.e #* 0 %es a 72 27 .e8# &#9i!i#niran )r#B 8# 0 %es a 72 27 e*n#s a8en rea.en )r#B 27 rea.en )r#B 8# &#.e #* $E %es a 27 ; *e!i%a.ni %es a 8# &#.e #* $E %es a 27 = *e!i%a.ni %es a 8# &#.e #* $E %es a 27 .e8# &#9i!i#nirannBe 8# &#.e # 9a is&is 72 72 72 72 72

Informatika 2

3"

5 : ;.$4$=Q 5 : ;.$4$=Q 5. Jto 1e ispi{e slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A in a : EC 5.#a 6 : $0.$, y : 3.Q=, 9C !"ar !C ! : (!"ar)a @ (!"ar)6C &rin 5(I ! : <!Kn, !)C ! : (!"ar)(a @ (in )6)C &rin 5(I ! : <!Kn, !)C ! : (!"ar)(a @ 6)C &rin 5(I ! : <!Kn, !)C ! : a @ 6C &rin 5(I ! : <!Kn, !)C 9 : (5.#a )((in )6 7 (in )y)C &rin 5(I 9 : <5Kn, !)C 9 : (5.#a )((in )(6 7 y))C &rin 5(I 9 : <5Kn, !)C 9 : 6 7 yC &rin 5(I 9 : <5Kn, !)C D @. Jto 1e ispi{e slednava programa Fin!.,*e Gs *i#. H 8#i* %ain() A !"ar ! : PAPC &, !"ar(!@@)C &, !"ar(!@@)C &, !"ar(!@@)C D $. Programa za testira2e {to e vistina Fin!.,*e Gs *i#."H 8#i* %ain() A $ S &rin 5(I$ e 8is ina KnI) T &rin 5(I$ ne e 8is ina KnI)C ' S &rin 5(I' ne e ne8is inaKnI) T &rin 5(I' e ne8is inaKnI)C EEE S &rin 5(IEEE e 8is ina KnI) TC

Informatika 2

4$

(;; S &rin 5(I(;; e 8is ina I) T C D So ovaa programa 1e bide ispi{ano > e vistina = e nevistina 555 e vistina E@@ e vistina C. Jto 1e ispi{e slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A in a,)C a : (E G ;)C ) : (; G 4)C ((a>>(R))??(Ra)>>)) :: aV)) S &rin 5(IJis ina eI) T &rin 5(INe e 8is inaI)C D Tuka opera)ijata V e ekskluzivno ili /unk)ija bit po bit, a 1e bide ispi{ano Jis ina e #. Jto 1e ispi{e slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A in 6, y, 9C 6 : y : $C (y G ') S (y H ') S 6 : ; T 6 : =C &rin 5(I<*KnI,6)C (9 : y G ') S 6 : ; T (y :: ') S 6 : = T 6 : 0C &rin 5(I<* <*KnI,6,9)C (9 : (y :: ')) S 6 : = T C 6 : ;C &rin 5(I<* <*I,6,9)C D Ovaa programa e primer za lo{o napi{ana programa. ,ako taa e sosema ispravna, poradi lo{ata /orma na programata, mo{ne te{ko se utvrduva {to taa 1e ispi{e. Programata ispi{uva

Informatika 2

4#

C B= @= #$. 2oka5)va/i Poka8uva~ite se koristat i kaj drugite programski jazi)i no nivnoto koriste2e ne im e dostapno na korisni)ite vo tolkava mera kako kaj programskiot jazik C. o8e da se ka8e deka tokmu primenata na poka8uva~ite gi ~ini programite vo C brzi i e/ikasni. +ajednostavno re~eno poka8uva~ite se promenlivi ili konstanti ~ii vrednosti se adresi odnosno /izi~ki memoriski loka)ii. Tie se )elobrojni vrednosti koi prezentiraat adresa na nekoj vid podato)i, a samite za/a1aat 5 do $ bajta zavisno od vidot na smeta~ot. Ne bide ilustrirano {to predizvikuva slednava deklara)ija. in &r#% : $C So nea na preveduva~ot mu se ka8uva da rezervira dovolno mesto za )elobrojna vrednost, da go povrzi imeto &r#% so toa mesto vo memorijata i na toa mesto vo memorijata da ja zapi{e vrednosta >. Pod pretpostavka deka preveduva~ot ja izbral adresata $#?$ se pojavuva slednava situa)ija adresa vrednost $#?$ > ime &r#%

Ddresata na promenlivata &r#% vo memorijata e broj za kogo mo8e da se ka8e deka soodvestvuva na ku1na adresa. :rojot {to ja identi/i)ira adresata vo memorijata mo8e da bide ispi{an na sledniov na~in &rin 5(IJre*n#s a <* e s%es ena na a*resa <*I,&r#%, >&r#%)C so {to bi bilo ispi{ano Jre*n#s a $ e s%es ena na a*resa 46Q4 Poka8uva~ite se deklariraat so 8i* 7i%eNnaN&r#%en.i8aC Taka na primer so deklara)ijata !"ar 79na1C se deklarira promenliva so ime 9na1 i taa kako vrednost sodr8i adresa na promenliva od vidot !"ar. Sli~no so

Informatika 2

42

in 7)r#BC se deklarira promenliva so ime )r#B ~ija vrednost e adresa na promenliva od vidot in . o8at da bidat deklarirani pove1e promenlivi poka8uva~i i toa i zaedno so drugi promenlivi. in 76, 7y, 79C !"ar 7&, 9na1, ),18a, 7i%eC :idej1i sodr8inata na promenlivite poka8uva~i e memoriska adresa, nezavisno od vidot na promenlivata na koja poka8uva poka8uva~ot za nego se tro{at ist broj na bajtovi za memorira2e. Pred da se upotrebi na poka8uva~ot treba da mu bide dodelena nekoja vrednost. Dko imame promenliva so ime )r#B i treba na poka8uva~ot so ime i%e&#1 da mu se dodeli vrednosta na adresata na promenlivata )r#B se koristi unarnata opera)ija V. Operatorot V, koga e unaren operator, mo8e da se izgovara kako Madresa naM. in 7i%e&#1, )r#BC i%e&#1 : >)r#BC 0aka na poka8uva~ot i%e&#1, {to e poka8uva~ na promenliva od vidot in , se dodeluva kako vrednost adresata na promenlivata )r#B, koja e deklarirana kako in promenliva. Tuka treba da se vnimava na vistinskata sodr8ina na promenlivata i%e&#1, taa ne ja sodr8i vrednosta na promenlivata )r#B tuku adresata na taa promenliva. Toa e gre{ka {to ~esto se pravi od strana na neiskusnite programeri. ;a dobiva2e na vrednosta koja e smestena na nekoja adresa se koristi unarniot operator F. Ne bide objasneto {to 1e raboti slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A in &C in 7YC & : $C Y : >&C 27a*resa a na & se *#*e.,8a na &#1a9,8a! Y72 &rin 5(IJre*n#s a <* e s%es ena na a*resa <*KnI, &, >&)C &rin 5(IJre*n#s a <* e s%es ena na a*resa <*KnI, Y, >Y)C &rin 5(IJre*n#s a <* e s%es ena na a*resa <*KnI, 7Y, Y)C D o8en rezultat Jre*n#s a $ e s%es ena na a*resa 44$4 Jre*n#s a 44$4 e s%es ena na a*resa 44E'

Informatika 2

43

Jre*n#s a $ e s%es ena na a*resa 44$4 So in 7Y se deklarira promenliva poka8uva~. !eklara)ijata na poka8uva~ot gi spe)i/i)ira( adresata na promenlivata, brojot na bajtovi potreben za tie promenlivi i toa deka promenlivata 1e bide koristena kako poka8uva~. Prviot ispi{an red ja dave vrednosta na promenlivata & koja aso)ira so memoriskata loka)ija vo koja e smestena vrednosta >. ,zrazot >& ja dava adresata na taa loka)ija {to vo ovoj slu~aj iznesuva $$>$. 0o vtoriot red pobarano e ispi{uva2e na vrednosta na Y koj e deklariran kako promenliva poka8uva~ na )elobrojna vrednost. Se razbira ispi{anata vrednost soodvetstvuva so vrednosta >&. Promenlivata poka8uva~ Y kako i sekoja druga promenliva aso)ira so nekoja memoriska loka)ija. Ddresata na ovaa memoriska loka)ija se dobiva so >Y i taa e ispi{ana vo vtoriot red. , na krajot vo tretiot red, so operatorot F, se re/erira na vrednost na adresa. Promenlivata Y e adresa pa se ispi{uva vrednosta {to e smestena na adresata Y a toa e >. Kako vtora vrednost vo ovoj red se ispi{uva vrednosta na Y {to e napraveno i vo pret7odniot red kako prva vrednost. 0rednosta na promenlivite mo8e da bide dostapna preku nivnite poka8uva~i {to se ilustrira so slednava programa. Fin!.,*e Gs *i#."H 8#i* %ain() A in )r#B, 7&#1N)r#B, n#8N)r#BC )r#B : =C &#1N)r#B : >)r#BC n#8N)r#B : 7&#1N)r#BC &rin 5(I<* <*I,)r#B,n#8N)r#B)C D Tuka se pojavuva eden indirekten pro)es. So operatorot F mu se ka8uva na preveduva~ot na promenlivata n#8N)r#B da i se dodeli vrednosta {to se nao9a na adresata {to e sodr8ina na promenlivata poka8uva~ &#1N)r#B. Operatorot F mo8e da se izgovara kako Mvrednosta na adresaM. Poka8uva~ot poka8uva na adresata od promenlivata )r#B i taka na n#8N)r#B 1e mu bide dodelena vrednosta na )r#B. ,zneseniot primer za upotreba na poka8uva~ite e samo od edukativni )eli i ne se koristi. *potreben e samo za polesno objasnuva2e na poka8uva~ite. +ivnata upotreba 1e stane pojasna pokasno. Sega za sega 1e bide ka8ano samo deka /unk)iite ne mo8at da dostapat do promenliva deklarirana vo druga /unk)ija direktno pa obi~no za toa se koristat poka8uva~i. So sledniov izraz 7&#1 : =C

Informatika 2

44

na adresata na koja pokazuva &#1 se stava vrednosta C. ;na~i &#1 .bez Xvezdare/erira na vrednosta na promenlivata &#1, a 7&#1 re/erira na sodr8inata na adresa &#1. 0akvo dodeluva2e 7&#1 : = e prili~no opasno dokolku ne e pret7odno dodelena adresa na poka8uva~ot. o8e da se slu~i neini)ijaliziraniot poka8uva~ da sodr8i bilo koja slu~ajna vrednost i na taa slu~ajna adresa da se zapi{e nesakana vrednost. Pri rabotata so poka8uva~i treba strogo da se vnimava na kakov vid promenliva poka8uva poka8uva~ot. Dko pri toa se pogre{i, preveduva~ot mo8e da javi gre{ka ili u{te polo{o mo8e da ne javi ni{to i da prodol8i so rabota. Ne bide objasneto {to raboti slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A in yC in 7&$,&EC &$ : >6C &E : &$C y : &EC &rin 5(I<*I,y)C D So ova se poka8uva deka vrednosta na promenlivite poka8uva~i e vrednost kako i sekoja druga pa kako takva i mo8e da bide dodelena na bilo koja soodvetna promenliva. Poka8uva~ite mo8at da bidat inkrementirani i dekrementirani so PP i EE isto kako i ostanatite vidovi na promenlivi. Ovie operatori upotrebeni na poka8uva~ite gi zgolemuvaat nivnite vrednosti, ne za eden, tuku za onoj broj {to odgovara na brojot na bajtovi na vidot na promenlivite na koi poka8uva poka8uva~ot. +a toj na~in so inkrementira2e ili dekrementira2e na poka8uva~ite se preminuva od edna na druga vrednost na promenlivite od ist vid. Dko e dadeno in 7&#1C i ako &#1 ja ima vrednosta na adresata >=== so @@&#1C 1e se dobie vrednosta >==$ .in promenlivite se so dol8ina $ bajtovi-. D ako e dadeno !"ar 7&#1C @@&#1C toga{ za vrednost >=== na &#1 1e se dobie >==> za @@&#1.

27a*resa a na 6 Ba *#*e.,8a na &r#%en.i8a a &E72 27 Ba &e!a i *e!i%a.na a 8re*n#s na a*resa a na 6 a ne 8re*n#s a na &r#%en.i8a a 6 72

Informatika 2

45

C ne e ograni~eno samo na inkrementira2e i dekrementira2e na poka8uva~ite tuku mo8e da se dodavaat ili odzemaat )elobrojni vrednosti od poka8uva~ite. Taka so &E : &$ @ QC 1e se dobie &E da poka8uva na devetiot element od vidot na promenlivi na koi poka8uva poka8uva~ot &$. Pokraj sobira2eto i vade2eto drugi aritmeti~ki opera)ii so poka8uva~ite ne se dozvoleni. Toa zna~i deka vrednostite na poka8uva~ite ne mo8at na primer da bidat mno8eni me9u sebe i sli~no. o8ebi najzbunuva~kiot del kaj poka8uva~ite se poka8uva~ite na poka8uva~i. Kaj normalnite poka8uva~i vrednosta na poka8uva~ot e adresa na nekoj vid promenliva. Kaj poka8uva~ite na poka8uva~i, vrednosta na adresata na koja poka8uva~ot poka8uva, e adresa na poka8uva~. +a taa adresa e smestena adresata na drug poka8uva~ koj poka8uva na vrednosta na nekoja promenliva. +a ovaj na~in mo8e da se odi vo proizvolna dlabo~ina no vo praksa ima mnogu mal broj na slu~ai kade ima potreba od pogolema dlabo~ina od dva. #$.#. Ve5bi >. So sledniov primer 1e se ilustrira primenata na poka8uva~ na poka8uva~ Fin!.,*e Gs *i#."H 8#i* %ain() A in 6, 7&, 77YC 6 : $'C & : >6C Y : >&C &rin 5(I<*I,77Y)C D

27 se &e!a i 8re*n#s a na 6 72

0o ovaa programa & e poka8uva~ na )elobrojna promenliva a Y e poka8uva~ na poka8uva~ na )elobrojna promenliva. Poka8uva~ite na poka8uva~i ponekoga{ se vikaat i indirektni poka8uva~i. !a se obrne vnimanie deka posle deklara)ijata na poka8uva~ot, pred da mu se dodeli konkretna vrednost, toj sodr8i proizvolna i slu~ajna vrednost. *potrebata na poka8uva~ot pred dodeluva2eto na vrednost mo8e da predizvika, ne samo zaglavuva2e na programata, tuku i na operativniot sistem. Poradi toa iskusnite programeri ~esto pri deklarira2e na poka8uva~ite gi ini)ijaliziraat so vrednosta n,... 5. 0o sledniov primer Fin!.,*e Gs *i#."H

Informatika 2

46

8#i* %ain() A in 6, 7&C 6 : $'C 7& : 6C D poka8uva~ot & sodr8i nepoznata adresa bidejki ne e de/iniran. +ema na~in da se doznae kade vrednosta na 6 e zapi{ana. Koga imame mali programi verojatno e deka adresata na & nema da se poklopi so nekoj del od programata ili podato)ite, no {to e programata pogolema, mo8nostite za neprijatni gre{ki se pogolemi. @. %ve u{te eden primer kade e pogre{no upotreben poka8uva~ Fin!.,*e Gs *i#."H 8#i* %ain() A in 6, 7&C 6 : $'C & : 6C &rin 5(I<*I, 7&)C D +ema da bide ispi{ana vrednosta na 6, kako {to mo8ebi se o~ekuva, tuku nekoja nepoznata vrednost. $. Jto 1e bide ispi{ano so Fin!.,*e Gs *i#."H 8#i* %ain() A in 8re* : $C &rin 5(I<* <*I, 8re*, >8re*)C &rin 5(I<* <*I,7(>8re*), >8re*)C D !va isti reda $. !a se najde gre{kata vo slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A 5.#a 6 : $., y : E.C in 7&#1C &#1 : >6C &rin 5(I<5, <5, <, <,KnI, 6, y, &#1, 7&#1)C y : 7&#1C &rin 5(I<5, <5, <, <,KnKnI, 6, y, &#1, 7&#1)C D

Informatika 2

47

Programata 1e ispi{e $.'''''' $.'''''' E.'''''' '.'''''' 6==E' 6==E' ' '

Dko se stavi y : 7(5.#a 7) &#1C se dobiva >.====== >.====== #CC5= =

C. Dko &#1 e poka8uva~ da se razmisli {to se dobiva so 6 : 7@@&#1C 6 : @@7&#1C 6 : (7&#1)@@C 6 : 7&#1@@C Odgovorot e sledniov 7@@&#1C SST go inkrementira &#1, ja zema vrednosta na koja novoto &#1 poka8uva. %kvivalentno so &#1@@C 7&#1C @@7&#1H SST ja zema vrednosta na koja poka8uva &#1 i ja zgolemuva za >. %kvivalentno na 7&#1 : 7&#1 @$H (7&#1)@@ SST ja zema vrednosta na koja poka8uva &#1 i ja zgolemuva taa vrednost za >. %kvivalentno na 6 : 7&#1C 6@@C 7&#1@@C SST ja zema vrednosta na koja poka8uva &#1, potoa go zgolemuva &#1. %kvivalentno na 7&#1C &#1@@C

##. 2redpro esor Pred da se upatat kon preveduva~ot C programite se pripremaat ili pret7odno obrabotuvaat od predpro)esorot. Predpro)esorot vr{i zamena na simboli~ki imi2a, go usmeruva preveduva~ot, vklu~uva dodatni datoteki i sli~no. 0e1e be{e koristena edna naredba od predpro)esorot vo dosega{nite primeri, toa e naredbata Fin!.,*e

Informatika 2

48

Site naredbi na predpro)esorot otpo~nuvaat so Y. +aredbite na pretpro)esorot se slednive *e5ine in!.,*e ,n*e5 i5 i5*e5 i5n*e5 e.se en*i5 Ovie naredbi mo8at da se pojavat bilo kade vo izvornata programa, a nivnoto vlijanie e od mestoto na koe se pojavuvaat do krajot na programata ili dodeka so druga naredba ne se promeni nivnoto vlijanie. Kako prva 1e bide objasneta naredbata *e5ine. Taa naj~esto se upotrebuva za de/inira2e na simboli~ki konstanti. ;a ilustra)ija na primenata na pretpro)esorskata naredba *e5ine 1e bide modi/i)irana edna od pret7odnite programi Fin!.,*e Gs *i#."H F*e5ine ZJONO 0 8#i* %ain() A &, !"ar(ZJONO)C &, !"ar(ZJONO)C &, !"ar(ZJONO)C &, !"ar(ZJONO)C &, !"ar(ZJONO)C D 0istinskata su{tina na ovaa naredba e vo toa {to taa vr{i zamena na nizi znakovi. Taka vo pret7odnava programa taa nizata znakovi ZJONO ja zamenuva so nizata B. Ovaa osobenost na *e5ine naredbata dozvoluva proizvolno da se menuva re~nikot na jazikot. o8at da bidat predde/inirani site zborovi i znakovi na jazikot i da se napravi programata da dobie sosema poinakov oblik. Toa e ilustrirano so slednava programa Fin!.,*e Gs *i#."H F*e5ine s ar A F*e5ine 1raB D F*e5ine &e!a i &rin 5 8#i* %ain() s ar &e!a i(IPr#%ene a &r#+ra%aI)C 1raB *{te eden primer

Informatika 2

4"

Fin!.,*e Gs *i#."H F*e5ine DJA E F*e5ine CETIRI DJA7DJA F*e5ine PR &rin 5(I<*I,6) 8#i* %ain() A in 6 : DJAC PRC 6 : CETIRIC PRC D Ne bide otpe~ateno 5$ +aredbata *e5ine mo8e da se koristi i so argumenti i pri toa li~i na /unk)ija. 0akvata upotreba na ovaa naredba e ilustrirano vo slednava programa Fin!.,*e Gs *i#."H F*e5ine KJADRAT(6) 676 F*e5ine &e!a i(6) &rin 5(I6 : <*I,6) 8#i* %ain() A in 6 : 4, 9C 9 : KJADRAT(6)C &e!a i(9)C 9 : KJADRAT(E)C &e!a i(9)C &e!a i(KJADRAT(6))C &e!a i(KJADRAT(6 @ E))C &e!a i($''2KJADRAT(E))C &e!a i(KJADRAT(@@6))C &e!a i(KJADRAT(6@@))C D "ezultatite na programata 1e bidat slednite 9 : $6 9:4 KJADRAT(6) : $6 KJADRAT(6 @ E) : $4 $''2KJADRAT(E) : $'' KJADRAT(@@6) : ;' KJADRAT(6@@) : 4E Prvite tri redovi se tokmu ona {to se o~ekuva no ~etvrtiot red verojatno zbunuva. Pri~inata e {to naredbata *e5ine vo su{tina ne raboti so argumentite kako so /unk)iski

Informatika 2

5$

argumenti tuku samo vr{i zameni na nizi od znakovi. Taka vo /ormata KJADRAT(6@E) posle zamenata se dobiva &rin 5(IKJADRAT(6@E) : <*I,6 @ E 7 6 @ E)C {to jasno 1e dade >$. Ova ne bi se slu~ilo koga /ormata na *e5ine naredbata bi bila slednava F*e5ine KJADRAT(6) (6)7(6) bidej1i 6 @ E 7 6 @ E bi postanalo (6 @ E)7(6 @ E) . Kaj /ormata $''2KJADRAT(6) pri nemodi/i)irana *e5ine naredba se slu~uva slednovo $''26 7 6 {to jasno dava >== .>==I5 F 5-. Tuka ne pomaga i modi/i)iranata /orma na naredbata *e5ine F*e5ine KJADRAT(6) (6)7(6) bidej1i vo toj slu~aj se dobiva $''2(6)7(6) {to go dava istiot rezultat. Ova mo8e da se odbegne ako naredbata *e5ine se izdade vo sledniot oblik F*e5ine KJADRAT(6) (676) Poradi toa, za naredbata *e5ine da se upotrebi kako de/ini)ija na /unk)ija taa mora da go ima sledniov oblik F*e5ine KJADRAT(6) ((6)7(6)) {to ne pomaga vo slu~aite KJADRAT(@@6) i KJADRAT(6@@). 0o ovoj slu~aj se pojavuvaat /ormite @@6 7 @@6 i 6@@ 7 6@@ da se razmisli zo{to se dobivaat rezultatite @= i $5. +a ovoj na~in mo8at da bidat realizirani mnogu /unk)ii no mora da se vnimava na mo8nite strani~ni e/ekti pri nedovolno vnimatelni de/ini)ii na argumentite. Kaj nekoi

Informatika 2

5#

preveduva~i ovie de/ini)ii se ograni~eni na eden red i toa e dobra praksa i vo slu~aite koga preveduva~ot dozvoluva i pove1e redovi za *e5ine naredbata. Ovie de/ini)ii se upotrebuvaat koga ima za~estena pojava na nekoi /unk)ii vo programata. !osega{nite [/unk)ii\ se sostojat od edno ili samo nekolku pojavuva2a pa obi~no upotrebata na ovie de/ini)ii vo takvite slu~ai ne se isplati. %dna od prednostite na vakvite de/ini)ii na /unk)iite e taa da tie va8at za site vidovi na promenlivi .toa e poradi toa {to tie rabotat so zamena na nizi na znakovi a ne so vistinski promenlivi-. %ve nekolku ednostavni realiza)ii na /unk)ii so pomo{ na naredbata *e5ine F*e5ine MAM(6,y) ( (6) H (y) S (6) T (y) ) F*e5ine A-S(6) ( (6) G ' S ((6) T (6) ) So predpro)esorskata naredba in!.,*e, datotekite navedeni vo aglesti zagradi .RT- se priklu~uvaat na programata. Pokraj datoteki so standardni bibliote~ni programi so ovaa naredba mo8at da se priklu~uvaat i datoteki kreirani od korisni)ite. +a primer mo8e da se /ormira datoteka so serii na *e5ine naredbi, ~esto upotrebuvani od korisnikot i taa po potreba da se priklu~uva na razni programi. Ostanatite naredbi na predpro)esorot obi~no se koristat so pogolemi programi za nivno preureduva2e. +aredbata ,n*e5 se koristi za poni{tuva2e na poslednata de/ini)ija. F*e5ine A = F*e5ine - 3 F,n*e5 A F*e5ine - EE F,n*e5 F,n*e5 -

27 A e ne*e5iniran# 72 27 8re*n#s a na - e &re*e5inira 72 27 8re*n#s a na - e &#8 #rn# 3 72 27 - e ne*e5iniran# 72

+aredbata i5*e5 ovozmo8uva uslovno izvr{uva2e na predpro)esorskite naredbi Fi5*e5 F*e5ine A $' F*e5ine C $$ Fe.se F*e5ine - 6 F*e5ine A 0 F*e5ine - 3 Fen*i5

Informatika 2

52

Pokraj i5*e5 naredbata imame i i5n*e5 naredba {to raboti isto kako i i5*e5 naredbata so taa razlika {to ovaa naredba za uslov vistina ima ako ne{to ne e de/inirano Fi5n*e5 F*e5ine - $' Fen*i5 se razbira i tuka mo8at da bidat koristeni i e.se strukturi. +ajsli~na na IF ( THEN ( ELSE naredbata e i5 naredbata {to ispituva dali nekoj uslov e zadovolen Fi5 S]STEM :: IJAMI Fin!.,*e Gs *i#."H Fen*i5 Ostanatite naredbi nema da se obrabotuvaat vo ramkite na ovaa skripta. ##.#. Ve5bi >. Jto 1e otpe~ati slednava programa Fin!.,*e Gs *i#."H F*e5ine &rin &rin 5(I<*I,6) 8#i* %ain() A in 6 : E, y, 9C 6 7: ; @ EC &rin C 6 7: y : 9 : 4C &rin C 6 : y :: 9C &rin C 6 :: (y : 9)C &rin C D $' 4' $ $ 5. Jto raboti slednava programa Fin!.,*e Gs *i#."H F*e5ine &rin (6) &rin 5(I<*I,6) 8#i* %ain() A in 6 : E, y : $, 9 : 'C 6 : 6 >> y ?? 9C &rin (6)C &rin (6 ?? Ry >> 9)C 6 : y : $C 9 : 6@@ ( $C &rin (6)C

Informatika 2

53

&rin (9)C 9 @: ( 6@@ @ @@yC &rin (6)C &rin (9)C 9 : 6 2 @@6C &rin (9)C D $ $ E ' ; ' S($ na I-M) @. !a se proba kakvi rezultati davaat slednive izrazi 626@@ , 62@@6 , @@626 6@@26

$. Jto raboti slednava programa Fin!.,*e Gs *i#."H F*e5ine &rin (6) &rin 5(I<*I,6) 8#i* %ain() A in 6, y, 9C 6 : #;C y : #EC 9 : #$C &rin (6 ? y > 9)C &rin (6 ? y > (9)C &rin (6 V y > (9)C &rin (6 > y > 9)C 6 : $C y : ($C &rin (R6 ? 6)C &rin ((6 ? 6)C &rin (6 V 6)C 6 GG: ;C &rin (6)C y GG: ;C &rin (y)C y HH: ;C &rin (y)C D C. Jto 1e otpe~ati slednava programa Fin!.,*e Gs *i#."H F*e5ine &rin (6,y,9) &rin 5(I6 : <*, y : <*, 9 : <*I,6,y,9) 8#i* %ain() A in 6, y, 9C

Informatika 2

54

6 : y : 9 : $C @@6 ?? @@y >> @@9C &rin (6,y,9)C 6 : y : 9 : $C @@6 >> @@y ?? @@9C &rin (6,y,9)C 6 : y : 9 : $C @@6 >> @@y > @@9C &rin (6,y,9)C 6 : y : 9 : ( $C @@6 >> @@y ?? @@9C &rin (6,y,9)C 6 : y : 9 : ($C @@6 ?? @@y >> @@9C &rin (6,y,9)C 6 : y : 9 : ( $C @@6 >> @@y >> @@9C &rin (6,y,9)C D 6 : E, 6 : E, 6 : E, 6 : ', 6 : ', 6 : ', y : $, y : E, y : E, y : ($, y : ', y : ($, 9:$ 9:$ 9:E 9:' 9 : ($ 9 : ($

#2. 7aredbi za kontrola na tekot na programata 12.1. 8rane'e vo programite , naredba if - else Op{tiot oblik na i5 ( e.se naredbata e sledniot i5 (,s.#8) nare*)a 9a 8is ini ,s.#8 e.se nare*)a 9a ne8is ini ,s.#8 ako ima blokovi na naredbi toga{ se ozna~uva po~etokot i krajot na blokot i5 (,s.#8) A ).#1 nare*)i 9a 8is ini ,s.#8 D e.se A ).#1 nare*)i 9a ne8is ini ,s.#8 D

Informatika 2

55

#2.2. Cikl)si #2.2.#. 7aredbi whiile i do - while Ciklusite gi upotrebuvame za povtoruva2e grupi naredbi dodeka nekoj uslov ne se ispolni. Taka 4"i.e naredbata izvr{uva edna ili pove1e naredbi dodeka uslovot .izrazot vo zagrada- e vistinit, a {tom uslovot postane nevistinit, )iklusot zavr{uva i programata prodol8uva so slednata naredba 4"i.e (,s.#8) nare*)a ili 4"i.e (,s.#8) A ).#1 nare*)i D Primer Fin!.,*e Gs *i#."H F*e5ine ZJONO 0 8#i* %ain() A in 6C &rin 5(IP#!e #1 na !i1.,s# I)C &, !"ar(ZJONO)C 6:'C 4"i.e (6 G ;'''') @@6C &, !"ar(ZJONO)C &rin 5(IKraB na !i1.,s# I)C D %ve u{te eden primer kade vo )iklusot se povtoruva blok na naredbi Fin!.,*e Gs *i#."H 8#i* %ain() A in )r#i.# : 'C 4"i.e ()r#i.# G 6) A &rin 5(IJre*n#s a na )r#i.# # e <*KnI, )r#i.#)C )r#i.# : )r#i.# @ $C D Ne bide obrnato vnimanie na nekolku osobenosti na 4"i.e )iklusite. Kako prvo vo poslednata programa dokolku vrednosta na promenlivata )r#i.# be{e na po~etokot

Informatika 2

56

ini)ijalizirano so vrednost pogolema od C, toga{ naredbite vo blokot na )iklusot nema{e da bidat izvr{eni nitu edna{. Potoa dokolku vrednosta na promenlivata )r#i.# ne se menuva{e vo blokot na )iklusot toga{ )iklusot nema{e nikoga{ da zavr{uva. , na krajot dokolku se izvr{uva samo edna naredba vo blokot na )iklusot toga{ nema potreba od golemi zagradi. nogu sli~na na 4"i.e naredbata e *# ^ 4"i.e naredbata. Taa go ima sledniot oblik *# nare*)a 4"i.e (,s.#8) ili *# A ).#1 nare*)i D 4"i.e (,s.#8) Kaj ovaa naredba )iklusot otpo~nuva so klu~niot zbor *# posle {to sleduva edna naredba ili blok na naredbi {to treba da se povtoruvaat. Kontrolata na )iklusot se ostvaruva na krajot na )iklusot. Dko uslovot vo 4"i.e naredbata e vistinit naredbite se povtoruvaat, a {tom toj postane nevistina se napu{ta )iklusot i se prodol8uva so slednata naredba. %ve edna primer programa Fin!.,*e Gs *i#."H 8#i* %ain() A in iC i : 'C *# A &rin 5(IT"e 8a.,e #5 i is n#4 <*KnI, i)C i : i @ $C D 4"i.e (i G =)C D *# ( 4"i.e naredbata vo su{tina e varija)ija na 4"i.e naredbata so taa razlika {to uslovot se ispituva na krajot na naredbata ili blokot na naredbi. Poradi toa tie se izvr{uvaat najmalku edna{ .kaj 4"i.e naredbata mo8e da ne bidat izvr{eni nitu edna{-. Dko uslovot e vistinit toga{ se povtoruva izvr{uva2eto na naredbata ili blokot naredbi. 4"i.e naredbite koristat koga ne e to~no poznato kolku pati )iklusot 1e se povtori

Informatika 2

57

#2.2.2. for ikl)si Ovie )iklusi najmnogu se razlikuvaat od sli~nite kaj drugite programski jazi)i. 5#r )iklusot vo C se de/inira vo tri dela na sledniot na~in 5#r(ini!iBa.i9a!iBaC ,s.#8iC in1re%en i i.i *e1re%en i) nare*)a ili 5#r(ini!iBa.i9a!iBaC ,s.#8iC in1re%en i i.i *e1re%en i) A ).#1 nare*)i D 0o prviot del na naredbata, vo ini)ijaliza)ijata se dodeluvaat po~etnite vrednosti na broja~ite. Dko ima pove1e broja~i nivnite ini)ijaliza)ii se odeluvaat so zapirki. !elot za ini)ijaliza)ija mo8e mnogu poop{to da se svati kako po~etna naredba na )iklusot {to zna~i deka taa naredba mo8e da bide bilo koja naredba vo C pa i nekoja vlezna ili izlezna naredba .naprimer naredbata &rin 5). 0o vtoriot del, vo uslovite, obi~no se koristat logi~ki i rela)ioni operatori za postavuva2e na nekoi uslovi koi 1e go kontroliraat izvr{uva2eto na )iklusot. Se dodeka ovie uslovi se to~ni se inkrementiraat ili dekrementiraa broilata i se izvr{uvat naredbite vo )iklusot. , vo ovoj del na naredbata, sli~no kako i vo delot za ini)ijaliza)ija dozvoleni se i bilo koi drugi naredbi. 0o tretiot del obi~no se inkrementira ili dekrementira edna ili pove1e promenlivi no i tuka mo8e da se najde i bilo koja druga naredba. Kako ilustra)ija se dadeni dve primer programi Fin!.,*e Gs *i#."H F*e5ine ZJONO 0 8#i* %ain() A in 6, BC &rin 5(IP#!e #1 na !i1.,s# I)C &, !"ar(ZJONO)C 6:'C 5#r (B : 'C B G ;''''C @@B) @@6C &, !"ar(ZJONO)C &rin 5(IKraB na !i1.,s# I)C D i

Informatika 2

58

Fin!.,*e Gs *i#."H 8#i* %ain() A in in*e6C 5#r(in*e6 : ' C in*e6 G 6 C in*e6 : in*e6 @ $) &rin 5(IT"e 8a.,e #5 "e in*e6 is <*KnI, in*e6)C D Tuka treba mnogu da se vnimava na uslovot vo vtoriot del. +aprimer ~esta e slednata gre{ka 5#r (B : 'C B : ;''''C @@B) Tuka vo vtoriot del nema ispituva2e na vrednost tuku dodeluva2e na vrednost, pa vo sekoj )iklus na j 1e mu bide dodelena vrednost @====, toa 1e bide tretirano kako vistina i )iklusot 1e trae beskone~no. Korekten izraz bi bil 5#r (B : 'C B :: ;''''C @@B) Kako {to ve1e be{e spomnato mo8e da se ini)ijalizira i inkrementira ili dekrementira pove1e od edna promenliva. +aprimer mo8na e slednata struktura na 5#r naredbata 5#r (6 : ', B : 'C B G ;''''C B@@, 6@@) Posebno kaj ovaa naredba treba da se vnimava na toa deka taa nema H na krajot. Dko sepak stavime H toga{ toa 1e zna~i kraj na )iklusot za povtoruva2e {to se ilustrira so sledniov primer Fin!.,*e Gs *i#." 8#i* %ain() A in s,%a, 6, yC s,%a : 'C y : =C 5#r (6 : $C 6 G yC 6@@)C s,%a : s,%a @ 6 7 yC &rin 5(I S,%a a e <*I,s,%a)C D 0o ovoj slu~aj 1e bide otpe~ateno 5C, a ako gi izbri{eme H na krajot od 5#r naredbata 1e bide otpe~ateno C=. #2.3. break - naredba za izleg)va'e od ikl)s Ovaa naredba ovozmo8uva izleguva2e od )iklus realiziran so 5#r, 4"i.e, *# ( 4"i.e ili s4i !" naredbi pred uslovot za zavr{uva2e na )iklusot da bide ispolnet. +a primer Fin!.,*e Gs *i#."H 8#i* %ain() A

Informatika 2

5"

in 6C 6 : 'C 5#r (C C @@6) A i5(6 H ='''') )rea1C D &rin 5I<*I,6)C D 0o ovaa programa, iako ima beskone~en )iklus, {tom dojde do izvr{uva2e na naredbata )rea1, )iklusot se napu{ta. %ve u{te eden primer Fin!.,*e Gs *i#."H 8#i* %ain() A in 6C 5#r (6 : 'C 6 H $''C 6@@) A &rin 5(I<* I,6)C i5(6 H E=) )rea1C D D 0o gornata programa ima dve pri~ini za napu{ta2e na )iklusot( uslovot vo 5#r naredbata i samata )rea1 naredba. Sli~no raboti i sledniov programski otse~ok 4"i.e ((! : +e !"ar()) R: EOF) A i5(! : PP) )rea1C &, !"ar(!)C D Sli~ni e/ekti mo8at da se postignat i so naredbata !#n in,e so taa razlika {to ovaa naredba ne nosi direktno vo sledniot ~ekor na )iklusot zapostavuvajki gi naredbite do krajot na )iklusot. So slednava primer programa se ilustrira primenata na ovaa naredba. Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar !C 4"i.e ((! : +e !"ar() R: EOF) A i5(! H: P'P >> ! G: PQP) !#n in,eC &, !"ar(!)C D

Informatika 2

6$

D ;a ve8ba da se prou~i programata i da se objasni {to taa raboti. #2.4. 7aredba goto , posledna naredba od grupata na naredbi za kontrola na tekot na programata e +# # naredbata. ;a ovaa naredba mnogu se zboruva, postojat golem broj na preporaki za nejzino odbegnuva2e, no sepak ne se mo8e bez nea. Obi~no se tvrdi deka se mo8e da se re{i i bez upotreba na ovaa naredba no taa seu{te se vgraduva vo skoro site jazi)i. Osnovniot oblik na ovaa naredba e sledniot +# # (i%a na #9na1a)C so toa {to nekade vo programata go imame imeto na oznakata vo oblik i%e na #9na1aT Gunk)ionira2eto na ovaa naredba e ednostavno. Kontrolata na programata posle izvr{uva2eto na ovaa naredba se prenesuva na naredbata so navedenata oznaka. Od site mo8ni primeni na ovaa naredba, samo vo eden slu~aj, poelegantna e upotrebata na +# # naredbata od drugite re{enija. Toa e napu{ta2eto na pove1e vgnezdeni )iklusi .so naredbata )rea1 se napu{ta samo vnatre{niot )iklus-. #2.4. 7aredba switch So i5 ( e.se strukturata mo8e lesno da se bira me9u dve alternativi, me9utoa koga ima potreba da se bira od pove1e alternativi toa mo8e da se re{i so pove1ekratni i5 ( e.se s r,1 ,ri, {to ne e elegantno, ili so s4i !" naredbata. So sledniov primer 1e bide ilustrirano kako se primenuva naredbata s4i !" Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar !C ! : +e !"ar()C s4i !" (!) A !ase P$PT &rin 5(Ie*enI)C )rea1C !ase PEPT &rin 5(I*8aI)C )rea1C !ase P;PT &rin 5(I riI)C )rea1C !ase P4PT

Informatika 2

6# &rin 5(I!e iriI)C )rea1C !ase P=PT &rin 5(I&e I)C )rea1C !ase P6PT &rin 5(Ises I)C )rea1C !ase P0PT &rin 5(Ise*,%I)C )rea1C !ase P3PT &rin 5(I#s,%I)C )rea1C !ase PQPT &rin 5I*e8e I)C )rea1C !ase P'PT &rin 5(In,.aI)C )rea1C *e5a,. T &rin 5(Ine e !i5raI)C

D D #2.6. Ve5bi >. Programa za ilustra)ija na logi~ki sporeduva2a na vrednosti na promenlivi Fin!.,*e Gs *i#."H 8#i* %ain() A in 6 : $$, y : $$, 9 : $$C !"ar a : 4', ) : 4', ! : 4'C 5.#a r : $E.Q30, s : $E.Q30, : $E.Q30C 27 Pr8a +r,&a 72 i5 (6 :: y) 9 : ($;C i5 (6 H 9) a : PAPC i5 (R(6 H 9)) a : P-PC i5 () G: !) r : '.'C i5 (r R: s) : !2EC 27 J #ra +r,&a 72 i5 (6 : (r R: s)) 9 : $'''C i5 (6 : y) 9 : EEEC i5 (6 R: ') 9 : ;;;C 27 6 : &#9i i8en )r#B, 9 : $''' 27 6 : y, 9 : EEE 72 27 9 : ;;; 72 72 27 9 : ($; 72 27 a : 6= 72 27 Nis # ne se %en,8a 27 r : '.' 72 27 : E' 72

72

Informatika 2

62 27 9 : 444 72

i5 (6) 9 : 444C 27 Tre a +r,&a 72

6 : y : 9 : 00C i5 ((6 :: y) >> (6 :: 00)) 9 : ;;C i5 ((6 H y) ?? (9 H $E)) 9 : EEC i5 (6 >> y >> 9) 9 : $$C i5 ((6 : $) >> (y : E) >> (9 : ;)) r : $E.''C i5 ((6 :: E) >> (y : ;) >> (9 : 4)) r : $4.=6C 27 Ce 8r a +r,&a i5 (6 :: 6)C 9 : E0.;4=C i5 (6 R: 6) 9 : E0.;4=C i5 (6 : ') 9 : E0.;4=C D 5. !a se prou~i {to raboti slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A in )r#BC 5#r(&rin 5(I8nes,8aB )r#e8iI)C)r#B :: 6C) s!an5(I<*I,>)r#B)C &rin 5(IT#B )r#B +# sa1a%I)C D 72

27 9 : ;; 72 27 9 : EE 72 27 9 : $$ 72 27 6 : $, y : E, 9 : ;, r : $E.'' 72 27 Nis # ne se %en,8a72

27 9 se1#+as se %en,8a 27 Nis # ne se %en,8a 27 6 : ', 9 e ne&r#%ene #

72 72 72

@. !a se sostavi programa {to 1e pro~ita eden broj i 1e utvrdi dali e deliv so tri. Dko ne e deliv so tri da se utvrdi dali ima ostatok eden ili dva. Fin!.,*e Gs *i#."H 8#i* %ain() A in aC &rin 5(IJnese e )r#BI)C s!an5(I<*I,>a)C s4i !"(a(a2;7;) A !ase 'T &rin 5(I-r#B# e *e.i8 s# riI) )rea1C !ase $T &rin 5(INe se *e.i s# ri i%a #s a #1 e*enI)C )rea1C !ase ET &rin 5(INe se *e.i s# ri i%a #s a #1 *8aI)C

Informatika 2

63

D D $. !a se sostavi programa {to za pro~itana bukva 1e utvrduva dali e samoglaska ili soglaska. Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar ),18aC s!an5(I<!I,>),18a)C i5(),18a H PaP >> ),18a G P9P)C A s4i !"(),18a) A !ase PaPT !ase PePT !ase PiPT !ase P#PT !ase P,PT &rin 5(ISa%#+.as1aI)C )rea1C *e5a,. T &rin 5(IS#+.as1aI)C D e.se &rin 5(IG#.e%a ),18a i.i *r,+ 9na1I)C D C. !a se sostavi programa {to 1e gi otpe~ati site prosti broevi pomali od daden broj Fin!.,*e Gs *i#."H 8#i* %ain() A in i,B,1,n,6 : 'C &rin 5(IJnesi )r#BI)C s!an5(I<*I,>n)C &rin 5(IPr#s i )r#e8i &#%a.i #* <* seI,n)C 5#r(i : $C i G nC i@:E) A 1 : $C 5#r(B : EC B G: i2EC B@@) i5(i(i2B7B :: ') A 1 : 'C )rea1C D i5(1) A &rin 5(I<* I,i)C

Informatika 2

64 6@@C

D D &rin 5(I J1,&n# <* &r#s i )r#e8iI,6)C D #. !a se sostavi programa {to 1e presmetnuva vrednost na ednostaven aritmeti~ki izraz simulirajki rabota na kalkulator. Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar #&era #r : P@PC in )r#B, resenie : 'C *# A s!an5(I<*I,>)r#B)C s4i!"(#&era #r) A !ase P@PT Aresenie : resenie @ )r#BC )rea1CD !ase P(PT Aresenie : resenie ( )r#BC )rea1CD !ase P7PT Aresenie : resenie 7 )r#BC )rea1CD !ase P2PT Aresenie : resenie 2 )r#BC )rea1CD D #&era #r : +e !"ar()C D 4"i.e(#&era #r :: P:P) &rin 5(IResenie # e <*I,resenie)C D B. !a se sostavi programa {to 1e go dava najgolemiot stepen na b pomal od a. Fin!.,*e Gs *i#."H 8#i* %ain() A in a, ), s e&en : ', &r#*,! C &rin 5(IJnesi a i )I)C s!an5(I<*<*I,>a,>))C &r#*,! : )C 4"i.e(&r#*,! G: a) A s e&en@@C &r#*,! : &r#*,! 7 )C D &rin 5(I<*I,s e&en)C D 8. !a se utvrdi {to raboti slednava programa Fin!.,*e Gs *i#."H

Informatika 2

65

8#i* %ain() A in a, )C s!an5(I<*<*I,>a,>))C *# A 4"i.e(a H )) a : a ( )C 4"i.e() H a) ) : ) ( aC D 4"i.e(a R: )) &rin 5(I<*I,a)C D ?. !a se proba istata programa so a SS b namesto a US b. Jto taa raboti. >=. !a se sostavi programa {to 1e ~ita nepoznat broj na vrednosti i 1e gi otpe~ati onie {to imaat ist predznak kako prviot. >>. !a se sostavi programa sto ke )ita )eli broevi do ????? i ke gi pe~ati so levi nuli. .naprimer >== S ==>==>5. !a se sostavi programa za slede2e na natprevar po ping E pong. Fin!.,*e Gs *i#."H 8#i* %ain() A in i,B,1raBC !"ar &#eniC i : B : 1raB : 'C &rin 5(II+ra a # &#!na 8nes,8aB &#eniI)C *# A &#eni : +e !"ar()C s4i !"(&#eni) A !ase PaPT A i@@C &rin 5(I<* <*I,i,B)C 1raB : (i H: E$) >> (i ( B H: E)C )rea1C D !ase P)PT A B@@C &rin 5(I<* <*I,i,B)C 1raB : (B H: E$) >> (B ( i H: E)C

Informatika 2

66 )rea1C D D

D 4"i.e(1raB :: ')C D >@. Slednava programa go ilustrira tekot na izvr{uva2e na naredbite kaj 5#r naredbata Fin!.,*e Gs *i#."H 8#i* %ain() A in 6:$C 5#r(&, !"ar(PaP)C&, !"ar(P)P)C&, !"ar(P!P)) A &, !"ar(P*P)C i5(6@@::=) )rea1C D D Programata 1e otpe~ati a)*!)*!)*!)*!)* >$. Programa za ispi{uva2e na broevite vo binarna /orma. Programata e dadena so gre{ka. !a se pronajde gre{kata Fin!.,*e Gs *i#."H F*e5ine -]TESIZE 3 8#i* %ain() A in i, )r#BC &rin 5(IJnesi )r#B I)C s!an5(I<*I,>)r#B)C 5#r(i:'CiG-]TESIZE7si9e#5(in )Ci@@) &rin 5(I<*I,()r#B GG i > $ GG -]TESIZE 7 si9e#5(in )) S $ T ')C &, !"ar(PP)C D >C. !a se sostavi programa {to 1e ispituva parnost na )eli broevi zavisno od vrednosta na poslednata )i/ra Fin!.,*e Gs *i#."H 8#i* %ain() A in )r#B,6C &rin 5(IJnesi )r#B I)C s!an5(I<*I,>)r#B)C

Informatika 2

67

6:)r#BC 6 : 6(62$'7$'C s4i !"(6) A !ase $T !ase ;T !ase =T !ase 0T !ase QT &rin 5(I <* e ne&aren )r#BI,)r#B)C )rea1C *e5a,. T &rin 5(I<* e &aren )r#BI,)r#B)C D D >#. !a se sostavi programa {to 1e broi do ># i 1e gi ispi{e site broevi i nivnite kvadrati >B. !a se sostavi programa {to 1e broi do >== i 1e gi ispi{e samo broevite pome9u @@ i #5. ;a ovaa programa da se koristi operatorot za inkrementira2e

#3. 2oli'a Poli2ata se nizi elementi od ist tip so isto ime. Tie mo8at da bidat edno ili pove1e dimenzionalni. Se deklariraat na sledniov na~in in *en#8iW0XC 5.#a s i&en*iBaW$EXC Prviot indeks na poleto e nula taka da kaj poleto denovi vo pret7odnata deklara)ija najgolemiot dozvolen indeks e #. +ekoi preveduva~i dozvoluvaat preliv od nekolku mesta {to zna~i deka preveduva~ot zavzema nekolku mesta pove1e od deklariranite. 0o odredeni situa)ii dozvoleno e izostavuva2e na spe)i/ika)ijata za broj na elementi vo poleto, no srednite zagradi moraat da prisustvuvaat .naprimer koga pri deklarira2e na poleto mu se dodeluvaat i vrednosti-. in *en#8iWX : A$,E,;,4,=,6,0DC 5.#a s i&en*iBaWX : A',',',',',',',','DC Preveduva~ot sam ja opredeluva goleminata na poleto spored ini)ijaliza)ijata. ,ni)ijaliza)ija na poli2a e mo8na samo ako se tie deklarirani kako nadvore{ni ili statik poli2a. Poka8uva~ na po~etnata adresa na poleto se dobiva so unarniot operator > koj mo8e da se izgovara kako Madresa naM i prviot element na poleto (>*en#8iW'X,

Informatika 2

68

>s i&en*iBaW'X). +a ovoj na~in, vo su{tina se dobiva poka8uva~ na prviot element na poleto. +amesto operatorot Madresa naM za poka8uva~ mo8e da se upotrebi i samoto ime bez srednite zagradi kako vo slednive primeri i%e : : >i%eW'X *en#8i : : >*en#8iW'X s i&en*iBa : : >s i&en*iBaW'X *potrebata na poli2ata 1e bide ilustrirana so edna ednostavna primer programa. Fin!.,*e Gs *i#."H in %ese!iWX : A;$,E3,;$,;',;$,;',;$,;$,;',;$,;',;$DC 8#i* %ain() A in iC 5#r(i : $C i G $;C i@@) &rin 5(IMese!# )r#B <* i%a <* *en#8iI,i,%ese!iWi($X)C D ,nteresna e primenata na /unk)ijata si9e#5 na poli2ata. si9e#5(8i* &r#%en.i8a) ( ja dava dol8inata na vidot promenlivi si9e#5(i%e na &r#%en.i8a) ( dol8inata na promenlivata vo bajtovi si9e#5(i%e na &#.e) ( dol8inata na poleto vo bajtovi si9e#5(i%e na &#.e) 2 si9e#5(8i*# na &r#%en.i8i 8# &#.e #) ( go dava brojot na elementite vo poleto Dko seto ova se primeni na pret7odnata programa vo sledniot oblik Fin!.,*e Gs *i#."H F*e5ine &rin (6) &rin 5(I6 : <*I,6) in %ese!iWX : A',;$,E3,;$,;',;$,;',;$,;$,;',;$,;',;$DC 8#i* %ain() A in iC 5#r(i : $C i G $;C i@@) &rin 5(IMese!# )r#B <* i%a <* *en#8iI,i,%ese!iWiX)C &rin (si9e#5(in ))C &rin (si9e#5(i))C &rin (si9e#5(%ese!i))C &rin (si9e#5(%ese!i)2si9e#5(in ))C D 1e se dobijata soodvetnite vrednosti kako naprimer 4, 4, =E i E6.

Informatika 2

6"

!ozvoleni se poli2a so razni dimenzii. +aj~esta maksimalna dozvolena dimenzija e C, no retko se koristime so poli2a so pogolemi dimenzii od 5. Pove1edimenzionalnite poli2a se pretstavuvaat na sledniot na~in in &#.eW=XW$EW : AA... $E elementi...D,A...D,A...D,A...D,A...DD Soodvetno pole so tri dimenzii 1e bide pretstaveno kako in &#.eW$$XWEEXW;;XC Sli~no kako i kaj ednodimenzionalnite poli2a i tuka poka8uva~ite se identi/i)iraat so >&#.eW'XW'XW'X : : >&#.eW'XW'X : : >&#.eW'X : : &#.e !o element na dvodimenzionalno pole mo8e da se dostapi so &#.eWiXWBX taka naprimer do elementot .=,$- mo8e da se dostapi so &#.eW'XW4X ili so upotreba na poka8uva~i 7(&#.e @ 4) Op{to gledano elementot (i,j) e ekvivalenten so &#.eWiXWBX ili so 7(&#.e @ (i 7 *#.9inaNnaNre*) @ B) Spe)ijalen vid ednodimenzionalni poli2a se nizite znakovi. Posleden znak vo ovie poli2a e nul znakot {to go ozna~uvame so K'. Pri dodeluva2e vrednost na nizata nema potreba da se stava i ovoj znak, toj avtomatski se dodeluva od strana na preveduva~ot. Dko nema kako posleden znak K' toga{ nema niza zna)i tuku samo ednodimenzionalno pole od zna)i koe mo8e da se tretira samo kako ednodimenzionalno pole i na nego ne mo8at da se primenat /unk)iite za nizi znakovi. ;na~i pri dimenzionira2eto na poli2ata nizi treba da se vnimava da se ima najmalku edno mesto pove1e za nul znakot. Dko na poleto se dodelat pomalku zna)i od rezerviranite toga{ site preostanati zna)i se nul zna)i. +izite znakovi se ~itaat so spe)i/ika)ijata <s. Ne bide prika8an eden primer Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar i%eW;'XC in a, )r#BNnaN),18iC &rin 5(IKa1# se 8i1a eI)C

Informatika 2

7$

s!an5(I<sI,i%e)C a : si9e#5 i%eC )r#BNnaN),18i : s r.en(i%e)C &rin 5(IJase # i%e i%a <* ),18iI,)r#BNnaN),18i)C &rin 5(IJase # i%e 9a5a1a <* )aB #8i #* %e%#riBa aI,a)C D Ovaa programa go produ)ira sledniov izlez Ka1# se 8i1a e Mar in Jase # i%e i%a 6 ),18i Jase # i%e 9a5a1a ;' )aB #8i #* %e%#riBa a Tuka e vnesena edna nova /unk)ija s r.en koja ja dava dol8inata na nizata zna)i zanemaruvaj1i gi nul zna)ite. Kaj /unk)ijata si9e#5 koga se raboti za imi2a na poli2a ili promenlivi ne e potrebno da se stavat zagradi. Ne bide prika8an u{te eden primer so primena na konstantna niza. Fin!.,*e Gs *i#."H F*e5ine STLDENT I i si %n#+, *#)ar s ,*en I 8#i* %ain() A !"ar i%eW;'XC &rin 5(IKa1# se 8i1asI)C s!an5(I<sI,i%e)C &rin 5(IZ*ra8# <s <sI,i%e, STLDENT)C D Dko na pra{a2eto MKako se vika{M se odgovori so ime i prezime, 1e bide otpe~ateno samo imeto. S!an5 /unk)ijata zastanuva pri prvoto prazno mesto. ;a ve8ba da se proveri {to 1e bide otpe~ateno so &rin 5(I<s, <,, <!I,IE.e1 r#I,I e"ni!1iI,7I5a1,. e I)C Ke bidat prika8ani u{te dve /unk)ii za vlez i izlez na nizi zna)i sli~ni na +e !"ar i &, !"ar. Toa se /unk)iite +e s i &, s koi sli~no kako i +e !"ar i &, !"ar. Tie prevzemat niza zna)i od vleznata edini)a i ispi{uvaat nizi zna)i na izleznata edini)a. Ne bide prika8ana edna primer programa za presmetuva2e na brojot na zna)i i zborovi vo edna re~eni)a. Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar re!eni!aW='XC in )r#BN9)#r#8i : $, iC &, s(IJnesi e*na re!eni!aI)C +e s(re!eni!a)C

Informatika 2

7#

5#r(i : 'C re!eni!aWiX R: PPC i@@) A i5(re!eni!aWiX :: P P) )r#BN9)#r#8i @: $C D &rin 5(IRe!eni!a a i%a <;* 9na1#8i i <E* 9)#r#8iI, i, )r#BN9)#r#8i)C D Poveketo opera)ii so nizi znakovi vo C vo su{tina rabotat so poka8uva~i. Ne bide prika8ana u{te edna primer programa Fin!.,*e Gs *i#."H F*e5ine &rin (6) &rin 5(I6 : <s, 8re*n#s a:<,, >6:<,I,6,6,>6) 8#i* %ain() A s a i! !"ar 7&#ra1a : ID#s a )eseIC s a i! !"ar 71#&iBaC 1#&iBa : &#ra1aC &rin 5(I<sI,1#&iBa)C &rin (&#ra1a)C &rin (1#&iBa)C D Ovaa programa 1e otpe~ati D#s a )ese &#ra1a : D#s a )ese, 8re*n#s a:$;6, >&#ra1a:$40 1#&iBa : D#s a )ese, 8re*n#s a:$;6, >1#&iBa:464 Ova zna~i deka nizata ne e voop{to kopirana tuku deka namesto nova niza imame samo nov poka8uva~ {to poka8uva na istata niza. #3.#. 9tandardni &)nk ii za rabota so nizi znakovi Kako {to veke be{e re~eno postojat poveke standardni /unk)ii za rabota so nizi znakovi. %dna od niv ve1e be{e iskoristena vo pret7odnite primeri. Toa e /unk)ijata s r.en. Pokraj nea mnogu ~esto se upotrebuvaat i se standardni C /unk)ii kaj golem broj na preveduva~i /unk)iite( s r!a , s r!%& i s r!&y. Preku primeri 1e bide prika8ano kako rabotat ovie /unk)ii.

#3.#.#. 6)nk ija strcat Fin!.,*e Gs *i#."H 8#i* %ain() A s a i! !"ar a1a*e%iBaW3'XC s a i! !"ar *#*a #1WX : I e 8#ena a a1a*e%iBaIC

Informatika 2

72

&, s(IKa18a e 8#ena a a1a*e%iBaI)C +e s(a1a*e%iBa)C s r!a (a1a*e%iBa,*#*a #1)C &, s(a1a*e%iBa)C &, s(*#*a #1)C D Ka18a e 8#ena a a1a*e%iBa naB*#)ra naB*#)ra e 8#ena a a1a*e%iBa e 8#ena a a1a*e%iBa Kako {to mo8e da se vidi vtorata niza vo /unk)ijata s r!a se dodava na prvata a samata ne se menuva. Pri toa treba da se vnimava vo prvata niza da ima dovolno prazni rezervirani mesta. ;a da se odbegnat problemite {to bi se pojavile pri nema2e dovolno mesto obi~no se koristi /unk)ijata s r.en Fin!.,*e Gs *i#."H F*e5ine GOLEMINA 3' 8#i* %ain() A s a i! !"ar 5a1,. e WGOLEMINAXC s a i! !"ar *#*a #1WX : I e e.e1 r# e"ni!1i 5a1,. e IC &, s(IKa1#8 e e.e1 r# e"ni!1i# 5a1,. e I)C +e s(5a1,. e )C i5((s r.en(*#*a #1) @ s r.en(5a1,. e ) @ $) H GOLEMINA) s r!a (5a1,. e ,*#*a #1)C &, s(5a1,. e )C D #3.#.2. 6)nk ija strcmp Fin!.,*e Gs *i#."H F*e5ine ODGOJOR IK#!# Ra!inI 8#in %ain() A !"ar &r#)aW4'XC &, s(IK#B Ba na&isa. &esna a 9a Len1aI)C +e s(&r#)a)C 4"i.e( &r#)a R: ODGOJOR) A &, s(INe e #!n#. Pr#)aB &a1I)C +e s(&r#)a)C D &, s(I-ra8# &#+#*iI)C D

Informatika 2

73

*bavo program~e ama nema da raboti. ODGOJOR i &r#)a vo su{tina se poka8uva~i pa uslovot vo 4"i.e bara ednakvost ne na nizite tuku na adresite. Toa nema nikoga{ da bide ispolneto bidej1i nizite se smesteni na razli~ni adresi. Od tie pri~ini tuka 1e bide iskoristena /unk)ijata s r!%& Fin!.,*e Gs *i#."H F*e5ine ODGOJOR IK#!# Ra!inI 8#i* %ain() A !"ar &r#)aW4'XC &, s(IK#B Ba na&isa. &esna a 9a Len1aI)C +e s(&r#)a)C 4"i.e( s r!%&(&r#)a,ODGOJOR) R: ') A &, s(INe e #!n#. Pr#)aB &a1I)C +e s(&r#)a)C D &, s(I-ra8# &#+#*iI)C D K#B Ba na&isa. &esna a 9a Len1a _as Ne e #!n#. Pr#)aB &a1 K#!# Ra!in -ra8# &#+#*i Ne bide prika8ano, preku eden primer, kako se vr{i sporeduva2eto odnosno koi vrednosti se dobivaat pri sporeduva2eto Fin!.,*e Gs *i#."H 8#i* %ain() A &rin 5(I<*I, s r!%&(IaI,IaI))C &rin 5(I<*I, s r!%&(IaI,I)I))C &rin 5(I<*I, s r!%&(I)I,IaI))C &rin 5(I<*I, s r!%&(I!I,IaI))C &rin 5(I<*I, s r!%&(I)a)iI,I9a)iI))C D Programata 1e otpe~ati ' ($ $ E (E4 ;na~i s r!%& ja dava razlikata vo ASCII vrednostite. Ovaa /unk)ija sporeduva znak po znak i {tom naide na dva znaka {to ne se sovpa9aat ja dava nivnata razlika.

Informatika 2

74

#3.#.3. 6)nk ija strcpy Fin!.,*e Gs *i#."H F*e5ine DO-AR I_as s,% *#)ar s ,*en I 8#i* %ain() A s a i! !"ar 7 #B : DO-ARC s a i! !"ar 1#&iBaW4'XC &, s( #B)C &, s(1#&iBaXC s r!&y(1#&iBa, #B)C &, s( #B)C &, ns(1#&iBa)C D

#4. 2rosled)va'e na parametri na glavnata &)nk ija argv i argc Koga otpo~nuva izvr{uva2eto na programata sistemot avtomatski ja povikuva /unk)ijata main. +a ovaa /unk)ija mo8at da i se prosledat dva parametri vo /azata na nejzinoto startuva2e. ;na~i mo8no e da se prosledat podato)i od komandnata linija na /unk)ijata main. Podato)ite se zadavaat vedna{ po imeto na programata. ,mi2ata na parametrite {to mo8at da se prosledat na glavnata /unk)ija obi~no se ar+! i ar+8, a mo8at da imaat i bilo koi drugi imi2a. Tie ovozmo8uvat pri/a1a2e na podato)ite od komandnata linija. Toa se edinstvenite parametri koi mo8at da se prosledat na glavnata /unk)ija %ain. Parametarot ar+! go sodr8i brojot na parametri vo komandnata linija i e pozitiven )el broj. 0rednosta na ar+! e sekoga{ najmalku > bidejki samoto ime na programata se kvali/ikuva kako prv parametar. +a primer ako se vnesuva samo imeto na programata vo komandnata linija toga{ ar+! 1e ima vrednost >, a ar+8W'X 1e poka8uva na imeto na programata. Parametarot ar+8 e poka8uva~ na pole od poka8uva~i na !"ar promenlivi. Sekoj element vo ova pole poka8uva na parametar vo komandnata linija. Site parametri vo komandnata linija se tretiraat kako nizi na znakovi taka da dokolku tie pretstavuvaat brojni vrednosti, za da bidat koristeni, moraat pret7odno da bidat pretvoreni vo soodveten /ormat. +ezavisno od brojot na parametri vo komandnata linija ar+8War+!X sekoga{ 1e poka8uva na vrednost NLLL. +a~inot na rabota na ar+! i ar+8 1e bide ilustriran so slednava programa. Fin!.,*e Gs *i#."H 8#i* %ain(ar+!, ar+8) in ar+!C !"ar 7ar+8WXC 27 &ra9ni e 9a+ra*i as#!iraa na &#.e s# ne#&re*e.en *#.9ina 72 A

Informatika 2

75

i5(ar+! G E) A &rin 5(I Za)#ra8i8 e *a +# # 1,!a e s8#e # i%e KnI)C e6i (')C D &rin 5(I Z*ra8# <s 1a1# si *enesKnI,ar+8W$X)C D Ne bide prika8an primer so prosleduva2e na nekoja brojna vrednost na glavnata /unk)ija. Toa 1e bide ilustrirano so programa {to 1e ispi{e onolkav broj pati ZDRAJO na ekranot kolku {to iznesuva brojkata vo komandnata linija. Fin!.,*e Gs *i#."H 8#i* %ain(ar+!, ar+8) in ar+!C !"ar 7ar+8WXC A in &ri1a9, )r#i.#C i5(ar+! G E) A &rin 5(I P# re)n# e *a se 8nese 8re*n#s KnI)C &rin 5(I 8# 1#%an*na a .iniBa KnI)C e6i (')C D 5#r()r#i.# : a #i(ar+8W$X)C )r#i.#C )r#i.#(() i5(ar+! :: ;) &rin 5(I <s I, ar+8WEX)C e.se &rin 5(I ZDRAJO KnI)C D ;a pristap do edini~en znak vo nizata od komandnata linija se dodava u{te eden indeks na ar+8. Fin!.,*e Gs *i#."H 8#i* %ain(ar+!, ar+8) in ar+!C !"ar 7ar+8WXC A in , iC 5#r( : 'C G ar+!C @@) A i : 'C 4"i.e(ar+8W XWiX) A &, !"ar(ar+8W XWiX)C i@@C D D D

Informatika 2

76

Prviot indeks pristapuva kon nizata znakovi a vtoriot kon poedini znakovi vo nizata. Teoretski mo8e da se ima @5B#B parametri vo komnadnata linija no operativnite sistemi go ograni~uvaat toj broj na nekolku. +aj~esto ovie mo8nosti se koristat da se prosledi ime na datoteka ili nekoi drugi parametri. Ne bide prika8ana u{te edna primer programa so ar+8 i ar+! kade pokraj niv 1e se ilustrira i kako se raboti so pole na poka8uvai Fin!.,*e Gs *i#."H 8#i* %ain(ar+!, ar+8) in ar+!C !"ar 7ar+8WXC 27 is # s# !"ar 77ar+8 72 A in iC &rin 5(I<E's <E's <E'sKnI, I.#1a!iBaI, I8re*n#s I,Is#*r9inaI)C &rin 5(I<E's <E's <E'sKnKnI, Ina &#1.I, Ina &#1.I,Ina ni9aI)C 5#r(i:$CiGar+!Ci@@) &rin 5(I<E', <E', <E'sKnI, >ar+8WiX,ar+8WiX,ar+8WiX)C D Programata gi dava slednive rezultati r,n s#*r9ina na ni9a #* in5#r%a!ii .#1a!iBa 8re*n#s na &#1. na &#1. ;;Q$E ;;Q$6 ;;QE' ;;QE4 ;;QE3 #5. 6)nk ii Gunk)iite se edna od najjakite to~ki na C i negovi osnovni gradbeni blokovi. Pred upotreba na /unk)iite neop7odno e tie da se de/iniraat. !e/ini)ijata na /unk)iite se odviva na sledniov na~in. i& i%eNnaN5,n1!iBa a(.is a na ar+,%en i)C *e1.ara!ii na ar+,%en i e (a1# +i i%a)C A 8na resni *e1.ara!iiC nare*)iC D E$';$ E$';Q E$'4$ E$'4= E$'40 s#*r9ina na ni9a s#*r9ina na ni9a #* in5#r%a!ii

Informatika 2

77

Kako ilustra)uja za na~inot na upotrebata na /unk)iite 1e bide prika8an eden ednostaven primer na /unk)ija {to dava tret stepen od argumentot {to i se prosleduva na /unk)ijata. Fin!.,*e Gs *i#."H in 1,)()r#B)C in )r#BC A )r#B 7: )r#B7)r#BC re ,rn()r#B)C D 8#i* %ain() A &rin 5(I<*I,1,)(=))C D Tipot na /unk)ijata poka8uva kakva vrednost vra1a taa /unk)ija. Dko e tipot na /unk)ijata izostaven avtomarski se zema deka taa e od tip in . Kako {to ve1e be{e spomnato, pravilata za de/inira2e na imi2a na /unk)iite se isti kako i pravilata za de/inira2e na imi2ata na promenlivite. Listata na argumenti e sostavena od promenlivi, konstanti ili izrazi. Listata mo8e da bide prazna ili so pove1e argumenti. Pri de/inira2e na imeto na /unk)ijata se izostavuva znakot H na krajot na naredbata. So toa na preveduva~ot mu se stava na znae2e deka se raboti za de/inira2e na /unk)ija a ne za nejzino povikuva2e. 0natre vo /unk)ijata prvo se deklariraat argumentite na /unk)ijata. Dko nekoj od argumentite ne e deklariran toga{ preveduva~ot go tretira kako argument od tipot in . +aredbta re ,rn mo8e da bide izdadena so ili bez argument. So argument ja dodeluva vrednosta na argumentot na imeto na /unk)ijata i ja ispraka vo programata na mestoto na povikot na /unk)ijata. :ez argument ednostavno ja zavr{uva /unk)ijata i se vraka na mestoto na povikot. +aprimer ako ima potreba vo tekot na izvr{uva2e na programata da bide napravena pauza dodeka ne se pritisne nekoja dopirka na tastaturata toa mo8e da se napravi so slednata ednostavna /unk)ija. Fin!.,*e Gs *i#."H &a,9a() A !"ar !C ! : +e !"ar()C re ,rnC D 8#i* %ain() A

Informatika 2

78

&rin 5(IZa &r#*#.9,8anBe &ri isni ENTERI)C &a,9a()C &rin 5(IPr#*#.9,8a%I)C D +a /unk)ijata &a,9a ne i se dodeluva nikakva vrednost pa pri toa naredbata re ,rn mo8e da bide i izostavena. Ova e primer za /unk)ija {to nitu prima nitu izdava vrednosti tuku samo izvr{uva nekoja dejnost. ,stovremeno toa e i primer za vgnezduva2e na /unk)ii .od /unk)ijata &a,9a se povikuva /unk)ijata +e !"ar). %ain &a,9a +e !"ar

Site /unk)ii vo C imaat ednakva va8nost. %dinstvenata razlika kaj /unk)ijata %ain e taa {to taa se povikuva prva na po~etokot na programata, a posle ima ist tretman kako i drugite /unk)ii. ;a primer na klasi~na /unk)ija, 1e bide dadena kako ilustra)ija, /unk)ija za apsolutna vrednost Fin!.,*e Gs *i#."H a)s(6) in 6C A re ,rn((6 G ')S (6T 6)C D 8#i* %ain() A in a : $', ) : ', ! : ( EEC &rin 5(I<* <* <*I, a)s(a),a)s()),a)s(!))C D Se razbira /unk)ijata a)s mo8e da go ima i sledniot poklasi~en oblik a)s(6) in 6C A i5(6 G ') re ,rn((6)C e.se re ,rn(6)C D

Informatika 2

7"

#5.#. 7advore{ni i stati/ni promenlivi 0o site dosega{ni proimeri za programi bea koristeni samo avtomatski promenlivi. Toa se promenlivi {to nastanuvaat samo vo sklop na /unk)ijata i imaat strogo lokalno zna~enie. 0o sledniov primer Fin!.,*e Gs *i#."H 5,n1!iBa() A in 6C &rin 5(IJre*n#s a na 6 8# 5,n1!iBa e <*I,6)C D 8#i* %ain() A in i, 6C 5#r(i : $, 6 : 'C i G $'C i@@, 6@@) A &rin 5(IJre*n#s a na 6 8# %ain e <*I,6)C 5,n1!iBa()C D D , glavnata i pomo{nata /unk)ija imaat lokalni avtomatski promenlivi so ime 6. Tie se odnesuvaat kako sosema nezavisni promenlivi. Promenlivata 6 vo /unk)ijata 5,n1!iBa nema dodelena vrednost i preveduva~ot 1e go javi toa so opomena koja ne bi trebalo da vlijae na mo8nosta za izvr{uva2e na programata. %dinstven e/ekt e toa {to vrednosta na 6 e nede/inirana i kako takva taa 1e ima nekoja proizvolna vrednost. Koga ima potreba promenlivite da se prosleduvaat na poveke /unk)ii se koristat nadvore{ni promenlivi #5.#.#. 7advore{ni promenlivi Sekoja promenliva {to e de/inirana von /unk)ija e nadvore{na promenliva. :idejki ne mo8e da se de/inira /unk)ija vnatre vo druga /unk)ija site /unk)ii vo C se od nadvore{en vid. Ne bide prika8an primer na nadvore{no de/inirana promenliva i nejzina primena vo /unk)ii Fin!.,*e Gs *i#."H F*e5ine &rin &rin 5(I6 : <*I,6) in 6C 8#i* %ain() A 6 : $C 5,n1$()C &rin C

Informatika 2

8$

5,n1E()C &rin C 5,n1;()C &rin C 5,n14()C &rin C 5,n1=()C &rin C D 5,n1$() A 6 : 6 7 $C D 5,n1E() A 6 : 6 7 EC D 5,n1;() A 6 : 6 7 ;C D 5,n14() A in 6 : QC &rin C D 5,n1=() A 6 : 6 7 =C D "ezultatot na ovaa programa 1e bide sledniov 6:$ 6:E 6:6 6:Q 6:6 6 : ;' +advore{nata promenliva 6 e dostapna i za glavnata /unk)ija %ain i za ostanatite /unk)ii 5,n1$, 5,n1E, 5,n1; i 5,n1=. :idejki 6 e deklarirana von /unk)iite preveduva~ot dostavuva in/orma)ija deka taa 1e bide dostapna za site /unk)ii iako ne e kaj niv deklarirana. ;na~i 6 e dostapno za sekoja /unk)ija bez potreba da se prosleduva na sekoja /unk)ija. Dko nekoja od /unk)iite ja promeni vrednosta na nadvore{nata promenliva toga{ novata vrednost e povtorno dostapna na site /unk)ii. +a ovoj na~in mo8e na /unk)iite da im se prosledat pove1e promenlivi i od niv povratno da se dobijat pove1e od edna vrednost .so re ,rn mo8e da se dobie samo edna vrednost-.

Informatika 2

8#

Spe)ijalen slu~aj e /unk)ijata 5,n14 kade promenlivata 6 e i interno de/inirana. Kaj ovaa /unk)ija internata deklara)ija e lokalna i nema nikakva vreska so nadvore{nata promenliva pa mo8e da se re~e deka nadvore{nata promenliva ne se koristi vo ovaa /unk)ija. 0rednosta na nadvore{nata promenliva ostanuva nepromeneta .petta vrednost 6 : 6+ekoi /unk)ii imaat potreba od nadvore{no de/inirani promenlivi pa nivnata deklara)ija go ima na primer slednov oblik in 6C 5,n16() A ... ... ... D i tie se razbira mo8at da bidat ~uvani vo posebni datoteki. Koga ovie /unk)ii 1e se priklu~at kon nekoi drugi /unk)ii se postignuva nadvore{nata promenliva da va8i od mestoto kade e de/inirana pa se do krajot na datotekata vo koja e de/inirana. Pri toa ovaa nadvore{na promenliva ne va8i za /unk)iite {to se povrzani od drugi datoteki. Dko treba nadvore{nata promenliva da va8i i za ostanatite povrzani /unk)ii vo datotekata toga{ e potrebno taa da se deklarira vo /unk)iite so e6 ern in 6C ,ako dosega bea koristeni samo in promenlivi se podrazbira deka seto izneseno va8i za site vidovi na promenlivi. 6esto po~etni)ite programeri vo C se trudat da deklariraat pove1e navore{ni promenlivi {to se poka8uva kako problemati~no pri izrabotka na pogolemi programi. +advore{nite promenlivi, isto kako i stati~nite promenlivite avtomatski se ini)ijalizirat so nula. Toa ne va8i za avtomatskite i register promenlivite. #5.#.2. 9tati/ni promenlivi Stati~nite promenlivi mo8at da bidat i vnatre{ni i nadvore{ni. Dko promenlivata e de/inirana kako vnatre{na stati~na promenliva promenliva taa se odnesuva kako strogo lokalna promenliva kako i avtomatskite promenlivi. Se razbira so edna razlika. Po zavr{uva2e na /unk)ijata stati~nite promenlivi ja so~uvuvaat vrednosta, pa pri novo povikuva2e na /unk)ijata ja imaat starata vrednost. +advore{na stati~na promenliva e dostapna kako nadvore{na promenliva samo na /unk)iite od sopstvenata datoteka. , /unk)iite mo8at da bidat deklarirani kako nadvore{ni stati~ni /unk)ii {to zna~i deka tie 1e bidat dostapni samo na ostanatite /unk)ii od svojata datoteka pri povrzuva2e na pove1e datoteki. Ova ovozmo8uva da

Informatika 2

82

se kreiraat /unk)ii vo edna datoteka i tie /unk)i da ne se me{aat so istoimeni /unk)ii od druga datoteka. Sleduva primer programa koja koristi stati~ni promenlivi Fin!.,*e Gs *i#."H 5,n1s a () A in a : $C s a i! in s : $C &rin 5(Ia, # : <* s a : <*I,a@@,s@@)C D 8#i* %ain() A in )r#i.#C 5#r()r#i.# : $C)r#i.# G: =C )r#i.#@@) A &rin 5(II era!iBa )r#B <*I,)r#i.#)C 5,n1s a ()C D D Ovaa programa 1e otpe~ati I era!iBa )r#B $ a, # : $ s a : $ I era!iBa )r#B E a, # : $ s a : E I era!iBa )r#B ; a, # : $ s a : ; I era!iBa )r#B 4 a, # : $ s a : 4 I era!iBa )r#B = a, # : $ s a : = Stati~nite promenlivi se pogodni za gradba na generatori na slu~ajni broevi {to e ilustrirano so sledniov primer Fin!.,*e Gs *i#."H s.,!() A s a i! in ran*6 : $C ran*6 : (ran*6 7 E=$0; @ $;34Q) < 6==;6C re ,rn(ran*6)C D 8#i* %ain() A in )r#i.#C 5#r()r#i.# : $C )r#i.# G: =C )r#i.#@@) &rin 5(I<* I,s.,!())C

Informatika 2

83

D E5#C>$ E$$$? 5=>?# E5=C@ >@885 #5.2. 2rosled)va'e poli'a na &)nk ii +a /unk)iite mo8at da im se prosledat pove1e parametri a tie vra1aat samo edna vrednost. Koga ima potreba /unk)iite da vratat pove1e od edna vrednost toa mo8e da bide realizirano preku nadvore{nmi promenlivi ili preku rabota so poka8uva~i. Ne bide prika8ano kako mo8e da se realizira /unk)ija koja im gi zamenuva vrednostite na promenlivite 6 i y. Fin!.,*e Gs *i#."H s%ena(6,y) in 76, 7yC A in &ri8rC &ri8r : 76C 76 : 7yC y : &ri8rC D 8#i* %ain() A in 6 : $', y : E'C &rin 5(I6 : <*, y : <*KnI, 6, y)C s%ena(>6,>y)C &rin 5(I6 : <*, y : <*KnI, 6, y)C D +a /unk)iite mo8e da im se prosledat i )eli poli2a. Koga se povikuva /unk)ija so argument ime na pole, se prosleduva samo adresata na poleto a ne kopija na poleto. !a se potsetime kaj C imeto na poleto bez indeksi e poka8uva~ na prviot element vo poleto. Toa zna~i deka deklara)ijata na parametrite treba da bide deklara)ija na soodvetni poka8uva~i. ,ma tri na~ini za deklarira2e na parametri koi treba da ja primat vrednosta na poka8uva~ na pole. Prviot na~in e deklarira2e kako pole 5,n1!iBa( &#.e) in &#.eW$''XC A &#.eWiX : 'C D

Informatika 2

84

8#i* %ain() A in W$''XC 5,n1!iBa( )C D ,ako parametarot &#.e e deklariran kako pole od >== elementi, preveduva~ot avtomatski go konvertira vo poka8uva~ 0toriot na~in za deklara)ija e preku pole so nespe)i/i)irana golemina. 5,n1!iBa( &#.e) in &#.eWXC A &#.eWiX : 'C D , tretiot na~in e 5,n1!iBa( &#.e) in 7 &#.eC A &#.eWiX : 'C D Ova e dozvoleno bidejki sekoj poka8uva~ mo8e da se indeksira so upotreba na sredni zagradi kako da e pole. 0o su{tina poli2ata i poka8uva~ite se vo mnogu tesna vrska. #5.3. Ve5bi >. ;a ve8ba da se utvrdi {to 1e otpe~ati slednava programa Fin!.,*e Gs *i#."H 18a*ra (6) in 6C A re ,rn(676)C D 8#i* %ain() A in i : EC 4"i.e(i G E=6) &rin 5(I<*KnI,i : 18a*ra (i))C D

Informatika 2

85

4 $6 E=6 #6. -ek)rzija ;a eden objekt se veli deka e rekurziven ako delumno se sodr8i ili e de/iniran so samiot sebesi. "ekurzijata ja ima ne samo vo matematikata tuku i vo sekojdnevniot 8ivot. +a primer ako so televiziska kamera se slika ekranot na koj se prika8uva slikata od kamerata, ili se postavat dve ogledala edno sprotiv drugo i vo niv se gleda svojot lik. Snagata na rekurzijata e vo toa {to mo8e da se de/inira beskrajno mno8estvo elementi so kone~na postapka. "ekurzivniot algoritam mo8e da se sostavi ako objektot .problemot, /unk)ijata ili podato~nata struktura- e veke rekurzivno de/iniran. ;a /unk)ija se veli deka e rekurzivna ako vo tekot na svoeto izveduva2e se povikuva samata sebesi. 0akvata osobina na /unk)ijata se vika u{te i direktna rekurzija. Pokraj direktnata postoi i indirektna rekurzija. 0akov vid na rekurzija se javuva pome9 u dve ili poveke /unk)ii. +ajprostiot slu~aj e koga ima dve /unk)ii pa prvata ja povikuva vtorata, a vtorata ja povikuva prvata. &asno e deka vakvata rekurzija mo8e da bide i poslo8ena so vklu~uva2e na lane) od poveke /unk)ii. "ekurzijata e dosta slo8ena osobina i pri nejzino koriste2e se javuva opasnost od pojava na beskone~ni )iklusi. Pri pi{uva2e na programi so rekurzivni /unk)ii posebno vnimanie treba da se obrne na( uslovite za zavr{uva2e na rekurzivnite povi)i promenite na parametrite i nivnoto pribli8uva2e kon uslovot za zavr{uva2e na rekurzivnite povi)i +aj~esto eksploatiran primer za rekurzija e sekako primerot za presmetuva2e na /aktorieli so rekurzivna /unk)ija. Fin!.,*e Gs *i#."H 5a! (n) in nC A i5(n :: ') re ,rn($)C e.se re ,rn(n 7 5a! (n ( $))C D 8#i* %ain() A in nC &rin 5(IJnesi )r#B 9a &res%e ,8a4e 5a1 #rie.iI)C s!an5(I<*I,>n)C

Informatika 2

86

&rin 5(IFa1 #rie.i e 9a <* se <*I,n,5a! (n))C D Jto se slu~uva pri izvr{uva2eto na ovaa /unk)ija 1e bide objasneto so slednata {ema za vrednost na n : 4.
n = 4 fact(4) = 24

fact(4) 4 * fact(3) n = 3 fact(3) = 6

fact(3) 3 * fact(2) n = 2 fact(2) = 2

fact(2) 2 * fact(1) n = 1 fact(1) = 1

fact(1) 1 * fact(0) n = 0 fact(0) = 1

fact(0) return(1)

Gaktorielite postojat samo za pozitivnite broevi. Dko ima potreba od test za osigurame od negativni broevi toa se izveduva na sledniov na~in, 0graduva2eto na test za nenegativnost vo samata /unk)ija e neelegantno re{enie bidejki toj test e potreben samo na po~etokot pri prviot povik na /unk)ijata, a ako e vgraden vo /unk)ijata 1e se izvr{uva pri sekoj nejzin povik. "e{enieto le8i vo testira2e na nenegativnosta von rekurzivnata /unk)ija. Testira2eto vo glavnata /unk)ija e isto taka neelgantno bidejki pred sekoja primena na /unk)ijata mora da se napi{e kratok programski otse~ok za testira2e na nenegativnost. +ajelegantno re{enie e voveduva2e na posebna /unk)ija koja e sostavena od testot za nenegativnost i koja samata ja povikuva /unk)ijata za rekurzivno presmetnuva2e na /aktorielite. Toa bi mo8elo da se realizira na sledniov na~in.

Informatika 2

87

Fin!.,*e Gs *i#."H &#9N5a! (n) in nC A i5(n G ') A &rin 5(IGres1aR Ne%a 5a1 #rie.i #* ne+a i8ni )r#e8iI)C re ,rn(n)C D e.se re ,rn(5a! (n))C D 5a! (n) in nC A i5(n :: ') re ,rn($)C e.se re ,rn(n 7 5a! (n ( $))C D 8#i* %ain() A in nC &rin 5(IJnesi )r#B 9a &res%e ,8a4e 5a1 #rie.iI)C s!an5(I<*I,>n)C &rin 5(IFa1 #rie.i e 9a <* se <*I,n,&#9N5a! (n))C D Ne bide prika8an u{te eden primer za rekurzivna /unk)ija {to e isto taka ~esto koristen. Toa e primerot za /ibona~ievite broevi. Gormulata po koja se presmetnuvaat ove broevi e slednata )(n) : )(n($) @ )(n(E) Ovaa /unk)ija e vo mnogu sli~na na /unk)ijata za presmetnuva2e na /aktorieli so taa razlika {to ovde ima dvoen rekurziven povik. Fin!.,*e Gs *i#."H 5i)(n) A i5(n :: ' ?? n :: $) re ,rn($)C e.se re ,rn(5i)(n($) @ 5i)(n(E))C D 8#i* %ain() A in nC &rin 5(IJnesi )r#B 9a &res%e ,8a4e 5i)#na!ie8i )r#e8iI)C

Informatika 2

88

s!an5(I<*I,>n)C &rin 5(IFi)#na!ie8 )r#B 9a <* e <*I,n,5i)(n))C D ,nteresna zada~a tuka e da se sostavat nerekurzivni programi za dvata slu~ai i da se izvr{i mere2e na potrebnite vremi2a. , vo dvata slu~ai 1e se dobie deka nerekurzivnite postapki se pobrzi. Se nametnuva pra{a2eto za{to toga{ treba da se koristi rekurzijata. Odgovorot e sledniov. , vo dvata ilustrirani slu~ai ne treba da se koristi rekurzija bidejki postoi ednostavno nerekurzivno re{enie. Ovie dva programa za rekurzivni /unk)ii se samo dobar ilustrativen primer za rekurzivnite pro)esi. Koga postoi ednostavna iterativna postapka podobro e taa da se pri/ati kao algoritam za re{ava2e na problemot. "ekurzijata bi se primenuvala samo koga e mnogu te{ko da se dojde do iterativno re{enie, a postoi ednostavno rekurzivno re{enie. Postojat mnogu vakvi slu~ai i eden od najo~iglednite i najednostavnite e algoritamot za re{ava2e na kulite od Oanoj.

Ne bide objasneto kako se re{ava problemot na Oanojskite stolbovi za slu~aite koga imame >, 5 i @ diska. Dko ima samo eden disk ednostavno se pre/rluva na tretiot stolb. Dko ima dva diska postapkata e slednata >. disk > od D na : 5. disk 5 od D na 0 @. disk > od : na 0 ;a @ diska se potrebni B ~ekori

>. disk > od D na 0 5. disk 5 od D na : @. disk > od 0 na : $. disk @ od D na 0 C. disk > od : na D #. disk 5 od : na 0 B. disk > od D na 0 Klu~ni ~ekori kaj ovoj algoritam se ~ekorite @ i $. Primeneti na slu~ajot so n diskovi tie bi zna~ele( prvo n($ diskovi se prenesuvaat na stolbot :, a potoa diskot se prenesuva na stolbot 0. Sega problemot e namalen za > pa potrebno e n(E diskovi da

Informatika 2

8"

se prenesat na stolbot D za da mo8e diskot n($ da se prenese na stolbot 0. Sega problemot e namalen za 5 i taka natamu se nametnuva rekurzivno re{ava2e na problemot. Sleduva primer programa za re{ava2e na 7anojskite stolbovi. Fin!.,*e Gs *i#."H "an#B(n,&#!,1raB,sre*) in nC !"ar &#!, sre*, 1raBC A i5(n :: $) &rin 5(IO* <! na <!I,&#!, 1raB)C e.se A "an#B(n($, &#!, sre*, 1raB)C &rin 5(IO* <! na <!I, &#!, 1raB)C "an#B(n($, sre*, 1raB, &#!)C D D 8#i* %ain() A in nC !"ar &#! : PaP, 1raB : P!P, sre* : P)PC &rin 5(IJnesi +# )r#B# na *is1#8iI)C s!an5(I<*I,>n)C "an#B(n,&#!, 1raB, sre*)C D ;a ve8ba za podobro da se razbere rekurzijata da se sostavi {ema na rekurzivnite povi)i za slu~aite n : E i n : ;. #6.#. Ve5bi >. !a se sostavi programa za pronao9a2e na najgolemiot zaedni~ki sodr8atel na dva broja Fin!.,*e Gs *i#."H n9s(6,y) A i5(y :: ') re ,rn(6)C e.se re ,rn(n9s(y,6<y))C D 8#i* %ain() A in 6, yC &rin 5(IJnesi *8a )r#BaI)C s!an5(I<*<*I,>6,>y)C &rin 5(INZS 9a <* i <* e <*I, 6, y, n9s(6,y))C D

Informatika 2

"$

5. !a se utvrdi {to 1e otpe~ati slednata programa Fin!.,*e Gs *i#."H 5,n!(%,n) A i5(% :: n) re ,rn(%)C e.se A i5(% G n) re ,rn(5,n!(n,n(%))C e.se re ,rn(5,n!(%(n,n))C D D 8#i* %ain() A in 6, yC &rin 5(IJnesi *8a )r#BaI)C s!an5(I<*<*I,>6,>y)C &rin 5(IZa 6 : <* i y : <* re9,. a # e <*I,6,y,5,n!(6,y))C D @. Slednava programa treba da pretvara broevi od dekadniot broen sistem vo broen sistem so proizvolna osnova Fin!.,*e Gs *i#."H 1#n8(n,)a9a) A i5(n H: )a9a) 1#n8(n2)a9a, )a9a)C &rin 5(I<* I, n < )a9a)C D 8#i* %ain() A in n, )a9aC &rin 5(IJnesi *e1a*en )r#B i )a9a na )r#en sis e%I)C s!an5(I<*<*I, >n, >)a9a)C 1#n8(n,)a9a)C D 0o programata e namerno napravena gre{ka. !a se utvrdi gre{kata i koregira programata. $. Stepenuva2eto na broevi mo8e da se izvede so rekurzivna programa. Sleduva primer programa za rekurzivno stepenuva2e Fin!.,*e Gs *i#."H 5.#a s e&en(a,n)

Informatika 2

"#

5.#a aC A i5(n :: $) re ,rn(a)C e.se re ,rn(a7s e&en(a,n($))C D 8#i* %ain() A 5.#a a, s e&en()C in nC &rin 5(IJnesi )r#B i s e&enI)C s!an5(I<5<*I,>a,>n)C &rin 5(I <* ( i s e&en na <5 e <5I, n, a, s e&en(a,n))C D #7. %inami/ko dodel)va'e na memorija ,ma mnogu programski situa)ii kaj koi e nepoznato kolku golema memorija 1e bide potrebna za nivna rabota. Od druga strana ~esta e potrebata programite da mo8at da se izvr{uvaat vo {to pomala memorija. ;goden primer e programata za obrabotka na tekst ili kako {to popularno se vika tekst pro)esor. Kaj tekst pro)esorite ne e prepora~livo da se rezervira memorija za stati~ko pole bidejki globalnata memoriskata za/atenost se de/inira za vreme na preveduva2eto na programata i ne mo8e da se menuva vo tekot na izveduva2eto. "e{enie na vakvite problemi e dinami~ko dodeluva2e na memorija na poli2ata. !inami~kite poli2a ja upotrebuvaat slobodnata memorija i do niv se dostapuva preku poka8uva~i na soodvetni memoriski Eloka)ii .poka8uva~ite i poli2ata se mnogu bliski-. Kaj programskiot jazik C slobodnata memorija mo8e dinami~ki da se dodeluva i osloboduva so bibliote~nite /unk)ii %a..#! i 5ree. So %a..#! se dodeluva memorija i se dobiva poka8uva~ od tipot !"ar na po~etokot na taa memorija a so 5ree se osloboduva taa memorija za drugi nameni. Op{tata /orma na ovie dve naredbi e slednava !"ar 7&C .. .. .. & : %a..#!()r#BNnaN)aB #8i)C .. .. .. 5ree(&)C Tuka parametarot )r#BNnaN)aB #8i e brojot na bajtovi memorija koja se bara za dodeluva2e. Dko nema dovolno memorija %a..#! vra1a vrednost NLLL. Pri rabota so dinami~ko dodeluva2e na memorija va8no e /unk)ijata 5ree da bide upotrebena so vistinskiot i pret7odno ini)ijaliziran poka8uva~. 0o sprotiven slu~aj mo8e da dojde do kra7 na programata.

Informatika 2

"2

"abotata na /unk)iite za dinami~ko dodeluva2e na memorija 1e bide ilustrirana so slednava programa. So programata se vnesuva niza od zna)i od tastaturata vo alo)irana memorija. Fin!.,*e Gs *i#."H 8#i* %ain() A !"ar 7sC in C s : %a..#!(3')C i5(Rs) A &rin (I -aranBe # 9a %e%#riBa ne e #s 8aren#I)C e6i ($)C D +e s(s)C 5#r( : s r.en(s) ( $C H: 'C (() &, !"ar(sW X)C 5ree(s)C D Promenlivata s e poka8uva~ na dodelenata memorija i mo8e da se zabele8i deka s se testira pred prvata upotreba za da se osigura deka %a..#! vratil validen poka8uva~. Ova e neop7odno za da ne dojde do nesakana upotreba na NLLL poka8uva~ .vo takvite slu~ai skoro sekoga{ sistemot kra7ira-. Se razbira se koristat i pove1edimenzionalni dinami~ki poli2a. !o niv se pristapuva obi~no so upotreba na /unk)ija. Gunk)ijata se koristi za da na nekoj na~in se spe)i/i)iraat to~nite dimenzii. Toa 1e bide ilustrirano preku sledniov primer. Fin!.,*e Gs *i#."H a).e(&) in &W4XW$$XC A in i, BC 5#r(B : $C B G $$C B@@) 5#r(i : $C i G =C i@@) &WiXWBX : s e&en(B,i)C D s"#4(&) in &W4XW$$XC A in i, BC &rin 5(I<$'s <$'s <$'s <$'sKnI,INI,INVEI,INV;I,INV4I)C 5#r(B:$CBG$$CB@@) A 5#r(B:$CBG=CB@@) &rin 5(I<$'* I, &WiXWBX)C &rin 5(IKnI)C

Informatika 2

"3

D D s e&en(a,)) in a,)C A in : $C 5#r(C)C)(() : 7aC re ,rn( )C D 8#i* %ain() A in 7&C & : (in 7)%a..#!(4'7si9e#5(in ))C i5(R&) A &rin 5(I-aranBe # 9a %e%#riBa ne e #s 8aren#I)C e6i ($)C D a).e(&)C s"#4(&)C D Tuka me9u drugoto mo8e da se vidi kako poka8uva~ot se postavuva da poka8uva na sakana memoriska loka)ija. So op{tiot oblik &#1 : (8i*NnaN&#*a #!i 7)%e%#ris1aN.#1a!iBaC se dobiva sakaniot poka8uva~. Konkreten primer &#1 : (!"ar 7)0E'3Q6LC !"ar 7&#16 : (!"ar 7)0E'3Q6L Ovaa adresa e po~etokot na video memorijata kaj ,: #8. 2oka5)va/i na &)nk ii Prili~no zbunuva~ko no sna8no sredstvo na C se poka8uva~ite na /unk)ii. ,ako /unk)ijata ne e promenliva taa sepak ima svoja /izi~ka loka)ija vo memorijata na koja mo8e da se dodeli poka8uva~. Ddresata koja se dodeluva na poka8uva~ot e vlezna to~ka na /unk)ijata. Poka8uva~ot na /unk)ija mo8e da se zeme namesto imeto na /unk)ijata. Postoe2eto na poka8uva~ na /unk)ija dozvoluva i /unk)ijata da bide prosledena na druga /unk)ija kako argument. ;a da se razbere kako rabotat /unk)iskite poka8uva~i potrebno e da se znaat nekoi poedinosti okolu toa kako se preveduvaat i povikuvaat /unk)iite vo C. Kako prvo otkako 1e se prevede /unk)ijata, izvorniot kod se trans/ormira vo objekt kod i se vospostavuva vlezna to~ka. Koga /unk)ijata se povikuva za vreme na izvr{uva2e na programata, se generira !a.. /unk)ija vo ma{inski kod na adresata na vleznata to~ka. E ovite personalni kompjuteri.

Informatika 2

"4

;na~i poka8uva~ot na /unk)ija vo su{tina ja sodr8i adresata na vleznata to~ka vo /unk)ijata. Ddresa na /unk)ijata se dobiva so imeto na /unk)ijata bez zagradi ili argumenti .sli~no na adresa na pole-. Sleduva primer programa Fin!.,*e Gs *i#."H 8#i* %ain() A in s r!%&()C !"ar s$W3'X, sEW3'XC !"ar 7&C & : (!"ar 7)s r!%&C +e s(s$)C +e s(sE)C !"e!1(s$, sE, &)C D !"e!1(a, ), !%&) !"ar 7a, 7)C in (7!%&) ()C A &rin 5(I Tes 9a e*na18#s KnI)C i5(R(7!%&) (a,))) &rin 5(I e*na18i I)C e.se &rin 5(I ne se e*na18i)C D !eklara)ijata na s r!%& vo %ain e napravena od dve pri~ini. Kako prvo programata mora da znae koj vid na vrednost taa vra1a . in vo ovoj slu~aj-. , kako vtoro preveduva~ot treba da go prepoznava imeto na vrednosta kako /unk)ija. 0o C nema direkten na~in za deklarira2e na promenliva kako poka8uva~ na /unk)ija. +amesto toa, kako {to e napraveno vo gornata programa, deklariran e poka8uva~ na !"ar. Koga se povikuva /unk)ijata !"e!1 i se prosleduvat dva poka8uva~i na !"ar poli2a i eden poka8uva~ na !"ar promenliva. 0natre vo /unk)ijata !"e!1 argumentite se deklarirani kako poka8uva~i na !"ar i /unk)iski poka8uva~. :ez zagradi okolu poka8uva~ot na /unk)ijata preveduva~ot bi bil zbunet i pri negova deklara)ija vo /unk)ijata i pri negovo koriste2e. So koristeniot primer ne se sogleduva korisnosta na upotrebata na poka8uva~i na /unk)ii. Tie naj~esto se koristat za prosleduva2e na proizvolni /unk)ii ili za /ormira2e pole od /unk)ii so {to na primer bi se odbegnale golemi s4i !" naredbi. #". 9tr)kt)ri i )nii #".#. 9tr)kt)ri

Informatika 2

"5

*spe{nosta na programata zavisi od pogodnata prezenta)ija na podato)ite. Pri programira2eto ~esto se pojavuva potreba za ~uva2e na grupi na podato)i od razli~ni tipovi na edno mesto. +a primer podato)i za imeto i platata kade imeto e niza os znakovi a platata broj~ena vrednost. 0akvite podato)i ne mo8e da se smestat vo isto pole i vo takvi slu~ai se upotrebuva eden spe)ijalen vid na organiza)ija na podato)ite {to se vika strukturi. Strukturata obedinuva razli~ni tipovi podato)i i gi organizira vo edinstvena )elina. Obi~no strukturite gi koristime za grupira2e na logi~ki povrzani podato)i od razli~ni ili isti vidovi. +a nekoj na~in strukturite se generalizirana /orma na poli2ata. Tie mo8at da sodr8at bilo koja kombina)ija na standardni vidovi podato)i. +a sekoja struktura i se dodeluva ime i se opi{uva na~inot na koj se organizirani promenlivite vo nea. Op{tiot oblik za de/inira2e na strukturi e sledniov s r,! i%eNna Ns r,1 ,ra a A *e5ini!ii na &r#%en.i8i eC ... D .is aNnaN&r#%en.i8iC pri {to imeto na strukturata mo8e i da se izostavi. ,meto na strukturata se koristi vo slu~aite koga ima potreba pokasno da se deklariraat dodatni strukturi od toj vid. +a primer so slednata struktura s r,! &i #%e! A !"ar i%eW;'XC !"ar in*e1sW$'XC in #!eniW=XC DC se opi{uvaat razni podato)i za pitome)ot. Tie podato)i pretstavuvaat edna )elina i se vodat pod edno ime. So naredbata s r,! &i #%e! naB*#)arC se kreira promenliva za struktura naB*#)ar so oblik de/iniran pod imeto &i #%e! pret7odno vo programata. ;na~i klu~niot zbor s r,! se koristi i za de/inira2e na strukturata i za deklarira2e promenlivi od vidot strukturi. Strukturata mo8e da se ini)ijalizira na razni na~ini. +a primer so s r,! &i #%e! naB*#)ar : AP_asP, P6230P, 6, 6, 6, 6, 6DC

Informatika 2

"6

se deklarira i ini)ijalizira strukturata naB*#)ar. Koga spored de/iniranata struktura ima samo edna ili nekolku promenlivi deklara)ijata i ini)ijaliza)ijata mo8at da se izvr{at na sledniot na~in s r,! A !"ar i%eW;'XC !"ar in*e1sW$'XC in #!eniW=XC D naB*#)ar, naB,)a8 : AP_asP, P6230P, 6, 6, 6, 6, 6DC Priod kon ~len na strukturata se postignuva so imeto na promenlivata na strukturata i imeto na ~lenot na strukturata razdvoeni so operatorot M.M Taka na primer so slednava naredba &rin 5(I<sI, naB*#)ar.in*e1s)C se ispi{uva {i/rata na indeksot. !ozvoleno e i /ormira2e na poli2a od strukturi na sledniov na~in s r,! &i #%e! &r8aN+#*inaW=''XC pri {to sekoj element na poleto &r8aN+#*ina e struktura od tipot &i #%e!. Tuka do poedini ~lenovi na strukturite od poleto se dostapuva na sledniov na~in &r8aN+#*inaWiX.in*e6 tao e indeksot na i E tiot pitome) od poleto &r8aN+#*ina. Spored to sledniov izraz &r8aN+#*inaWiX.i%eW'X ja dava prvata bukva od imeto na i E tiot pitome) od poleto &r8aN+#*ina. 6esto se javuva potreba ~lenovi na edna struktura da bidat drugi strukturi. Toa obi~no se vika vgnezduva2e na strukturi. Ne bide prika8an eden primer za takva struktura s r,! %a1N&i #%e! A !"ar &#.C !"ar a*resaWE'XC s r,! &i #%e!C in &.a aC DC Kaj ovaa struktura do ~len na strukturata {to e ~len na vnatre{nata struktura se doa9a povtorno so koriste2e na operatorot M.M. Dko e dadena slednava deklara)ija

Informatika 2

"7

s r,! %a1N&i #%e! a&s#.8en iW$''XC i neka e potrebna prvata bukva od imeto na i E tiot pitome). Toa mo8e da se dobie so a&s#.8en iWiX.&i #%e!.i%eW'X Postojat nekolku na~ini za prosleduva2e na vrednostite na strukturite na /unk)iite. %den od niv e nadvore{no de/inira2e na strukturite odnosno nivno deklarira2e kako eksterni promenlivi, a drug na~in e prosleduva2e adresa od strukturata na /unk)ijata za {to 1e se zboruva pokasno. %dinstveni operatori {to se dozvoleni so strukturite se operatorot za dodeluva2e M S M i si9e#5. Poka8uva~ na struktura se de/inira so s r,! &i #%e! 7&#1 {to e sosema ista sintaksa kako i za dosega{nite poka8uva~i. Spored toa ini)ijaliza)ijata na poka8uva~ot mo8e da se postigne so &#1 : >naB*#)ar ili so &#1 : >&r8aN+#*inaW'X ;na~i ako e dadena slednava deklara)ija s r,! a.),% A !"ar &.#!aNi%eWE'X, &.#!aN&ea!WE'XC in +#*inaC DC s r,! a.),% 7&#1Na, 7&#1N), 6, y, 9C toga{ so nea se de/inirani dva poka8uva~i na strukturi i tri promenlivi na strukturi od vidot a.),%, a ini)ijaliza)ijata na poka8uva~ite se izveduva na sledniov na~in &#1Na : >6C !ostap do ~len na strukturata so pomo{ na poka8uva~ se izvr{uva na sledniov na~in i%eNna N&#1a9,8a! (H i%eNnaN!.en taka so &#1Na (H &.#!aNi%e

Informatika 2

"8

se poka8uva na imeto na plo~ata, a so &#1Na (H &.#!aN&ea! : &#1N) (H &.#!aN&ea! sodr8inata na eden ~len e dodelena na drug ~len. So poka8uva~i na strukturi se rakuva polesno otkolku so samite strukturi. +a primer ne e vozmo8no da se dodelat vrednostite od edna struktura na druga so edini~na naredba tuku samo ~len po ~len. +o ednostavno e da se ini)ijalizira pove1e od eden poka8uva~ na ista struktura. Operatorite . i ET mo8at da bidat koristeni na pove1e na~ini. +a primer 6.&.#!aNi%e e isto so (>6) (H &.#!aNi%e odnosno &#1Na (H &.#!aN&ea! e isto so (7&#1Na).&.#!aN&ea! i 1#neUn# #&era #r# (H i%a is &ri#ri e 1a1# %a.i e i sre*ni e 9a+ra*i i se i98rA,8a #* .e8# 1#n *esn# (1#+a i%a &#8eDe #* e*en #&era #r) #".2. :nii *niite se sredstvo za smestuva2e na vrednosti od razli~en vid vo ist memoriski prostor. Tie dozvoluvaat kreira2e na eden vid pole so konstantna golemina no so osobina vo nego da mo8at da se smestuvaat vrednosti od razli~ni vidovi. *niite se de/iniraat sli~no kako i strukturite. Se de/inira unijata i se deklariraat promenlivite na unijata. !e/ini)ijata i deklara)ijata mo8at da se izvedat vo eden ~ekor ili promenlivata na unijata se deklarira pokasno so pomo{ na imeto na de/iniranata unija i klu~niot zbor ,ni#n. %ve nekolku primeri ,ni#n *a # e1a A in )r#BC *#,).e &.a aC !"ar ),18aC DC za vaka de/iniranata unija mo8at da se deklariraat promenlivi unii i poka8uva~i na unii so ,ni#n *a # e1a &r8aC ,ni#n *a # e1a ra)# naW$''XC ,ni#n *a # e1a 7&#1$C

Informatika 2

""

Preveduva~ot obezbeduva dovolno prostor za ~uva2e na najgolemata promenliva vo de/ini)ijata na unijata {to vo ovoj slu~aj e &.a a so 8 bajtovi. Prema toa so prvata deklara)ija 1e bide obezbedeno 8 bajtovi za promenlivata &r8a, a kaj vtorata deklara)ija 1e se obezbedi prostor za >== pati 8 bajtovi. 0rednosti na ~lenovite na unijata se dodeluvaat sli~no kako i za strukturite so toa {to vo isto vreme vo memorijata mo8e da bide de/iniran samo eden ~len. So &r8a.)r#B : $=C vo unijata &r8a e smestena vrednosta >C vo 5 ili $ bajtovi zavisno od de/ini)ijata na in so toa {to ostanatite bajtovi ostanuvaat nepromeneti. Dko posle toa sleduva dodeluva2eto &r8a.&.a a : =.6C preku vrednosta >C od promenlivata na unijata &r8a se smestuva vrednosta C.# i toa vo prostor so dol8ina od 8 bajtovi. Dko posle toa se pro~ita znak od unijata nema da se pojavi gre{ka tuku nizata bitovi od prviot bajt 1e bide tretirana kako znak. #".3. 2oli'a od bitovi Poli2ata od bitovi se strukturi koi se sostaveni od in ili ,nsi+ne* in promenlivi. Posle deklara)ijata na sekoja promenliva sleduva i dol8inata na promenlivata vo bitovi. %ve eden primer s r,! )i #8i A ,nsi+ne* ni T 4C ,nsi+ne* sr T EC ,nsi+ne* 8i T 6C D es C !e/inirana e struktura so ime )i #8i koja se sostoi od tri ~lenovi. 6lenovite na strukturata se od vidot ,nsi+ne* i so dol8ini $,5 i # bitovi. !eklara)ijata mo8e da bide dadena i na sledniov na~in. s r,! )i #8i A ,nsi+ne* ni T4, sr T E, 8i T 6C D es C 6len na strukturata pole na bitovi ne mo8e da bide pogolem od goleminata na in promenliva. Po potreba mo8at da se /orsiraat praznini vo nizata na strukturata ili da se skokne na prostorot na slednata in loka)ija. +aprimer so strukturata

Informatika 2

#$$

s r,! sirina A ,nsi+ne* 6aT $, 6)T E, T4, 6!T E, T', 6*T 4C DC se dodeluvaat prvite tri bitovi za ~lenovite 6a i 6), pa ima $ bitna praznina me9u ~lenovite 6) i 6!, a so (= se dobiva da delot na 6* se pre/rla vo narednata in loka)ija. +e e mo8no da se pristapi do adresa na ~len od pole na bitovi. Poli2ata od bitovi ne mo8at da se deklariraat kako pole. +eto~na e slednava de/ini)ija s r,! A ,nsi+ne* 9W$''XT $C DC a dozvoleno e s r,! A ,nsi+ne* 6aT $, 6)T E, T4, 6!T E, T', 6*T 4C D&#.eWE'XC Ovoj vid na promenlivi se koristi za pakuva2e na podato)i pomali od eden bajt so {to se dobiva pokompaktna /orma i se {tedi na memorija. +aj~estata primena na ovoj vid na promenlivi e za upravuva2e so registri na vlezno E izlezni uredi. !odeluva2eto na vrednosti na ~lenovite na poli2ata od bitovi e kako i na bilo koj drug ~len na drugi strukturi. es .ni : 'C es .sr : ;C es .8i : 6; So ~lenovite na strukturite se manipulira kako so bilo koi drugi promenlivi. #".4. Ve5bi >. "abotata so unii 1e bide ilustrirana so slednava programa. Fin!.,*e Gs *i#."H 8#i* %ain() A ,ni#n A in )r#BC !"ar ),18aC D &r8aC

Informatika 2

#$#

s!an5(I<*I,>&r8a)C &rin 5(IASCII 8re*n#s 9a ),18a a <! e <*I,&r8a.),18a,&r8a.)r#B)C D 5. Primer so prosleduva2e struktura na /unk)ija s r,! 8re%e A in sa C in %in, aC in se1,n*aC DC 8#i* %ain() A in iC s r,! 8re%e !as#8ni1C !as#8ni1.sa : 'C !as#8ni1.%in, a : 'C !as#8ni1. se1,n*a : 'C *# A 5#r(i : ' C i G =''C i@@)C &r#%eni(>!as#8ni1)C &ri1a9i(>!as#8ni1)C D 4"i.e($)C D &r#%eni( ) s r,! 8re%e 7 C A (7 ).se1,n*a@@C i5((7 ).se1,n*a :: 6') A (7 ).se1,n*a : 'C (7 ).%in, a@@C D i5((7 ).%in, a :: 6') A (7 ).%in, a : 'C (7 ).sa @@C D i5((7 ).sa :: E4) (7 ).sa : 'C D &ri1a9i( ) s r,! 8re%e 7 C A &rin 5(I<* T I,(7 ).sa )C &rin 5(I<* T I,(7 ).%in, a)C

Informatika 2

#$2

&rin 5(I<* T I,(7 ).se1,n*a)C D @. Jto 1e otpe~ati slednata programa Fin!.,*e Gs *i#."H s r,! s an A 5.#a &#8rsinaC in s#)iC in s&ra C !"ar 7a*resaC DC 8#i* %ain() A s a i! s r,! s an %#B : A0;.E,;,E,IPar i9ans1a $IDC s r,! s an 7n#8C n#8 : >%#BC &rin 5(I<* <*I,%#B.s#)i, n#8 (H s&ra )C &rin 5(I<sI, %#B.a*resa)C &rin 5(I<! <!I,n#8 (H a*resaW;X, %#B.a*resaW4X)C D pri toa kako potsetuva2e n#8 (H s&ra e isto so (7n#8).s&ra i n#8 (H a*resaW;X e isto so (7n#8).a*resaW;X .zagradite se potrebni bidejki operatorot M.M ima pogolem prioritet od operatorot MFM. Programata 1e otpe~ati ;E Par i9ans1a $ i $. Jto 1e otpe~ati slednava programa Fin!.,*e Gs *i#."H F*e5ine &rin (5,6,y) &rin 5(I 6 : <5 y : <5 I,6,y) 8#i* %ain() A s a i! s r,! s$ A !"ar !W4X, 7sC

Informatika 2

#$3

D s$ : A Ia)!I, I*e5IDC s a i! s r,! sE A !"ar 7!&C s r,! s$ ss$C D sE : A I+"iI, A IB1.I, I%n#I D DC &rin (!, s$.!W'X, 7s$.s)C &rin (s, s$.!, s$.s)C &rin (s, sE.!&, sE.ss$.s)C &rin (s, @@sE.!&, @@sE.ss$.s)C D Programata 1e otpe~ati s$.!W'X : a 7s$.s : * s$.! : a)! s$.s : *e5 sE.!& : +"i sE.ss$.s : %n# @@sE.!& : "i @@sE.ss$.s : n# C. Jto 1e otpe~ati slednava programa Fin!.,*e Gs *i#."H F*e5ine &r(5,6) &rin 5(I 6 : <5KnI,6) F*e5ine &rin (5,6,y,9) &rin 5(I 6 : <5 , y : <5, 9 : <5 KnI,6,y,9) s r,! s$ A !"ar 7sC in iC s r,! s$ 7s$&C DC 8#i* %ain() A s a i! s r,! s$ aWX : A A Ia)!*I, $, a @ $ D, A Ie5+"I, E, a @ E D, A IiB1.I, ;, a D DC s r,! s$ 7& : aC in iC &rin (s, aW'X.s, & (H s, aWEX.s$& (H s)C 5#r(i : 'C i G EC i@@) A &r(*, ((aWiX.i)C &r(!, @@aWiX.sW;X)C D &rin (s, @@(& (H s), aW(@@&) (H iX.s, aW(((& (H s$& (H i)X.s)C D

Informatika 2

#$4

Programata 1e otpe~ati aW'X.s : a)!*, & (H s : a)!*, aWEX.s$& (H s : a)!* ((aWiX.i : ' @@aWiX.sW;X : e ((aWiX.i : $ @@aWiX.sW;X : i @@(& (H s) : )!e aW(@@&) (H iX.s : e5+i aW(((& (H s$& (H i)X.s : iB1. #. Jto 1e otpe~ati slednata programa Fin!.,*e Gs *i#."H F*e5ine &rin (5,6,y,9) &rin 5(I 6 : <5, y : <5, 9 : <5 I,6,y,9) s r,! s$ A !"ar 7sC in iC s r,! s$ 7s$&C DC s%ena(&$,&E) s r,! s$ 7&$, 7&EC A !"ar 7&r8rC &r8r : &$ (H sC &$ (H s : &E (H sC &E (H s : &r8rC D 8#i* %ain() A s a i! s r,! s$ aWX : A A Ia)!*I, $, a @ $ D, A Ie5+"I, E, a @ E D, A IiB1.I, ;, a D DC s r,! s$ 7&W;XC in iC 5#r(i : 'C i G ;C i@@) &WiX : aWiX.s$&C &rin (s, &W'X (H s, (7&) (H s, (77&).s)C s%ena(7&,a)C &rin (s, &W'X (H s, (7&) (H s, (7&) (H s$& (H s)C s%ena(&W'X, &W'X (H s$&)C &rin (s, &W'X (H s, (7@@&W'X).s, @@(7@@(7&) (H s$&).s)C D

Informatika 2

#$5

Programata 1e otpe~ati &W'X (H s : e5+", (7&) (H s : e5+", (77&).s : e5+" &W'X (H s : a)!*, (7&) (H s : a)!*, (7&) (H s$& (H s : iB1. &W'X (H s : a)!*, (7@@&W'X).s : a)!*, @@(7@@(7&) (H s$&).s : B1. B. So slednava primer programa 1e se proveri {to se slu~uva koga na element na strukturata pole od bitovi se dodeli vrednost pogolema od najgolemata mo8na. Fin!.,*e Gs *i#."H s r,! A ,nsi+ne* a'T 4, a$T 4, aET 4, a;T 4C D&#.eW=XC 8#i* %ain() A in i, 8rC 8r : 'C 5#r(i : 'C i G =C i@@) A &#.eWiX.a' : 8r@@C &#.eWiX.a$ : 8r@@C &#.eWiX.aE : 8r@@C &#.eWiX.a; : 8r@@C D 5#r(i : '. i G =C i@@) &rin 5(I<E* <E* <E* <E*KnI.&#.eWiX.a', &#.eWiX.a$, &#.eWiX.aE, &#.eWiX.a;)C D 8. !a se prou~i {to raboti slednava programa Fin!.,*e Gs *i#."H s r,! )i A ,nsi+ne* )'T$,)$T$,)ET$,);T$,)4T$,)=T$,)6T$,)0T$C D7&&)C 8#i* %ain() A in s,%, &arC s a i! !"ar ),18iWX : Ia)!*e5+IC !"ar 7&C & : ),18iC 4"i.e(7& R: PK'P) A &&) : (s r,! )i 7) &C s,% : &&)(H)'@&&)(H)$@&&)(H)E@&&)(H);@&&)(H)4@H&&)(H )=@&&)(H)6C &ar : s,%<EC &rin 5(I<! I,7&)C

Informatika 2

#$6

&rin 5(I<*<*<*<*<*<*<*<*KnI,&ar, &&)(H)6,&&)(H)=,&&)(H)4, &&)(H);,&&)(H)E,&&)(H)$,&&)(H)')C &@@C D D

2$. -abota so datoteki Site programski jazi)i od poop{t karakter imaat mo8nosti za komunika)ii so podato)i na disk. Komunika)iite so diskot zavisat od operativniot sitem. C e razvieno pod LNIM pa vlezno izleznite rutini za operira2e so diskovi vo C se sli~ni ili isti na onie razvieni za LNIM. Koga C raboti pod drug operativen sistem toga{ obi~no ovie /unk)ii se emuliraat. 0o sklop na bibliotekata na /unk)ii s *i#." postoi de/inirana struktura za opis na datoteki. ,meto na taa struktura e FILE. 0o ovaa struktura vklu~eni se in/orma)ii za imeto na datotekata, po~etnata loka)ija i brojot na zna)i vo ba/erot, na~inot na rabota i drugo. 0o su{tina de/inirano e edno ednodimenzionalno pole od strukturi so dimenzija opredelena so maksimalniot broj datoteki {to preveduva~ot dozvoluva da bidat otvoreni. %ve kako taa struktura izgleda kaj eden C preveduva~ot. s r,! Ni#),5 A !"ar 7N& rC in N! nC !"ar 7N)aseC !"ar N5.a+C !"a N5i.eC DC

27 &#1a9,8a! na )a5er# 72 27 )r#Ba! na )aB #8i 72 27 #sn#8na a*resa na I2O )a5er 72 27 1#n r#.en 5.a+ 72 27 )r#B na *a # e1a 72

F*e5ine FILE s r,! Ni#),5 Ovoj primer e zadaden samo kako ilustra)ija na toa kako strukturata e organizirana. Pri toa detalite ne se va8ni. !atotekata treba da se otvori pred da se otpo~ne bilo kakva rabota so nea i na operativniot sistem da se dostavat podato)i potrebni za rabota na datotekata. Ovie podato)i se zemaat od pogore spomenatata struktura a pro)esot na otvara2e na datoteka se izvr{uva so pomo{ na /unk)ijata 5#&en koja gi izvr{uva slednite aktivnosti( na strukturata FILE i gi dodeluva potrebnite in/orma)ii potrebni za komunika)ija na programite so operativniot sistem vo promenlivata poka8uva~ ja smestuva vrednosta na loka)ijata vo koja se nao9aat podato)ite za strukturata

Informatika 2

#$7

!eklarira2eto poka8uva~i za datotekite se vr{i so FILE 7&#15$, 7&#15E, ... , 7&#15nC {to zna~i deka za sekoja datoteka {to se otvora treba po eden poka8uva~ na nejzinata struktura. ;a otvara2e na datotekata potrebni se in/orma)ii za( ( ( ( imeto na datotekata namenata za koja 1e se koristi datotekata i mestoto kade se nao9aat in/orma)iite za datotekata

Povikuva2e na /unk)ijata 5#&en se vr{i na sledniot na~in 5$ : 5#&en(i%e na *a # e1a a, na!in na ra)# a)C imeto na datotekata e ona ime pod koe datotekata e so~uvana na disk a na~inot na rabota vo najgeneralniot sl~aj mo8e da bide r 4 a r@ ~ita2e od datotekata pi{uva2e vo datotekata dodava2e podato)i vo izlezna datoteka ~ita2e i pi{uva2e

Dko se otvori datoteka za zapi{uva2e ili dodava2e a takva datoteka ne postoi na diskot toga{ avtomatski 1e se kreira nova datoteka. Dko se otvori datoteka za zapi{uva{e a taa postoi, starata datoteka se bri{e i se otvora nova. ;a ~ita2e i pi{uva2e vo datotekata se koristat spe)ijalni vlezno izlezni /unk)ii +e ! i &, ! a po zavr{enata rabota datotekata se zatvora so /unk)ijata 5!.#se(i%e na &#1a9,8a!# ) Ne bide prika8ana edna primer programa Fin!.,*e Gs *i#."H 8#i* %ain() A FILE 7inC in !C i5(( in : 5#&en(I es I,IrI)) R: NLLL) A 4"i.e(( ! : +e !(in)) R: EOF) &, !(!,s *#, )C 5!.#se(in)C D e.se &rin 5(Ine &#s #i a18a *a # e1aI)C

Informatika 2

#$8

D Gunk)ijata 5#&en kako rezultat dava poka8uva~ na datoteka pa taa treba da se deklarira kako FILE poka8uva~ /unk)ija {to e napraveno vo s *i#." so FILE 75#&en()C Dko 5#&en ne mo8e da ja otvori datotekata vra1a vrednost NLLL. ;a razlika od ovaa /unk)ija, /unk)ijata 5!.#se vra1a = ako zatvora2eto e uspe{no i E> ako e neuspe{no. , dvete /unk)ii rabotat so takanare~eni ba/erirani teksualni datoteki. Toa zna~i deka site vlezovi i izlezi se smestuvaat vo privremena memorija nare~ena ba/er koja se prenesuva na diskot vo blokovi. e9u drugoto /unk)ijata na 5!.#se e i da gi smesti na disk zaostanatite blokovi vo ba/erot. Gunk)iite &, ! i +e ! rabotat sli~no kako i +e !"ar i &, !"ar pa za niv nema da bide ka8ano ni{to pove1e. ,ma u{te vlezno izlezni /unk)ii za manipulira2e so podato)i vo datoteki. Ne bidat objasneti u{te /unk)iite 5&rin 5, 5s!an5, 5+e s i 5&, s koi se sli~ni na ve1e koristenite /unk)ii &rin 5, s!an5, +e s i &, s so taa razlika {to kaj niv treba da se dodade i poka8uva~ot na datotekata. Osnovnite /ormi na upotreba na ovie /unk)ii se sledniva 5&rin 5(&#1N*a ,I 1#n r#.na ni9aI, .is a na &r#%en.i8i)C 5s!an5(&#1N*a ,I 1#n r#.na ni9aI, .is a na &#1a9,8a!i na &r#%en.i8i)C 5+e s(&#1NnaNni9a, %a6N*#.9, &#1N*a )C 5&, s(&#1NnaNni9a, &#1N*a )C Ne bidat povtoreni nekoi poimi. Kako prvo poimot poka8uva~ na datoteka. Toa e poka8uva~ na struktura vo koja se de/inirani razni ne{ta za datotekata .kako {to se na primer ime, status i momentalna sostojba-. 0o su{tina poka8uva~ot na datoteka ja identi/i)ira datotekata i gi upatuva /unk)iite za rabota so datoteki kade da gi usmeruvaat podato)ite. Spored standardot za C minimum /unk)ii za operira2e so datoteki se slednive( F#&en() F!.#se() P, !() Ge !() Fsee1() F&rin 5() 5s!an5() 5e#5() 5err#r() re4in*() gi otvara datotekite gi zatvara datotekite zapi{uva znak vo datoteka ~ita znak od datoteka bara spe)i/i)iran bajt vo datoteka pi{uva vo datoteka isto kako na terminal ~ita datoteka isto kako od tastatura dava vrednost vistina ako e dostignat krajot na datotekata dava vistina ako se pojavila gre{ka postavuva sekven)ijalna datoteka na po~etok

Informatika 2

#$"

,nteresni /unk)ii tuka se &, ! i - koi se mnogu sli~ni na /unk)iite &, !"ar i +e !"ar. 0o su{tina &, !"ar i +e !"ar se samo spe)ijalen slu~aj na &, ! i +e !. 0o s *i#." voobi~aeno opstojuvaat slednive dve de/ini)ii F*e5ine +e !"ar() +e !(s *in) F*e5ine &, !"ar(!) &, !((!), s *#, ) kade s *in i s *#, se standardnite vlezna i izlezna edini)a. ;a ~ita2e znak od datoteka se upotrebuva 5+e !(&*)C kade &* e poka8uva~ na otvorena datoteka. !odeka za zapi{uva2e na znak vo datoteka se upotrebuva 5&, !(!,&*)C kade ! e nekoja !"ar promenliva. Pokraj ovie 1e bidat prika8ani i nekoi po~esto koristeni i skoro standardizirani /unk)ii. Prika8ana e /unk)ijata 5#&en koja go ima sledniov op{t oblik &* : 5#&en(i%eNnaN*a # e1a, na!inNnaNra)# a)C kade &* e poka8uva~ de/iniran pret7odno na sledniov na~in FILE 7&*C +a~inite na rabota spored ANSI standardot za C se slednive IrI I4I IaI Ir)I I4)I Ia)I Ir@I I4@I Ia@I Ir)@I I4)@I Ia)@I otvara2e tekstualna datoteka samo za ~ita2e kreira2e tekstualna datoteka za vpi{uva2e dodava2e tekst na krajot na datoteka otvara2e binarna datoteka samo za ~ita2e kreira2e binarna datoteka za vpi{uva2e dodava2e podato)i na binarna datoteka otvara2e tekstualna datoteka i za ~ita2e i za pi{uva2e kreira2e tekstualna datoteka i za ~ita2e i za pi{uva2e otvara2e tekstualna datoteka i za ~ita2e i za pi{uva2e otvara2e binarna datoteka i za ~ita2e i za pi{uva2e kreira2e binarna datoteka i za ~ita2e i za pi{uva2e otvara2e binarna datoteka i za ~ita2e i za pi{uva2e

Konkretno ako treba da se otvori datotekata so ime es za vpi{uva2e mo8e da se koristi 5#&en na sledniov na~in FILE 7&*C &* : 5#&en(I es I,I4I)C

Informatika 2

##$

0oobi~aen e sledniov na~in na koriste2e na /unk)ijata FILE 7&*C i5((&* : 5#&en(I es I,I4I)) :: NLLL) A &, s(INe %#9e *a se # 8#ri *a # e1a aI)C e6i ()C D +a ovoj na~in pred da se proba vpi{uva2e vo datotekata se ispituva dali ima nekakva gre{ka pri otvara2eto na datotekata. o8ni gre{ki se proba za zapi{uva2e vo za{titena datoteka ili na primer poln disk. NLLL e konstanta de/inirano vo s *i#.". %ve u{te nekolku voobi~aeni konstanti va8ni za rabota so datoteki de/inirani vo s *i#." F*e5ine NLLL ' F*e5ine EOF ($ F*e5ine -LFSIZ =$E ;a ilustra)ija na na~inite na rabota so datoteki i upotreba na /unk)iite +e ! i &, ! 1e bide prika8ana programa {to ~ita datoteka so druga programa i ja prika8uva na ekranot. Fin!.,*e Gs *i#."H 8#i* %ain(ar+!, ar+8) in ar+!C !"ar 7ar+8WXC A FILE 7&*C in !C i5(ar+! :: $) &rin 5(IO 1,!aB eT LDAT i%eNnaN*a # e1aKnI)C e.se i5(ar+! H E) &rin 5(IPre%n#+, ar+,%en iKnI)C e.se i5((&* : 5#&en(ar+8W$X, IrI)) :: NLLL) A &rin 5(INe %#9e *a se # 8#ri *a # e1a a <sKnI, ar+8W$X)C e6i ()C D e.se A 4"i.e((! : +e !(&*)) R: EOF) &, !(!,s *#, )C 5!.#se(&*)C D

Informatika 2

###

D Pretpostavka e deka programata 1e bide snimena vo datoteka LDAT. Kako prvo programata go proveruva to~niot broj na argumenti prosledeni od komandnata linija. Dko ar+! :: $, toga{ ne se prosledeni argumenti preku komandnata linija pa se ispi{uva poraka za gre{ka. Dko ar+! H E toga{ se ispi{uva poraka za druga gre{ka koja ka8uva deka vo komandnata linija ima premnogu argumenti. Gunk)ijata 5#&en go koristi ar+8W$X kako poka8uva~ na imeto na datotekata {to treba da se otvori. !a se zabele8i deka promenlivata ! e deklarirana kako in promenliva. Pri~inata za ova e testira2e so EOF ~ija vrednost e E>. Dko ! be{e deklarirano kako !"ar promenliva toga{ kaj nekoi preveduva~i taa 1e mo8e{e da prima samo ednobajtni vrednosti bez predznak {to ja isklu~uva vrednosta E>. Potrebno e da se zapomni deka koga se raboti so /unk)ii {to operiraat vrz datoteki vrednostite {to gi davaat /unk)iite treba da bidat deklarirani so in . Dko programata ne go testira EOF toga{ vrednostite {to gi vra1aat /unk)iite mo8at da se deklariraat so !"ar. Posle /unk)ijata s!an5 so ovie /unk)ii ima najmnogu problemi. +a kratko 1e bidat povtoreni nekoi /akti za /unk)iite +e s i &, s. ;a &, s be{e ka8ano deka raboti isto kako &rin 5(I<sI,....) {to se potvrduva so proverka. e9utoa dokolku malku podetalno se prostudira ova /unk)ija mo8e da se zaklu~i deka taa dodava kod za kraj na linijata na krajot na nizata {to zna~i deka e ekvivalentna so &rin 5(I<sKnI,....). Gunk)ijata +e s za koja be{e ka8ano deka raboti kako s!an5(I<sI,...) isto taka vo su{tina raboti poinaku. Kaj /unk)ijata s!an5 nizata se ~ita do prvoto prazno mesto {to i be{e ilustrirano so primer programa .s!an5 gi upotrebuva praznoto mesto, tabulatorot K i krajot na redot Kn kako razdeluva~i na vrednostite {to gi ~ita-, a +e s ~ita do kodot za kraj na redot. Otkako krajot na redot 1e bide pro~itan od +e s toj se zamenuva so NLLL kodot. ,majki go ova pred vid vo natamo{niot tekst1e bide obrnato vnimanie na /unk)iite 5+e s i 5&, s koi rabotat so datoteki. Ovie /unk)ii ne se del od jadroto na /unk)ii za rabote2e so datoteki. +iv gi zemame po povod na ras~istuva2e na ne{tata so pret7odnite /unk)ii. Tie se sli~ni na +e s i &, s so nekoi se razbira mali razliki. Taka na primer 5+e s bara tri argumenti za da mo8e da pro~ita niza zna)i od datoteka. Op{tiot oblik na ovaa /unk)ija e sledniov 5+e s(&#1a9,8a!NnaNni9a, n, &#1a9,8a!NnaN*a # e1a)C ;na)ite se ~itat od datotekata se dodeka ne se naide na EOL ili EOF kod ili maksimum do n($ znak. aksimalniot pro~itan broj na zna)i 1e bide n($ bidejki, za

Informatika 2

##2

razlika od +e s, /unk)ijata 5+e s ne go zamenuva EOL kodot na krajot so NLLL tuku dodava plus NLLL kod koj e n E tiot znak vo nizata. 0o slu~aj na uspe{no zavr{uva2e na opera)ijata 5+e s kako vrednost vra1a poka8uva~ na niza, a ako se naide na EOF ili se slu~i nekoja gre{ka pri ~ita2eto kako vrednost se vra1a NLLL. ;a utvrduva2e dali e gre{ka ili EOF kod se koristat /unk)iite 5e#5 i 5err#r. "abotata na ovie /unk)ii 1e bide ilustrirana so programa sli~na na pret7odnata. Programata1e ispi{uva druga programa na ekranot, so taa razlika {to 1e gi ispi{uva i broevite na redovite. Pretpostavka e deka drugata programata 1e bide snimena vo datoteka LDAT$. Fin!.,*e Gs *i#."H F*e5ine DOLZ 3$ 8#i* %ain(ar+!, ar+8) in ar+!C !"ar 7ar+8WXC A FILE 7&*C !"ar re*WDOLZXC in )rNre*C i5(ar+! :: $) &rin 5(IO 1,!aB eT LDAT$ i%eNnaN*a # e1aKnI)C e.se i5(ar+! H E) &rin 5(IPre%n#+, ar+,%en iKnI)C e.se i5((&* : 5#&en(7@@ar+8, IrI)) :: NLLL) A &rin 5(INe %#9e *a se # 8#ri *a # e1a a <sKnI, ar+8)C e6i ()C D e.se A )rNre* : 'C 4"i.e(5+e s(re*,DOLZ,&*)) &rin 5(I<;* T <sI, @@)rNre*, re*)C 5!.#se(&*)C D D Gunk)iite 5s!an5 i 5&rin 5 se koristat za /ormatirano ~ita2e i zapi{uva2e. Tie se isti kako /unk)iite s!an5 i &rin 5 so taa razlika {to kaj niv treba da se spe)i/i)ira i poka8uva~ot na datotekata so koja 1e operiraat. Op{tiot oblik na ovie /unk)ii e sledniov 5s!an5(&#1a9,8a!Nna *a # e1a, 1#n r#.naNni9a, ar+,%en i)C 5&rin 5(&#1a9,8a!Nna *a # e1a, 1#n r#.naNni9a, ar+,%en i)C

Informatika 2

##3

Sli~no na s!an5 i /unk)ijata 5s!an5 kako rezultat ja dobiva vrednosta na brojot na poli2a na koi uspe{no im se dodeleni vrednosti. Dko vo tekot na ~ita2eto se naide na EOF toga{ taa vrednost se dodeluva na /unk)ijata, ako ne bide ni{to pro~itano /unk)ijata ja dobiva vrednosta NLLL. ;a da ovo {to e re~eno bide pojasno kako ilustr)ija 1e bide dadena slednava programa kako potsetnik na ve1e ka8anite ne{ta za rabotata na s!an5 /unk)ijata Fin!.,*e Gs *i#."H 8#i* %ain() A in 6, a, ), !C 6 : s!an5(I<*<*<*I,>a, >), >!)C &rin 5(I6 : <*, a : <*, ) : <*, ! : <*I, 6, a, ), !)C D Dko na ovaa programa se dodelat vrednostite >=, 5= i @= 1e bide ispi{ano 6 : ;, a : $', ) : E', ! : ;' 0o slednava primer programa 1e bide prika8ano kako mo8e da se realizira vpi{uva2e vo datoteka F*e5ine JISTINA $ F*e5ine NEJISTINA ' 8&isi(&*a ) FILE 7&*a C A 5.#a 6, yC !"ar 6nas.#8W;$X, ynas.#8W;$XC in i, &#*a #1C &, s(IJnesi nas.#8 9a M 1#.#naKnI)C +e s(6nas.#8)C &, s(IJnesi nas.#8 9a ] 1#.#naI)C +e s(ynas.#8)C 5&rin 5(&*a , I<;'s<;'sI, 6nas.#8, ynas.#8)C i : 'C &#*a #1 : JISTINAC 4"i.e(&#*a #1) A &rin 5(IJnesi 6<*, y<* T I, i, i)C s!an5(I<5,<5I, >6, >y)C i5(6 :: ') &#*a #1 : NEJISTINAC e.se 5&rin 5(&*a , I<5 <5I, 6, y)C i@@C D D 8#i* %ain(ar+!,ar+8)

Informatika 2

##4

in ar+!C !"ar 7ar+8WXC A FILE 7&*C i5(ar+! :: $) &rin 5(IO 1,!aB eT JPISI i%eNnaN*a # e1aKnI)C e.se i5(ar+! H E) &rin 5(IPre%n#+, ar+,%en iI)C e.se i5((&* : 5#&en(ar+8W$X, I4I)) :: NLLL) A &rin 5(INe %#9e *a se # 8#ri *a # e1a a <sI,ar+8W$X)C e6i ()C D e.se A 8&isi(&*)C 5!.#se(&*)C D D Pretpostavka e deka programata 1e bide snimena vo datoteka JPISI. Taa posle voobi~aenite proverki na po~etokot ja povikuva /unk)ijata 8&isi na koja se prosleduva poka8uva~ od pret7odno otvorenata datoteka. 0o /unk)ijata prvo se pri/a1aat naslovi na dve koloni a potoa se vnesuvaat vrednosti za dvete koloni. ;na~i ni{to spe)ijalno osven {to treba da se zabele8i deka vo poli2ata e rezervirano edno mesto pove1e otkolku {to se vpi{uvaat {to e poradi obezbeduva2e mesto za NLLL. Se razbira seto se vpi{uva na disk. Slednava programa gi ~ita podato)ite od disk i gi ispi{uva. Gunk)ijata %ain e skoro ista kako pret7odnata so mala razlika. Kako prvo datotekata se otvara samo za ~ita2e i namesto /unk)ijata 8&isi se povikuva /unk)ijata !i aB. Se razbira pretpostavka e deka programata 1e bide snimena vo datoteka CITA_. Fin!.,*e Gs *i#."H !i aB(&*a ) FILE 7&*a C A 5.#a 6, yC !"ar 6nas.#8W;$X, ynas.#8W;$XC 5s!an5(&*a ,I<;$s<;$sI, 6nas.#8, ynas.#8)C &rin 5(I<;'s<;'sI, 6nas.#8, ynas.#8)C 4"i.e((5s!an5(&*a ,I<5<5I, >6, >y))R:EOF) &rin 5(I<;'.65<;'.65I, 6, y)C D 8#i* %ain(ar+!,ar+8) in ar+!C !"ar 7ar+8WXC A

Informatika 2

##5

FILE 7&*C i5(ar+! :: $) &rin 5(IO 1,!aB eT CITA_ i%eNnaN*a # e1aKnI)C e.se i5(ar+! H E) &rin 5(IPre%n#+, ar+,%en iKnI)C e.se i5((&* : 5#&en(ar+8W$X, IrI)) :: NLLL) A &rin 5(INe %#9e *a se # 8#ri *a # e1a a <sKnI, ar+8W$X)C e6i ()C D e.se A !i aB(&*)C 5!.#se(&*)C D D Pri vakviot na~in na rabota ~esti se problemite so tekstualnite nizi i raznite deliteli na vrednostite na promenlivite. Taka na primer so pret7odnata programa, koja ja polne{e datotekata kako naslovi na kolonite mo8at da se stavat i imi2a koi sodr8at vo sebe i prazni mesta .na primer M kolona-. Pri ~ita2eto ova prazno mesto 1e stvori problem. Podato)ite {to se zapi{uvaat vo datoteka so 5&rin 5 se snimeni vo ASCII /ormat. Ovoj /ormat ne e mnogu e/ikasen. Snima2eto na podato)i vo binarna /orma za{teduva prostor na diskot i go zabrzuva prenosot na podato)ite. Ne bidat razraboteni dve standardni /unk)ii za taa namena 5rea* i 54ri e. Op{tata /orma na /unk)ijata 54ri e e slednava 54ri e()a5er, +#.e%ina, n, &#1a9,8aNnaN*a # e1a)C kade )a5er e poka8uva~ na po~etokot na ba/er {to 1e se snimi vo datotekata, n e brojot na elementite vo ba/erot, a +#.e%ina e dol8inata na tie elementi izrazena vo bajtovi. +aredbata 5rea* gi ima istite argumenti kako naredbata 54ri e. Spored toa nejziniot op{t oblik e sledniov 5rea*()a5er, +#.e%ina, n, &#1a9,8aNnaN*a # e1a)C , dvete /unk)ii kako vrednost go vra1aat brojot na elementi {to se zapi{ani ili pro~itani. Toj broj se razlikuva od vrednosta na n samo ako imi gre{ka ili e dostignat krajot na datotekata. Toa obi~no se koristi za utvrduva2e na eventualna gre{ka. "abotata na ovie dve /unk)ii 1e bide ilustrirana so slednive programi Fin!.,*e Gs *i#."H 8#i* %ain() A

Informatika 2

##6

s a i! in ),55erWX : A0',0$,0E,0;,04,0=,06,00,03,0Q,3',3$,3E,3;DC FILE 7&*C in iC &* : 5#&en(I es &#*I,I4I)C 54ri e(),55er,4,$4,&*)C 5!.#se(&*)C D i Fin!.,*e Gs *i#."H 8#i* %ain() A s a i! in ),55erW$4XC FILE 7&*C in iC &* : 5#&en(I es &#*I,IrI)C 5rea*(),55er,4,$4,&*)C 5!.#se(&*)C 5#r(i : 'C i G $4C i@@) &rin 5(I<*KnI, ),55erWiX)C D 2$.#. %irekten pristap do podato i vo datoteka Gunk)ijata 5see1 ovozmo8uva postavuva2e na bilo koja pozi)ija vo datotekata. So toa e ovozmo8en direkten pristap do bilo koj podatok. Sintaksata na ovaa naredba e slednava 5see1(&#1a9,8a!NnaN*a # e1a, &#9i!iBa, &#!e #1)C pozi)ija e promenliva od vidot .#n+ i ja poka8uva relativnata pozi)ija na podatok vo datotekata vo odnos na nekoja pozi)ija koja e spe)i/i)irana so promenlivata &#!e #1. Dko vrednosta na promenlivata &#!e #1 e = toga{ ovaa /unk)ija prenesuva na pozi)ija koja e onolku bajtovi daleku od po~etokot na datotekata kolku {to e vrednosta na promenlivata &#9i!iBa. Dko vrednosta na promenlivata &#!e #1 e 5 toga{ ovaa /unk)ija prenesuva na pozi)ija koja e onolku bajtovi daleku od krajot na datotekata kolku {to e vrednosta na promenlivata pozi)ija. Dko vrednosta na promenlivata &#!e #1 e > toga{ ovaa /unk)ija prenesuva na pozi)ija koja e onolku bajtovi daleku od momentalnata pozi)ija vo datotekata kolku {to e vrednosta na promenlivata &#9i!iBa. Potrebno e tuka da se napomene i deka vrednosta na promenlivata &#9i!iBa mo8e da bide i negativna {to bi zna~elo deka dvi8e2eto vo datotekata e na nazad.

Informatika 2

##7

Gunk)ijata 5see1 vra1a vrednost = ako pri dvi8e2e niz datotekata se otide von nejzinite grani)i. Gunk)ijata 5 e.. koja go ima sledniov op{t oblik 5 e..(&#1a9,8a!NnaN*a # e1a)C kako vrednost ja dava pozi)ijata vo datotekata. 0rednosta {to pri toa se dobiva e od vidot .#n+. *potrebata na dvete /unk)ii 1e bide ilustrirana so slednava programa Fin!.,*e Gs *i#."H 8#i* %ain() A s a i! !"ar ),55erWX : Ia)!*e5+IC FILE 7&*C .#n+ )r#Ba!, &#9i!iBaC !"ar !C &* : 5#&en(I es I, I4I)C 54ri e(),55er, $, 0, &*)C 5!.#se(&*)C &* : 5#&en(I es I, IrI)C 5#r()r#Ba! : ;C )r#Ba! G 0C )r#Ba!@@) A 5see1(&*, )r#Ba!, ')C &#9i!iBa : 5 e..(&*)C 5s!an5(&*,I<!I,>!)C &rin 5(I&#*a #1# na &#9i!iBa <.* e <!KnI,&#9i!iBa,!)C D 5!.#se(&*)C D So naredbata 5see1 broiloto e pozi)ionirano na sakanata pozi)ija. So naredbata 5 e.. se ~ita momentalnata pozi)ija .vo ovoj slu~aj samo za proverka-. ,stata programa so mala modi/ika)ija 1e bide iskoristena za ~ita2e na nazad niz datotekata. Fin!.,*e Gs *i#."H 8#i* %ain() A s a i! !"ar ),55erWX : Ia)!*e5+IC FILE 7&*C .#n+ )r#Ba!, &#9i!iBaC !"ar !C &* : 5#&en(I es I, I4I)C 54ri e(),55er, $, 0, &*)C 5!.#se(&*)C &* : 5#&en(I es I, IrI)C

Informatika 2

##8

5see1(&*, 'L, E)C *# A &, !"ar(+e !(&*))C D 4"i.e(R5see1(&*, (EL, $))C 5!.#se(&*)C &rin 5(IKnI)C D 0o poslednata 5see1 naredba ima (EL bidejki pri sekoe ~ita2e poka8uva~ot se pomestuva eden bajt napred. 2$.2. Ve5bi >. ;a ve8ba da se sostavi programa koja koristejki gi dosega napravenite programi 1e ja realizira /unk)ijata za kopira2e na datoteki vo sledniov oblik 1#&iraB i98#rnaN*a # e1a n#8aN*a # e1a 5. 6esto pati binarnite podato)i {to treba da se prenesuvaat pome9u kompjuterite se pretvaraat vo takanare~eniot 7eksade)imalen ASCII /ormat. !a se sostavi programa {to 1e pretvara binarna datoteka vo 7eksade)imalna ASCII datoteka .primer( 7eksade)imalnata vrednost DC bi trebalo da se pretvori vo dve ASCII vrednosti .D- i .C- -. @. !a se sostavi programa {to 1e generira >== slu~ajni broevi pome9u > i >== i da gi smesti vo datoteka. Programata da gi ~ita broevite od datoteka i da gi ispi{e po raste~ki redosled izostavuvajki gi onie so isti vrednosti. da se ispi{e isto taka kolku broevi bile duplikati.

2#. .isti Listite se delumno prilagodlivi strukturi bidejki tie mo8at da rastat i da se namaluvaat spored potreba. o8e da se dostapi do poedinite elementi na listite i tie mo8at da se bri{at i vmetnuvaat na bilo koja pozi)ija vo listite. Strukturata {to sodr8i element poka8uva~ na samata struktura se vika samore/erentna struktura. Ne bide prika8an primer za takva struktura. s r,! &i #%e! A !"ar i%eW;'XC in in*e1sC s r,! &i #%e! 78rs1aC DC

Informatika 2

##"

%dini~no povrzana lista e zbir na samore/erentni strukturi od ist tip. Sekoja od ovie strukturi e povrzana kon slednata struktura ili kon ni{to. Poka8uva~ot {to poka8uva na ni{to kaj povrzanata lista se vika +*LL poka8uva~. Struktutite na povrzanite listi se vikaat jazli. &azolot {to se upotrbuva samo za poka8uva2e na po~etokot na povrzana lista se vika glava na listata ili glaven jazol. <lavniot jazol se upotrebuva za poednostavuva2e na pro)edurata za vmetnuva2e i bri{e2e jazli vo listata i toj nikoga{ ne se bri{e od listata. Povrzanata lista e dinami~ka struktura na podato)i bidejki vo tekot na izvr{uva2e na programata jazlite se vmetnuvaat i bri{at. Ne ja ilustrirame postapkata za /ormira2e na glaven jazol i eden ~len na struktura od de/iniraniot tip student i 1e dodademe na krajot na listata u{te eden ~len. >. !odeluva2e na memorija za dva jazla s r,! &i #%e! 7+.a8a, 7s.e*enC +.a8a : s.e*en : %a..#!(si9e#5(s r,! &i #%e!))C rezultat s.e*en i%e in*e1s 8rs1a +.a8a . . ?? ?? 0

5. Popolnuva2e na sledniot jazol s.e*en (H i%e : II8#IC s.e*en (H in*e1s : EEC rezultat s.e*en i%e in*e1s 8rs1a +.a8a . . napomena = zna~i deka vrskata poka8uva na NLLL .ni{toIvo 22 0

@. !a se dodade nov jazol na listata preku promena na s.e*en (H 8rs1a

Informatika 2

#2$

takva da poka8uva na nova struktura &i #%e! s.e*en (H 8rs1a : %a..#!(si9e#5(s r,! ))C rezultat s.e*en i%e in*e1s 8rs1a +.a8a . . n# Ivo 22 0

??

??

$. !odeluva2e vrednosti na ~lenovite na noviot jazol s.e*en (H 8rs1a (H i%e : IA!#IC s.e*en (H 8rs1a (H in*e1s : ;;C rezultat s.e*en i%e in*e1s 8rs1a +.a8a . . n# Ivo 22

Aco

??

Ne bide sostavena programa {to 1e ~ita )eli broevi od tastaturata i 1e gi gradi linearna lista za nivno memorira2e. Fin!.,*e Gs *i#."H 8#i* %ain() A in 6C

Informatika 2

#2#

s r,! Ba9#. A in )r#BC s r,! Ba9#. 7s.e*enC D 7s ar , 7&C !"ar 7%a..#!()C s ar : NLLLC &rin 5(IJnesi ni9a !e.i )r#e8i KnI)C 4"i.e(s!an5(I<*I,>6) H ') A & : s ar C s ar : (s r,! Ba9#. 7)%a..#!(si9e#5(s r,! Ba9#.))C i5(s ar :: NLLL) A &rin 5(INe%a *#8#.n# %e%#riBaI)C e6i ($)C D s ar (H )r#B : 6C s ar (H s.e*en : &C D &rin 5(IS.e*ni8e )r#e8i )ea &r#!i ani (8# #)ra na nas#1a)KnI)C 5#r(& : s ar C & R: NLLLC & : & (H s.e*en) &rin 5(I<=*KnI, & (H )r#B)C D Programite se sostojat od algoritmi i strukturi na podato)i. ,zborot na strukturata na podato)ite e isto tolku va8na kako i algoritmite za manipula)ija na odato)ite. Osnovnite vidovi na podato)i kaj C se !"ar, in i 5.#a . Slednoto nivo na organiza)ija na podato)ite se poli2ata i po niv strukturite. Kone~noto nivo na organiza)ija na podato)ite se odnesuva na na~inite na koi podato)ite se snimaat i na~inot na koj do niv se pristapuva. :e{e ilustrirano kako se raboti so edini~no povrzani listi. Ne ja ilustrirame rabotata so drugi na~ini na pristap do podato)ite redovi, stekovi i binarni drva. "edovite se linearni listi od in/orma)ii do koi se pristapuva po praviloto FIFO (Firs In Firs O, ) prv vnatre prv nadvor. "edovite ne dozvoluvaat slu~aen pristap do podato)ite. +akratko 1e bide prika8ano kako /unk)ioniraat redovite. Dk)ija snimi.Dsnimi.:snimi.0~itaj.vra1a Dsnimi.<~itaj.vra1a :~itaj.vra1a 0Sodr8ina D D: D:0 :0 :0< 0< <

Informatika 2

#22

;a realiza)ija na rabota so redovi 1e bidat realizirani dve /unk)ii Ys #re i Yre rie8e. Gunk)ijata Ys #re smestuva podatok na krajot na redot, a /unk)ijata Yre rie8e go zema prviot podatok od po~etokot na redot. F*e5ine MAMNSLLC $'' !"ar 7&WMAMNSLLCXC in s&#sC in r&#sC Ys #re(Y) !"ar 7YC A i5(s&#s :: MAMNSLLC) A &rin 5(ILis a a e &#.naKnI)C re ,rn()C D &Ws&#sX : YC s&#s@@C D Yre rie8e() A i5(r&#s :: s&#s) A &rin 5(IRe*# e &ra9enKnI)C re ,rn(')C D r&#s@@C re ,rn(&Wr&#s($X)C D 0o dvete /unk)ii se koristat dve globalni promenlivi s&#s i r&#s koi gi sodr8at indeksite na prvata slobodna loka)ija za zapis i prvata loka)ija za ~ita2e. Koga Ys #re go postavuva poka8uva~ot za nova loka)ija se proveruva dali listata e polna, a pred da ~ita /unk)ijata Yre rie8e proveruva dali ima podato)i. Sleduva )elosna programa za ednostavna raspredelba na slu~ki Fin!.,*e Gs *i#."H F*e5ine MAMNSLLC $'' !"ar 7&WMAMNSLLCXC in s&#sC in r&#sC 8#i* %ain() A !"ar sW3'XC in C 5#r( :'C G MAMNSLLCC @@) &W X : 'C s&#s : 'C r&#s : 'C

Informatika 2

#23

5#r(CC) A &rin 5(I(J)nesi, (P)re+.e*aB, (I)98rsi, (K)raBKnI)C +e s(s)C s4i !"(7s) A !ase PJP T 8nesi()C )rea1C !ase PPP T &re+.e*()C )rea1C !ase PIP T i98rsi()C )rea1C !ase PKP T e6i (')C D D D 8nesi() A !"ar sWE=6X, 7&C *# A &rin 5(IJnesi +# <* 8# re*# TKnI, s&#s @ $)C +e s(s)C i5(7s :: ') )rea1C & : %a..#!(s r.en(s))C i5(& :: ') A &rin 5(INe%a %e%#riBaI)C re ,rnC D s r!&y(&,s)C i5(7s) Ys #re(&)C D 4"i.e(7s)C D &re+.e*() A in C 5#r( : r&#sC G s&#sC @@ ) &rin 5(I<* <sKnT, @$, &W X)C D i98rsi() A !"ar 7&C i5(& : Yre rie8e()) :: ') re ,rnC &rin 5(I<sKnI,&)C D

Informatika 2

#24

Ys #re(Y) !"ar 7YC A i5(s&#s :: MAMNSLLC) A &rin 5(ILis a a e &#.naKnI)C re ,rn()C D &Ws&#sX : YC s&#s@@C D Yre rie8e() A i5(r&#s :: s&#s) A &rin 5(IRe*# e &ra9enKnI)C re ,rn(')C D r&#s@@C re ,rn(&Wr&#s($X)C D Podobruva2e na ovaa programa bi bilo koga namesto nejzino zavr{uva2e koga 1e se dostigne grani)ata na rezerviranata memorija za nea indeksite r&#s i s&#s da se vra1aat na po~etnite vrednosti. +a ovoj na~in mo8e da se postigne obrabotka na pogolem broj slu~ai dokolku tie pokraj vnesuva2eto i se iznesuvaat od redot. Ovoj na~in se vika kru8en red bidejki rabotime so kru8na namesto so linearna lista. ;a realiza)ija na kru8na lista /unk)iite Ys #re() i Yre rie8e() bi trebalo da go imaat sledniov oblik Ys #re(Y) !"ar 7YC A i5(s&#s @ $ :: r&#s) A &rin 5(ILis a a e &#.naKnI)C re ,rn()C D &Ws&#sX : YC s&#s@@C i5(s&#s :: MAMNSLLC) s&#s : 'C D Yre rie8e() A i5(r&#s :: MAMNSLLC)

Informatika 2

#25

r&#s : 'C i5(r&#s :: s&#s) A &rin 5(IRe*# e &ra9enKnI)C re ,rn(')C D r&#s@@C re ,rn(&Wr&#s($X)C D 2#.#. 9tekovi Stekovite se sprotivni na redovite bidejki tie go koristat LIFO (Las In Firs O, ) na~inot na pristap do podato)ite. +aj~esto stekot se sporeduva so ~inii naredeni edna vrz druga pa najgornata ~inija .poslednata namestena- e prva za dostap. Stekovite mo8eme da gi pri/atime kako eden metod za organizira2e na podato)ite koj mo8e da bide primenet na poli2a, povrzani strukturi i drugi slo8eni vidovi na podato)i. Stekovite se upotrebuvaat kaj golem broj na sistemski so/tverski paketi kako {to se na primer preveduva~i, interpreteri i drugi. +a primer kaj programskiot jazik C mnogu preveduva~i koristat stek koga prosleduvaat parametri na /unk)ii. !vete primarni opera)ii so stekovi, stava2e i zema2e, obi~no se sre1avaat pod imi2ata &,s" i &#&. Od tie pri~ini i /unk)iite za realizira2e na tie dejnosti 1e bidat nare~eni &,s" i &#&. "abotata na stekot 1e bide ilustrirana so slednava tabela. Dktivnost Sodr8ina na stekot &,s"(A) A &,s"(-) -A &,s"(C) C-A &#&() (se 9e%a C) -A &,s"(D) D-A &#&() (se 9e%a D) -A &#&() (se 9e%a -) A &#&() (se 9e%a A) &ra9en s e1 Sledat op{tite /ormi na ovie /unk)ii. in s a!1WMAMXC in 8r8 : 'C &,s"(i) in iC A i5(8r8 H: MAM) A &rin 5(IS e1# e &#.nKnI)C re ,rnC D s a!1(8r8) : iC 8r8@@C

Informatika 2

#26

D &#&() A 8r8((C i5(8r8 G ') A &rin 5(IPra9en s e1KnI)C re ,rn(')C D re ,rn(s a!1W8r8X)C D Promenlivata 8r8 e indeks na slednata loka)ija {to 1e bide koristena vo stekot. So nejzino ispituva2e se utvrduva prazen i poln stek. Osven ovie dve /unk)ii za rabota so stekovi se sre1avaat u{te dve. %dnata e za ini)ijaliza)ija na stekovi a drugata e za nedestruktivno ~ita2e na vrvot na stekot .bez dekrementira2e na indeksot-. Kako primer za koriste2e na stekovi 1e bide sostavena programa za kalkulator so ~etiri /unk)ii koj raboti vo taka nare~eniot post/iks na~in na rabota .prvo se zadavaat operandite a potoa operatorot-. Ovoj na~in na operira2e e odbran poradi ednostavnosta na negovoto programira2e. ;a potrebite na ovaa programa soodvetno 1 e bidat modi/i)irani /unk)iite &,s" i &#&. Fin!.,*e Gs *i#."H in 7&C in 78r8 : 'C in 7*n#C 271aB ne1#i &re8e*,8a!i 7&, 78r8 i 7*n# re)a *a )i*a !"ar 72 &,s"(i) in iC A i5(& H *n#) A &rin 5(IS e1# e &#.nKnI)C re ,rnC D 7& : iC &@@C D &#&() A &((C i5(& G 8r8) A &rin 5(IPra9en s e1KnI)C re ,rn(')C

Informatika 2

#27

D re ,rn(7&)C D 8#i* %ain() A in a,)C !"ar sW3'XC & : %a..#!($'')C 8r8 : &C *n# : & @ ($''2si9e#5(in )) ( si9e#5(in )C &rin 5(IKa.1,.a #r s# !e iri 5,n1!iiKnI)C *# A &rin 5(IT KnI)C +e s(s)C s4i !"(7s) A !ase P@PT a : &#&()C ) : &#&()C &rin 5(I<*KnI,a @ ))C &,s"(a@))C )rea1()C !ase P(PT a : &#&()C ) : &#&()C &rin 5(I<*KnI,) ( a)C &,s"()(a)C )rea1()C !ase P7PT a : &#&()C ) : &#&()C &rin 5(I<*KnI,)7a)C &,s"()7a)C )rea1()C !ase P2PT a : &#&()C ) : &#&()C i5(a :: ') A &rin 5(IDe.enBe s# 'KnI)C )rea1C D &rin 5(I<*KnI,)2a)C &,s"()2a)C )rea1()C *e5a,. T &,s"(a #i(s))C D

Informatika 2

#28

D 4"i.e(7sR:PYP)C D Stekot mo8e da bide primenet i na povrzana lista so toa {to &,s" i &#& /unk)iite bi izgledale malku poinaku. ;a ilustra)ija na ovie /unk)ii 1e se koristi slednava ednostavna struktura i deklara)ii( s r,! Ba9#. A !"ar 7&#ra1aC s r,! Ba9#. 7s.e*enC DC s r,! Ba9#. 7+.a8aC !e/inirana e struktura so poka8uva~ na nekoja poraka i poka8uva~ na slednata struktura odnosno poraka. Poka8uva~ot glava 1e ja sodr8i adresata na strukturata na vrvot na stekot. Gunk)ijata &,s" mo8e da se realizira na sledniov na~in( &,s"Ns a!1() A !"ar 7&ri8rW$''XC s r,! Ba9#. 7nC n : (s r,! Ba9#. 7)!a..#!($,si9e#5(s r,! Ba9#.))C i5(n :: NLLL) A &rin 5(IMe%#riBa a e &#.naI)C re ,rn(')C D e.se A &rin 5(IJnesi &#ra1a TKnI)C +e s(&ri8r)C n (H &#ra1a : %a..#!(s r.en(&ri8r) @$)C i5(n (H &#ra1a R: NLLL) A s r!&y(n (H &#ra1a, &ri8r)C n (H s.e*en : +.a8aC +.a8a : nC re ,rn($)C D e.se A &rin 5(IMe%#riBa a e &#.naI)C re ,rn(')C D D

Informatika 2

#2"

D Gunk)ijata e realizirana na malku poinakov na~in od pret7odnata so ideja da se prika8e u{te edna nejzina mo8na organiza)ija. +ovost kaj ovaa /unk)ija e primenata na bibliote~nata /unk)ija !a..#! koja e sosema sli~na so /unk)ijata %a..#! so taa razlika {to taa ja bri{e memorijata od pret7odnata sodr8ina pred da ja dodeli na programata. ;a razlika od verzijata na ova /unk)ija {to rabote{e so pole tuka goleminata na stekot ne e ograni~ena .osven so goleminata na raspolo8ivata memorija-. ;a bri{e2e na jazol od povrzanata lista stek treba da se dostapi i do jazolot {to pret7odi na jazolot za bri{e2e. ;a taa )el poleto M s.e*enM od jazolot {to se bri{e se kopira vo pret7odniot jazol. Toa mo8e da bide realizirano so slednava /unk)ija &#&Ns a!1(&#.e) !"ar &#.eWXC A i5(+.a8a :: NLLL) A &rin 5(IS e1# e &ra9enI)C s r!&y(&#.e,II)C re ,rn(')C D e.se A s r,! Ba9#. 7&ri8rC s r!&y(&#.e, +.a8a (H &#ra1a)C &ri8r : +.a8a (H s.e*enC 5ree(+.a8a (H &#ra1a)C 5ree(+.a8a)C +.a8a : &ri8rC re ,rn($)C D D

2#.2. %vojno povrzani listi !vojno povrzanite listi se sostojat od podato)i {to se povrzani i so svojot pret7odnik i so svojot sledbenik. !vojno povrzanite listi imaat dve prednosti( kako prvo listata mo8e da bide ~itana vo dva prav)i {to e mnogu korisno za primena kaj bazite na podato)i, i kako vtoro ako nekoja od vrskite se prekine listata mo8e da bide rekonstruirana so pomo{ na drugata vrska. Kaj vakvite listi ima tri vidivi na dodava2e na novi ~lenovi( dodava2e nov ~len na po~etokot na listata, dodava2e nov ~len na krajot na listata i dodava2e na nov ~len vo sredinata na listata.

Informatika 2

#3$

<radbata na dvojno povrzanite listi e sli~na na edini~no povrzanite listi so toa {to strukturata treba da sodr8i dva poka8uva~i eden za pret7odnikot i eden za sledbenikot. ;a primer na dvojno povrzana lista 1e bide prika8ana struktura za potrebite na adresar. s r,! a*resar A !"ar i%eW4'XC !"ar ,.i!aW4'XC !"ar +ra*WE'XC !"ar *r9a8aW;'XC s r,! a*resar 7s.e*enC s r,! a*resar 7&re*enC D So vaka de/inirana struktura /unk)ijata *.s&re%i ja gradi dvojno povrzanata lista na sledniov na~in( *.s&re%i(i) s r,! a*resar 7iC A s a i! s r,! a*resar 71raen : 'C i5(1raen :: ') 1raen : iC e.se 1raen (H s.e*en : iC i (H s.e*en : 'C i (H &re*en : 1raenC 1raen ( iC D Ova /unk)ija go smestuva sekoj nov podatok na krajot na listata. Potrebna e i /unk)ija koja 1e go smestuva podatokot na zadadena loka)ija. Slednava /unk)ija ja podreduva listata dodeka ja generira vo raste~ki redosled. s r,! a*resar 7*.s&re%i$(i,8r8) s r,! a*resar 7iC s r,! a*resar 78r8C A s a i! s r,! a*resar 71raen : 'C s r,! a*resar 7s ar, 7&C i5(1raen :: ') A i (H s.e*en : 'C i (H &re*en : 'C 1raen : iC re ,rn(i)C D & : 8r8C s ar : 'C

Informatika 2

#3#

4"i.e(&) A i5(s r!%&(& (H i%e, i (H i%e) G ') A s ar : &C & : & (H s.e*enC D e.se A i5(& (H &re*en) A & (H &re*en (H s.e*en : iC i (H s.e*en : &C i (H &re*en : & (H &re*enC & (H &re*en : iC re ,rn(8r8)C D i (H s.e*en : &C i (H &re*en : 'C & (H &re*en : iC re ,rn(i)C D D s ar (H s.e*en : iC i (H s.e*en : 'C i (H &re*en : s arC s ar : iC re ,rn(8r8) D :idejki podatok mo8e da bide vmetnat na po~etokot na listata /unk)ijata vra1a poka8uva~ na po~etokot na listata taka da ostanatite delovi na programata znaat kade po~nuva listata. Pri bri{e2e na element od listata ima tri slu~ai( elementot e na po~etokot na listata, elementot e na krajot na listata i elementot e vo sredinata na listata. Slednata /unk)ija poka8uva kako mo8e da se izbri{e element od vidot adresar od dvojno povrzana lista s r,! a*resar 7*.)risi(i,8r8) s r,! a*resar 7iC s r,! a*resar 78r8C A i5(i (H &re*en) i (H &re*en (H s.e*en : i (H s.e*enC e.se A 8r8 : i (H s.e*enC i5(8r8) 8r8 (H &re*en : 'C D

Informatika 2

#32

i5(i (H s.e*en) i (H s.e*en (H &re*en : i (H &re*enC re ,rn(8r8)C D ;a ve8ba na primena na dvojno povrzani listi da se sostavi programa za po{tenska lista. !odeka se koristi listata da se ~uva vo )entralnata memorija so se razbira mo8nosti za nejzino snima2e na disk. 2#.3. ;inarni drva Prebaruva2eto na linearnite listi e linearna pro)edura koja e spora vo sporedba so binarniot na~in na prebaruva2e. Koga se raboti so dinami~ki strukturi na podato)i edna od mo8nostite za pobrzo prebaruva2e e organizira2eto na podato)ite vo edna spe)ijalna /orma na povrzani listi koja se vika binarni drva. ,ma mnogu vidovi na drva a binarnite drva se edni od najinteresnite bidejki koga se podredeni ovozmo8uvaat brzo prebaruva2e, vmetnuva2e i bri{e2e. "abotata so binarni drva e slo8ena programerska zada~a koja samo 1e bide na~nata vo ovaa skripta. Pove1eto od /unk)iite za rabota so binarni drva se rekurzivni. Postojat i nerekurzivni /unk)ii za rabota so binarni drva no nivnata te7nika za rabota e pote{ka za razbira2e. Op{to zemeno binarnite drva se koristat vo onie slu~ai koga lenearnite te7niki za prebaruva2e i promeni ne se dovolno e/ikasni. :inarnite drva gi imaat slednive svojstva( drvoto ima samo eden koren koj e prviot podatok vo drvoto. &azolot na korenot obi~no se deklarira kako nadvore{na promenliva. sekoj jazol poka8uva na novi dva jazla .de)a- ili na nulti jazol .NLLL poka8uva~na sekoj jazol, osven na korenot, poka8uva samo eden jazol .roditelsekoj jazeol e adresibilen so edinstven pat od jazli jazolot i negovite sledbeni)i se narekuvaat poddrva jazolot so dva NLLL poka8uva~i .nema de)a- se vika list +DPO %+D( iznesenite de/ini)ii mo8at da variraat kaj razli~ni avtori Postojat tri na~ini za pominuva2e niz site ~lenovi na drvoto( inorder, preorder i postorder. Kaj na~inot inorder prvo se pominuva levoto poddrvo, pa korenot i na krajot desnoto poddrvo. Kaj preorderot prvo se posetuva korenot, pa levoto poddrvo i na krajot desnoto poddrvo. Kaj postorderot prvo se posetuva levoto poddrvo, pa desnoto poddrvo i na krajot korenot. !okolku e dadeno slednovo drvo *

Informatika 2

#33

)5 a!e+ posetata nasite jazli spored trite na~ini bi bila slednava za inorder a)!*e5+ za preorder * ) a ! 5 e + za postorder a ! ) e + 5 * Pove1eto od upotrebite na binarnite drva baraat drvata da bidat podredeni. Kako 1e se podredi drvoto zavisi od na~inot na koj se patuva niz nego. 0o primerite {to sledat 1e se raboti so inorder drva. Kaj inorder podredenoto binarno drvo levoto poddrvo ima jazol ~ija vrednost e pomala od vrednosta vo jazolot na korenot dodeka desnoto poddrvo ima jazol ~ija vrednost e pogolema od onaa na jazolot vo korenot. So slednava /unk)ija se /ormira podredeno binarno drvo s r,! *r8# A !"ar in5#C s r,! *r8# 7.e8#C s r,! *r8# 7*esn#C D C s r,! *r8# 7s*r8#(1#ren,r,in5#) s r,! *r8# 71#renC s r,! *r8# 7rC !"ar in5#C A i5(r :: ') A r : %a..#!(si9e#5( ))C 27 &r8 Ba9#. 8# &#**r8# 72 i5(r :: ') A &rin 5(INe%a *#8#.n# %e%#riBaKnI)C e6i ($)C D r(H.e8# : 'C r(H*esn# : 'C r(Hin5# : in5#C i5(1#ren) A i5(in5# G 1#ren(Hin5#) 1#ren(H.e8# : rC e.se 1#ren(H*esn# : rC D e.se 27 &r8 Ba9#. 8# *r8# # 7S A r(H*esn# : 'C r(H.e8# ( 'C

Informatika 2

#34 D re ,rn(r)C

D i5(in5# G: r(Hin5#) s*r8#(r,r(H.e8#, in5#)C i5(in5# H r(Hin5#) s*r8#(r,r(H*esn#,in5#)C D Dlgoritamot ednostavno gi sledi vrskite niz drvoto odejki levo ili desno zavisno od sodr8inata na promenlivata in5#. ;a upotreba na ovaa /unk)ija potrebna e globalna promenliva vo koja 1e bide smesten korenot na drvoto. Poka8uva~ na korenot 1e se generira pri prviot povik na /unk)ijata s*r8#. Ovaa /unk)ija e rekurzivna kako i pove1eto od /unk)iite {to rabotat so binarni drva. Poradi ednostavnost za sodr8ina na jazlite se koristi samo eden znak a po potreba mo8e toa da bide i bilo koj drug vid na podato)i. ;a dvi8e2e niz drvoto izgradeno so /unk)ijata s*r8# vo inorder na~in i za ispi{uva2e na vrednostite na poleto in5# mo8e da se koristi slednava /unk)ija in#r*er(1#ren) s r,! *r8# 71#renC A i5(R1#ren) re ,rnC in#r*er(1#ren(H.e8#)C &rin 5(I<! I,1#ren(Hin5#)C in#r*er(1#ren(H*esn#)C D Ovaa rekurzivna /unk)ija se vra1a koga 1e se naide na NLLL poka8uva~. Sleduvaat /unk)ii za dvi8e2e niz drvoto vo preorder i postorder. &re#r*er(1#ren) s r,! *r8# 71#renC A i5(R1#ren) re ,rnC &rin 5(I<! I,1#ren(Hin5#)C &re#r*er(1#ren(H.e8#)C &re#r*er(1#ren(H*esn#)C D &#s #r*er(1#ren) s r,! *r8# 71#renC A i5(R1#ren) re ,rnC &#s #r*er(1#ren(H.e8#)C

Informatika 2

#35

&#s #r*er(1#ren(H*esn#)C &rin 5(I<! I,1#ren(Hin5#)C D Slednata /unk)ija ja ispi{uva sodr8inata na drvoto vo inorder &rin N*r8#(r,.) s r,! *r8# 7r in .C A in iC i5(r :: ') re ,rnC &rin N*r8#(r(H.e8#,.@$)C 5#r(i:'CiG.C@@i) &rin 5(I I)C &rin 5(I<!KnI,r(Hin5#)C &rin N*r8#(r(H*esn#,.@$)C D Ona {to nedostasuva e glavna /unk)ija preku koja 1e se vnesuvaat podato)i i 1e se povika /unk)ijata za ispi{uva2e. s r,! *r8# A !"ar in5#C s r,! *r8# 7.e8#C s r,! *r8# 7*esn#C DC s r,! *r8# 71#renC 8#i* %ain() A !"ar sW3'XC s r,! *r8# 7s*r8#()C 1#ren : 'C *# A &rin 5(IJnesi ),18a TKnI)C +e s(s)C i5(R1#ren) 1#ren : s*r8#(1#ren,1#ren,7s)C e.se s*r8#(1#ren,1#ren,7s)C D 4"i.e(7s)C &rin N*r8#(1#ren,')C D s r,! *r8# 7s*r8#(1#ren,r,in5#)

Informatika 2

#36

s r,! *r8# 71#renC s r,! *r8# 7rC !"ar in5#C A i5(r :: ') A r : %a..#!(si9e#5( ))C 27 &r8 Ba9#. 8# &#**r8# 72 i5(r :: ') A &rin 5(INe%a *#8#.n# %e%#riBaKnI)C e6i ($)C D r(H.e8# : 'C r(H*esn# : 'C r(Hin5# : in5#C i5(in5# G 1#ren(Hin5#) 1#ren(H.e8# : rC e.se 1#ren(H*esn# : rC re ,rn(r)C D i5(in5# G: r(Hin5#) s*r8#(r,r(H.e8#, in5#)C i5(in5# H r(Hin5#) s*r8#(r,r(H*esn#,in5#)C D &rin N*r8#(r,.) s r,! *r8# 7r in .C A in iC i5(r :: ') re ,rnC &rin N*r8#(r(H.e8#,.@$)C 5#r(i:'CiG.C@@i) &rin 5(I I)C &rin 5(I<!KnI,r(Hin5#)C &rin N*r8#(r(H*esn#,.@$)C D Ovaa programa vo su{tina gi podreduva vleznite in/orma)ii. Taa e varija)ija na edna metoda za podreduva2e .podreduva2e so vmetnuva2e- koja e pospora vo sporedba so metodata Y,i!1s#r . :ilo kako taa e korisna za gradba na binarni drva i vmetnuva2e na novi jazli vo postoe~ki binarni drva. Dko so ovaa programa vneseme podato)i kako a)!* toga{ se dobiva drvo a ) !

Informatika 2

#37

* koe nema levi poddrva. Ova se vika degenerirano drvo bidejki se degeneriralo vo linearna lista. Dko podato)ite se slu~ajni drvoto {to se dobiva e balansirano drvo. o8no e balansira2e na degenerirano drvo so spe)ijalni algoritmi no tie se prili~no slo8eni i von domenot na ovoj kurs. Gunk)ija za prebaruva2e na drvoto lesno se kreira s r,! *r8# 7)araBN*r8#(1#ren,1.,!) s r,! *r8# 1#renC !"ar 1.,!C A i5(R1#ren) re ,rn(1#ren)C 4"i.e(1#ren(Hin5# R: 1.,!) A i5(1.,! G 1#ren(Hin5#) 1#ren : 1#ren(H*esn#C e.se 1#ren : 1#ren(H.e8#C i5(1#ren :: ') )rea1C D re ,rn(1#ren)C D :ri{e2eto na jazol e mnogu poslo8ena pro)edura. &azolot {to se bri{e mo8e da bide korenot lev jazol ili desen jazol. &azolot mo8e da bide bez poddrva ili so poddrva taka da promenata na poka8uva~ite e slo8ena rabota {to se izvr{uva so pomo{ na rekurzivni algoritmi. Ne bide sostavena programa za binarno drvo koe 1e sodr8i zborovi od nekoj tekst. ;borovite 1e bidat taka organizirani da prebaruva2eto na drvoto za pronao9a2e na nekoj zbor bide pobrzo otkolku kaj linearnata organiza)ija na podato)ite. ,sto taka zborovite 1e bidat otpe~ateni po azbu~en redosled. Dko nekoj zbor se pojavuva pove1e pati toj 1e bide smesten samo edna{ vo drvoto no pri toa 1e se vodi smetka za /rekven)ijata na povtoruva2e na zborovite. Op{to zemeno sekoj jazol na drvoto mo8e da sodr8i pove1e podato)i od koi samo edniot e klu~ pri prebaruva2ata. Ne bide zemen sledniov primer za tekst PT# )e #r n# # )e "a is "e Y,es i#nP `i..ia% S"a1es&eare

Informatika 2

#38

:inarnoto drvo mo8e da bide nare~eno i rekurzivna struktura na podato)i. +aprimer ako treba da bidat otpe~ateni site podato)i od binarnoto drvo zada~ata mo8e da bide svedena na otpe~atuva2e na podato)ite vo poddrvata koi se isto taka binarni drva. Ne bide sostavena programa {to generira binarno drvo, vr{i binarno prebaruva2e na drvoto i gi ispi{uva rezultatite. Programata 1e bide upotrebena za analiza na /rekventnata distribu)ija na zborovi od tekstualna datoteka. s r,! Ba9#. A !"ar 7&9)#r, in )r#i.#C s r,! Ba9#. 7.e8, 7*esenC DC !"ar ),55erW$''XC y&e*e5 s r,! Ba9#. _AZOLC 8#i* %ain() A _AZOL 71#ren, 7&#1, 7)*r8#(), 7))araB()C 1#ren : NLLLC 1#ren : ) ree(1#ren)C &rin 5(IKnFre18en na ras&re*e.)a na 9)#r#8iTKnKnI)C &rin *r8#(1#ren)C 4"i.e A &rin 5(IKnJnesi 9)#r i.i /// 9a 1raBTKnI)C &#.ni(s *in)C i5(s r!%&(),55er, I///I)) A &#1 : ))araB(1#ren)C i5(&#1 :: NLLL) &rin 5(INe%a a1#8 9)#rKnI)C &rin 5(I-r#B na &#Ba8,8a4a <*KnTI,&#1(H)r#i.#)C D D D _AZOL 7)*r8#(1#ren) _AZOL 71#renC A !"ar i%e*a W4'XC FILE 7&*C _AZOL 7n#8()C in in*i!C &rin 5(IJnesi i%e na e1s ,a.na *a # e1aTKnI)C s!an5(I<sI,i%e*a )C &* : 5#&en(i%e*a ,IrI)C

Informatika 2

#3"

i5(&* :: NLLL) A &rin 5(INe%a a18a *a # e1aI)C e6i ($)C D 4"i.e(in*i! : &#.ni(&*)) i5(in*i! H ') 1#ren : n#8(1#ren)C 5!.#se(&*)C re ,rn(1#ren)C D in &#.ni(&*) FILE 7&*C A !"ar 7*es , 7i98#r, 9na1C i5(5s!an5(&*,I<sI,),55er) G: ') re ,rn(')C i5(s r!%&(),55er, I///I) :: ') re ,rn($)C *es : i98#r : ),55erC 4"i.e(9na1 : 7i98#r@@) A 9na1 : +#.e%aN),18a(9na1)C i5(),18a(9na1)) 7*es @@ : 9na1C D 7*es : PK'PC re ,rn(*es H ),55er S $ T ($)C D _AZOL 7n#8(&) _AZOL 7&C A !"ar 7 n#8Na..#!()C in in*i!C i5(& :: NLLL) A & : (_AZOL 7)n#8Na..#!(si9e#5(_AZOL))C &(H&9)#r : n#8Na..#!(s r.en(),55er) @ $)C s r!&y(&(H&9)#r, ),55er)C &(H)r#i.# : $C &(H.e8 : &(H*esen : NLLLC D e.se A in*i! : s r!%&(),55er, &(H&9)#r)C i5(in*i! G ') &(H.e8 : n#8(&(H.e8)C e.se i5(in*i! H ')

Informatika 2

#4$ &(H*esen : n#8(&(H*esen)C e.se &(H)r#i.#@@C

D re ,rn(&)C D !"ar n#8Na..#!(n) in nC A !"ar 7&, 7%a..#!()C & : %a..#!(n)C i5(& :: NLLL) A &rin 5(INe%a *#8#.n# %e%#riBaKnI)C e6i ($)C D re ,rn(&)C D &rin *r8#(&) _AZOL 7&C A i5(& R: NLLL) A &rin *r8#(&(H.e8)C &rin 5(I<=* <sKnI,&(H)r#i.#, &(H&9)#r)C &rin *r8#(&(H*esen)C D D _AZOL 7)araB(&) _AZOL 7&C A in in*i!C i5(& :: NLLL) re ,rn(NLLL)C in*i! : s r!%&(),55er, &(H&9)#r)C re ,rn(in*i! G ' S )araB(&(H.e8) T in*i! H ' S )araB(&(H*esen) T &)C D +#.e%aN),18a(9na1) !"ar 9na1C AD ),18a(9na1) !"ar 9na1C AD Ovaa programa ne sodr8i /unk)ija za bri{e2e na jazol {to e edna od poslo8enite opera)ii vrz drvoto za koja nema da se diskutira.

Informatika 2

#4#

P",LO< D %ok)mentira'e na izrabotenite programi ,mame dva vidovi na dokumentira2e na programite( dokumentira2e za potrebite na korisni)ite i te7ni~ko dokumentira2e. !okumentira2eto za potrebite na korisni)ite obi~no se pravi vo /orma na prira~nik za rabota so programata. ;a taa )el na korisnikot mu se dokumentiraat slednive in/orma)ii( E )elta na programata E {to taa programa raboti E kako se upotrebuva programata .na~in na aktivira2e, interni komandi, menija, poraki i drugoE opis na vleznite podato)i E opis na izleznite podato)i E ograni~uva2a na programata Te7ni~kata dokumenta)ija e nameneta za programerite koi imaat potreba da znaat pove1e detali za programata za nejzino odr8uva2e ili nadgraduva2e. 0akvata dokumenta)ija obi~no se organizira kako te7ni~ki prira~nik. Kompletnata dokumenta)ija sodr8i nekoi ili site od slednive delovi( E komentirana lista na izvorniot kod E opis na programata E blok dijagram E algoritamski kod E pro)edura i podato)i za testira2e E lista i opis na site moduli, /unk)ii i va8ni promenlivi E memoriska mapa so ozna~eni loka)ii na programskite moduli podato)ite

También podría gustarte