Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: audiogalaxy. en 17 Octubre 2013, 06:04 AM

Título: [C] Funciones
Publicado por: audiogalaxy. en 17 Octubre 2013, 06:04 AM
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".


(http://img34.imageshack.us/img34/3960/kv6p.png)

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.
Título: Re: [C] Funciones
Publicado por: vangodp en 17 Octubre 2013, 07:54 AM
   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);
    }





Título: Re: [C] Funciones
Publicado por: amchacon en 17 Octubre 2013, 09:52 AM
Cuando se llega a la sentencia return, la función acaba. Asi que es imposible que se ejecuten dos return seguidos ;)
Título: Re: [C] Funciones
Publicado por: vangodp en 17 Octubre 2013, 10:04 AM
Hola eferion amchacon escabroso el tema de los returns XD hasta yo has veces tengo dugas :D
Título: Re: [C] Funciones
Publicado por: audiogalaxy. en 17 Octubre 2013, 12:37 PM
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.
Título: Re: [C] Funciones
Publicado por: manofol en 18 Octubre 2013, 16:41 PM
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.
Título: Re: [C] Funciones
Publicado por: vangodp en 18 Octubre 2013, 23:25 PM
buena info, o en vez de función utiliza acción  :rolleyes: