Sunteți pe pagina 1din 3

Funcii cu numr variabil de parametri

n C putem deni funcii cu numr variabil de parametri, fr utilizare de vectori. Pentru aceasta antetul funciei trebuie s aib forma:
tip nume(tip_param primul_param,...)

Primul parametru trebuie specicat i d informaii asupra celorlali parametrilor utilizai (de exemplu numrul de parametri). irul ... semnic faptul ca este vorba de numr variabil de parametri. Pentru a interaciona cu parametrii transmii se folosesc:
va_list, o variabil care este un vector ce reine informaiile cu privire

la transmiterea parametrilor

va_start, macrou care seteaz vectorul va_list a.. s indice primul

parametru de apel al funciei

va_end, macrou care se apeleaz dup ce au fost identicai toi parametrii

funciei i permite ieirea corect din funcie

va_arg, permite trecerea la urmtorul parametru

Aceste macrouri precum i lista va_list se gsesc n stdarg.h

Observai :
Programul poate da erori de execuie dac

(a) se apeleaz va_arg de un numr mai mare de ori dect nr. de argumente (b) nu se iniializeaz va_list cu ajutorul macroului va_start (c) se omite va_end (d) Tipul de parametru specicat n macroul va_arg nu corespunde tipului parametrului transmis
Trebuie indicat sfritul listei de parametri ori prin specicarea la apel

a numrului de parametri, ori prin folosirea unui parametru care semnalizaz sfritul (de exemplu valoarea -1).

Exemplu : Suma unui numr variabil de elemente:


1

#include <stdio.h> #include <conio.h> #include <stdarg.h> double suma(int n,...) /functie cu lista variabila de argumente / { va_list lista_arg; int i; double suma=0,arg; va_start(lista_arg,n); for (i=0;i<n;i++) { arg=va_arg(lista_arg,double); suma+=arg; } va_end(lista_arg); return suma;
}

void main() { printf("Suma este: }

%lf\ n",suma(5, -1., 5., -3.7, 4.9, 0.));

Variant : Suma unui numr variabil de elemente pozitive:


double suma(double primul,...) { va_list lista_arg; double i=primul; double suma=0; va_start(lista_arg,primul); while(i!=-1.0) { suma+=i; i=va_arg(lista_arg,double); } va_end(lista_arg); return suma;

void main() { printf("Suma este: }

%lf\ n",suma(5.1, 3.4, 5., -3.7, 4.9, 0.2,-1.0));

Probleme propuse
1. S se calculeze aria unei guri geometrice care poate : un cerc, un triunghi, und dreptungi sau un ptrat. Funcia primete ca parametri:
tipul gurii i (tip int) n cazul cercului: raza (tip double) n cazul triunghiului cele trei laturi (tip double) n cazul dreptunghiului cele dou laturi (tip double) n cazul ptratului latura (tip double)

Observaie:

Formula lui Heron pentru aria unui triunghi este: S = b+c p(p a)(p b)(p c) unde p = a+2 i a, b, c sunt laturile triunghiului. n plus n orice triunghi suma lungimii a dou laturi oarecare este mai mare dect lungimea celei de-a treia laturi. 2. S se scrie o funcie care concateneaz un numr variabil de iruri de caractere. 3. S se scrie o funcie care sorteaz un numr variabil de variabile reale.

S-ar putea să vă placă și