elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Funciones  (Leído 2,356 veces)
audiogalaxy.

Desconectado Desconectado

Mensajes: 24



Ver Perfil
[C] Funciones
« 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".




Código
  1. struct nodo (int cal struct nodo *next)
  2.  
  3. double examen (struct nodo *temp)
  4. {
  5.  int cuantos=0;
  6.  double acum=0.0;
  7.    while(tmp != null)
  8.    {
  9.       if (tmp->cal > 0.5)
  10.       {
  11.        cuantos++;
  12.        acum= acum+(10* tmp->cal);
  13.       }
  14.     tmp = tmp->next;
  15.     }
  16.   if(cuantos > 0)
  17.   return(acum/cuantos);  //A estos
  18.   return (acum);              //return  me refiero.
  19. }
  20.  
  21. main()
  22. double result=0.0;
  23. resul= examen(inicial);
  24. printf("R. Caso1", resul);

Gracias por tomarse la molestia.


En línea

Qué sería de dios sin el Hombre.
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: [C] Funciones
« Respuesta #1 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
  1.  
  2.  
  3.   if(cuantos > 0)
  4.  {            
  5.  return(acum/cuantos);    
  6.  }
  7.  return (acum);
  8.  

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
  1. #include <iostream>
  2.  
  3. int sumar (int num1, int num2)
  4. {
  5. int resultado =num1+num2;
  6. int numVago=666;
  7.  
  8.  
  9. //Sin condicion que compare nada ni haga salto:
  10. return numVago; // De no haber ninguna condicion previa siempre devuelve el primer return.
  11.                // Este codigo es perfectamente valido pero no le hemos dicho nada asi que
  12.                // el segundo return esta ahi muerto XD, si esperas el resultado de la suma
  13.                // ya tienes un bug XD.
  14. return resultado;
  15.  
  16. }
  17.  
  18. int main ()
  19. {
  20. int a = 10;
  21. int b = 20;
  22. int imprimir = 0;
  23.  
  24. imprimir = sumar(a,b);
  25.  
  26. std::cout << "lo que viene de la funcion sumar es" << imprimir;
  27.  
  28. return 0;
  29.  
  30. }
  31.  


mira esto...
Código
  1.  
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int main ()
  6. {
  7. int num1 = 10;
  8. int num2 = 20;
  9. int resultado = 0;
  10.  
  11. {
  12. 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
  13.        }
  14.  
  15.        cout << resultado << endl;
  16.        return 0;
  17. }
  18.  
  19.  
  20.  
  21.  

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
  1. #include <iostream>
  2.  
  3.  
  4.    int examen (int a, int b)
  5.    {
  6.  
  7.       int cuantos = a+b;
  8.  
  9.       if(cuantos < 0)
  10.       return 9999;  
  11.  
  12.       return cuantos;
  13.    }
  14.  
  15.    int main()
  16.    {
  17.  
  18.       int num1=-10;
  19.       int num2=-20;
  20.  
  21.       int result=0;
  22.  
  23.       result= examen(num1,num2);
  24.  
  25.       std::cout<<result;
  26.    }
  27.  

Un código mas y no vuelvo mas por este hilo  ;-)
Código
  1. #include <iostream>
  2.  
  3.  
  4.    int retorno (int condicion)
  5.    {    
  6.        if (condicion < 0)
  7.          return -1;
  8.  
  9.        if (condicion > 0)
  10.          return  1;
  11.  
  12.        if (condicion == 0)
  13.          return  0;
  14.   }
  15.  
  16.    int main()
  17.    {
  18.       int valor;
  19.       std::cin >> valor;
  20.       std::cout<<  retorno(valor);
  21.    }
  22.  
  23.  
  24.  




« Última modificación: 17 Octubre 2013, 10:41 am por vangodp » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [C] Funciones
« Respuesta #2 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 ;)
En línea

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


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: [C] Funciones
« Respuesta #3 en: 17 Octubre 2013, 10:04 am »

Hola eferion amchacon escabroso el tema de los returns XD hasta yo has veces tengo dugas :D
« Última modificación: 17 Octubre 2013, 12:47 pm por Eternal Idol » En línea

audiogalaxy.

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: [C] Funciones
« Respuesta #4 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.
En línea

Qué sería de dios sin el Hombre.
manofol

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: [C] Funciones
« Respuesta #5 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.
En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: [C] Funciones
« Respuesta #6 en: 18 Octubre 2013, 23:25 pm »

buena info, o en vez de función utiliza acción  :rolleyes:
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PHP y funciones tcp/ip « 1 2 »
PHP
nacho2003 11 7,500 Último mensaje 21 Septiembre 2006, 00:07 am
por deya
Funciones en php
PHP
Lambda 2 2,543 Último mensaje 14 Octubre 2006, 17:00 pm
por Thaorius
funciones y FOR
PHP
pepelon 4 2,262 Último mensaje 9 Diciembre 2006, 02:49 am
por pepelon
[C] Problema con Struct en funciones que llaman a otras funciones
Programación C/C++
‭lipman 9 23,596 Último mensaje 19 Mayo 2011, 23:39 pm
por Littlehorse
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines