1 - Functii

16
Subprograme Funcții

description

informatica

Transcript of 1 - Functii

Page 1: 1 - Functii

Subprograme

Funcții

Page 2: 1 - Functii

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.)

Page 3: 1 - Functii

Funcții

Textul PASCAL al unei funcții are forma:

function f(𝑥1; 𝑥2; … ; 𝑥𝑛): 𝑡𝑟;

D;

begin

f:=e;

end;

Page 4: 1 - Functii

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ță.

Page 5: 1 - Functii

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.

Page 6: 1 - Functii

Î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.

Page 7: 1 - Functii

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.

Page 8: 1 - Functii

Exemplu

program P;

{Functie fara parametri}

function Salut():string;

{afisarea unui mesaj}

begin

writeln('Salut');

end; { Salut }

begin

Salut();

end.

Page 9: 1 - Functii

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.

Page 10: 1 - Functii

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.

Page 11: 1 - Functii

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.

Page 12: 1 - Functii

Î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.

Page 13: 1 - Functii

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.

Page 14: 1 - Functii

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.

Page 15: 1 - Functii

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.

Page 16: 1 - Functii

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;