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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Detectar si un numero es entero o no
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Detectar si un numero es entero o no  (Leído 6,726 veces)
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Detectar si un numero es entero o no
« 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


« Última modificación: 25 Octubre 2012, 20:26 pm por Caster » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Detectar si un numero es entero o no
« Respuesta #1 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;


« Última modificación: 25 Octubre 2012, 21:55 pm por leosansan » En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Detectar si un numero es entero o no
« Respuesta #2 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
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Detectar si un numero es entero o no
« Respuesta #3 en: 25 Octubre 2012, 21:54 pm »

Citar
Fijate que he reeditado el post anterior.
Saludos
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Detectar si un numero es entero o no
« Respuesta #4 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
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Detectar si un numero es entero o no
« Respuesta #5 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.
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Detectar si un numero es entero o no
« Respuesta #6 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
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Detectar si un numero es entero o no
« Respuesta #7 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.  :)
« Última modificación: 2 Noviembre 2012, 01:17 am por ecfisa » En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Detectar si un numero es entero o no
« Respuesta #8 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
En línea

BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: Detectar si un numero es entero o no
« Respuesta #9 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.
« Última modificación: 2 Noviembre 2012, 13:35 pm por BatchianoISpyxolo » En línea

Puede que desees aprender a programar desde 0: www.espascal.es
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comprobar si un numero es entero
Programación Visual Basic
Neobius 6 34,188 Último mensaje 21 Abril 2006, 08:04 am
por Neobius
Detectar un numero entero
Programación Visual Basic
jgaztelu 1 2,881 Último mensaje 8 Octubre 2009, 18:58 pm
por cobein
[Python 2.7.3] No me convierte string a numero entero
Scripting
Yidu 4 3,282 Último mensaje 19 Febrero 2013, 20:25 pm
por Yidu
Acceder de forma individual a cada digito de un número entero(sin sprintf)
Programación C/C++
DanielPy 4 2,963 Último mensaje 16 Noviembre 2013, 02:36 am
por DanielPy
Descomponer un numero entero en lenguaje C. « 1 2 »
Programación C/C++
NOB2014 10 13,961 Último mensaje 1 Abril 2014, 20:59 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines