Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 46

POTPROGRAMI

Pojam potprograma
Glavni
progra
m

Potprogram

OPTE KARAKTERISTIKE

Svaki potprogram ima jednu ulaznu taku. Izuzetak


od ovog pravila postoji jedino u FORTRAN-u gde
je mogue definisati vie razliitih ulaza u
potprogram.
Program koji poziva potprogram prekida svoju
aktivnost sve dok se ne zavri potprogram. To znai
da se u jednom trenutku izvrava samo jedan
potprogram.
Po zavretku potprograma upravljanje se vraa
programu koji ga je pozvao.
3

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)

function IME_FUNKCIJE (Lista argumenata) return integer is


Opisi lokalnih promenljivih;
Telo funkcije
return
end IME_FUNKCIJE;

potprogrami opteg tipa (procedure)


procedure IME_PROCEDURE (Lista argumenata)
Opisi lokalnih promenljivih;
Telo procedure
end IME_PROCEDURE;

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

procedure SUB(x : in INTEGER, y:


out INTEGER, z: inout INTEGER);

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

DRUGE TEHNIKE PRENOSA


Prenos po rezultatu (call by result)
Prenos po vrednosti i rezultatu (call by
Value-Result)
Prenos po imenu (Call by Name)

21

Call by Name

Call SUMA(A, I, 100)

22

Call by Name

Call SUMA(A(I)*A(I), I, 100)

Call SUMA(A(I), I, 100)

23

REKURZIVNI
POTPROGRAMI

24

Dfinicija

Neki programski jezici dozvoljavaju poziv potprograma u


telu samog tog potprograma. Takvi potprogrami nazivaju
se rekurzivnim i pogodno su sredstvo za reavanje
problema koji su matematiki rekurzivno definisani:
Tipian primer rekurzivnog potprograma je potprogram
za izraunavanje faktorijela funkcije:

25

Pascal i Ada
Pascal

function FACT (N : PRIRODNI) return FLOAT


is
begin
if N > 1 then return FLOAT (N) *
FACT(N-1)
else return 1.0;
26
ADA

Graf poziva potprograma

Graf poziva potprograma FACT za N = 4


27

Fibonaijev niz

28

Hanojske kule

Procedura se poziva za na primer Hanoi(3, 1, 3, 2).

18.446.744.073.709.551.6
za n=64
29

Organizacija memorije

Memorija dodeljena jednom programu


moe da se podeli na sledee delove:
Deo

sa generisanim kodom
Polje podataka
Stek koji sadri aktivacione slogove svih
procedura
Code

Polje podataka
Stack

Aktivacioni
slogovi

Heap

Dinamike strukture
procedura
30

Struktura aktivacionog sloga


Rezultati koje vraa potprogram
Stvarni parametri
Upravljaki linkovi (opciono)
Linkovi za pristup podacima
(opciono)
Podaci o statusu
Lokalni podaci
Temporalne promenljive
31

Struktura aktivacionog sloga

Temporalne promenljive Promenljive koje generie


kompilator prilikom evaluacije aritmetikih izraza
Lokalni podaci potprograma
Polje gde se pamti status procesora prilikom
prenoenja upravljanja na potprogram
Opcioni linkovi do nelokalnih podataka koji su
sadrani u drugim aktivacionim slogovima.
Opcioni linkovo do aktivacionog sloga programa iz
kojeg je poyvan potprogram.
Stvarni argumenti potprograma
Polje preko kojeg se vraaju rezultati u glavni
program.
32

Strategije alokacije memorije

Statika alokacija svih objekata u vreme


kompilacije.

Alokacija pomou steka

Dinamika alokacija pomou Heap-a.

33

Statika alokacija memorije

U toku kompiliranja programa generie se po jedan


aktivacioni slog za svaku od procedura tako da se isti
aktivacioni slog koristi kod svakog poziva
potprograma.
Nema mogunosti za rekurzivne pozive procedura
Strukture podataka se ne mogu kreirati dinamiki.
Primenjuje se kod implementacije jezika Fortran 77.

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

CHACTER FUNCTION PRODUCE ( )


CHARACTER * 80 BUFFER
INTEGER NEXT
SAVE BUFFER, NEXT
DATA NEXT /81/
IF (NEXT .GT. 80 ) THEN
READ (*, (A)) BUFFER
NEXT = 1
END IF
PRODUCE = BUFFER(NEXT:NEXT)
NEXT = NEXT + 1
END

35

Statika raspodela memorije


za program iz primera
Kod za CNSUME
KOD
Kod za PRODUCE
c

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

Memorija je organizovana kao stek.


Prilikom svakog poziva procedure u stek se ubacuje njen
aktivacioni slog.
Slog se izbacuje iz steka kada se procedura zavri.
Ova tehnika omoguava rekurzivne pozive potprograma.
U tom sluaju u steku se nalazi vie aktivacionih slogova
istog potprograma i svaki sadri odgovarajue podatke.
U vreme kompiliranja programa zna se samo veliina
aktivacionog sloga ali ne i dubina rekurzije (koliko e
aktivacionih slogova jednog potprograma biti generisano).

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

procedure quiksort (m,n: integer);


var i: integer;
begin
if (n>m) then
begin
i := partition (m,n);
quiksort(m, i-1);
quiksort(i+1, n);
end
end;
begin
a[0] := -9999;
a[10] := 9999;
readarray;
quiksort(1,9);
end.

Primer

39

Aktivaciono stablo za sort


S
r
q(1,9)
p(1,9)
p(1,3)

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

STEK alokacija za primer


programa SORT
AKTIVACIONO
STABLO
s

AKTIVACIONI
SLOGOVI U STEKU
s
a: array

41

STEK alokacija za primer


programa SORT
AKTIVACIONO
STABLO
s

AKTIVACIONI
SLOGOVI U STEKU
s
a: array

r
i: integer

42

STEK alokacija za primer


programa SORT
AKTIVACIONO
STABLO

AKTIVACIONI
SLOGOVI U STEKU
s

a: array
r

q(1,9)

q(1,9)
i: integer

43

STEK alokacija za primer


programa SORT
AKTIVACIONO
STABLO

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

STEK alokacija za primer


programa SORT
AKTIVACIONO
STABLO

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

You might also like