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.