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)
| | |-+  Problema con casting
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con casting  (Leído 2,737 veces)
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Problema con casting
« en: 18 Junio 2013, 22:01 pm »

Llevo un rato ya rompiéndome la cabeza con este programa y se que es una tontería, pero no veo el problema, es un simple programa para ver si un número es par o no y es el siguiente:
Código
  1. #include <stdio.h>
  2. int main() {
  3.     float num;
  4.     printf("Introduzca el numero:\n");
  5.     scanf("%lf", &num);
  6.     if ((num / 2) == ((int)(num/2)))
  7.        printf("Es par\n");
  8.     else if ((num / 2) != ((int)(num/2)))
  9.        printf ("Es impar\n");
  10.     getchar();
  11.  
  12.     return 0;
  13. }
  14.  

El primero fallo que tuve fue con el casting de int porque no le ponía paréntesis y me daba fallo al compilar pero ya lo solucioné, el problema que tengo es que me da que todos los números son pares, se que hay otras formas de hacerlos como con el operador % y alguna mas, pero lo que quiero es la solución a mi problema, porque no la encuentro.

Saludos.

EDITO: Cambie el tipo de variable float por double y funciona, pero no entiendo el por qué.

EDITO2: Si dejo el float y cambio el "%lf" en el scanf por "%f" funciona igual.


« Última modificación: 18 Junio 2013, 22:14 pm por Caster » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con casting
« Respuesta #1 en: 18 Junio 2013, 22:37 pm »

Como tú dices, con %2 se sabría al instante:

Código
  1. if (numero%2 == 0)
  2. printf("El numero es par");
  3. else
  4. printf("El numero es impar");

Pero quieres saber que es lo que pasa con tu código. Lo primero:
Código
  1.     if ((num / 2) == ((int)(num/2)))
  2.        printf("Es par\n");
  3.     else if ((num / 2) != ((int)(num/2)))
  4.        printf ("Es impar\n");

El segundo if sobra, si hemos llegado al else es porque esa condición ya es cierta:

Código
  1. if ((num / 2) == ((int)(num/2)))
  2.        printf("Es par\n");
  3. else
  4.        printf ("Es impar\n");

El segundo error esque la condición que has puesto no tiene sentido. "si numero dividido entre /2 es igual al mismo número dividido entre 2...". Esto siempre va a ser cierto porque es una ovbiedad:

Código:
1/2 = 1/2 CIERTO
2/2 = 2/2 CIERTO
3/2 = 3/2 CIERTO
4/2 = 4/2 CIERTO
5/2 = 5/2 CIERTO



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
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Problema con casting
« Respuesta #2 en: 18 Junio 2013, 22:43 pm »

O soy yo muy tonto, o muy poca gente entiende el programa, no estoy comparando el mismo numero, porque en el segundo hace un casting, por ejemplo, 12 entre 2 es 6, y el int de 6 (por decirlo de alguna manera) es 6, pero sin embargo 13 entre 2 es 6.5 y el int de 6.5 es 6, por lo tanto no son iguales y es impar. Y respecto del programa, ya entendí el fallo, el especificador del scanf no coincidía con la variable, todo solucionado.

Saludos
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con casting
« Respuesta #3 en: 18 Junio 2013, 22:48 pm »

Ah ostia  :silbar:
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
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con casting
« Respuesta #4 en: 19 Junio 2013, 00:09 am »

Creo que el fallo inicial está en declarar num como float o double, ya que en ese caso el no ser par no implica que sea impar. Por ejemplo, 6.7 daría impar y sin embargo no es ni lo uno ni lo otro. Es más, el concepto de par e impar está reservado para números enteros, con lo que no cabe declarar num como float ni double.

Es decir que habría que tratar la variable num como int, y así ver si es par y sino, impepinablemente es impar.

Y ahí entra en juego el posible tema del casting donde compararías num/2., y fíjate bien en el punto del 2 que transforma el int en float, con (int)(num/2.), o más simple, compararlo con (num/2) es decir sin el punto decimal porque ya sería entero.

Conclusión:


Código
  1. #include <stdio.h>
  2. int main() {
  3.     int num;
  4.     printf("Introduzca el numero:\n");
  5.     scanf("%d", &num);
  6.     if ((num / 2.) == ((int)(num/2.)))
  7.     /*o bien: if ((num / 2.) == num/2)*/
  8.        printf("\nEs par\n");
  9.     else
  10.        printf ("\nEs impar\n");
  11.     getchar();
  12.     return 0;
  13. }
  14.  

 Saluditos!
    
« Última modificación: 19 Junio 2013, 16:58 pm por leosansan » En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Problema con casting
« Respuesta #5 en: 19 Junio 2013, 00:12 am »

El 2. soluciona todo, porque si como tu dices cambiamos el float por un int siempre saldrian par, lo declaro como float para que coja los decimales al dividirlo por 2.

Saludos
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con casting
« Respuesta #6 en: 19 Junio 2013, 16:53 pm »

El 2. soluciona todo, porque si como tu dices cambiamos el float por un int siempre saldrian par, lo declaro como float para que coja los decimales al dividirlo por 2.

No hombre, no. Tienes que declararlo entero ,como ya te explique en el post anterior. Al dividirlo entre 2., y de nuevo  hago hincapié en el punto decimal, automáticamente el código pasa ese valor a float, por lo que si introduces 13, 13/2. pasaría a ser 6.500000 y al compararlo con 13 de dará impar.

Una salida al código que te paso, otra vez, a continuación:


Código
  1.  
  2. Introduzca el numero
  3. (negativo para salir) :6
  4.  
  5. num / 2.=3.000000---->num/2=3
  6. Es par
  7.  
  8. Introduzca el numero
  9. (negativo para salir) :13
  10.  
  11. num / 2.=6.500000---->num/2=6
  12. Es impar
  13.  
  14. Introduzca el numero
  15. (negativo para salir) :9
  16.  
  17. num / 2.=4.500000---->num/2=4
  18. Es impar
  19.  
  20. Introduzca el numero
  21. (negativo para salir) :15
  22.  
  23. num / 2.=7.500000---->num/2=7
  24. Es impar
  25.  
  26. Introduzca el numero
  27. (negativo para salir) :14
  28.  
  29. num / 2.=7.000000---->num/2=7
  30. Es par
  31.  
  32.  


Y dos cositas, observa que declaro num como int y la otra es que ejecutes el código que te pasamos para comprobar que funciona, no te conformes con mirarlo y sacar conclusiones que, como en este caso, te han llevado a error:


Código
  1. #include <stdio.h>
  2. int main() {
  3.     int num=0;
  4.     while (num>=0)
  5.     {
  6.         printf("\nIntroduzca el numero \n(negativo para salir) :");
  7.         scanf("%d", &num);
  8.         printf("\nnum / 2.=%f---->num/2=%d",num / 2.,num/2\n);
  9.         if (num / 2. == num/2)
  10.            printf("\nEs par\n");
  11.         else
  12.            printf ("\nEs impar\n");
  13.     }
  14.  
  15.     getchar();
  16.     return 0;
  17. }
  18.  

 Saluditos!
    
« Última modificación: 19 Junio 2013, 17:02 pm por leosansan » En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Problema con casting
« Respuesta #7 en: 19 Junio 2013, 18:19 pm »

Me expliqué yo mal, dije que yo lo declaraba como float para que tuviera decimales y que poniéndole el . al 2 se solucionaba eso al declararlo como int, lo entendí todo.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Casting
Programación Visual Basic
TeKNo dUKe 0 1,127 Último mensaje 26 Junio 2008, 14:34 pm
por TeKNo dUKe
¿Fallo de casting?
Java
SKalextric 5 3,366 Último mensaje 16 Octubre 2008, 06:22 am
por sapito169
Casting.xxx, el primer dominio porno en Internet
Noticias
wolfbcn 0 3,975 Último mensaje 5 Agosto 2011, 02:52 am
por wolfbcn
Recopilatorio de Filtros, Casting y Parsing para PHP
PHP
WHK 0 1,752 Último mensaje 21 Diciembre 2011, 18:40 pm
por WHK
Detenidos los dos autores de un fraude telefónico relacionado con el casting ...
Noticias
wolfbcn 0 1,011 Último mensaje 30 Julio 2014, 13:43 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines