Professional Documents
Culture Documents
PJ10 Potprogrami
PJ10 Potprogrami
Pojam potprograma
Glavni
progra
m
Potprogram
OPTE KARAKTERISTIKE
ELEMENTI POTPROGRAMA
Potprogram karakteriu etri osnovna
elementa:
ime potprograma
lista imena argumenata (fiktivni argumenti)
telo potprograma
sredina u kojoj potprogram definisan.
4
TIPOVI POTPROGRAMA
funkcijski
potprogrami (funkcije)
OPIS POTPROGRAMA
procedure Ime_Potpr (Lista fiktivnih arg);
Opisi lokalnih promenljivih;
Telo potprograma
end Ime_potprograma;
ARGUMENTI POTPROGRAMA
Fiktivnim argumentima definie se skup ulazno izlaznih
veliina potprograma. Kod poziva potprograma fiktivni
argumenti se zamenjuju stvarnim koji mora da se slau po
tipu, dimenzijama i redosledu navoenja fiktivnih
argumenata. Npr.
procedure PR1(A,B: in REAL; C: in out INTEGER);
Mogui pozivi:
PR1(0.0, 100.0, 50);
PR1(A=>0.0, B=>100.0, C=>50);
PR1(B=>100.0, A=>0.0, C=>50);
PR1(0.0, 100.0, C=>50);
PRIMERI FUNKCIJA
Algol 60
integer procedure SUM (n);
n: integer;
begin { Telo funkcije }
i, POM : integer; { Opis lokalnih
promenljivih }
POM := 0;
for i:= 1 to n step 1 do
POM := POM + i;
SUM := POM { rezultat }
end.
PRIMERI FUNKCIJA
PRIMERI FUNKCIJA
Fortran
10
PRIMERI FUNKCIJA
11
PRIMERI FUNKCIJA
ADA
12
PRIMERI PROCEDURA
Algol
13
PRIMERI PROCEDURA
FORTRAN
14
PRIMERI PROCEDURA
ADA
15
PRENOS ARGUMENATA
Semantiki posmatrano prenos argumenata u
potprogram moe da bude po jednom od tri
sematika modela. Potprogram moe da:
od glavnog programa primi vrednost
parametra,
da mu preda vrednost
da primi vrednost i preda rezultat glavnom
programu.
Ova tri semantika modela nazivaju se: in, out i
inout, respektivno:
16
PRENOS ARGUMENATA
SUB(a,b,c)
a
b
c
Call
Return
Call
Return
x
y
z
17
PRENOS PO VREDNOSTI
Call by value
Glavni program
a
Potprogram
18
PRENOS PO REFERENCI
Call by reference
Glavni program
b
Potprogram
19
PRENOS PO REFERENCI
Call by reference
20
21
Call by Name
22
Call by Name
23
REKURZIVNI
POTPROGRAMI
24
Dfinicija
25
Pascal i Ada
Pascal
Fibonaijev niz
28
Hanojske kule
18.446.744.073.709.551.6
za n=64
29
Organizacija memorije
sa generisanim kodom
Polje podataka
Stek koji sadri aktivacione slogove svih
procedura
Code
Polje podataka
Stack
Aktivacioni
slogovi
Heap
Dinamike strukture
procedura
30
33
34
Primer
PROGRAM CNSUME
CHARACTER * 50 BAF
INTEGER NEXT
CHARACTER C, PRODUCE
DATA NEXT /1/, BUF / /
C = PRODUCE ( )
BUF(NEXT:NEXT) = C
NEXT = NEXT + 1
IF (C .NE. ) GO TO 6
WRITE (*, (A)) BUF
END
35
CHARACTER * 50 BUF
INTEGER NEXT
CHARACTER C
Aktivacini
slog za
CNSUME
CHARACTER * 80 BUFFER
INTEGER NEXT
Aktivacini
slog za
PRODUCE
STATIKI
PODACI
36
STEK alokacija
37
Primer
program sort (input, output);
var a: array [0..10] of integer;
procedure readarray;
var i: integer;
begin
for i := 1 to 9 do read (a[i])
end;
function partition (y,z : integer): integer;
var i, j, x, v: integer;
begin
end;
38
Primer
39
q(5,9)
q(1,3)
q(1,0)
p(2,3)
q(2,3)
q(2,1)
p(5,9)
q(3,3)
q(5,5)
q(7,9)
p(7,9)
q(9,9)
q(7,7)
40
AKTIVACIONI
SLOGOVI U STEKU
s
a: array
41
AKTIVACIONI
SLOGOVI U STEKU
s
a: array
r
i: integer
42
AKTIVACIONI
SLOGOVI U STEKU
s
a: array
r
q(1,9)
q(1,9)
i: integer
43
AKTIVACIONI
SLOGOVI U STEKU
s
a: array
r
q(1,9)
q(1,9)
i: integer
p(1,9)
p(1,9)
i: integer
44
AKTIVACIONI
SLOGOVI U STEKU
s
a: array
r
q(1,9)
q(1,9)
i: integer
q(1,3)
p(1,9)
q(1,3)
i: integer
45
Dinamika alokacija
Aktivacioni slogovi se smetaju u dinamiku memoriju i ne
izbacuju se kao kod stek alokacije.
AKTIVACIONO
STABLO
AKTIVACIONI
SLOGOVI U HEAP-u
s
control link
r
q(1,9)
r
control link
q(1,9)
control link
46