PJ10-Potprogrami

Embed Size (px)

Citation preview

  • 8/19/2019 PJ10-Potprogrami

    1/46

    1

    POTPROGRAMI

  • 8/19/2019 PJ10-Potprogrami

    2/46

    2

     Pojam potprograma Pojam potprogramaGlavniprogram

    Potprogram

  • 8/19/2019 PJ10-Potprogrami

    3/46

    3

    OPŠTE KARAKTERISTIKE OPŠTE KARAKTERISTIKE 

    Svaki potprogram ima jednu ulaznu tačku. Izuzetakod ovog pravila postoji jedino u FORTRA!u gde

     je mogu"e de#inisati vi$e različiti% ulaza u potprogram.

    &rogram koji poziva potprogram prekida svojuaktivnost sve dok se ne zavr$i potprogram. To značida se u jednom trenutku izvr$ava samo jedan

     potprogram. &o zavr$etku potprograma upravljanje se vra"a

     programu koji ga je pozvao.

  • 8/19/2019 PJ10-Potprogrami

    4/46

    '

     ELEMENTI POTPROGRAMA ELEMENTI POTPROGRAMA

    &otprogram karakteri$u četri osnovnaelementa( ime potprograma lista imena argumenata )#iktivni argumenti* telo potprograma sredina u kojoj potprogram de#inisan.

  • 8/19/2019 PJ10-Potprogrami

    5/46

    +

    TIPOVI POTPROGRAMATIPOVI POTPROGRAMA

    #unk,ijski potprogrami )#unk,ije*function I-/F0I )4ista argumenata* return integer is

    Opisi lokalni% promenljivi%5Telo #unk,ije

    return

    end I-/F0I5

     potprogrami op$teg tipa )pro,edure*procedure I-/&RO60R )4ista argumenata*Opisi lokalni% promenljivi%5Telo pro,edure

    end I-/&RO60R5

  • 8/19/2019 PJ10-Potprogrami

    6/46

    7

    OPIS POTPROGRAMAOPIS POTPROGRAMA

    procedure Ime/&otpr )4ista #iktivni% arg*5

    Opisi lokalni% promenljivi%5

    Telo potprograma

    end  Ime/potprograma5

  • 8/19/2019 PJ10-Potprogrami

    7/468

     ARGUMENTI POTPROGRAMA ARGUMENTI POTPROGRAMA

    Fiktivnim argumentima de#ini$e se skup ulazno izlazni%veličina potprograma. od poziva potprograma #iktivniargumenti se zamenjuju stvarnim koji mora da se sla9u potipu: dimenzijama i redosledu navo;enja #iktivni%argumenata. pr.

    procedure &R1)A:

  • 8/19/2019 PJ10-Potprogrami

    8/46

     PRIMERI FUNKCIJA PRIMERI FUNKCIJA

    Algol 60

    integer procedure SUM (n);

    n: integer;  begin { Telo fn!"i#e $

    i% POM : integer; { Opi& lo!alni'promenl#ivi' $

    POM : 0;for i: to n step  doPOM : POM * i;SUM : POM { re+ltat $

      end,

  • 8/19/2019 PJ10-Potprogrami

    9/46B

     PRIMERI FUNKCIJA PRIMERI FUNKCIJA

  • 8/19/2019 PJ10-Potprogrami

    10/461>

     PRIMERI FUNKCIJA PRIMERI FUNKCIJA

     Fortran Fortran

  • 8/19/2019 PJ10-Potprogrami

    11/4611

     PRIMERI FUNKCIJA PRIMERI FUNKCIJA

  • 8/19/2019 PJ10-Potprogrami

    12/4612

     PRIMERI FUNKCIJA PRIMERI FUNKCIJA

    A-A

  • 8/19/2019 PJ10-Potprogrami

    13/4613

     PRIMERI PROCEDURA PRIMERI PROCEDURA

    Algol

  • 8/19/2019 PJ10-Potprogrami

    14/461'

     PRIMERI PROCEDURA PRIMERI PROCEDURA

    FORTRAN

  • 8/19/2019 PJ10-Potprogrami

    15/46

    1+

     PRIMERI PROCEDURA PRIMERI PROCEDURA

    ADA

  • 8/19/2019 PJ10-Potprogrami

    16/46

    17

     PRENOS ARGUMENATA PRENOS ARGUMENATA

    Semanti.!i po&matrano preno& argmenata potprogram mo/e a 1e po #enom o tri

    &emati.!a moela, Potprogram mo/e a:2 o glavnog programa primi vreno&tparametra%2 a m prea vreno&t2 a primi vreno&t i prea re+ltat glavnom

    program,Ova tri &emanti.!a moela na+iva# &e: in, out iinout% re&pe!tivno:

  • 8/19/2019 PJ10-Potprogrami

    17/46

    18

    3all

     PRENOS ARGUMENATA PRENOS ARGUMENATA

    a 4

    Retrn1 5

    Retrn" +

    3all

    procedure S0

  • 8/19/2019 PJ10-Potprogrami

    18/46

    1

     PRENOS PO VREDNOSTI  PRENOS PO VREDNOSTI Call ! "al#$Call ! "al#$

    a

    4

    Glavni program

    Potprogram

  • 8/19/2019 PJ10-Potprogrami

    19/46

    1B

     PRENOS PO REFERENCI  PRENOS PO REFERENCI 

    Call ! r$%$r$n&$Call ! r$%$r$n&$

    1

    5

    Glavni program

    Potprogram

  • 8/19/2019 PJ10-Potprogrami

    20/46

    2>

     PRENOS PO REFERENCI  PRENOS PO REFERENCI 

    Call ! r$%$r$n&$Call ! r$%$r$n&$

  • 8/19/2019 PJ10-Potprogrami

    21/46

    21

     DRUGE TE'NIKE PRENOSA DRUGE TE'NIKE PRENOSA

    &renos po rezultatu ),all ED result* &renos po vrednosti i rezultatu ),all ED

    alue!Result* &renos po imenu )all ED ame*

  • 8/19/2019 PJ10-Potprogrami

    22/46

    22

    Call ! Nam$Call ! Nam$

    all S0-A)A: I: 1>>*

  • 8/19/2019 PJ10-Potprogrami

    23/46

    23

    Call ! Nam$Call ! Nam$

    all S0-A)A)I*: I: 1>>*

    all S0-A)A)I*GA)I*: I: 1>>*

  • 8/19/2019 PJ10-Potprogrami

    24/46

    2'

    R78UR9II

    POTPROGRAMI

  • 8/19/2019 PJ10-Potprogrami

    25/46

    2+

     D%(n(&(ja D%(n(&(ja

     eki programski jezi,i dozvoljavaju poziv potprograma utelu samog tog potprograma. Takvi potprogrami nazivajuse rekurzivnim i pogodno su sredstvo za re$avanje proElema koji su matematički rekurzivno de#inisani(

    Tipičan primer rekurzivnog potprograma je potprogramza izračunavanje #aktorijela #unk,ije(

  • 8/19/2019 PJ10-Potprogrami

    26/46

    27

     Pa)&al ( A*a Pa)&al ( A*a

    function 

  • 8/19/2019 PJ10-Potprogrami

    27/46

    28

    Gra% po+("a potprogramaGra% po+("a potprograma

    Gra% po+("a potprograma FAT +a  ? '

  • 8/19/2019 PJ10-Potprogrami

    28/46

    2

     F(ona,(j$" n(+ F(ona,(j$" n(+

  • 8/19/2019 PJ10-Potprogrami

    29/46

    2B

     'anoj)-$ -#l$ 'anoj)-$ -#l$

    Pro"era &e po+iva +a na primer anoi(B% % B% C),D,EE6,FEE,0FB,F0,HH,

    +a n6E

  • 8/19/2019 PJ10-Potprogrami

    30/46

    3>

    Organ(+a&(ja m$mor(j$Organ(+a&(ja m$mor(j$ -emorija dodeljena jednom programu

    mo9e da se podeli na slede"e delove(6eo sa generisanim kodom &olje podataka Stek H koji sadr9i aktiva,ione slogove svi%

     pro,edura

     ode

     Polj$  po*ata-a

     Sta&-  

     '$ap

     A-t("a&(on( )logo"(

     D(nam(,-$ )tr#-t#r$ pro&$*#ra

  • 8/19/2019 PJ10-Potprogrami

    31/46

    31

    Str#-t#ra a-t("a&(onog )logaStr#-t#ra a-t("a&(onog )loga

     R$+#ltat( -oj$ "ra.a potprogram

    St"arn( param$tr(

    Upra"lja,-( l(n-o"( /op&(ono0 L(n-o"( +a pr()t#p po*a&(ma

    /op&(ono0

     Po*a&( o )tat#)# Lo-aln( po*a&(

    T$mporaln$ prom$nlj("$

  • 8/19/2019 PJ10-Potprogrami

    32/46

    32

    Str#-t#ra a-t("a&(onog )logaStr#-t#ra a-t("a&(onog )loga

    Temporalne promenljive H &romenljive koje generi$ekompilator prilikom evalua,ije aritmetički% izraza

    4okalni poda,i potprograma &olje gde se pamti status pro,esora prilikom

     preno$enja upravljanja na potprogram Op,ioni linkovi do nelokalni% podataka koji su

    sadr9ani u drugim aktiva,ionim slogovima. Op,ioni linkovo do aktiva,ionog sloga programa iz

    kojeg je poDvan potprogram. Stvarni argumenti potprograma &olje preko kojeg se vra"aju rezultati u glavni

     program.

  • 8/19/2019 PJ10-Potprogrami

    33/46

    33

    Strat$g(j$ alo-a&(j$ m$mor(j$Strat$g(j$ alo-a&(j$ m$mor(j$

     Statička aloka,ija svi% oEjekata u vremekompila,ije.

    Aloka,ija pomo"u steka

    6inamička aloka,ija pomo"u eap!a.

  • 8/19/2019 PJ10-Potprogrami

    34/46

    3'

    Stat(,-a alo-a&(ja m$mor(j$Stat(,-a alo-a&(ja m$mor(j$

    0 toku kompiliranja programa generi$e se po jedanaktiva,ioni slog za svaku od pro,edura tako da se istiaktiva,ioni slog koristi kod svakog poziva

     potprograma.  ema mogu"nosti za rekurzivne pozive pro,edura Strukture podataka se ne mogu kreirati dinamički.

    &rimenjuje se kod implementa,ije jezika Fortran 88.

  • 8/19/2019 PJ10-Potprogrami

    35/46

    3+

     Pr(m$r  Pr(m$r 

      &RO=RA- S0-ARATR G +>

  • 8/19/2019 PJ10-Potprogrami

    36/46

    37

    Stat(Stat(, , -a ra)po*$la m$mor(j$-a ra)po*$la m$mor(j$ +a program (+ pr(m$ra +a program (+ pr(m$ra

    od za S0-

    od za &RO60&

    ARATR G +>

  • 8/19/2019 PJ10-Potprogrami

    37/46

    38

    STEK alo-a&(jaSTEK alo-a&(ja

    -emorija je organizovana kao stek. &rilikom svakog poziva pro,edure u stek se uEa,uje njen

    aktiva,ioni slog.

    Slog se izEa,uje iz steka kada se pro,edura zavr$i. Ova te%nika omogu"ava rekurzivne pozive potprograma.0 tom slučaju u steku se nalazi vi$e aktiva,ioni% slogovaistog potprograma i svaki sadr9i odgovaraju"e podatke.

    0 vreme kompiliranja programa zna se samo veličinaaktiva,ionog sloga ali ne i duEina rekurzije )koliko "eaktiva,ioni% slogova jednog potprograma Eiti generisano*.

  • 8/19/2019 PJ10-Potprogrami

    38/46

    3

     Pr(m$r Pr(m$r

     program sort )input: output*5  var a( arraD Q>..1> o# integer5   pro,edure readarraD5

    var i( integer5 Eegin  #or i (? 1 to B do read )aQi*end5

      #un,tion partition )D:z ( integer*( integer5var i: j: C: v( integer5

     Eegin end5

     

  • 8/19/2019 PJ10-Potprogrami

    39/46

    3B

     Pr(m$r Pr(m$r pro,edure uiksort )m:n( integer*5  var i( integer5  Eegini# )n@m* t%en

     Eegini (? partition )m:n*5uiksort)m: i!1*5uiksort)iN1: n*5

    end  end5

     Eegin

      aQ> (? !BBBB5  aQ1> (? BBBB5  readarraD5  uiksort)1:B*5

    end.

    A- ( ( lA-t( ( t l t

  • 8/19/2019 PJ10-Potprogrami

    40/46

    '>

     A-t("a&(ono )talo A-t("a&(ono )talo +a )ort  +a )ort 

    Sr 

    )1:B*

     p)1:B*)1:3*

    )+:B*

     p)1:3* )1:>*

    )2:3*  p)+:B* )+:+*)8:B*

    )3:3*)2:1* p)2:3* )8:8*

     p)8:B* )B:B*

  • 8/19/2019 PJ10-Potprogrami

    41/46

    '1

    STEK alo-a&(ja +a pr(m$rSTEK alo-a&(ja +a pr(m$r

     programa SORT  programa SORT 

     )

    a1 arra!

    ATIAIOIS4O=OI 0 ST0

     )

    ATIAIOOSTA

  • 8/19/2019 PJ10-Potprogrami

    42/46

    '2

    STEK alo-a&(ja +a pr(m$rSTEK alo-a&(ja +a pr(m$r

     programa SORT  programa SORT 

     )

    a( arraD

    ATIAIOIS4O=OI 0 ST0

     )

    ATIAIOOSTA

  • 8/19/2019 PJ10-Potprogrami

    43/46

    '3

    STEK alo-a&(ja +a pr(m$rSTEK alo-a&(ja +a pr(m$r

     programa SORT  programa SORT 

    s

    a( arraD

    ATIAIOIS4O=OI 0 ST0

     )

    ATIAIOOSTA

  • 8/19/2019 PJ10-Potprogrami

    44/46

    ''

    STEK alo-a&(ja +a pr(m$rSTEK alo-a&(ja +a pr(m$r

     programa SORT  programa SORT 

    s

    a( arraD

    ATIAIOIS4O=OI 0 ST0

     )

    ATIAIOOSTA

  • 8/19/2019 PJ10-Potprogrami

    45/46

    '+

    STEK alo-a&(ja +a pr(m$rSTEK alo-a&(ja +a pr(m$r

     programa SORT  programa SORT 

    s

    a( arraD

    ATIAIOIS4O=OI 0 ST0

     )

    ATIAIOOSTA

  • 8/19/2019 PJ10-Potprogrami

    46/46

     D(nam(,-a alo-a&(ja D(nam(,-a alo-a&(ja

    s

    &ontrol l(n- 

    ATIAIOIS4O=OI 0 A&!u

     )

    ATIAIOOSTA