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

 

 


Tema destacado: Estamos en la red social de Mastodon


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

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Ayuda 1pregunta en C/C++
« en: 23 Julio 2013, 00:36 am »

Bueno tengo 1 duda que para ustedes quizas sea estúpida xD Bueno aqui va, sí tenemos un programa se la siguiente manera:
Código
  1. #include <stdio.h>
  2.  
  3. int funcion2()
  4. {
  5.    return 5;
  6. }
  7.  
  8. int funcion1()
  9. {
  10.   return funcion2();
  11. /* Mi duda esta acá, es decir, a retornar una función este
  12. entra a esa función y retorna lo mismo
  13. que retorna la funcion2? Osea en este caso la funcion 2 retorna 5, entonces la funcion1()
  14. entra a la función2() y esta retorna lo mismo que la funcion2()?
  15. Ya que como esta  retornando la función yo opino que la funcion1() entra a la funcion2() dado que la funcion2()
  16. retorna 5, la funcion1() retornara 5 ya que esta
  17. pidiendo que retorne a la funcion2()*/
  18. }
  19.  
  20. int main(void)
  21. {
  22.    printf("%d \n",funcion1() );
  23.  
  24.   getchar();
  25.   return 0;
  26. }
  27.  




« Última modificación: 23 Julio 2013, 00:43 am por XorNet » En línea

z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Ayuda 1pregunta en C/C++
« Respuesta #1 en: 23 Julio 2013, 00:58 am »

No me he entrao de ná. xD

A ver... Esto es probarlo y aun no me ha quedado claro tu duda...

PD: Tal como tienes en tu code todo esto, te va a salir 5, y tu pides el porque... Yo no tengo npi. xD


En línea


Interesados hablad por Discord.
XorNet

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Ayuda 1pregunta en C/C++
« Respuesta #2 en: 23 Julio 2013, 01:07 am »

No me he entrao de ná. xD

A ver... Esto es probarlo y aun no me ha quedado claro tu duda...

PD: Tal como tienes en tu code todo esto, te va a salir 5, y tu pides el porque... Yo no tengo npi. xD

Lo que trato de decir es que, al retornar una función este entra a la función y retorna el resultado esa función? o retorna la función (Perdóname semejante estupidez seguro no es así pero quiero asegurarme xddd)
En línea

z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Ayuda 1pregunta en C/C++
« Respuesta #3 en: 23 Julio 2013, 01:13 am »

No tengo una respuesta certera 100%, pero como puedes observar ese return engloba a toda la función por lo que probablemente, estés retornando la función entera , aunque si te das cuenta siempre que uses return al final de una variable, supongo que podrás hacer int algo = 6; y luego un return algo;... Y ya ahí estés retornando una variable, pero yo que te voy a decir si he empezado hoy con C++ xD

Que te digan los pros del sub-foro de Programación C++ lo que ellos pienses.
PD: No se porque quieres saber tal tontería, pero bueno. :huh:
En línea


Interesados hablad por Discord.
Puntoinfinito


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: Ayuda 1pregunta en C/C++
« Respuesta #4 en: 23 Julio 2013, 01:13 am »

A ver, lo primero que se ejecuta es main(), evidentemente. Luego a partir de ahí llama a la impresión de pantalla con el valor que retorna function1(), que esta va a function2() que retorna el número 5, y luego vuelve a main(), en este caso ejecuta getchar() y bye bye.
En línea

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Ayuda 1pregunta en C/C++
« Respuesta #5 en: 23 Julio 2013, 10:30 am »

Lo primero: Hay que aprender a explicarse un poco mejor, sin animo de ofender.

Segundo: No hay mejor manera de aprender a programar que probando cada uno sus codigos, al compilar este codigo:

Código
  1. #include <stdio.h>
  2.  
  3. int funcion1();
  4. int funcion2();
  5.  
  6. int main()
  7. {
  8. printf("%d", funcion1());
  9. return 0;
  10. }
  11.  
  12. int funcion2()
  13. {
  14. return 5;
  15. }
  16.  
  17. int funcion1()
  18. {
  19. return funcion2();
  20. }
  21.  

el compilador no da ningun aviso ni error y compilar perfectamente, y el resultado es este:

Citar
5

Saludos.
En línea

calabuig21

Desconectado Desconectado

Mensajes: 5



Ver Perfil WWW
Re: Ayuda 1pregunta en C/C++
« Respuesta #6 en: 23 Julio 2013, 10:46 am »

Hazte un dibujo a mano, sigue las funciones y verás el resultado. Un ejemplo fácil lo puedes hacer en papel y lapiz  ;D
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda 1pregunta en C/C++
« Respuesta #7 en: 23 Julio 2013, 10:56 am »

cuando tu haces

Código
  1. #include <stdio.h>
  2.  
  3. int funcion2()
  4. {
  5.    return 5;
  6. }
  7.  
  8. int funcion1()
  9. {
  10.   return funcion2();
  11. }
  12.  
  13. int main(void)
  14. {
  15.    printf("%d \n",funcion1() );
  16.  
  17.   getchar();
  18.   return 0;
  19. }

Lo que estás haciendo, realmente, es lo siguiente:

* Has creado una función "funcion2", que lo único que hace es devolver el resultado que a su vez le proporciona otra funcion "funcion1".

* Dado que funcion1 siempre va a devolver un 5, funcion2 va a devolver ese mismo 5.

* El printf del main va a sacar por pantalla el valor devuelto por funcion2... es decir, un 5.

Cuando tu haces lo siguiente:

Código
  1. int funcion2( )
  2. {
  3.  return funcion1( );
  4. }

No estás devolviendo una función... sino el resultado de esa función.

De hecho, lo que has puesto es equivalente a:

Código
  1. int funcion2( )
  2. {
  3.  int resultado = funcion1( );
  4.  return resultado;
  5. }

Es decir, tu no devuelves funciones. Más bien estás llamando a una función determinada ( funcion1 ) y estás almacenando el resultado que te devuelve.
En línea

zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Ayuda 1pregunta en C/C++
« Respuesta #8 en: 24 Julio 2013, 07:01 am »

Código
  1. #include <stdio.h>
  2.  
  3. int funcion2()
  4. {
  5.    return 5;
  6. }
  7.  
  8. int funcion1()
  9. {
  10.   return funcion2();
  11. }
  12.  
  13. int main(void)
  14. {
  15.    printf("%d \n",funcion1() );
  16.  
  17.   getchar();
  18.   return 0;
  19. }
  20.  

- Al inicio se encuentra la declaración y definición de ambas funciones (ello no implica que se ejecuten antes de main(), sólo si son llamadas por esta función principal).
- Desde main() muestras el valor devuelto por funcion1().
- funcion1() devuelve el valor devuelto por funcion2().
- funcion2() devuelve 5.
- Se muestra 5 por pantalla.

Extra.
Por lo general se recomienda escribir antes de main() los prototipos de las funciones. Algo como:
Código
  1. int funcion1();
  2. int funcion2();
Y luego, usualmente después de main(), definir el cuerpo de las funciones, para que no haya conflictos en programas donde usas muchas.

Por ejemplo, en tu programa, si el orden hubiese sido el siguiente:
Código
  1. #include <stdio.h>
  2.  
  3. int funcion1()
  4. {
  5.   return funcion2();
  6. }
  7.  
  8. int funcion2()
  9. {
  10.    return 5;
  11. }
  12.  
  13. int main(void)
  14. {
  15.    printf("%d \n",funcion1() );
  16.  
  17.   getchar();
  18.   return 0;
  19. }
... hubiese errores, ya que al momento en que se define el cuerpo de funcion1() aún no existe funcion2(). Entonces cuando muchas funciones se llamen entre sí, para no estar pendientes del orden, es mejor escribir sus declaraciones (prototipos  :silbar:).
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda 1pregunta en C/C++
« Respuesta #9 en: 24 Julio 2013, 07:54 am »

Vamos ha hacerlo más interesante. Esto es una función que te calcula las veces que tienes que dividir entre 2 un número para obtener 0:

Código
  1. #include <stdio.h>
  2.  
  3. int funcion1(int i)
  4. {
  5.  if (i == 0) return 0;
  6.  
  7.  return funcion1(i/2) + 1;
  8. }
  9.  
  10. int main(void)
  11. {
  12.   printf("%d iteraciones \n",funcion1(10) );
  13.  
  14.  getchar();
  15.  return 0;
  16. }

Como puedes ver, se puede retornar incluso la misma función.

A esta técnica de programación se le llama recursividad, o función recursiva.
« Última modificación: 24 Julio 2013, 07:58 am por amchacon » 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
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines