op - t07 - funkcije

Upload: zoran-vasic

Post on 07-Oct-2015

232 views

Category:

Documents


0 download

DESCRIPTION

Programski jezik C

TRANSCRIPT

  • OSNOVOSNOVI I PROGRAMIRANJAPROGRAMIRANJA( VII )( VII )

    FUNKCIJEFUNKCIJE

    mr Draen BraninElektrotehniki fakultet Banja Luka

    2007.

  • 277..11.. PotprogramiPotprogrami

    POTPROGRAMI ?POTPROGRAMI ?

    PotprogramiPotprogramiPrilikom razvoja algoritma mogu da se uoPrilikom razvoja algoritma mogu da se uoe logie logike cjeline koje se ke cjeline koje se esto esto puta ponavljaju, najputa ponavljaju, najeee nad razlie nad razliitim skupom podataka. Takve cjeline itim skupom podataka. Takve cjeline treba izdvojiti u zasebne programske cjeline treba izdvojiti u zasebne programske cjeline potprograme.potprograme.KoriKoritenjem potprograma:tenjem potprograma:

    povepoveava se preglednost programa,ava se preglednost programa,smanjuje se velismanjuje se veliina programa,ina programa,postipostie se univerzalnost koda,e se univerzalnost koda,omoguomoguava se lakava se lake otklanjanje gree otklanjanje greaka.aka.

    U programskim jezicima obiU programskim jezicima obino se implementiraju:no se implementiraju:proceduralni potprogrami (proceduralni potprogrami (procedureprocedure))funkcijski potprogrami (funkcijski potprogrami (funkcijefunkcije))

    Programski jezik C ima implementirane samo funkcijske potprogramProgramski jezik C ima implementirane samo funkcijske potprograme.e.

  • 377..22.. FunkcijskiFunkcijski potprogramipotprogrami

    FUNKCIJE ?FUNKCIJE ?

    FunkcijeFunkcijeFunkcija se obiFunkcija se obino definino definie kao potprogram koji na osnovu odreenog broja e kao potprogram koji na osnovu odreenog broja argumenata argumenata daje jedan rezultatdaje jedan rezultat..Podatak koji funkcija vraPodatak koji funkcija vraa glavnom programu naziva se a glavnom programu naziva se vrijednost funkcijevrijednost funkcije..Pod Pod tipom funkcijetipom funkcije podrazumijeva se tip podatka koji vrapodrazumijeva se tip podatka koji vraa funkcija.a funkcija.

    Proceduralni potprogrami (u drugim programskim jezicima) mogu daProceduralni potprogrami (u drugim programskim jezicima) mogu da vravraaju aju vivie podataka. Zbog toga, funkcije u Ce podataka. Zbog toga, funkcije u C--u imaju implementiranu moguu imaju implementiranu mogunost da nost da osim rezultata osim rezultata vrijednost funcije, vrate vivrijednost funcije, vrate vie podataka kroz razmjenu e podataka kroz razmjenu argumenata. argumenata. Efekat kad funkcija kroz argumente vraEfekat kad funkcija kroz argumente vraa rezultate naziva sea rezultate naziva seboboni efekatni efekat..Funkcija moFunkcija moe u potunosti da se ponae u potunosti da se ponaa kao procedura, tj. moa kao procedura, tj. moe da daje samo e da daje samo bobone efekte.ne efekte.

  • 477..33.. FunkcijeFunkcije

    FUNKCIJE ?FUNKCIJE ?

    Definicija funkcijeDefinicija funkcijeOpOpti oblik definicije funkcije:ti oblik definicije funkcije:

    tip ime (arg1, arg2, ... , argN)tip ime (arg1, arg2, ... , argN)definicija_formalnih_argumenata;definicija_formalnih_argumenata;{{

    definicija_lokalnih_promjenljivih; definicija_lokalnih_promjenljivih; programski_iskazi;programski_iskazi;return (izraz); return (izraz);

    }}

    tip funkcijeAko se ne navede

    podrazumijeva se intAko funkcija ne vraa podatak, tip je void

    lista formalnih argumenataparametri kroz koje funkcija

    prima podatke (vrijednosti ili adrese)

    definicija tipova argumenata

    ime funkcijeidentifikator u skladu sa sintaksom jezika

    definicija lokalnih promjenljivih

    promjenljive koje se koriste u funkciji, nisu vidljive izvan

    funkcije

    izlaz iz funkcije i vraanje vrijednosti datog tipa

    U tijelu funkcije moe biti biti vie return iskaza

    Ako funkcija ne vraa nita, return moe da se izostavi.

  • 577..33.. FunkcijeFunkcije

    FUNKCIJE ?FUNKCIJE ?

    Definicija funkcijeDefinicija funkcijeAlternativni oblik definicije funkcije:Alternativni oblik definicije funkcije:

    tip ime ( tip ime ( tip1 arg1, tip2 arg2, ... , tipN argN tip1 arg1, tip2 arg2, ... , tipN argN )){{

    definicija_lokalnih_promjenljivih; definicija_lokalnih_promjenljivih; programski_iskazi;programski_iskazi;return (izraz); return (izraz);

    }}definicija tipova

    argumenata sadrana je u listi argumenata

    Poziv funkcijePoziv funkcijeOpOpti oblik poziva funkcije:ti oblik poziva funkcije:

    ime ( sarg1, sarg2, ... , sargN )ime ( sarg1, sarg2, ... , sargN )lista stvarnih argumenata

    parametri koji se alju u funkciju(vrijednosti ili adrese)

    Zovu se stvarni zato to su to stvarni, realni podaci

  • 677..33.. FunkcijeFunkcije

    PROTOTIP ?PROTOTIP ?

    Deklaracija funkcije (prototip)Deklaracija funkcije (prototip)Prototip ili deklaracija funkcije predstavlja njen Prototip ili deklaracija funkcije predstavlja njen opis za spoljaopis za spoljanji svijetnji svijetIz prototipa se vidi kako se komunicira s datom funkcijom, jer sIz prototipa se vidi kako se komunicira s datom funkcijom, jer sadradri:i:

    tip funkcije,tip funkcije,ime funkcije,ime funkcije,tipove (a motipove (a moe i imena) argumenata.e i imena) argumenata.

    OpOpti oblik prototipa:ti oblik prototipa:tip ime ( tip1, tip2, ... , tipN );tip ime ( tip1, tip2, ... , tipN );

    PrimjerPrimjer::int zbir( int a, int b )int zbir( int a, int b )

    {{ return (a+b); return (a+b); }}int zbir( int, int );int zbir( int, int );

    void poruka ()void poruka (){{ printf(printf(Zdravo!Zdravo!); ); }}

    void poruka ();void poruka ();

  • 777..33.. FunkcijeFunkcijeSTRUKTURA STRUKTURA PROGRAMA ?PROGRAMA ?

    Struktura C programaStruktura C programaUobiUobiajena je sljedeajena je sljedea struktura:a struktura:

    pretprocesorske direktivepretprocesorske direktiveprototip funkcijaprototip funkcijamainmaindefinicija funkcijadefinicija funkcija

    Alternativno je moguAlternativno je mogue i:e i:

    pretprocesorske direktivepretprocesorske direktivedefinicija funkcijadefinicija funkcijamainmain

    Pogodno kad imamo malen broj funkcijaAko funkcija zove neku drugu

    funkciju, funkcija koja se poziva mora biti prethodno definisana

    PrimjerPrimjer::#include #include void poruka ();void poruka ();main()main(){{

    poruka();poruka();}}void poruka ()void poruka (){{

    printf(printf(Zdravo!Zdravo!); ); }}

  • 877..33.. FunkcijeFunkcije

    FUNKCIJE ?FUNKCIJE ?

    PrimjerPrimjer:: Program Program koji ukoji uitava duitava duine stranica pravougaonika, a zatim ispisujeine stranica pravougaonika, a zatim ispisujenjegov obim i povrnjegov obim i povrinu. Obim treba da se rainu. Obim treba da se rauna u funkciji obim, auna u funkciji obim, apovrpovrina u funkciji povrs.ina u funkciji povrs.

    #include #include float obim(float, float);float obim(float, float);float povrs(floatfloat povrs(float s1s1, float, float s2s2););main()main(){{ float float a,b, o,p;a,b, o,p;

    printfprintf((Stranica aStranica a: : ); ); scanf(scanf(%d%d, &, &aa); ); printfprintf((Stranica bStranica b: : ); ); scanf(scanf(%d%d, &, &bb); ); o = obim(a,b);o = obim(a,b);p = povrs(a,b);p = povrs(a,b);printfprintf((Obim Obim : : %7.3f%7.3f\\nn, o);, o);printf(printf(PovrsinaPovrsina : : %7.3f%7.3f\\nn, p);, p);

    } } float float obimobim (float x, float y)(float x, float y)

    { return ( 2*x + 2*y ); }{ return ( 2*x + 2*y ); }float float povrspovrs (float c, float d)(float c, float d)

    { return ( c*d ); }{ return ( c*d ); }

    Prototip funkcije obimNavedeni samo tipovi argumenata

    Prototip funkcije povrsNavedeni tipovi i imena argumenata

    Poziv funkcije obimPoziv funkcije povrs

    alju se stvarni podaci a i b

    Definicija funkcije obimFunkcija prihvata proslijeene

    vrijednosti (a i b) kroz formalne argumente x i y

    Funkcija izraunava obim 2*x+2*y i to vraa u glavni program

  • 977..33.. FunkcijeFunkcije

    FUNKCIJE ?FUNKCIJE ?

    PrimjerPrimjer:: Funkcija koja ne vraFunkcija koja ne vraa vrijednosta vrijednost

    #include #include void kvadrat ( int );void kvadrat ( int );main()main(){{

    intint i,n;i,n;do do { { printfprintf((n =n = ); ); scanf(scanf(%d%d, &n); }, &n); }while (n

  • 10

    77..33.. FunkcijeFunkcije

    FUNKCIJE ?FUNKCIJE ?

    PrimjerPrimjer:: Program koji ispisuje prvih n prostih brojeva. Program koji ispisuje prvih n prostih brojeva. Provjera da li je broj prost vrProvjera da li je broj prost vri se u funkciji prost.i se u funkciji prost.

    #include #include #include #include int prost (int);int prost (int);main()main(){{

    int i=1, broj=1, n;int i=1, broj=1, n;do do { { printfprintf((n =n = ); ); scanf(scanf(%d%d, &n); }, &n); }while (n

  • 11

    77..44.. PrenosPrenos parametaraparametaraprenos putem prenos putem

    VRIJEDNOSTI ?VRIJEDNOSTI ?

    Prenos parametara u funkciju putem VRIJEDNOSTIPrenos parametara u funkciju putem VRIJEDNOSTIU prethodnim primjerima koriU prethodnim primjerima koriten je prenos parametara putem VRIJEDNOSTI:ten je prenos parametara putem VRIJEDNOSTI:

    1. prilikom poziva funkcije 1. prilikom poziva funkcije alje se vrijednost alje se vrijednost kao stvarni argument kao stvarni argument momoe da se navede: e da se navede:

    ime promjenljiveime promjenljive, neka , neka konstantakonstanta ili ili izrazizraz izraizraunava se vrijednost izraza i ta vrijednost unava se vrijednost izraza i ta vrijednost alje u funkcijualje u funkciju

    2. funkcija prihvata vrijednosti u formalne argumente2. funkcija prihvata vrijednosti u formalne argumente formalni i stvarni argumenti formalni i stvarni argumenti moraju da se slamoraju da se slau u:u u:

    brojubroju, , redoslijeduredoslijedu i i tiputipu formalni argumenti (promjenljive) automatski nastaju prilikomformalni argumenti (promjenljive) automatski nastaju prilikom

    ulaska u funkciju i preuzimaju proslije ulaska u funkciju i preuzimaju proslijeene vrijednostiene vrijednosti3. po izlasku iz funkcije formalni argumenti automatski n3. po izlasku iz funkcije formalni argumenti automatski nestajuestaju

    automatski nastaju i nestaju pa se nazivaju automatski nastaju i nestaju pa se nazivaju automatske promjenljive automatske promjenljive

    U funkciji se kreira slika stvarnih argumenata i koriste te slike, a ne stvarne promjenljive iz glavnog programa, zato nakon izlaska iz funkcije promjenljive u

    glavnom programu ostaju nepromijenjene!!!

  • 12

    77..44.. PrenosPrenos parametaraparametaraprenos putem prenos putem

    VRIJEDNOSTI ?VRIJEDNOSTI ?

    PrimjerPrimjer:: Ilustracija prenosa parametara putem vrijednosti. Ilustracija prenosa parametara putem vrijednosti.

    #include #include void f (int);void f (int);main()main(){{

    int i=10;int i=10;printf(printf(main: %dmain: %d\\nn,i,i););f(i);f(i);printf(printf(main: %dmain: %d\\nn,i,i););

    }}void f (int k)void f (int k){{

    printf(printf(f: %f: %dd\\nn,,kk););kk=20;=20;printf(printf(f: %f: %dd\\nn,,kk););

    }}

    main: 10

    MEMORIJA

    ii1010

    kk10102020

    f: 10f: 20main: 10

  • 13

    77..44.. PrenosPrenos parametaraparametaraprenos VEKTORA u prenos VEKTORA u

    funkciju ?funkciju ?

    VEKTOR (polje) kao argument funkcijeVEKTOR (polje) kao argument funkcijePrenos vektora (polja) vrPrenos vektora (polja) vri se putem adresei se putem adrese

    1. prilikom poziva funkcije 1. prilikom poziva funkcije alje se adresa niza (vektora) alje se adresa niza (vektora) kao stvarni argument kao stvarni argument navodi se ime niza navodi se ime niza

    (ime niza je po(ime niza je poetna adresa niza) etna adresa niza) 2. funkcija prihvata adresu niza2. funkcija prihvata adresu niza

    formalni argument u definicji funkcije mora da sadrformalni argument u definicji funkcije mora da sadri i [ ][ ]brojbroj elemenataelemenata nizaniza nene moramora dada se se navodinavodi

    ne stvara se kopija niza nego se manipuline stvara se kopija niza nego se manipulie stvarnim podacimae stvarnim podacima

    U funkciji se manipulie stvarnim podacima, a ne kopijom niza. Zato funkcija moe da promijeni niz,

    pa po povratku iz funkcije nemamo originalni nego modifikovani niz !!!

  • 14

    77..44.. PrenosPrenos parametaraparametaraprenos VEKTORA u prenos VEKTORA u

    funkciju ?funkciju ?

    PrimjerPrimjer:: Program Program kojikoji pronalapronalazi najvezi najvei element u nizu.i element u nizu.

    #include #include int max ( int nizint max ( int niz[], [], intint nn););main()main(){{int int a[] = { 2,15,5,0,8 }a[] = { 2,15,5,0,8 };;intint n = 5;n = 5;printf(printf(NajveciNajveci: %d: %d\\nn,, max( max( a,na,n ) );) );

    }}intint maxmax ( int ( int nizniz[], [], intint nn )){{intint i, m=niz[0];i, m=niz[0];for (i=1; im) m=niz[iniz[i];];return (m);return (m);

    }}

    Najveci: 15

    Formalni argumentdeklaracija niza bez dimenzije

    moglo je i int niz[5]

    Poziv funkcijealje se adresa niza

  • 15

    77..44.. PrenosPrenos parametaraparametaraprenos VEKTORA u prenos VEKTORA u

    funkciju ?funkciju ?

    PrimjerPrimjer:: Program Program kojikoji sortirasortira i i ispisujeispisuje nizniz korikorienjem funkcija.enjem funkcija.

    #include #include void sort ( int nizvoid sort ( int niz[], [], intint nn););void pisi ( int nizvoid pisi ( int niz[], [], intint nn););main()main(){{

    int int a[] = { 2,15,5,0,8 }a[] = { 2,15,5,0,8 };;intint n=5;n=5;printf(printf(Prije:Prije:); pisi(); pisi( a,na,n ););sort( a,n );sort( a,n );printf(printf(Poslije:Poslije:); pisi(); pisi( a,na,n ););

    }}void pisi ( int void pisi ( int nizniz[], [], intint nn )){{

    intint ii;;for (i=for (i=00; i

  • 16

    77..44.. PrenosPrenos parametaraparametaraprenos prenos MATRICEMATRICE u u

    funkciju ?funkciju ?

    VIVIEDIMENEDIMENZZIONALNO IONALNO poljepolje kao argument funkcijekao argument funkcijePrenos viPrenos viedimenzionalnog polja vredimenzionalnog polja vri se putem adresei se putem adreseU deklaraciji formalnih parametara:U deklaraciji formalnih parametara:

    pprva dimenzija ne mora da se navede (morva dimenzija ne mora da se navede (moe samo e samo [ ] )[ ] ) ostaleostale dimenzijedimenzije morajumoraju dada se se navedunavedu

    PrimjerPrimjer::intint funkcijafunkcija ((intint a[][10][10], a[][10][10], intint p, p, intint q)q)

    iliiliintint funkcijafunkcija ((intint a[10][10][10], a[10][10][10], intint p, p, intint q)q)

    U funkciji se manipulie stvarnim podacima, a ne kopijom polja. Zato po povratku iz funkcije nemamo

    originalno nego modifikovano polje !!!

  • 17

    77..44.. PrenosPrenos parametaraparametaraprenos prenos MATRICEMATRICE u u

    funkciju ?funkciju ?

    PrimjerPrimjer:: Program Program kojikoji transponujetransponuje kvadratnukvadratnu matricumatricu..#include #include void void trantran ( int ( int m[m[1010][10], ][10], intint nn););void pisi ( int void pisi ( int m[10][10], m[10][10], intint nn););main()main(){{

    int int a[a[1010][][1010] = { {1,2},{3,4} }] = { {1,2},{3,4} };;printf(printf(Prije:Prije:\\nn); pisi(); pisi(a,2);a,2);trantran( a,( a,22 ););printf(printf(Poslije:Poslije:\\nn); pisi(); pisi(a,2);a,2);

    }}void pisi (int void pisi (int m[10][10], m[10][10], intint nn)){{

    intint i,ji,j;;for (i=for (i=00; i

  • 18

    77..44.. PrenosPrenos parametaraparametaraprenos prenos STRUKTURESTRUKTURE

    u funkciju ?u funkciju ?

    STRUKTURA STRUKTURA kao argument funkcijekao argument funkcijeStrukuraStrukura momoe biti argument funkcijee biti argument funkcije

    PrimjerPrimjer::voidvoid funkcijafunkcija (( struct tacka a struct tacka a ))

    Ako funkcija vraAko funkcija vraa strukturu treba definisati tip, a zatim u definiciji/deklaa strukturu treba definisati tip, a zatim u definiciji/deklarraciji aciji funkcije navesti da je funkcija toga tipafunkcije navesti da je funkcija toga tipa

    PrimjerPrimjer::typedef struct typedef struct {{intint i,ji,j} TACKA;} TACKA;TACKA TACKA funkcijafunkcija (( TACKATACKA aa, TACKA b, TACKA b ););

  • 19

    77..44.. PrenosPrenos parametaraparametaraprenos prenos STRUKTURESTRUKTURE

    u funkciju ?u funkciju ?

    PrimjerPrimjer:: Program Program kojikoji manipulimanipulie kompleksnim brojevima.e kompleksnim brojevima.#include #include typedef struct typedef struct { float { float re,imre,im; } COMPLEX;; } COMPLEX;COMPLEXCOMPLEX dodjeladodjela ( ( float a, float b float a, float b ))

    { { COMPLEX x;COMPLEX x;x.rex.re=a; =a; x.imx.im=b;=b;return(xreturn(x););

    } } COMPLEXCOMPLEX zbirzbir ( ( COMPLEX x, COMPLEX y COMPLEX x, COMPLEX y ))

    { { COMPLEX z;COMPLEX z;z.rez.re==x.re+y.rex.re+y.re; ; z.imz.im==x.im+y.imx.im+y.im;;return(zreturn(z););

    } } main()main(){{

    COMPLEX COMPLEX x,y,zx,y,z;;x=dodjela(1,2); y=dodjela(3,4);x=dodjela(1,2); y=dodjela(3,4);z=z=zbir(x,yzbir(x,y););printf(printf((%.2f,%.2f)+(%.2f,%.2f)=(%.2f,%.2f)(%.2f,%.2f)+(%.2f,%.2f)=(%.2f,%.2f)\\nn,,

    x.re,x.im,y.re,y.im,z.re,z.imx.re,x.im,y.re,y.im,z.re,z.im););}}

  • 20

    77..55.. RekurzivneRekurzivne funkcijefunkcije

    REKURZIJAREKURZIJA ??

    RekurzivneRekurzivne funkcijefunkcije (REKURZIJE)(REKURZIJE)RekurzivnaRekurzivna funkcijafunkcija jeje funkcijafunkcija kojakoja samasama sebesebe pozivapoziva!!!!!!

    PrimjerPrimjer::faktorijelfaktorijel:: n! = n * (nn! = n * (n--1)!, n>1)!, n>00; 0!=1 ; 0!=1 stepenovanjestepenovanje:: xxnn = x * x= x * xnn--11, n>0; x, n>0; x00=1 =1 FibonaFibonaijevijev nizniz:: ffnn = = ffnn--11 * * ffnn--22, n>, n>11; ; ff00==0, f0, f11==11

    OpOpte karakteristike rekurzivnih (rekurentnih) rjete karakteristike rekurzivnih (rekurentnih) rjeenja:enja: problem se svodi na rjeproblem se svodi na rjeavanje istog problema, ali jednostavnijegavanje istog problema, ali jednostavnijeg funkcija poziva samu sebe sve dok se problem ne pojednostavi do funkcija poziva samu sebe sve dok se problem ne pojednostavi do trivijalnogtrivijalnog rekurzivna rjerekurzivna rjeenja su manje efikasna (veenja su manje efikasna (vei zahtjev za memorijom)i zahtjev za memorijom) treba ih izbjegavati, ali postoje problemi koji su po prirodi retreba ih izbjegavati, ali postoje problemi koji su po prirodi rekurzivni i koje jekurzivni i koje je

    gotovo nemogugotovo nemogue rijee rijeiti bez rekurzijeiti bez rekurzije

  • 21

    77..55.. RekurzivneRekurzivne funkcijefunkcije

    REKURZIJAREKURZIJA ??

    Matematski opis rekurzije:Matematski opis rekurzije:n! = n * (nn! = n * (n--1)!, n>0; 0!=1 1)!, n>0; 0!=1

    PrimjerPrimjer:: Rekurzivno izraRekurzivno izraunavanje faktorijela.unavanje faktorijela.

    3! = 3 * 2!3! = 3 * 2!

    2! = 2 * 1!2! = 2 * 1!

    1! = 1 * 0!1! = 1 * 0!

    0! = 10! = 1

    1*1 = 11*1 = 1

    2*1 = 22*1 = 2

    3*2 = 63*2 = 6

    int fakt (int n)int fakt (int n){ { if (n == 0) if (n == 0) return (1);return (1);

    elseelsereturn (n * fakt(nreturn (n * fakt(n--1));1));

    }}

    int fakt (int n)int fakt (int n){ { return (n==0 ? 1 : n*fakt(nreturn (n==0 ? 1 : n*fakt(n--1));1));

    }}

  • 22

    77..55.. RekurzivneRekurzivne funkcijefunkcije

    REKURZIJAREKURZIJA ??

    PrimjerPrimjer:: RekurzivnRekurzivna a funkcijafunkcija zaza konverzijukonverziju dekadskogdekadskog u u binarnibinarni brojnibrojni sistemsistem..

    14141010 = ?= ?22 voidvoid konkon (int (int bb)){ { intint cifcif;;cifcif = b % 2;= b % 2;b /= 2;b /= 2;if (b>0) if (b>0) konkon (b);(b);printf(printf(%d%d,cif,cif); );

    }}

    19 : 219 : 2

    99 1144 1122 0011 0000 11

    14141010 = 10011= 1001122

    1919cifcif=1=1b=9b=9kon(9) => kon(9) => cifcif=1=1

    b=4b=4kon(4) => kon(4) => cifcif=0=0

    b=2 b=2 kon(2) => kon(2) => cifcif=0=0

    b=1b=1kon(1) => kon(1) => cifcif=1=1

    b=0b=011

    00

  • 23

    77..66.. DomeniDomeni i i memorijskememorijske klaseklase

    DomenDomen identifikatoraidentifikatora??

    DomenDomen identifikatoraidentifikatoraDomenDomen (oblast definisanosti) identifikatora (promjenljive) je podru(oblast definisanosti) identifikatora (promjenljive) je podruje je programa u kojem je taj identifikator dostupan (vidljiv)programa u kojem je taj identifikator dostupan (vidljiv)Osnovno pravilo:Osnovno pravilo: Identifikator je dostupan u bloku u

    kojem je definisan, kao i u svim ugnjeenim blokovima, osim ako u

    njima nije maskiran drugim identifikatorom sa istim imenom!PrimjerPrimjer::

    #include #include main()main(){{

    int x=1;int x=1;printf(printf(Prije bloka: %dPrije bloka: %d\\nn,x,x););{{

    intint x=0;x=0;printf(printf(UU blokubloku: %: %dd\\nn,x,x););

    }}printf(printf(PoslijePoslije bloka: %dbloka: %d\\nn,x,x););

    }}

    Prije bloka: 1U bloku: 0Poslije bloka: 1

    U ugnjeenom blokuje definisana

    promjenljiva saistim imenom, ime

    je maskirana promjenljiva x iz funkcije main()

  • 24

    77..66.. DomeniDomeni i i memorijskememorijske klaseklase

    Memorijske klaseMemorijske klase??

    Memorijske klase promjenljivihMemorijske klase promjenljivihU programskom jeziku C razlikujemo 4 memorijske klase promjenljiU programskom jeziku C razlikujemo 4 memorijske klase promjenljivih:vih:

    globalneglobalnedefinidefiniu se izvan svih funkcijau se izvan svih funkcija

    statistatikekedefinidefiniu se koriu se korienjem kljuenjem kljune rijene rijei i staticstatic

    static tip ime=vrijednoststatic tip ime=vrijednost automatskeautomatske

    definidefiniu se koriu se korienjem kljuenjem kljune rijene rijei i autoautoauto tip ime=vrijednostauto tip ime=vrijednost

    podrazumijeva se da je promjenljiva automatska, ako se podrazumijeva se da je promjenljiva automatska, ako se drugadrugaije ne navedeije ne navede

    registarskeregistarskedefinidefiniu se koriu se korienjem kljuenjem kljune rijene rijei i registerregister

    register tip ime=vrijednostregister tip ime=vrijednost

  • 25

    77..6.6. DomeniDomeni i i memorijskememorijske klaseklaseAutomatskeAutomatske

    promjenljive?promjenljive?

    AutomatskeAutomatske promjenljivepromjenljiveAutomatskeAutomatske promjenljivepromjenljive definidefiniu seu se na pona poetku tijela funkcije (glavnog programa etku tijela funkcije (glavnog programa ili potprograma). ili potprograma). esto se koristi i termin esto se koristi i termin lokalna promjenljivalokalna promjenljiva..PoPoetna vrijednost im se ne podrazumijeva!!! (To znaetna vrijednost im se ne podrazumijeva!!! (To znai da nije nula!!!)i da nije nula!!!)Mogu da se koriste samo u funkciji u kojoj su definisane. To znaMogu da se koriste samo u funkciji u kojoj su definisane. To znai da isto ime i da isto ime momoemo da koristimo nezavisno u viemo da koristimo nezavisno u vie razlie razliitih funkcija. itih funkcija. ak te promjenljive ak te promjenljive mogu da budu i razlimogu da budu i razliitih tipova.itih tipova.Automatski nastaju prilikom ulaska u funkciju, a automatski nestAutomatski nastaju prilikom ulaska u funkciju, a automatski nestaju nakon aju nakon izlaska iz funkcije.izlaska iz funkcije.Podrazumijeva se da je promjenljiva automatska ako se drugaPodrazumijeva se da je promjenljiva automatska ako se drugaije ne navedeije ne navedeNe mora se eksplicitno navoditi da se radi o automatskoj promjenNe mora se eksplicitno navoditi da se radi o automatskoj promjenljivoj, ali moljivoj, ali moe e pomopomou kljuu kljune rijene rijei autoi auto

    auto tip ime=vrijednost;auto tip ime=vrijednost;

  • 26

    7.67.6.. DomeniDomeni i i memorijskememorijske klaseklaseAutomatske Automatske

    promjenljive?promjenljive?

    PrimjerPrimjer:: Maniulacija automatskim promjenljivima.Maniulacija automatskim promjenljivima.#include #include void f1 ()void f1 ()

    {{ int i=1;int i=1;printf(printf(f1: %df1: %d\\nn, i);, i);

    }}void f2 ()void f2 ()

    {{ int i=2;int i=2;printf(printf(f2: %df2: %d\\nn, i);, i);i=10;i=10;

    }}main()main(){{

    int i=0; int i=0; printf(printf(main: %dmain: %d\\nn, i);, i);f1();f1();printf(printf(main: %dmain: %d\\nn, i);, i);i=5;i=5;f2();f2();printf(printf(main: %dmain: %d\\nn, i);, i);

    }}

    main: 0 f1: 1main: 0 f2: 2main: 5

  • 27

    7.67.6.. DomeniDomeni i i memorijskememorijske klaseklase

    StatiStatike promjenljive?ke promjenljive?

    StatiStatike promjenljiveke promjenljiveDefiniDefiniu se navoenjem kljuu se navoenjem kljune rijene rijei i staticstatic

    static tip ime=vrijednoststatic tip ime=vrijednostVrijednost im se odreuje prije poVrijednost im se odreuje prije poetka izvretka izvravanja programaavanja programa

    uzima se eksplicitna vrijednost kojom je inicijalizovana promjeruzima se eksplicitna vrijednost kojom je inicijalizovana promjernljivanljivapodrazumijeva se popodrazumijeva se poetna vrijednost nula ako se ne navedeetna vrijednost nula ako se ne navede

    Imaju trajan karakterImaju trajan karakterpostoje od popostoje od poetka do kraja izvretka do kraja izvravanja programaavanja programavrijednost ostaje savrijednost ostaje sauvana do sljedeuvana do sljedeeg poziva date funkcijeeg poziva date funkcije

  • 28

    7.67.6.. DomeniDomeni i i memorijskememorijske klaseklase

    StatiStatike promjenljive?ke promjenljive?

    PrimjerPrimjer:: Maniulacija statiManiulacija statikom promjenljivom.kom promjenljivom.

    #include #include void f ()void f (){{

    static int brs=1;static int brs=1;auto int bra=1;auto int bra=1;printf(printf(static brs=%d auto bra=%dstatic brs=%d auto bra=%d\\nn, brs, bra);, brs, bra);brs++;brs++;bra++;bra++;

    }}main()main(){{

    int i; int i; for (i=1; i

  • 29

    7.67.6.. DomeniDomeni i i memorijskememorijske klaseklase

    Globalne promjenljive?Globalne promjenljive?

    Globalne promjenljiveGlobalne promjenljiveGlobalne promjenljive definiGlobalne promjenljive definiu se izvan svih funkcija. u se izvan svih funkcija. Ako se u definiciji ne navede Ako se u definiciji ne navede popoetna vrijednost podrazumijeva se nula!!!etna vrijednost podrazumijeva se nula!!!Globalna promjenljiva dostupna je u svim funkcijama koje su defiGlobalna promjenljiva dostupna je u svim funkcijama koje su definisane nakon nisane nakon definicije date promjenljive.definicije date promjenljive.Globalne promjenljive omoguGlobalne promjenljive omoguavaju da viavaju da vie funkcija manipulie funkcija manipulie istim skupom e istim skupom podataka, pa omogupodataka, pa omoguavaju efikasnu razmjenu podataka izmeu funkcija avaju efikasnu razmjenu podataka izmeu funkcija (jer sve (jer sve funkcije pristupaju istim memrijskim lokacijama).funkcije pristupaju istim memrijskim lokacijama).Treba ih izbjegavati jer se gubi univerzalnost funkcije i fleksiTreba ih izbjegavati jer se gubi univerzalnost funkcije i fleksibilnost primjene na bilnost primjene na razlirazliite setove podataka.ite setove podataka.Ako se u nekoj funkciji definiAko se u nekoj funkciji definie promjenljiva sa istim imenom kao i neka globalna, e promjenljiva sa istim imenom kao i neka globalna, tada ta lokalna promjenljiva maskira globalnu i globalnoj ne motada ta lokalna promjenljiva maskira globalnu i globalnoj ne moe da se pristupi.e da se pristupi.Ako se u nekoj funkciji koristi neka globalna promjenljiva to moAko se u nekoj funkciji koristi neka globalna promjenljiva to moe da se e da se eksplicitno naglasi deklaracijom korieksplicitno naglasi deklaracijom korienjem kljuenjem kljune rijene rijei extern, iako ne postoji i extern, iako ne postoji obaveza da se globalne promjenljive deklariobaveza da se globalne promjenljive deklariu u funkcijiu u funkciji

    extern tip promjenljiva;extern tip promjenljiva;

  • 30

    7.67.6.. DomeniDomeni i i memorijskememorijske klaseklase

    Globalne promjenljive?Globalne promjenljive?

    PrimjerPrimjer:: Maniulacija globalnom promjenljivom.Maniulacija globalnom promjenljivom.#include #include void f1 ()void f1 ()

    {{ int i=1;int i=1;printf(printf(f1: %df1: %d\\nn, i);, i);

    }}int i;int i;void f2 ()void f2 ()

    {{ extern int i;extern int i;printf(printf(f2: %df2: %d\\nn, i);, i);i=10;i=10;

    }}main()main(){{

    printf(printf(main: %dmain: %d\\nn, i);, i);f1();f1();printf(printf(main: %dmain: %d\\nn, i);, i);i=5;i=5;f2();f2();printf(printf(main: %dmain: %d\\nn, i);, i);

    }}

    main: 0 f1: 1main: 0 f2: 5main: 10

    globalna promjenljiva

    i=0

    Globalna promjenljiva i nije vidljiva u funkciji f1() jer je

    definisana nakon funkcije.U funkciji f1() raspoloiva je

    lokalna promjenljiva i.

    U funkciji f2() koristi se globalna promjenljiva i.

    Deklaracija extern int i mogla je da se izostavi

  • 31

    7.67.6.. DomeniDomeni i i memorijskememorijske klaseklaseRegistarske Registarske

    promjenljive?promjenljive?

    Registarske promjenljiveRegistarske promjenljiveRegistarske promjenljive su automatske promjenljive za koje je iRegistarske promjenljive su automatske promjenljive za koje je izrazraena ena elja da elja da se drse dre u registrima procesora, a ne u memoriji, kako bi se dobilo na e u registrima procesora, a ne u memoriji, kako bi se dobilo na brzini.brzini.PoPoeljno je korieljno je korienje registarskih promjenljivih kod promjenljivih koje se enje registarskih promjenljivih kod promjenljivih koje se esto esto koriste (npr. brojakoriste (npr. broja))Ne garantuje se da Ne garantuje se da e promjenljiva stvarno i biti registarska. To zavisi i od e promjenljiva stvarno i biti registarska. To zavisi i od konkretnog prevodioca, procesora , ukupnog broja registarskih prkonkretnog prevodioca, procesora , ukupnog broja registarskih promjenljivih do omjenljivih do trenutka deklaracije date promjenljive...trenutka deklaracije date promjenljive...Broj registarskih promjenljivih je ograniBroj registarskih promjenljivih je ogranien i malen.en i malen.Registarske promjenljive definiRegistarske promjenljive definiu se uz pomou se uz pomo kljukljune rijene rijei i registerregister

    register tip ime=vrijednostregister tip ime=vrijednostPrimjer:Primjer:

    register int i=10;register int i=10;register register intint j;j;

    OSNOVI PROGRAMIRANJA( VII )FUNKCIJE7.1. Potprogrami7.2. Funkcijski potprogrami7.3. Funkcije7.3. Funkcije7.3. Funkcije7.3. Funkcije7.3. Funkcije7.3. Funkcije7.3. Funkcije7.4. Prenos parametara7.4. Prenos parametara7.4. Prenos parametara7.4. Prenos parametara7.4. Prenos parametara7.4. Prenos parametara7.4. Prenos parametara7.4. Prenos parametara7.4. Prenos parametara7.5. Rekurzivne funkcije7.5. Rekurzivne funkcije7.5. Rekurzivne funkcije7.6. Domeni i memorijske klase7.6. Domeni i memorijske klase7.6. Domeni i memorijske klase7.6. Domeni i memorijske klase7.6. Domeni i memorijske klase7.6. Domeni i memorijske klase7.6. Domeni i memorijske klase7.6. Domeni i memorijske klase7.6. Domeni i memorijske klase