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.
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
- var i, n, f: integer;
-
- function Fact(var X: Integer): Longint; {X este un parametru transmis prin adresa}
- var lFact: Longint; {variabila locala}
- begin
- lFact := 1;
-
- for i := 1 to X do
- lFact := lFact * i;
-
- X := -1;
- Fact := lFact; {am asignat rezultatul in numele functiei !}
- end;
-
- begin
- Write('Dati N: '); ReadLn(n);
-
- F := Fact(N);
- WriteLn('Factorial de N este egal cu : ', f);
- WriteLn('Noua valoare a lui N este : ', n);
-
- ReadLn; {asteptam sa fie apasat Enter}
- 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.
- var i, n, f: integer;
- function Fact(var X: Integer): Longint; {X este un parametru transmis prin adresa}
- var lFact: Longint; {variabila locala}
- begin
- lFact := 1;
- for i := 1 to X do
- lFact := lFact * i;
- X := -1;
- Fact := lFact; {am asignat rezultatul in numele functiei !}
- end;
- begin
- Write('Dati N: '); ReadLn(n);
- F := Fact(N);
- WriteLn('Factorial de N este egal cu : ', f);
- WriteLn('Noua valoare a lui N este : ', n);
- ReadLn; {asteptam sa fie apasat Enter}
- 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;
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.
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;
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.
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