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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
[c]Duda con return en funcion
« en: 8 Abril 2014, 00:28 am »

Hola a todos de nuevo  ;D aqui sigo liado estudiando y haciendo un programa que calcule los numeros primos me ha surgido una duda, os la explico a continuacion

El programa lo escribi asi y me daba un resultado erroneo

Código
  1. /*Programa del libro, tema 5
  2.  * ejercicio 5.27, pagina 170
  3.  * programa que busque los numeros primos*/
  4.  
  5. #include <stdio.h>
  6.  
  7. int primo(int x);  //prototipo de la funcion primo
  8.  
  9. int main()
  10. {
  11.     int x;
  12.  
  13.     for(x = 1; x <= 100; x++){
  14.        printf("%d\n", primo(x));
  15.     }  //fin de for
  16.     return 0;
  17.  
  18.  
  19.     }  //fin de main
  20.  
  21.     /*funcion primo*/
  22.  
  23. int primo(int x){
  24.     int y;
  25.     int contador = 0;
  26.  
  27.     for (y = 1; y <= x; y++){
  28.         if (x % y == 0){
  29.             contador++ ;
  30.         }  //fin de if
  31.     }  //fin de for
  32.  
  33.     if (contador == 2){
  34.         return x;
  35.     }
  36.     }  //fin de la funcion primo
  37.  
  38.  
  39.  



entonces me puse a trastear posibles soluciones y lo modifique de tal manera y ya funciona perfecto, o eso creo

Código
  1. /*Programa del libro, tema 5
  2.  * ejercicio 5.27, pagina 170
  3.  * programa que busque los numeros primos*/
  4.  
  5. #include <stdio.h>
  6.  
  7. void primo(int x);  //prototipo de la funcion primo
  8.  
  9. int main()
  10. {
  11.     int x;
  12.  
  13.     for(x = 1; x <= 100; x++){
  14.        primo(x);
  15.     }  //fin de for
  16.     return 0;
  17.  
  18.  
  19.     }  //fin de main
  20.  
  21.     /*funcion primo*/
  22.  
  23. void primo(int x){
  24.     int y;
  25.     int contador = 0;
  26.  
  27.     for (y = 1; y <= x; y++){
  28.         if (x % y == 0){
  29.             contador++ ;
  30.         }  //fin de if
  31.     }  //fin de for
  32.  
  33.     if (contador == 2){
  34.         printf("%d\n", x);
  35.     }
  36.     }  //fin de la funcion primo
  37.  
  38.  



y me da la duda de porque de la primera forma no funciona si yo pensaba que seria lo mismo  :o , haber si alguien me lo explica

Un saludo  ;D


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [c]Duda con return en funcion
« Respuesta #1 en: 8 Abril 2014, 01:02 am »

Pues porque en el primer caso, el retorno que has puesto en primo no tiene sentido. Además tampoco lo compruebas ni nada.

Lo ideal esque devuelvas un 1 si es primo y 0 si no lo es. Después lo compruebas con un if y listo:
Código
  1. for(x = 1; x <= 100; x++)
  2.    if (primo(x)) printf("%d\n",x);

Por cierto sobre los numeros primos:
http://foro.elhacker.net/programacion_cc/codigo_para_calcular_los_numeros_primos-t405451.0.html


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
dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
Re: [c]Duda con return en funcion
« Respuesta #2 en: 8 Abril 2014, 08:19 am »

ok, probare a hacerlo como me dices, no se me había ocurrido lo de 0 si no es primo y 1 si lo es.

Aun no me queda claro el porque no funciona en el primer caso si supuestamente retorno el valor de x si solo tiene dos divisores, que serian 1 y el numero mismo.

Un saludo  ;D
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [c]Duda con return en funcion
« Respuesta #3 en: 8 Abril 2014, 11:22 am »

¡Buenas!

El "error" de la primera función supongo que será debido a que solo devuelves un valor cuando el número tiene dos divisores. Si no los tiene no devuelves nada y supongo que tomará como valor de retorno el último valor devuelto por la función (lo que implicaría que la llamada a la función se está realizando siempre en la misma posición de la pila...). Si no es eso, ni idea.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [c]Duda con return en funcion
« Respuesta #4 en: 8 Abril 2014, 15:27 pm »

¡Buenas!

El "error" de la primera función supongo que será debido a que solo devuelves un valor cuando el número tiene dos divisores. Si no los tiene no devuelves nada y supongo que tomará como valor de retorno el último valor devuelto por la función (lo que implicaría que la llamada a la función se está realizando siempre en la misma posición de la pila...). Si no es eso, ni idea.

¡Saludos!

Creo que estas en lo cierto do-while.

Una forma de evitar lo que sucede en tu primer  código es que retorne "algo" si no es primo, algo parecido a lo que propone amchacon:


Código
  1. if (contador == 2)
  2.         return x;
  3.    else
  4.        return 0;

Y en la función main:

Código
  1.    for(x = 1; x <= 100; x++){
  2.      if (primo(x)!=0)
  3.        printf("%d\n", primo(x));
  4.     }  //fin de for

Y ya te funciona el código inicial sin problemas ya que ahora retorna la función primo si o si.

Salu2!.
En línea

dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
Re: [c]Duda con return en funcion
« Respuesta #5 en: 8 Abril 2014, 18:51 pm »

Entonces teoricamente lo que me faltaba era el else con el return para que si o si "returne" algo  ;D

Yo es que soy completamente novato en estas cosas asi que tengo mil y una dudas. Me vereis por aqui asiduamente  :-X

Un saludo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Funcion mail() error para ultimo argumento (return-path)
PHP
Diabliyo 1 3,262 Último mensaje 13 Agosto 2010, 01:18 am
por Diabliyo
Duda en una condición con return « 1 2 »
Programación C/C++
Blaster 10 5,613 Último mensaje 28 Junio 2013, 12:40 pm
por eferion
Duda sentencia return en C
Programación C/C++
David8 9 4,113 Último mensaje 2 Mayo 2014, 17:53 pm
por Eternal Idol
Es necesario escribir return; al final de una funcion, y void?
Programación C/C++
RGT 2 2,296 Último mensaje 29 Marzo 2015, 17:53 pm
por rir3760
Función con return de varias variables
Programación C/C++
Palante 1 2,079 Último mensaje 11 Febrero 2017, 02:29 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines