Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Caster en 25 Octubre 2012, 20:15 pm



Título: Detectar si un numero es entero o no
Publicado por: Caster en 25 Octubre 2012, 20:15 pm
Bueno pues sigo con el mismo ejercicio que estoy haciendo en el ultimo post que hice hace poco tiempo, pero esta vez es otro problema, aqui os dejo el codigo que llevo:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. long int segundos;
  6. double minutos;
  7.  
  8.  
  9. printf("Porfavor introduzca los segundos: \n");
  10. scanf("%ld", &segundos);
  11.  
  12. while(getchar() != '\n')
  13. ;
  14.  
  15. minutos = segundos/60;
  16.  
  17. if (((int) minutos) == minutos)
  18. printf("Numero entero de minutos: Si");
  19. else
  20. printf("Numero entero de minutos: No");
  21.  
  22.  
  23. return 0;
  24. }

Lo primero que me pide el ejercicio es que segun el numero de segundos introducidos, analice si es un numero entero de minutos o no, y creo que este codigo esta bien, pero ponga el numero que ponga siempre me da que si, y ya lo he repasado mil veces y he probado a ponerlo de otras maneras pero siempre pasaba lo mismo, creo que estoy fallando en una tonteria pero no me doy cuenta.

Saludos

EDITO:He probado a cambiar la variable segundos de tipo int a tipo double y asi funciona perfectamente, y se que el error estaba el linea de asignacion a minutos despues del bucle while, pero sigo sin enetender el error

Saludos


Título: Re: Detectar si un numero es entero o no
Publicado por: leosansan en 25 Octubre 2012, 21:45 pm
pero sigo sin entender el error
Tal como lo tenías
Código
  1. " minutos = segundos/60; "
era una operación entre enteros y devolvía un entero, por eso siempre te daba SI.
Puedes seguir declarando a segundos como entero pero usar:
Código
  1. minutos = segundos/60.0;
O bien, siguiendo con segundos como entero,  hacer un casting:
Código
  1. minutos = (double) segundos/60;


Título: Re: Detectar si un numero es entero o no
Publicado por: Caster en 25 Octubre 2012, 21:47 pm
Algo habia pensado yo que era por culpa en esa sentencia y los tipos de variables, pero no me daba cuenta. Muchas gracias

Saludos


Título: Re: Detectar si un numero es entero o no
Publicado por: leosansan en 25 Octubre 2012, 21:54 pm
Citar
Fijate que he reeditado el post anterior.
Saludos


Título: Re: Detectar si un numero es entero o no
Publicado por: Caster en 25 Octubre 2012, 22:01 pm
Muchisimas grcias por la respuesta, voy a hacer un cast a segundos, porque asi me sirve para el resto del programa, me acabas de resolver justo un problema que acaba de tener ahora mismo.

Saludos


Título: Re: Detectar si un numero es entero o no
Publicado por: ecfisa en 29 Octubre 2012, 06:25 am
Hola Caster.

Otra opción es:

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char* argv[]) {
  4.  int segundos;
  5.  
  6.  printf("Ingrese cantidad de segundos: ");
  7.  scanf("%d",&segundos);
  8.  while(getchar()!='\n');
  9.  
  10.  if (segundos % 60)
  11.    printf("Son %d minutos y %d segundos.", segundos / 60, segundos % 60);
  12.  else
  13.    printf("Son exactamente %d minutos.", segundos / 60);
  14.  
  15.  getchar();
  16.  return 0;
  17. }
  18.  

Saludos.


Título: Re: Detectar si un numero es entero o no
Publicado por: Caster en 29 Octubre 2012, 20:01 pm
Muchas gracias, pero es parte de un ejercicio que he puesto en otro hilo y lo que pide el ejercicio es unicamente detectar si es un numero entero o no, no pide el resto.

Saludos


Título: Re: Detectar si un numero es entero o no
Publicado por: ecfisa en 2 Noviembre 2012, 01:13 am
Hola Caster.

Haa entiendo, no sabía lo del otro hilo...

En realidad, lo que quería destacar es que:  Para saber si la cantidad de segundos ingresada es un número exácto de minutos, basta con verificar que el resto de la división de la cantidad ingresada de segundos por 60, sea igual o distinta de 0. (1 minuto = 60 segundos)

El operador '%' devuelve el módulo (resto) de la división, entonces tu código podría haber quedado:
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char* argv[]) {
  4.  int segundos;
  5.  
  6.  printf("Ingrese cantidad de segundos: ");
  7.  scanf("%d",&segundos);
  8.  while(getchar()!='\n');
  9.  
  10.  if (segundos % 60)   /* igual que: (segundos % 60 != 0) */
  11.    printf("Numero entero de minutos: No");
  12.  else
  13.    printf("Numero entero de minutos: Si");
  14.  
  15.  getchar();
  16.  return 0;
  17. }
  18.  


Saludos.  :)


Título: Re: Detectar si un numero es entero o no
Publicado por: Caster en 2 Noviembre 2012, 09:05 am
En el otro hilo me dijeron lo mismo, y al final quedo asi el codigo:

Código
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <inttypes.h>
  4.  
  5. int main() {
  6.  
  7. uint64_t segundos, minutos, horas, dias;
  8.  
  9. printf("Introduce los segundos: ");
  10. scanf("%llu", &segundos);
  11.  
  12. minutos=segundos/60;
  13. puts((segundos%=60) ? "N" : "S");
  14.  
  15. horas=minutos/60;
  16. puts((minutos%=60) ? "N" : "S");
  17.  
  18. dias=horas/24;
  19. puts((horas%=24) ? "N" : "S");
  20.  
  21. printf("%llu d, %llu h, %llu m, %llu s\n", dias, horas, minutos, segundos);
  22.  
  23. return 0;
  24. }

Es el codigo del ejercicio completo, por eso hay alguna parte que no tiene nada que ver son este hilo.

Saludos


Título: Re: Detectar si un numero es entero o no
Publicado por: BatchianoISpyxolo en 2 Noviembre 2012, 13:23 pm
El título del tema es "Detectar si un numero es entero o no"

¿Por qué segundos, minutos, horas? What? xD

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main (void) {
  5.  
  6.    double x = 2.16;
  7.    double y = 5.;
  8.  
  9.    puts ( ((x-floor(fabs(x))) == 0.) ? "Entero" : "Decimal" );
  10.  
  11.    puts ( ((y-floor(fabs(y))) == 0.) ? "Entero" : "Decimal" );
  12.  
  13.    return 0;
  14. }
  15.  

Edito: Ah, número entero de segundos, minutos etc con aritmética modular. Perdón.

¡Saludos!

Edito2: Por cierto, ¿has probado el operador % con números suficientemente grandes? No estoy seguro pero pordría no funcionarte. Y posiblemente en las librerías que has incluido haya una función que calcule el módulo de un número entre otro.


Título: Re: Detectar si un numero es entero o no
Publicado por: Caster en 2 Noviembre 2012, 13:32 pm
Claro, es de un ejercicio que me pide a partir de un numero de segundos saber si son minutos, horas, y dias exactos. Aunque tu ejemplo no lo entiendo, porque busque en google la funcion floor pero no termino de entender lo que hace.

Saludos

Edito: Ya he entendido, la funcion floor redondea x hacia abajo al entero mas cercano. Entonces si, tu codigo tambien valdria.


Título: Re: Detectar si un numero es entero o no
Publicado por: BatchianoISpyxolo en 2 Noviembre 2012, 13:37 pm
Claro, es de un ejercicio que me pide a partir de un numero de segundos saber si son minutos, horas, y dias exactos. Aunque tu ejemplo no lo entiendo, porque busque en google la funcion floor pero no termino de entender lo que hace.

Saludos

Disculpa, mi código no tiene nada que ver con tu pregunta. Error mío.

http://www.cplusplus.com/reference/clibrary/cmath/floor/

Código
  1. /* floor example */
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. int main ()
  6. {
  7.  printf ("floor of 2.3 is %.1lf\n", floor (2.3) );
  8.  printf ("floor of 3.8 is %.1lf\n", floor (3.8) );
  9.  printf ("floor of -2.3 is %.1lf\n", floor (-2.3) );
  10.  printf ("floor of -3.8 is %.1lf\n", floor (-3.8) );
  11.  return 0;
  12. }

Cita de: Salida
floor of 2.3 is 2.0
floor of 3.8 is 3.0
floor of -2.3 is -3.0
floor of -3.8 is -4.0