Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Functii

c


Functii

Functiile se definesc intr-un program atunci cand un grup de instructiuni se utilizeaza in mai multe locuri din program. Aceste instructiuni se scriu sub forma unei functii si pot fi apelate oriunde in program. Pr 222h76c ototipul definitiei unei functii este



tip nume (lista de parametri)

corpul functiei

Corpul functiei este o instructiune compusa formata dintr-o secventa de instructiuni intre acolade "". Lista de parametri are forma

tip1 arg1, tip2 arg2, ., tipn argn

unde tip1, tip2, ., tipn reprezinta tipurile parametrilor arg1, arg2, ., argn. Parametrii din definitia functiei se numesc parametri formali. O parte din parametri sunt variabile ce vor fi prelucrate de functie (acesti parametri se numesc parametri de intrare). O functie poate calcula o valoare asociata numelui si mai multe valori asociate unor parametri (acesti parametri se numesc parametri de iesire). Tipul valorii asociate numelui este si tipul functiei. Daca o functie nu are o valoare asociata numelui, tipul ei este void. Asocierea unei valori calculate numelui functiei se face cu instructiunea return cu forma urmatoare

return expresie;

unde expresie este valoarea calculata. Cand tipul functiei este void, se utilizeaza instructiunea

return;

Functiile sunt recursive, adica o functie se poate apela pe ea insasi.

Apelarea unei functii se face utilizand-o ca termen intr-o expresie. Parametrii de apelare a functiei se numesc parametri actuali sau argumente. Parametrii de intrare actuali ai unei functii pot fi orice constante, variabile sau expresii. Parametrii actuali de iesire sunt variabile.

Un program consta din una sau mai multe functii. Una dintre functii are numele main si executia programului incepe cu aceasta functie.

Probleme rezolvate

Problema Sa se defineasca o functie care sa calculeze suma a doua numere reale. Sablonul functiei va fi

double sum(double a, double b);

Programul este cel de mai jos.

#include<iostream.h>

double sum(double a, double b)

void main()

Rezultatele rularii programului sunt prezentate in caseta text.

Problema Sa se defineasca o functie care sa permute valorile a doua variabile intregi. Prototipul functiei va fi

void perm(int& i, int& j);

#include<iostream.h>

void perm(int& i, int& j)

void main()

Rezultatele rularii programului sunt prezentate in caseta text.

Problema Sa se defineasca o functie care sa calculeze cea mai mare dintre doua variabile intregi. Prototipul functiei va fi

int max(int x, int y);

Programul este cel de mai jos.

#include<iostream.h>

int max(int x, int y)

void main()

Rezultatele rularii programului sunt prezentate in caseta text.

Problema Sa se defineasca o functie care sa calculeze cel mai mare element al unui vector de numere reale. Sablonul functiei va fi:

float max(float a[], int n);

unde :

a - vector de numere reale;

n - dimensiunea vectorului a

Se va rescrie functia astfel incat rezultatul sa fie asociat unui parametru. Prototipul functiei va fi in acest caz

void max(float a[], int n, float& rez);

Solutia primei cerinte:

#include<iostream.h>

float max(float a[], int n)

void main()

x_max=max(x,n);

cout<<'max='<<x_max;

Rezultatele rularii programului sunt prezentate in caseta text.

Solutia celei de-a doua cerinte:

#include<iostream.h>

void max(float a[], int n, float& rez)

void main()

max(x,n,x_max);

cout<<'max='<<x_max;

Problema Sa se defineasca o functie care sa calculeze valoarea medie si dispersia unui sir de numere reale. Sablonul functiei va fi

float mean(float x[], int n, float& var);

unde :

x - vector cu numere reale;

n - dimensiunea vectorului x;   

var - dispersia sirului x

Valoarea medie va fi asociata numelui functiei mean.

Se va rescrie functia asfel incat valoarea medie si dispersia sa fie asociate unor parametri. Sablonul functiei va fi

void mean(float x[], int n, float& m, float& var);

Indicatie. Valoarea medie a sirului x este data de formula . Dispersia sirului x este data de formula

Solutia primei cerinte:

#include<iostream.h>

float mean(float x[], int n, float& var)

void main()

medie=mean(x,n,dispersie);

cout<<'val.medie='<<medie <<' dispersia='<<dispersie;

Rezultatele rularii programului sunt prezentate in caseta text.

Solutia celei de-a doua cerinte:

#include<iostream.h>

void mean(float x[], int n, float& m, float& var)

void main()

mean(x,n,medie,dispersie);

cout<<'val.medie='<<medie <<' dispersia='<<dispersie;

Problema Sa se defineasca o functie care sa verifice daca un an este bisect. Prototipul functiei va fi

bool bisect(int an);

Anii bisecti sunt divizibili cu 4. Anii divizibili cu 100 nu sunt bisecti cu exceptia ca anii divizibili cu 400 sunt bisecti.

Exemplu. Anul 1992 este bisect, anul 1900 nu este bisect, anul 2000 este bisect. Programul este urmatorul.

#include<iostream.h>

bool bisect(int an)

void main()

Rezultatele rularii programului sunt prezentate in caseta text.   

Problema Sa se defineasca o functie generica pentru calculul valorii minime a unui sir de numere. Prototipul functiei va fi

template <typename T>

T minval(T x[], int n);

Se va utiliza functia scrisa pentru calculul minimului unor siruri de valori de tip float, int sau double.

#include<iostream.h>

template <typename T>

T minval(T a[], int n)   

return val; }

void main()

xr_min=minval<float>(xr, n);

cout<<'min real ='<<xr_min<<endl;

for(i=0;i<n;i++)

xi_min=minval<int>(xi, n);

cout<<'min intreg='<<xi_min<<endl;

for(i=0;i<n;i++)

xd_min=minval<double>(xd, n);

cout<<'min double='<<xd_min<<endl;}

Rezultatele rularii programului sunt cele de mai jos.

Probleme propuse

Problema Sa se defineasca o functie care sa calculeze si sa afiseze radacinile ecuatiei de gradul doi . Se presupune ca parametrii a, b, c ai functiei sunt reali si ca . Prototipul functiei va fi

void ecuatie(double a, double b, double c, double x[2]) ;

Problema Sa se defineasca o functie care sa calculeze media geometrica a unui sir de numere reale

Sirul de numere si lungimea lui sunt parametrii de intrare ai functiei. Prototipul functiei va fi

double med(double x[], int n) ;

Problema Sa se defineasca o functie care sa calculeze suprafata unui cerc cunoscand raza cercului. Prototipul functiei va fi

double aria(double raza);

Problema 4. Sa se defineasca o functie care sa calculeze n!. Variabila intreaga n va fi parametrul de intrare al functiei. Functia se va scrie in doua variante : recursiv si nerecursiv. Prototipul functiei va fi

int fact(int n) ;

Problema 5. Sa se definesca o functie care sa calculeze suma a doi vectori, x si y, cu cate n componente reale fiecare. Prototipul functiei va fi

void suma(double x[], double y[], double z[], int n);

unde z este suma vectorilor x si y, iar n este dimensiunea celor trei vectori.

Problema Sa se defineasca o functie generica pentru calculul valorii maxime a unui sir de numere. Prototipul functiei va fi

template <typename T>

T minval(T x[], int n);

Se va utiliza functia scrisa pentru calculul maximului unor siruri de valori de tip int sau double.

Problema 7. Sa se defineasca o functie care sa calculeze suma primelor n numere naturale impare. Prototipul functiei va fi

int suma(int n);

Problema 8. Sa se defineasca o functie care sa calculeze valoarea n!. Prototipul functiei va fi

int comb(int n, int k);

Pentru calculul factorialului se va utiliza functia realizata in problema 4.

Problema 9. Sa se defineasca o functie care sa testeze daca un numar intreg este par. Prototipul functiei va fi

bool estepar(int n) ;

Problema 10. Sa se defineasca o functie care sa calculeze o cifra hexazecimala a unui numar intreg. Prototipul functiei va fi

int hexdigit(int n, int k);

Functia va calcula cifra zecimala k a numarului intreg n. De exemplu, pentru numarul Intreg n = 0x1b2, hexdigit(n, 0) va avea ca rezultat 2, hexdigit(n, 1) va avea ca rezultat b, etc.



Document Info


Accesari: 1336
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )