Funciones que retornan parámetros en C

– Prog057

/* Prog057.cpp */

#include <stdio.h>
int cuenta(char nom[25]);
void main()
{
int longit;
char palabra[25];
printf(«n Escribe una palabra de 25 caracteres como máximo: «); scanf(«%s»,palabra); longit=cuenta(palabra);
printf(«nn Longitud de %s = %d»,palabra,longit);
}
int cuenta(char nom[25])
{
int i; i=0;
while(nom[i] != ») i++; return i;
}

Estudio del PROG057:

– La línea de programa int cuenta(char nom[25]); indica al compilador que además del programa principal (void main), hay una función de nombrecuenta(), que utilizará una variable tipo string con un máximo de 25 caracteres y además dicho subprograma retornará un valor tipo int, a diferencia de las funciones anteriores que no retornaban nada (void).

– La línea de programa: longit= cuenta(palabra);, llama al subprogramacuenta() y en número entero que retorna, se asigna a la variable enteralongit

– Observa de qué forma contamos los caracteres ocupados por la variable nom: nom[i] != ‘’

– Observa que la variable utilizada por la función cuenta(), no tiene porqué ser la misma: En el programa principal es palabra y en la función es nom. De todas formas es imprescindible que sea del mismo tipo: en los dos casos es char de 25 caracteres.

– El valor retornado por la función, no tiene porqué corresponder a la misma variable: en el programa principal es longit y en la función es i. De todas formas es imprescindible que sean del mismo tipo: en los dos casos es int.

– Prog058

/* Prog058.cpp */

#include <stdio.h>
#include <math.h>
void trigon(double inicial,int num,double paso);
void main()
{
int num;
double ini,paso;
printf(«n Valor inicial,número de valores,paso ?»); scanf(«%lf %d lf»,&ini,&num,&paso); trigon(ini,num,paso);
}
void trigon(double inicial,int num,double paso)
{
int i; double v,s,c;
for(i=0;i<num;i++)
{
v=inicial+i*paso;
s=sin(v);
c=cos(v);
printf(«n%lf %lf %lf»,v,s,c);
}
}

– Estudio del PROG058:

– La línea: void trigon(double inicial, int num, double paso); indica al compilador que el programa contiene una función (trigon), que no retorna ningún valor (void), pero que trabaja con tres variables: la primera y última double y la 2ª int.

– La llamada a la función por parte del programa principal (main), se encuentra en la línea: trigon(ini, num, paso); 

– En efecto: ini y paso son variables double y num es int.

– En la función trigon, utilizamos los valores entrantes: ini, num y paso y definimos otros: i, v, s, c. 

Vamos a “programar” otra función con retorno de parámetro:

– Prog059

/* Prog059.cpp */

#include <stdio.h>
int diasmes(int mes);
void main()
{
printf(«n Enero tiene %d días»,diasmes(1));
printf(«n Febrero tiene %d días»,diasmes(2));
printf(«n Marzo tiene %d días»,diasmes(3));
printf(«n Abril tiene %d días»,diasmes(4));
printf(«n Mayo tiene %d días»,diasmes(5));
printf(«n Junio tiene %d días»,diasmes(6));
printf(«n Julio tiene %d días»,diasmes(7));
printf(«n Agosto tiene %d días»,diasmes(8));
printf(«n Septiembre tiene %d días»,diasmes(9));
printf(«n Octubre tiene %d días»,diasmes(10));
printf(«n Noviembre tiene %d días»,diasmes(11));
printf(«n Diciembre tiene %d días»,diasmes(12));
printf(«n El mes 13  tiene %d días, porque no existe»,diasmes(13));

int diasmes(int mes)
{
int dias;
switch(mes)
{
case 2: dias=28; break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dias=31;
break;
case 4:
case 6:
case 9:
case 11:
dias=30;
break;
default:
dias=0;
break;
}
return dias;
}

Estudio del PROG059:

– int diames( int mes); 
– Indicamos al compilador que nuestro programa contiene una función que necesita un valor int (mes) y devolverá un valor int.
– El programa principal, con la sentencia diames(1) llama a la función diames y ésta devuelve el número 31.
– Observa la estructura switch: si el case 1, 3, 5, 7, 8, 10 no contienen nada, se ejecuta el siguiente case que sí contiene algo: en nuestro caso el case 12, que da a la variable dias el valor 31. 

Fuente: Programación en C/C++ (Manual FV) de Fermí Vilà