MIME-Version: 1.0
Content-Location: file:///C:/EA7B62F5/sdtrf5765.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"
SUBPROGRAME=
sup>
Dupa cum =
am mai
amintit la inceputul lucrarii, PASCAL‑ul este un limbaj =
de
programare modern, structurat, modularizat. Acest fapt reprezinta =
span>Õi capacitatea limbajului de a lucra cu concepte
'mai abstracte'. Despre ce este vorba ? În realitate intalnim probleme
complicate, sau chiar foarte complicate, care necesita mulÛi 'pasi mari' de execu=
Ûie. Prin 'pasi mari' inÛelegem etape in execuÛia unui program, faze in rezolvarea unei
probleme, cum ar fi acest exemplu didactic Õi foarte simplu:
Se da un =
vector
cu 5 elemente. Sa se determine suma Õi produsul elementelor.
Deci
in rezolvarea acestei probleme delimitam 3 etape (paÕi mari):
1 ‑ introd=
ucerea
datelor
2 ‑ suma
elementelor
3 ‑ produs=
ul
elementelor
deci
in linii mari programul va fi urmatorul:
begin=
intr=
od;
suma=
;
prod=
us;
writeln('suma=3D',s,'
produs=3D',p);
end.<=
/span>
9. SUBPROGRAME
La
prima vedere pare prea simplu Õi deci
imposibil. Nu, este posibil ca programul principal sa conÛina fazele de execuÛie a programului iar amanuntele de programa=
re
sa se afle undeva, tratate separat astfel incat in
programul principal sa ne preocupe rezolvarea problemei, urman=
d ca
in subprograme sa ne preocupe rezolvarea unor pa<=
sup>Õi mai mici, in toate amanuntele de
programare.
Deci
condiÛia este urmatoarea: in prealabil (in f=
aÛa begin‑ului programului) sa definim =
ce
reprezinta Õi ce realizeaza fiecare dintre
'etapele' enumerate in exemplul anterior.=
Aceste
'etape' sunt de fapt subp=
rograme
(numite in PASCAL proceduri) care au ca nume un identificator, Õi ca orice identificator (nume de variabila=
, de
procedura, etc) trebuie sa fie declarat (definit) inain=
te
de a fi utilizat (referit). Exact cum o variabila o declaram =
ca
fiind de un anumit tip, aÕa Õi o procedura (un subprogram in gener=
al)
o vom defini ce este Õi ce executa.
Programul din ex=
emplul
anterior, in varianta completa va fi urmatorul:
9. SUBPROGRAME
program principa=
l;
var=
span>
v:array[1..5] of integer;
i,s,p:integer;
procedure introd=
;
begin=
for =
i:=3D1
to 5 do readln(v[i]);
end;<=
/span>
procedure suma;<=
o:p>
begin=
s:=
=3D0;
for =
i:=3D1
to 5 do s:=3Ds+v[i];
end;<=
/span>
procedure produs=
;
begin=
p:=
=3D1;
for =
i:=3D1
to 5 do p:=3Dp*v[i];
end;<=
/span>
begin=
intr=
od;
suma=
;
prod=
us;
writeln('suma=3D',s,'
produs=3D',p);
end.<=
/span>
Dupa cum =
se
poate observa, in zona de instrucÛiuni executabile a programului principal, am enume=
rat
fazele principale (paÕii mari) a rezolv|rii problemei.
De
fapt prin simpla apariÛie a numelui unei astfel de 'faze' se ex=
ecut| un apel de
subprogram.
9. SUBPROGRAME
Un subprogram este un program subordo=
nat
unui alt program numit program principal sau program apelant. Un subprogram=
se
mai numeste Õi program apelat.
Un apel de subprogram (procedur&atild=
e;) se
realizeaza prin apariÛia in programul principal a unui nume de
procedura. În acest moment se opreÕte execuÛia programului apelant Õi se transfera execuÛia la inceputul programului apelat. Dup&atil=
de;
ce se executa subprogramul (programul apelat), se transfera e=
xecuÛia (automat) inapoi in programul apela=
nt,
la instrucÛiunea imediat urmatoare apelului respectiv.=
Cu alte cuvinte
in momentul in care (in exemplul anterior) in progr=
amul
principal se intalneste:
introd;
se
opreÕte execuÛia programului Õi se transfera executia la procedura
(declarata anterior) cu numele introd. Dupa execuÛia instrucÛiunilor din procedura introd se revine in
programul principal la instrucÛiunea:
suma;=
care este un alt ape=
l de
procedura.