Documente Academic
Documente Profesional
Documente Cultură
7.1. FuncŃii
Programarea Calculatoarelor
7.2. Recursivitate
(limbajul C)
2
2010-2011 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 1/36
Definirea funcŃiilor
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 2/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 3/36
> Din punct de vedere al programării în C, funcŃia îşi • <tip_dată>: reprezintă tipul datelor returnate de funcŃie,
păstrează sensul matematic (programare funcŃională). AtenŃie: o funcŃie nu poate returna decât o singură valoare.
5 6
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 4/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 5/36
Definirea funcŃiilor <tip_dată> <nume>(<var1>,...,<varN>) Definirea funcŃiilor <tip_dată> <nume>(<var1>,...,<varN>)
{ {
(continuare) <secvenŃă instrucŃiuni 1>; (continuare) <secvenŃă instrucŃiuni 1>;
<secvenŃă instrucŃiuni 2>; <secvenŃă instrucŃiuni 2>;
• <tip_dată>: dacă funcŃia > ObservaŃie: o funcŃie chiar
... ...
nu returnează nici o valoare <secvenŃă instrucŃiuni M>; dacă nu primeşte variabile, <secvenŃă instrucŃiuni M>;
atunci se specifică tipul [return <expresie>;] aceasta poate interacŃiona [return <expresie>;]
} }
void procedură. cu programul pe baza
• <nume>: reprezintă identificatorul funcŃiei pe baza căruia variabilelor globale din program (vizibile pentru orice funcŃie)
aceasta va fi apelată pe parcursul rulării programului. de evitat, deoarece funcŃia nu mai este independentă
• (var1,...,varN): reprezintă variabilele de intrare, pe care le de program, portabilitatea într-un alt program fiind redusă.
primeşte funcŃia din programul, sau sub-programul în care este
apelată. Este posibil ca funcŃia să nu primească date de intrare, • { secvenŃe instrucŃiuni }: corpul funcŃiei (ceea ce se execută)
caz în care lista este vidă: <nume>(), sau se poate folosi este specificat între “{” şi “}”. Acesta poate fi văzut, el însuşi ca
tipul void: <nume>(void). un program.
7
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 6/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 7/36
13 14
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 12/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 13/36
17 18
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 16/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 17/36
Definirea funcŃiilor (continuare) Definirea funcŃiilor (continuare)
> Vizibilitatea variabilelor în cadrul funcŃiilor
EnunŃ: să se realizeze o funcŃie care permite
Exemplu: -ce valoare va returna funcŃia P afişarea pe ecran a unei matrice pătratice de numere
produs ???
#include<stdio.h> întregi. Matricea se va afişa pe linii şi coloane.
>3, 2*3+4=10.00, 3
int offset=3;
offset
program principal
float produs(float a, float b) main()
-cu toate că variabila offset Variabile de intrare/lucru:
{
int offset=4;
offset este definită global şi este int M[100][100]; definiŃie funcŃie
offset
return a*b+offset; vizibilă şi în funcŃia produs, int dim; AfisareM()
} redefinirea ei local, duce la int i, j;
int main() ignorarea variabilei globale . void AfisareM(int dim, int M[100][100]);
{
offset produs(2,3), offset );
printf(“%d, %f, %d”, offset, Variabile de ieşire:
} nu
19 20
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 18/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 19/36
21 22
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 20/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 21/36
FuncŃii recursive
> Recursivitatea unei funcŃii în programare, reprezintă
procesul prin care funcŃia se autoapelează.
> Pentru ca procesul să nu se repete la infinit, autoapelarea
7.2. Recursivitate se încheie de regulă pe baza unei condiŃii de oprire.
Efectul Droste: Sierpinski triangle:
etc.
23 24
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 22/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 23/36
FuncŃii recursive (continuare) FuncŃii recursive (continuare)
> Astfel, un obiect sau un fenomen se defineşte în mod > O funcŃie recursivă trebuie să fie bine formată:
recursiv dacă în definiŃia sa există o referire la el însuşi. - o funcŃie nu se poate defini doar în funcŃie de sine
Exemple: însăşi,
definirea numerelor întregi: definirea funcŃiei factorial: exemplu: f(n) =2+f(n) greşit, se execută la ∞
27
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 26/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 27/36
33 34
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 32/36 Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 33/36
37
Curs Programarea Calculatoarelor, Ş.l. Bogdan IONESCU, 2010-2011 36/36