8/19/2019 Subprogram e 2
1/54
Capitolul SUBPROGRAME
1.
NOŢIUNEA DESUBPROGRAM 2. EXEMPLE DE
UTILIZARE A
FUNCŢIILOR
Prof. ADINA-ELENA PIŢIGOI
8/19/2019 Subprogram e 2
2/54
NOŢIUNEA DE SUBPROGRAM
Prin subprogram vom înţelege un
ansamblu alc!ui! "in !ipuri "e "a!e#variabile $i ins!rucţiuni scrise în ve"ereaunei anumi!e prelucrri %calcule# ci!iri#scrieri& $i care poa!e fi u!ili'a! %rula!&
"oar "ac es!e apela! "e un programsau "e al! subprogram.
8/19/2019 Subprogram e 2
3/54
AVANTAJELE UTILIZĂRII
SUBPROGRAMELOR:
reali'area co"ului ( o "a! scris# un subprogrampoa!e fi u!ili'a! "e mai mul!e programe)
elaborarea algori!milor prin "escompunereaproblemei în al!ele mai simple. *n aces! fel# re'olvmcu mul! mai u$or problema)
re"ucerea numrului "e erori care po! aprea la
scrierea programelor) "epis!area cu u$urinţ a erorilor ( verificm la
începu! subprogramele# apoi mo"ul în care le-amapela! în ca"rul programului.
8/19/2019 Subprogram e 2
4/54
EXEMPLE DE UTILIZARE A UNCŢIILOR
+e ci!e$!e n# numr na!ural. + se scrie programelecare !ipresc valoarea calcula! a e,presiilor
;1
...3
1
2
11
1n
E ++++=
;1
...3
1
2
11
2
n
n E
++++=
8/19/2019 Subprogram e 2
5/54
P!i"ul p!o#!a" $%t$:inclu"e /ios!ream.01"ouble subp%in! n&2"ouble s34) in! i)for %i35)i/3n)i66& s63%floa!&57i)re!urn s)8main%&
2in! n)cou!//9n3:)cin11n)cou!//subp%n&)8
8/19/2019 Subprogram e 2
6/54
Al &oil$a p!o#!a" $%t$:inclu"e /ios!ream.01"ouble subp%in! n&2"ouble s34) in! i)for %i35)i/3n)i66& s63%floa!&57i)re!urn s)8main%&2
in! n#i)"ouble re'# pro"35)cou!//9n3:)cin11n)re'3subp%n&)for %i35)i/3n)i66& pro";3re')cou!//pro")8
8/19/2019 Subprogram e 2
7/54
u'()ia (a!$ (al(ul$a*+ p!i"a $,p!$%i$ $%t$:
"ouble subp%in! n&2
"ouble s34) in! i)for %i35)i/3n)i66& s63%floa!&57i)re!urn s)8 An!e!ul funcţiei es!e "ouble subp%in! n&
8/19/2019 Subprogram e 2
8/54
Tipu!i &$ pa!a"$t!i Parametrii care se găsesc în apelul
funcţiei se numesc parametri formali. A!unci c=n" scriem o funcţie nu
cunoa$!em valoarea propriu-'is aparame!rilor.
8/19/2019 Subprogram e 2
9/54
Tipu!i &$ pa!a"$t!i Parametrii care se utilizează la apel se
numesc parametri efectivi.La apel# valorile sun! cunoscu!e. De
aceea se numesc efec!ivi.Pen!ru apelul re'3subp%n&) parame!rul
efec!iv es!e n.
8/19/2019 Subprogram e 2
10/54
St!u(tu!a -u'()iilo! .i ap$lul lo!
O funcţie es!e alc!ui! "in
An!e! ( aces!a conţine mai mul!e informaţiiimpor!an!e necesare compila!orului numelefunc!e!" l!#$% &%'%me$'!l(' f('m%l!" $!&ul'e)ul$%$ulu!.
8/19/2019 Subprogram e 2
11/54
St!u(tu!a -u'()iilo! .i ap$lul lo!
S$uc$u'% %n$e$ulu! e#$e*
tip nume(lista parametrilor formali)L!#$% &%'%me$'!l(' f('m%l! e#$e +e f('m%* &%'%me$'u1"&%'%me$'u2 ",&%'%me$'un
E-!#$ &(#!/!l!$%$e% c% l!#$% &%'%me$'!l(' f('m%l!
# f!e 0!+.F!ec%'e &%'%me$'u %'e f('m%*
$!& nume
8/19/2019 Subprogram e 2
12/54
St!u(tu!a -u'()iilo! .i ap$lul lo! O !n#$'uc!une c(m&u# %ce%#$% cu&'!n+e
+ecl%'%!!le 0%'!%/!lel(' l(c%le ! !n#$'uc!un!le &'(&'!u)!#e.O func!e 'e$u'ne%) 'e)ul$%$ul l% 3n$4ln!'e%
!n#$'uc!un!! 'e$u'n" c%'e e#$e +e f('m%*
'e$u'n e-&'e#!e5T'e/u!e c% $!&ul e-&'e#!e! # c(!nc!+ cu $!&ulfunc!e!.
8/19/2019 Subprogram e 2
13/54
St!u(tu!a -u'()iilo! .i ap$lul lo!
L% 3n$4ln!'e% !n#$'uc!un!! 'e$u'n" +u& %$'!/u!'e%
0%l('!!" e-ecu!% func!e! #e 3nc6e!e 7! #e'e0!ne l% func!% c%'e % %&el%$(. 8n %/#en%!n#$'uc!un!! 'e$u'n" e-ecu!% func!e! #e3nc6e!e +u& e-ecu!% ul$!me! !n#$'uc!un!. 8n
%ce#$ c%) nu #e 3n$(%'ce n!c! ( 0%l(%'e.
8/19/2019 Subprogram e 2
14/54
St!u(tu!a -u'()iilo! .i ap$lul lo!
O func!e &(%$e f! %&el%$ +e #!ne #$$$(' 9&'!n
nume 7! l!#$% &%'%me$'!l(' efec$!0!:" +%' &(%$ef! !nclu# 7! 3n c%+'ul e-&'e#!!l(' " c%) 3n c%'e"l% e0%lu%'e% e-&'e#!e! e#$e %&el%$. Ace%#$f('m +e %&el nu e#$e 0%l%/!l 3n c%)ul
func!!l(' +e $!& 0(!+ .
8/19/2019 Subprogram e 2
15/54
D$(la!a!$a /a!ia0il$lo! S!#$emul +e (&e'%'e %l(c
f!ec'u! &'(;'%m $'e!)(ne +!#$!nc$e 3nmem('!% !n$e'n 3n c%'e#e ;#e#c mem('%$e0%'!%/!lele &'(;'%mulu!.
segmen! "e "a!e
segmen! "e s!iv
>eap
8/19/2019 Subprogram e 2
16/54
D$(la!a!$a /a!ia0il$lo!
segmen! "e "a!e
segmen! "e s!iv
>eap
8/19/2019 Subprogram e 2
17/54
D$(la!a!$a /a!ia0il$lo!
segmen! "e "a!e
segmen! "e s!iv
>eap
8/19/2019 Subprogram e 2
18/54
D$(la!a!$a /a!ia0il$lo! E-!#$ &(#!/!l!$%$e% c% 0%'!%/!lele # f!e mem('%$e 3n$'un
%num!$ 'e;!#$'u %l m!c'(&'(ce#('ulu!. 8n %ce#$ c%)
$!m&ul +e %cce# l% %#$fel +e 0%'!%/!le e#$e f(%'$e m!c"+ec! #e &($ (/!ne &'(;'%me (&$!m!)%$eO 0%'!%/!l #e c%'%c$e'!)e%) &'!n < %$'!/u$e*1. Cl%#% +e mem('%'e52. =!)!/!l!$%$e>. Du'%$% +e 0!%
8/19/2019 Subprogram e 2
19/54
1. Clasa de memorare
P'ec!)e%) l(cul un+e e#$e
mem('%$ 0%'!%/!l% 'e#&ec$!0. O0%'!%/!l &(%$e f! mem('%$ 3n#e;men$ul +e +%$e" 3n cel +e
#$!0" 3n 6e%& #%u 3n$'un 'e;!#$'u%l m!c'(&'(ce#('ulu!
8/19/2019 Subprogram e 2
20/54
2. Vizibilitate
P'ec!)e%) l!n!!le $e-$ulu! #u'# +!n c%'e 0%'!%/!l%'e#&ec$!0 &(%$e f! %cce#%$. A#$fel %0em*
=!)!/!l!$%$e l% n!0el +e /l(c9!n#$'uc!une c(m&u#:5 =!)!/!l!$%$e l% n!0el +e f!7!e' 3n c%)ul 3n c%'e
&'(;'%mul (cu& un #!n;u' f!7!e' #u'#5
=!)!/!l!$%$e l% n!0el +e cl%# e#$e 3n le;$u' cu &'(;'%m%'e% &e (/!ec$e.
8/19/2019 Subprogram e 2
21/54
. !urata de viaţă
Re&'e)!n$ $!m&ul 3n c%'e 0%'!%/!l% 'e#&ec$!0 %'e%l(c%$ #&%!ul 3n mem('!% !n$e'n. A#$fel %0em*
Du'%$% #$%$!c 0%'!%/!l% %'e %l(c%$ #&%!u 3n $($$!m&ul e-ecu!e! &'(;'%mulu!
Du'%$% l(c%l 0%'!%/!l% %'e %l(c%$ #&%!u 3n $!m&ul3n c%'e #e e-ecu$ !n#$'uc!un!le /l(culu! 'e#&ec$!0
Du'%$ +!n%m!c %l(c%'e% 7! +e)%l(c%'e% #&%!ulu!nece#%' 0%'!%/!le! 'e#&ec$!0e #e f%ce +e c$'e &'(;'%m%$(' &'!n (&e'%$('! #%u func!! #&ec!%le.
8/19/2019 Subprogram e 2
22/54
Va!ia0il$l$ #lo0al$+e "eclar în afara corpului oricrei funcţii.?ariabilele a $i b sun! globale. *n as!fel "e
ca'uri# variabilele respec!ive po! fiu!ili'a!e "e !oa!e funcţiile care urmea'
în !e,!ul surs "eclaraţiei variabileirespec!ive. Din aces! mo!iv# as!fel "evariabile se numesc globale.
La "eclarare# variabilele globale sun!iniţiali'a!e cu 4.
inclu"e /ios!ream.01in! a)voi" !%&
2a3@)cou!//a)8in! b)main%&2b3)cou!//a//en"l)!%&)8
8/19/2019 Subprogram e 2
23/54
At!i0ut$l$ /a!ia0il$lo! #lo0al$ %u't:
5. Blasa "e memorare ( segmen!ul "e "a!e.
C. Dura!a "e viaţ a variabilelor globale es!es!a!ic. Ele au spaţiu re'erva! în !o! !impule,ecuţiei programului.
8/19/2019 Subprogram e 2
24/54
At!i0ut$l$ /a!ia0il$lo! #lo0al$ %u't:
@. ?i'ibili!a!ea ( *n ca'ul în care "eclaraţiile
aces!ora sun! înain!ea !u!uror funcţiilor#aces!ea sun! vi'ibile la nivelul în!reguluiprogram%fi$ier&. Dac anumi!e funcţii se aflplasa!e înain!ea "eclaraţiilor aces!or
variabile# a!unci ele sun! vi'ibile "oar pen!rufuncţiile care sun! plasa!e "up aces!e"eclaraţii
8/19/2019 Subprogram e 2
25/54
Va!ia0il$l$ lo(al$
+un! "eclara!e în corpul
funcţiilor.?ariabilele "eclara!e în corpulfuncţiei main%& sun! !o!locale
voi" !%&
2in! a3@)8
main%&
2in! b3)8
=%'!%/!lele a 7! b #un$l(c%le
8/19/2019 Subprogram e 2
26/54
At!i0ut$l$ /a!ia0il$lo! lo(al$
5. Blasa "e memorare a variabilelor locale
es!e# implici!# segmen!ul "e s!iv. E,is!posibili!a!ea ca aces!ea s fie aloca!e înregis!rele microprocesorului# ca' în care"eclaraţia lor !rebuie prece"a! "e cuvîn!ul
c0eie regis!er.regis!er in! b3)
8/19/2019 Subprogram e 2
27/54
At!i0ut$l$ /a!ia0il$lo! lo(al$
?ariabilele locale nu sun! iniţiali'a!e implici! cu
4. Dac nu sun! iniţiali'a!e e,plici! "eprograma!or# ele reţin o valoare oarecare#numi! valoare re'i"ual.
8/19/2019 Subprogram e 2
28/54
At!i0ut$l$ /a!ia0il$lo! lo(al$
C. ?i'ibili!a!ea
variabilelorlocale es!e lanivelul blocului lacare au fos!
"eclara!e
inclu"e /ios!ream.01in! a)
voi" !%&2 in! a3) 2in! a3@)
cou!//a//en"l) 8 cou!//a//en"l)8
main%&2a3) !%&)cou!//a)8
8/19/2019 Subprogram e 2
29/54
At!i0ut$l$ /a!ia0il$lo! lo(al$ *n ca'ul în care# în!r-un anumi!
bloc sun! vi'ibile mai mul!evariabile# !oa!e cu acela$inume# "ar au "omenii "evi'ibili!a!e "iferi!e# se
accesea' variabila cuvi'ibili!a!ea cea mai mic .
inclu"e /ios!ream.01in! a)
voi" !%&2 in! a3) 2in! a3@)
cou!//a//en"l) 8 cou!//a//en"l)8
main%&2a3) !%&)cou!//a)8
8/19/2019 Subprogram e 2
30/54
At!i0ut$l$ /a!ia0il$lo! lo(al$Dac "eclarm o variabil
local în ciclul f(' ea es!evi'ibil "oar în blocul f(' .@. Dura!a "e viaţ a
variabilelor locale es!e
a!=!a !imp c=! "urea'e,ecuţia blocului respec!iv.
in! n3# s34)
f(' 9!n$ !?15 !@?n5 !: #?!5
cou!//s)
8/19/2019 Subprogram e 2
31/54
T!a'%"it$!$a pa!a"$t!ilo! Bare sun! parame!rii
formali $i cei efec!ivi "inprogramul al!ura! F
inclu"e/ios!ream.01in! suma%in! a# in! b&
2 re!urn a6b)8main%&2in! c3# "3@)cou!//suma%C#@&//en"l)
cou!//suma%C6#@-5;C&//en"l)cou!//suma%c#"&//en"l)cou!//suma%5.H#@.@&//en"l)8
8/19/2019 Subprogram e 2
32/54
R$#uli 1' t!a'%"it$!$a pa!a"$t!ilo! Numrul parame!rilor
formali !rebuie scoinci" cu numrulparame!rilor efec!ivi.
inclu"e/ios!ream.01in! suma%in! a# in! b&
2 re!urn a6b)8main%&2in! c3# "3@)cou!//suma%C#@&//en"l)
cou!//suma%C6#@-5;C&//en"l)cou!//suma%c#"&//en"l)cou!//suma%5.H#@.@&//en"l)8
8/19/2019 Subprogram e 2
33/54
R$#uli 1' t!a'%"it$!$a pa!a"$t!ilo! ipul parame!rilor formali
!rebuie s coinci" cu !ipul
parame!rilor efec!ivi sau!ipul parame!rilor efec!ivi spoa! fi conver!i! implici!c!re !ipul parame!rilor
formali la fel ca în ca'ula!ribuirii.
inclu"e/ios!ream.01in! suma%in! a# in! b&
2 re!urn a6b)8main%&2in! c3# "3@)cou!//suma%C#@&//en"l)
cou!//suma%C6#@-5;C&//en"l)cou!//suma%c#"&//en"l)cou!//suma%5.H#@.@&//en"l)8
8/19/2019 Subprogram e 2
34/54
T!a'%"it$!$a pa!a"$t!ilo! Numele parame!rilor
formali !rebuie scoinci" cu numeleparame!rilorefec!iviF
inclu"e/ios!ream.01in! suma%in! a# in! b&
2 re!urn a6b)8main%&2in! c3# "3@)cou!//suma%C#@&//en"l)
cou!//suma%C6#@-5;C&//en"l)cou!//suma%c#"&//en"l)cou!//suma%5.H#@.@&//en"l)8
8/19/2019 Subprogram e 2
35/54
T!a'%"it$!$a pa!a"$t!ilo! Pen!ru memorarea parame!rilor
subprogramele folosesc segmen!ul "e s!iv.Bine mai sun! memora!e în segmen!ul "es!ivF
Jemorarea parame!rilor !ransmi$i se face în
or"inea în care ace$!ia figurea' în an!e! "ela s!=nga la "reap!a.
8/19/2019 Subprogram e 2
36/54
T!a'%"it$!$a pa!a"$t!ilo! *n ca"rul subprogramului# parame!rii
!ransmi$i $i memoraţi în s!iv sun! variabile.Numele lor es!e cel "in lis!a parame!rilorformali.
?ariabilele obţinu!e în urma memorrii
parame!rilor !ransmiţi sun! variabile locale.
8/19/2019 Subprogram e 2
37/54
8/19/2019 Subprogram e 2
38/54
T!a'%"it$!$a pa!a"$t!ilo!
+e poa!e face
prin valoareprin referinţ %a"res&
8/19/2019 Subprogram e 2
39/54
T!a'%"it$!$a pa!a"$t!ilo! p!i' /aloa!$
+e u!ili'ea' a!unci c=n" sun!em in!eresaţi ca
subprogramul s lucre'e cu acea valoare#"ar# în prelucrare# nu ne in!eresea' caparame!rul efec!iv %cel "in blocul apelan!& sreţin valoarea mo"ifica! în subprogram.
8/19/2019 Subprogram e 2
40/54
S$ pot t!a'%"it$ p!i' /aloa!$5. ?alorile
reţinu!e "evariabileBe conţine s!iva
în !impul
rulriiprogramuluiF
inclu"e/ios!ream.01voi" !es!%in! n&
2 n635) cou!//n//en"l)8main%&2in! n35)!es!%n&)
cou!//n//en"l)8
8/19/2019 Subprogram e 2
41/54
S$ pot t!a'%"it$ p!i' /aloa!$C. E,presii
Be conţine s!iva în aces! ca'F
inclu"e/ios!ream.01voi" !es!%in! n&
2cou!//n//en"l)8main%&2!es!%@&)!es!%@6;&)
8
8/19/2019 Subprogram e 2
42/54
T!a'%"it$!$a pa!a"$t!ilo!
ransmi!erea prin
valoare a !ablourilorpermi!e ca funcţiiles în!oarc noilevalori ale aces!ora%care au fos!a!ribui!e în funcţii&
inclu"e/ios!ream.01voi" vec!or %in! ,K54&
2 for %in! i34) i/54)i66& ,Ki35)8main%&2in! aK54)vec!or%a&)
for%in! i34) i/54)i66& cou!//aKi//9 9)8
8/19/2019 Subprogram e 2
43/54
T!a'%"it$!$a pa!a"$t!ilo! p!i'
!$-$!i')+
+e alege a!unci c=n" ne in!eresea' ca la
revenirea "in subprogram variabila !ransmiss reţin valoarea s!abili! în !impul e,ecuţieiprogramului.
P%'%me$'!! efec$!0! $'e/u!e # f!e 'efe'!ne l%
0%'!%/!le Su/&'(;'%mul 'e!ne 3n #$!0 %+'e#%
0%'!%/!le!.
8/19/2019 Subprogram e 2
44/54
T!a'%"it$!$a pa!a"$t!ilo! p!i'
!$-$!i')+
La compilare# oricereferinţ lavariabilarespec!iv# es!e9!ra"us: ca
a"resarein"irec!.
inclu"e/ios!ream.01voi" in!ersc %in! Ma# in! Mb&
2 in! au,3a) a3b) b3au,)8main%&2In! ,3C# 3@)in!ersc%,#&)
cou!//,//9 9//)8
8/19/2019 Subprogram e 2
45/54
D$-i'i!$a u'ui %u0p!o#!a" A &$-i'i un subprogram înseamn a-l scrie
efec!iv. A &$(la!a un subprogram înseamn a-l
anunţa.
8/19/2019 Subprogram e 2
46/54
8/19/2019 Subprogram e 2
47/54
D$-i'i!$a u'ui %u0p!o#!a" Pro!o!ipul are
rolul "e a "eclarao funcţie
inclu"e/ios!ream.01voi" sC%&)voi" s5 %&
2sC%&)cou!//9Eu sun! func!ia s5://en"l)8voi" sC %&2cou!//9Eu sun! func!ia sC://en"l)88main%&2s5%&)8
8/19/2019 Subprogram e 2
48/54
D$-i'i!$a u'ui %u0p!o#!a" Pu!em scrie mai
în!=i pro!o!ipurile!u!uror funcţiiloru!ili'a!e "eprogram %fr
m%!n9:& $i s le"efinim "upfuncţia m%!n9:
inclu"e/ios!ream.01voi" s5 %&)voi" sC %&)
main%&2s5%&)8voi" s5 %&2sC %&) cou!//9Eu sun! func!ia s5://en"l)8
voi" sC %&2s5%&) cou!//9Eu sun! func!ia sC://en"l)88
8/19/2019 Subprogram e 2
49/54
u'()ii (u u' 'u"+! /a!ia0il &$
pa!a"$t!i
Limbaul B66 ne permi!e s lucrm cu funcţiicare au un numr variabil "e parame!ri.
Es!e obliga!oriu ca cel puţin primul parame!rus apar în lis!a parame!rilor formali.
Pen!ru parame!rii variabili an!e!ul va conţine
9:
8/19/2019 Subprogram e 2
50/54
u'()ii (u u' 'u"+! /a!ia0il &$
pa!a"$t!i
Parame!rii efec!ivi sun! "epu$i# unul "up al!ul# în or"inea în care i-am !recu! în an!e!# îns!iv. Dac la a"resa primului parame!rua"unm 5# obţinem a"resa parame!ruluiurm!or. Parame!ri fic$i conţin informaţii
"espre cei variabili%numrul lor# în uneleca'uri&.
8/19/2019 Subprogram e 2
51/54
u'()ii (u u' 'u"+! /a!ia0il &$
pa!a"$t!i
8/19/2019 Subprogram e 2
52/54
Sup!a1'(+!(a!$a -u'()iilo! E,is! posibili!a!ea ca mai mul!e funcţii s
poar!e acela$i nume. Ele !rebuie s fie "iferi!e fie ca numr "e
parame!rii# fie ca !ip. *n aces! ca'# parame!riiefec!ivi !rebuie s nu poa! fi conver!iţi
implici! c!re cei formali.
8/19/2019 Subprogram e 2
53/54
Sup!a1'(+!(a!$a -u'()iilo! inclu"e/ios!ream.01voi" func!ia%in! n&2cou!//9 eu sun! func!ia cu un parame!ru "e !ip in!://en"l)
8voi" func!ia%in! n# in! m&2cou!//9 eu sun! func!ia cu "oi parame!ri "e !ip in!://en"l)8voi" func!ia%in! n&2cou!//9 eu sun! func!ia cu un parame!ru "e !ip in!;://en"l)
8main%&2 func!ia%C&) func!ia%@#&)in! n) func!ia%Mn&8
8/19/2019 Subprogram e 2
54/54
Sup!a1'(+!(a!$a -u'()iilo! Bompila!orul nu poa!e face "is!incţie în!re
funcţiile "e mai osvoi" func!ia%in! n&2cou!//9 eu sun! func!ia cu un parame!ru "e !ip in!://en"l)8
voi" func!ia%floa! n&
2cou!//9 eu sun! func!ia care are un parame!ru "e !ip floa!://en"l)8