Upload
mihajlo-jonic
View
212
Download
0
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