Autor
|
Tema: Detectar si un numero es entero o no (Leído 6,809 veces)
|
Caster
|
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: #include <stdio.h> int main() { long int segundos; double minutos; printf("Porfavor introduzca los segundos: \n"); ; minutos = segundos/60; if (((int) minutos) == minutos) printf("Numero entero de minutos: Si"); else printf("Numero entero de minutos: No"); return 0; }
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
Mensajes: 1.314
|
pero sigo sin entender el error Tal como lo tenías " 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:minutos = segundos/60.0;
O bien, siguiendo con segundos como entero, hacer un casting:minutos = (double) segundos/60;
|
|
« Última modificación: 25 Octubre 2012, 21:55 pm por leosansan »
|
En línea
|
|
|
|
Caster
|
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
Mensajes: 1.314
|
Fijate que he reeditado el post anterior. Saludos
|
|
|
En línea
|
|
|
|
Caster
|
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
Mensajes: 114
|
Hola Caster. Otra opción es: #include <stdio.h> int main(int argc, char* argv[]) { int segundos; printf("Ingrese cantidad de segundos: "); if (segundos % 60) printf("Son %d minutos y %d segundos.", segundos / 60, segundos % 60); else printf("Son exactamente %d minutos.", segundos / 60); return 0; }
Saludos.
|
|
|
En línea
|
|
|
|
Caster
|
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
Mensajes: 114
|
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: #include <stdio.h> int main(int argc, char* argv[]) { int segundos; printf("Ingrese cantidad de segundos: "); if (segundos % 60) /* igual que: (segundos % 60 != 0) */ printf("Numero entero de minutos: No"); else printf("Numero entero de minutos: Si"); return 0; }
Saludos.
|
|
« Última modificación: 2 Noviembre 2012, 01:17 am por ecfisa »
|
En línea
|
|
|
|
Caster
|
En el otro hilo me dijeron lo mismo, y al final quedo asi el codigo: #include <stdio.h> #include <stdint.h> #include <inttypes.h> int main() { uint64_t segundos, minutos, horas, dias; printf("Introduce los segundos: "); scanf("%llu", &segundos ); minutos=segundos/60; puts((segundos %=60) ? "N" : "S"); horas=minutos/60; puts((minutos %=60) ? "N" : "S"); dias=horas/24; puts((horas %=24) ? "N" : "S"); printf("%llu d, %llu h, %llu m, %llu s\n", dias , horas , minutos , segundos ); return 0; }
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
Mensajes: 166
|
El título del tema es "Detectar si un numero es entero o no" ¿Por qué segundos, minutos, horas? What? xD #include <stdio.h> #include <math.h> int main (void) { double x = 2.16; double y = 5.; return 0; }
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Comprobar si un numero es entero
Programación Visual Basic
|
Neobius
|
6
|
34,307
|
21 Abril 2006, 08:04 am
por Neobius
|
|
|
Detectar un numero entero
Programación Visual Basic
|
jgaztelu
|
1
|
2,896
|
8 Octubre 2009, 18:58 pm
por cobein
|
|
|
[Python 2.7.3] No me convierte string a numero entero
Python
|
Yidu
|
4
|
3,336
|
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
|
3,039
|
16 Noviembre 2013, 02:36 am
por DanielPy
|
|
|
Descomponer un numero entero en lenguaje C.
« 1 2 »
Programación C/C++
|
NOB2014
|
10
|
14,087
|
1 Abril 2014, 20:59 pm
por eferion
|
|