miercuri, 15 octombrie 2014

Subprograme. Funcții și proceduri.

Subprogramele sunt parti dn program identificate printr-un nume, prin intermediul caruia vor fi apelate.  Vom scrie subprograme atunci cand:
- anumite instructiuni dintr-un program apar in mai multe locuri;
- dorim sa impartim problema in subprograme.
Subprogramele pot fi:
- functie- returneaza intotdeauna o singura valoare;
- proceduri- pot returna zero, una sau mai multe valori;

Functiile si procedurile pot fi standard(existente deja in limbajul pascal) si definite de utilizator.
Functii standard: int, trunc, sqr, sqrt, abs, chr, ord, pred, succ; Proceduri standard: read, readln, write, writeln, val, str, inc, dec.





AVANTAJELE UTILIZĂRII SUBPROGRAMELOR

realizarea codului – o dată scris, un subprogram
poate fi utilizat de mai multe programe;
elaborarea algoritmilor prin descompunerea
problemei în altele mai simple. În acest fel, rezolvăm
cu mult mai uşor problema;
reducerea numărului de erori care pot apărea la
scrierea programelor;
depistarea cu uşurinţă a erorilor – verificăm la
început subprogramele, apoi modul în care le-am
apelat în cadrul programului.

EXEMPLE DE UTILIZARE A FUNCŢIILOR



  1. var i, n, f: integer;
  2.  
  3.   function Fact(var X: Integer)Longint{X este un parametru transmis prin adresa}
  4.   var lFact: Longint{variabila locala}
  5.   begin
  6.     lFact := 1;
  7.  
  8.     for i := 1 to X do
  9.       lFact := lFact * i;
  10.  
  11.     X := -1;
  12.     Fact := lFact; {am asignat rezultatul in numele functiei !}
  13.   end;
  14.  
  15. begin
  16.   Write('Dati N: '); ReadLn(n);
  17.  
  18.   F := Fact(N);
  19.   WriteLn('Factorial de N este egal cu : ', f);
  20.   WriteLn('Noua valoare a lui N este   : ', n);
  21.  
  22.   ReadLn; {asteptam sa fie apasat Enter}
  23. end.
Functii

    Functiile sunt foarte asemanatoare procedurilor, singura diferenta fiind faptul ca functiile pot intoarce un rezultat. Sa vedem cum arata o structura generala a unei functii:
function nume_functie [(lista_parametri)] : tip_rezultat; 
CONST 
(* declaratii de constante *)
VAR 
(* declaratii de variabile *)
BEGIN 
(* instructiuni *)
END;
Aratam un program care calculeaza factorialul unui numar, folosind o functie de data asta:
var i, n, f: integer; 
function Fact: Longint; 
var lFact: Longint; {variabila locala} 
begin 
  lFact := 1; 
for i := 1 to n do 
  lFact := lFact * i; 
Fact := lFact; {am asignat rezultatul in numele functiei !} 
  end; 
begin 
  Write('Dati N: '); ReadLn(n); 
F := Fact; 
  Write('Factorial de N este egal cu : ', f); 
ReadLn; {asteptam sa fie apasat Enter} 
end.
Proceduri
 Aratam o structura generala a unei proceduri:
procedure nume_procedura [(lista_parametri)];
CONST
(* declaratii de constante *)
VAR
(* declaratii de variabile *)
BEGIN
(* instructiuni *)
END;
 
  Spre deosebire de structura unui program, end-ul de la sfarsit este finalizat cu ; (punct si virgula), nu cu . (punct). Lista de parametri este optionala, motiv pentru care este incadrata intre paranteze drepte. Ce inseamna parametri va fi explicat putin mai tarziu.
Mai jos este prezentat un program fara 
var vector : array[1..200] of integer;
i, n: integer;
begin
Write('Dati N: '); ReadLn(n); {N = numarul de elemente}
i := 1; {*}
while (i = N) do {citim elementele}
begin
Write('Dati elementul ', i, ': ');
ReadLn(vectori);
i := i + 1;
  end;
i := 1; {*}
while (i = N) do {impartim fiecare element la 2 si salvam catul}
begin
vectori := vectori div 2;
i := i + 1;
  end;
  Write('Vectorul modificat este : ');
i := 1; {*}
while (i = N) do {afisam noile valori din vector}
begin
Write(vectori : 5);
i := i + 1;
  end;
ReadLn; {asteptam  sa fie apasat Enter}
end.

Niciun comentariu:

Trimiteți un comentariu