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.
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:
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:
#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...
#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
#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 ;-)
#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);
}
Cuando se llega a la sentencia return, la función acaba. Asi que es imposible que se ejecuten dos return seguidos ;)
Hola eferion amchacon escabroso el tema de los returns XD hasta yo has veces tengo dugas :D
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.
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.
buena info, o en vez de función utiliza acción :rolleyes: