Retorno

Iniciado por FKT, 2 Septiembre 2015, 19:55 PM

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

FKT

Nunca he sabido como funciona exactamente lo de que la función retorne un valor, sé que cuando el programa le dice que cuando la función termine envié un 0 para que sepa si el programa se ha ejecutado sin errores pero como funciona ? Igual parece una pregunta exageradamente absurda.
El 0 que retorna la función main() se retorna hacia main() o ese 0 que hace? esque me gusta aprender las cosas desde la raíz. ;D
Solo hay 10 tipos de personas, las que saben binario y las que no.

ivancea96

Si bien main es un retorno, es el último retorno en el que debas pensar. No funciona igual que una función normal.

Practica con funciones normales primero.

Si sigues queriendo ver lo del main, imagínate al sistema operativo llamando a la función main() de tu programa. Como si fuera una función normal.

FKT

Cita de: ivancea96 en  2 Septiembre 2015, 21:09 PM
Si bien main es un retorno, es el último retorno en el que debas pensar. No funciona igual que una función normal.

Practica con funciones normales primero.

Si sigues queriendo ver lo del main, imagínate al sistema operativo llamando a la función main() de tu programa. Como si fuera una función normal.

Entiendo... entonces si hablamos de funciones normales?
Solo hay 10 tipos de personas, las que saben binario y las que no.

ivancea96

Las funciones cogen unos parámetros (si hay), los procesan, y retornan un resultado (salvo que sea void).

float n = sqrt(2.0); // SQuareRooT, Raíz cuadrada

Ahora "n" es igual a lo que retornó esa función, es decir, la raiz cuadrada de 2.

FKT

Cita de: ivancea96 en  3 Septiembre 2015, 00:24 AM
Las funciones cogen unos parámetros (si hay), los procesan, y retornan un resultado (salvo que sea void).

float n = sqrt(2.0); // SQuareRooT, Raíz cuadrada

Ahora "n" es igual a lo que retornó esa función, es decir, la raiz cuadrada de 2.

Asi?

Primero aclaro que nunca he usado funciones ( aparte de main() ), solo he leido y como se usan, así que sera la primera subfunción que hago.



#include <stdio.h>
#include <stdlib.h>

int funcionSuma(int numero1, int numero2){

     int retornoDeResultado;

     retornoDeResultado = numero1 + numero2;


     return retornoDeSuma;


}



int main(){

int primerNumero, segundoNumero, resultaldoSuma;

     printf("Introduze el primer numero:\n");
     scanf("%i",&primerNumero);
     printf("Introduce el segundo numero: \n);
     scanf("%i",&segundoNumero);

     resultadoSuma = retornoDeSuma;
     
     printf("La suma de los dos numeros es: %i",resultadoSuma);

     return 0;

}


Bueno espero que el número de errores sea mínimo  ;D

Creo que lo he echo bien pero una cosa que he echo porque he visto que todos lo hacen así es que en la subfunción ponen parametros como por ejemplo en mi caso los enteros: (int numero1, int numero2) Porque no se ponen dentro de la función poniendo: int numero1, numero2;

O si así no es posible porque en parámetros no se pone la variable que se va ha usar como resultado también? (espero haberme explicado bien).
Solo hay 10 tipos de personas, las que saben binario y las que no.

ivancea96

Los parámetros, se le pasan a la función, y son esos entre los paréntesis. Tu código sería así:

resultadoSuma = funcionSuma(primerNumero, segundoNumero);

Ahí lo que ocurre es que esos dos valores se les pasa a la función. Así que en tu función, y rtepito, SOLO DENTRO de tu función,  las variables numero1 y numero2 seran iguales a primerNumero y a segundoNumero, respectivamente.

Una vez ahí, tras toda la lógica que quieras, se retorna un valor. Un valor, no una variable. Si pones "return retornoDeSuma;", se retornará el valor de la variable retornoDeSuma.

Una vez la función ha retornado, donde antes tenias "funcion(...)", ahora "tienes" el valor de retorno.

Incluso puedes poner:

printf("La suma de los dos numeros es: %i", funcionSuma(primerNumero, segundoNumero));

FKT

Es verdad... me he dejado los parametros cuando asigno el retorno de la funcón a "resultadoSuma".

Cita de: ivancea96 en  3 Septiembre 2015, 13:46 PM

Una vez ahí, tras toda la lógica que quieras, se retorna un valor. Un valor, no una variable. Si pones "return retornoDeSuma;", se retornará el valor de la variable retornoDeSuma.


Entiendo que devuelve un valor pero el valor no se tiene que guardar en una variable para usarla en la función principal?  y si no es así como en el return de una funcion como la del ejemplo que se pone?
Solo hay 10 tipos de personas, las que saben binario y las que no.

ivancea96

Puedes poner:

int funcionSuma(int numero1, int numero2){
    return numero1 + numero2;
}

FKT

Cita de: ivancea96 en  3 Septiembre 2015, 20:29 PM
Puedes poner:

int funcionSuma(int numero1, int numero2){
    return numero1 + numero2;
}


Vale, pero he leído que en programas largos es mejor meter el valor que va ha retornar en una variable, es así?
Solo hay 10 tipos de personas, las que saben binario y las que no.

ivancea96

Depende. En un programa largo, el retorno puede acabar como el resultado de una multiplicacion, de una suma, o del retorno de otra función. Guardar porque sí, al final es una asignación extra.