Subprograme
Funcții
Subprogramul
Este o porţiune de cod dintr-un program care efectuează o
anumită sarcină,este relativ independent de restul codului, și
este identificabil și apelabil prin intermediul unui nume.
În Pascal putem avea două tipuri de subprograme:
Funcții (Subprogram care calculează și returnează o
valoare. Limbajul PASCAL conține un set de funcții
predefinite cum ar fi sin, cos, eof ș.a. În completare
programatorul poate defini funcții proprii.)
Proceduri (Subprograme care efectuează prelucrarea
datelor comunicate în momentul apelului. Limbajul PASCAL
conține un set de proceduri predefinite cum ar fi read, write,
readln, writeln ș.a. În completare programatorul poate defini
proceduri proprii.)
Funcții
Textul PASCAL al unei funcții are forma:
function f(𝑥1; 𝑥2; … ; 𝑥𝑛): 𝑡𝑟;
D;
begin
…
f:=e;
…
end;
Prima linie este antetul funcției, format din:
f – numele funcției;
(𝑥1; 𝑥2; … ; 𝑥𝑛) – lista opțională de parametri
formali reprezentînd argumentele funcției;
𝑡𝑟 - tipul rezultatului; acesta trebuie să fie
numele unui tip simplu sau tip referință.
Antetul este urmat de corpul funcției format
din declarațiile locale opționale D și
instrucțiunea compusă begin … end.
Declarațiile locale sunt grupate în secțiunile
(eventual vide) label, const, type, var,
function/procedure.
Numele f al funcției apare cel puțin o dată în
partea stîngă a unei instrucțiuni de atribuire
care se execută f:=e. Ultima valoare atribuită lui
f va fi întoarsă în programul principal.
În mod obișnuit un parametru formal din lista (𝑥1; 𝑥2; … ; 𝑥𝑛) are forma:
(𝑣1; 𝑣2; … ; 𝑣𝑘): 𝑡𝑝 unde (𝑣1; 𝑣2; … ; 𝑣𝑘)
sunt identificatori, iar 𝑡𝑝 este un
nume de tip.
Utilizarea funcției f se specifică printr-un apel
de forma:
f(𝑎1; 𝑎2; … ; 𝑎𝑛) unde (𝑎1; 𝑎2; … ; 𝑎𝑛) este lista
parametrilor actuali.
De obicei parametrii actuali sunt expresii,
valorile cărora sunt comunicate funcției.
Corespondența între un parametru actual și
unul formal se face prin poziția ocupată de
aceștia în cele două liste. Parametrul actual
trebuie să fie compatibil din punct de vedere
al atribuirii cu tipul parametrului formal.
Exemplu
program P;
{Functie fara parametri}
function Salut():string;
{afisarea unui mesaj}
begin
writeln('Salut');
end; { Salut }
begin
Salut();
end.
Exemplu
program P;
{Suma numerelor a si b}
var a,b,s : integer;
function Suma(x,y: integer) : integer;
{calcularea a+b}
begin
s:=a+b;
writeln('Suma este ',s);
end; { Suma }
begin
writeln('Introduceti a si b:');
readln(a,b);
Suma(a,b);
end.
Exemplu
program P;
{Declararea și utilizarea
funcției Putere}
type Natural=0..MaxInt;
var a : real; b : Natural;
c : real; s : integer;
t : integer; v : real;
function Putere(x : real; n
: Natural) : real;
{calcularea lui x la
puterea n}
var p : real; i : integer;
begin
p:=1;
for i:=1 to n do p:=p*x;
Putere:=p;
end; { Putere }
begin
a:=3.0;
b:=2;
c:=Putere(a, b);
writeln(a:10:5, b:4,
c:10:5);
s:=2;
t:=4;
v:=Putere(s, t);
writeln(s:5, t:4, v:10:5);
readln;
end.
Funcția Putere are doi parametri formali: x
de tipul real și n de tipul Natural. Funcția
returnează o valoare de tipul real. În corpul
funcției sunt declarate variabilele locale p și
i.
La execuția apelului Putere(a, b) valorile
3.0 și 2 ale parametrilor actuali a, b se
transmit parametrilor formali, respectiv , x și
n. De menționat că tipul lui a coincide cu tipul
lui x și tipul lui b coincide cu cel al lui n.
În cazul apelului Putere(s, t) tipul
parametrilor acutali s, t nu coincide cu tipul
paramtrilor formali, respectiv, x și n. Totuși
apelul este corect, întrucît tipurile respective
sunt compatibile din punct de vedere al
atribuirii.
Suma numerelor reale a,b,c,d
program p1;
var a,b,c,d:real;
function
suma(x,y,z,w:real):
real;
var s:real;
begin
s:=x+y+z+w;
suma:=s;
end;
begin
writeln('Introducet
i numerele a,b,c,d‘
);
readln(a,b,c,d);
writeln('Suma
numerelor este
',suma(a,b,c,d));
end.
Nr. de vocale într-un șir
de caractereprogram p1;
var s:string;
function vocale
(x:string):integer;
var s,i:integer;
begin
s:=0;
for i:=1 to length(x)
do
if x[i] in
['a','e','i','o','u']
then s:=s+1;
vocale:=s;
end;
begin
writeln('Introduceti
sirul de caractere');
readln(s);
writeln('Numarul de
vocale este
',vocale(s));
end.
Nr. de apariții a unui caracter dat
într-un șir de caractereprogram p1;
var s:string;
k:char;
function search
(x:string;c:char):intege
r;
var s,i:integer;
begin
s:=0;
for i:=1 to length(x) do
if x[i] = c then s:=s+1;
search:=s;
end;
begin
writeln('Introduceti
sirul de caractere');
readln(s);
writeln('Introduceti
caracterul cautat');
readln(k);
writeln('Numarul de
aparitii a caracterului
',k,' este
',search(s,k));
end.
Pentru acasă
Elaborați o funcție care calculează:
Media numerelor întregi i, j, k, m;
Minimumul dintre numerele a, b, c, d;
Rădăcina ecuației ax+b=0;
Cel mai mare divizor comun al numerelor
naturale a, b;
Top Related