1 - Functii

Post on 09-Dec-2015

32 views 3 download

description

informatica

Transcript of 1 - Functii

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;