miércoles, 20 de mayo de 2009

Funciones en C/C++: como regresar más de un valor

Para regresar más de un valor en una función hay dos caminos:
- Regresar los avlores en un array
- Regresar la salida usando parámetros por referencia

Para explicar estos dos caminos, supongamos que tenemos dos numeros a y b, y queremos una funcion que nos regrese tres valores: la suma, la resta y la multiplicacion de dichos numeros, osea  a+b, a-b y a*b

En el primer caso, debemos crear un array del mismo tamaño que el número de valores que vamos a regresar, y en cada espaico del array poner cada uno de los resultados de las funciones. En nuestro ejemplo son tres, asi que la funcion es de esta forma (se necesita la libreria stdlib.h):

[sourcecode language="cpp"]float *suma_resta_mult(float a,float b)
{
float *resultados,suma,resta,mult;
resultados=(float *)malloc(3*sizeof(float));
suma=a+b;
resta=a-b;
mult=a*b;
//almacenando los valores en el vector de resultados
resultados[0]=suma;
resultados[1]=resta;
resultados[2]=mult;
return resultados;
}[/sourcecode]



La llamda a la funcion seria de esta manera:
[sourcecode language="cpp"]#include<stdio.h>
#include<stdlib.h>
int main()
{
float *res,a,b;
a=8;
b=5;
res=suma_resta_mult(a,b);
printf("la suma es %f\n",res[0]);
printf("la resta es %f\n",res[1]);
printf("el producto es %f\n",res[2]);
free(res);
return 0;
}[/sourcecode]



En el segundo camino, usando parametyros por referencia, se deben incluir parametros extras en la funcion, pero por referencia (usando &), de manera que su valor cmabie dentro de la funcion y entonces podamos usar esos valores fuera de dicha funcion.
Para nuestro ejemplo la funcion queda asi:
[sourcecode language="cpp"]void suma_resta_mult(float a,float b, float &suma,float &resta, float &mult)
{
suma=a+b;
resta=a-b;
mult=a*b;
}[/sourcecode]


y la llamda a la funcion quedaria asi:
[sourcecode language="cpp"]#include<stdio.h>
#include<stdlib.h>

int main()
{
float a,b,s,r,m;
a=8;
b=5;
suma_resta_mult(a,b,s,r,m);
printf("la suma es %f\n",s);
printf("la resta es %f\n",r);
printf("el producto es %f\n",m);
return 0;
}[/sourcecode]



Espero sirvan los ejemplos que he dado. Son faciles de cambiar a diferente numeros de parametros

No hay comentarios:

Publicar un comentario