[C] Funciones

Iniciado por audiogalaxy., 17 Octubre 2013, 06:04 AM

0 Miembros y 1 Visitante están viendo este tema.

audiogalaxy.

Estoy empezando con funciones con nodos:
Ya tengo los resultados de la función, no necesitan examinarla.
Mi pregunta es mínima y se refiere a la última parte:

¿Esta función imprimirá 2 resultados?

Lo digo porque al final hay dos "return".




struct nodo (int cal struct nodo *next)

double examen (struct nodo *temp)
{
  int cuantos=0;
  double acum=0.0;
    while(tmp != null)
    {
       if (tmp->cal > 0.5)
       {
        cuantos++;
        acum= acum+(10* tmp->cal);
       }
     tmp = tmp->next;
     }
   if(cuantos > 0)
   return(acum/cuantos);  //A estos
   return (acum);              //return  me refiero.
}

main()
double result=0.0;
resul= examen(inicial);
printf("R. Caso1", resul);


Gracias por tomarse la molestia.
Qué sería de dios sin el Hombre.

vangodp

#1
   if(cuantos > 0)               //si cuantos es mayor que 0
 return(acum/cuantos);     //retorna esta linea, como es una sola linea no hace falta {}
 return (acum);               //si no se cumple lo de arriba retorna esta.


tiene el mismo efecto que esto:
Código (cpp) [Seleccionar]



  if(cuantos > 0)
 {            
 return(acum/cuantos);    
 }
 return (acum);


Pones {} si quieres ejecutar un grupo de instrucciones.
En el caso de que if tuviese mas de una instrucción ponemos {}, si se cumple if ejecutaría todas las sentencias dentro de las {}, de no cumplirse las salta, puedes poner para una sola también, lo mismo da pero si es una sola no tienes que ponerla.
Quiere decir que si después de if hay {} el grupo de instrucciones dentro de las {} pertenece a el anterior if.
pero si caso en una funcion fuera asi:

Código (cpp) [Seleccionar]

#include <iostream>

int sumar (int num1, int num2)
{
int resultado =num1+num2;
int numVago=666;


//Sin condicion que compare nada ni haga salto:
return numVago; // De no haber ninguna condicion previa siempre devuelve el primer return.
               // Este codigo es perfectamente valido pero no le hemos dicho nada asi que
               // el segundo return esta ahi muerto XD, si esperas el resultado de la suma
               // ya tienes un bug XD.
return resultado;

}

int main ()
{
int a = 10;
int b = 20;
int imprimir = 0;

imprimir = sumar(a,b);

std::cout << "lo que viene de la funcion sumar es" << imprimir;

return 0;

}



mira esto...
Código (cpp) [Seleccionar]


#include <iostream>
using namespace std;

int main ()
{
int num1 = 10;
int num2 = 20;
int resultado = 0;

{
resultado = num1+num2; // puedo hacer esto sin if y funciona, para una sola sentencia no es necesario pero si la pongo el programa no crachea:D
       }
       
       cout << resultado << endl;
       return 0;
}





prueba la función con 2 casos:
uno que de mayor que 0 y otro que de menor, veras cual te lo retorna.
Suerte! :D

otro intento que hice fue este.
si le paso 10 y 20 a la funcion me devuelve la suma pero si paso -10 y -20 me devuelve el 9999 XD
Código (cpp) [Seleccionar]

#include <iostream>

   
   int examen (int a, int b)
   {
   
      int cuantos = a+b;
     
      if(cuantos < 0)
      return 9999;  
       
      return cuantos;
   }
   
   int main()
   {
   
      int num1=-10;
      int num2=-20;

      int result=0;
   
      result= examen(num1,num2);
   
      std::cout<<result;
   }


Un código mas y no vuelvo mas por este hilo  ;-)
Código (cpp) [Seleccionar]

#include <iostream>

   
   int retorno (int condicion)
   {    
        if (condicion < 0)
         return -1;

       if (condicion > 0)
         return  1;

       if (condicion == 0)
         return  0;
   }
   
   int main()
   {
      int valor;
      std::cin >> valor;
      std::cout<<  retorno(valor);
    }






amchacon

Cuando se llega a la sentencia return, la función acaba. Asi que es imposible que se ejecuten dos return seguidos ;)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

vangodp

#3
Hola eferion amchacon escabroso el tema de los returns XD hasta yo has veces tengo dugas :D

audiogalaxy.

Gracias por responder.
Entiendo que al no haber {} en ese if sólo se ejecutará un return, dependiendo de si se cumpla o no el if.

Nuevamente gracias.
Qué sería de dios sin el Hombre.

manofol

Como dijeron arriba, cuando se ejecuta un return se termina la ejecución de la función, ya que return cambiará el PC del procesador al PC guardado en algún registro ($ra en procesadores MIPS) antes de la llamada a la función.




Edit:

Si quieres devolver más de un valor, devuelve un array de valores.

vangodp

buena info, o en vez de función utiliza acción  :rolleyes: