Título: Ayuda con ejercicio en C Publicado por: Caster en 28 Octubre 2012, 15:43 pm Buenas!
Bueno pues de los ejercicios que me dejasteis en otro post eleji este para ir empezando: Citar Dado un numero entero positivo de segundos, se desea convertirlo a días. En el archivo segundos.in se informa el número de segundos el cual puede tener hasta 100 dígitos decimales, como una secuencia de dígitos. La salida se grabará en el archivo segundos.out, cada respuesta en una línea, y deberá contener: 1. Indicación de si el número de segundos dado equivale a un numero entero de minutos o no (mediante una S para sí, y una N para no). 2. Indicación de si el número de segundos dado equivale a un numero entero de horas, en el mismo formato que para la respuesta 1). 3. Indicación de si el número de segundos dado equivale a un numero entero de días, en el mismo formato que para la respuesta 1). 4. Imprimir el numero de días, horas, minutos y segundos equivalente al número de segundos dado. Ejemplo: Si segundos.in contiene: 5650560900 El archivo segundos.out debería contener: S N S 65400 d, 0 h, 15 m, 0 s Bueno yo cambie lo de archivos, porque aun no se manejarlos, y he llegado hasta los tres primeros puntos, pero el 4 no se como hacerlo, y queria que me dijerias a ver de que forma puedo hacerlo, no quiero codigo, solo como poder hacerlo, una idea para despues hacerlo yo, os dejo lo que llevo hecho: Código
Saludos Título: Re: Ayuda con ejercicio en C Publicado por: xiruko en 28 Octubre 2012, 17:16 pm para saber si algun numero es divisible por otro numero, se suele usar el operador de resto o mod '%'. por ejemplo, si quieres saber el resto de hacer una division entera de 7 entre 3, te quedaria:
Código: 7 / 3 = 2 (cociente) en el caso de tu ejercicio, es lo mismo pero sabiendo que 1 minuto tiene 60 segundos y que 1 hora tiene 60 minutos (o 3600 segundos). por ejemplo: Código: 140 segundos espero habertelo aclarado. un saludo! Título: Re: Ayuda con ejercicio en C Publicado por: leosansan en 28 Octubre 2012, 17:21 pm pero el 4 no se como hacerlo, y queria que me dijerias a ver de que forma puedo hacerlo, no quiero codigo, solo como poder hacerlo, una idea para despues hacerlo yo Tendras que obtener dias, horas minutos y segundos restantes a partir de los segundos de entrada. Por ejemplo: Código P.D: Revisa lo anterior, lo de numero entero de días en especial. Y lo siguiente no lo mires hasta que no lo hallas resuelto tú: Código
Título: Re: Ayuda con ejercicio en C Publicado por: xiruko en 29 Octubre 2012, 00:18 am he vuelto a mirar el post y me he fijado en esto:
Citar Dado un numero entero positivo de segundos, se desea convertirlo a días. En el archivo segundos.in se informa el número de segundos el cual puede tener hasta 100 dígitos decimales, como una secuencia de dígitos. hasta 100 digitos decimales significa que va desde 0 hasta 9.99e99 y con un unsigned de 64 bits "solo" llegas hasta 2^64=1.84e19, por lo que deberas buscar la manera de manejar numeros tan grandes (con eso no puedo ayudarte ya que no tengo ni idea, solo comentaba para que lo tuvieras en cuenta). un saludo! Título: Re: Ayuda con ejercicio en C Publicado por: Caster en 30 Octubre 2012, 16:47 pm Ya me habia dado cuenta, pero ahora mismo no me preocupa eso, lo que mas me interesa a mi es saber resolver el problema en si.
Saludos Título: Re: Ayuda con ejercicio en C Publicado por: Caster en 30 Octubre 2012, 18:45 pm Menudo lio tengo, ya llevo varias horas rompiendome la cabeza y no llego a nada, al principio he intentado hacerlo yo solo y no se si me acerque si quiera, y como no conseguia nada probe la solucion de leosansan, la copie y compile, y no da el resultado esperado, asi que seguire intentandolo a ver sin consigo algo.
Saludos Edito: Para conseguir los dias he escrito esto y funciona perfectamente: Código
EDITO 2: Pues parece que pensando al final llegue a la solucion, he programado esto: Código
Y funciona perfectamente. Al final el codigo completo queda asi: Código
Saludos y muchas gracias a todos por la ayuda. He editado las salidas por pantalla para que se adapte mejor a los resultados que pide el ejercicio. Título: Re: Ayuda con ejercicio en C Publicado por: leosansan en 30 Octubre 2012, 20:04 pm al principio he intentado hacerlo yo solo y no se si me acerque si quiera, y como no conseguia nada probe la solucion de leosansan, la copie y compile, y no da el resultado esperado Citar Dime en qué no funciona. Por ejemplo segundos=191115 da 2d 5h 5min 15s. Sin embargo, en el código te sigue fallando "numero de dias enteros" que da 2 cuando obviamente no es un número de dias enteros Saludos!. Título: Re: Ayuda con ejercicio en C Publicado por: Caster en 30 Octubre 2012, 20:12 pm Tu codigo no es que no funcione, sino que introduzco el numero de segundos que se da como ejemplo en el ejercicio y el resultado no coincide, acabo de probar con el numero de segundos que das tu yla salida del programa que hice yo es esta:
Citar Porfavor introduzca los segundos: 191115 N N N 2.000000 d, 5.000000 h, 5.000000 m, 15 s Es corrrecta, no es un numero entero de minutos, ni de horas, ni de dias, asi que sale todo "N" y despues como bien dice el programa no es numero entero de nada, asi que sobran horas, minutos y segundos y por eso ninguno de ellos queda en 0. Saludos EDITO: He probado ha introducir 120 segundos y el programa me ha dado esto: Citar Porfavor introduzca los segundos: 120 S N S 0.000000 d, 0.000000 h, 2.000000 m, 0 s Esta todo bien excepto que dice que es un numero entero de dias, ya he visto el fallo, y cambie esta linea: Código
Por esta: Código
Y ahora la salida es esta: Citar Porfavor introduzca los segundos: 120 S N N 0.000000 d, 0.000000 h, 2.000000 m, 0 s Saludos y muchas gracias. Título: Re: Ayuda con ejercicio en C Publicado por: leosansan en 31 Octubre 2012, 12:06 pm Puedes evitarte tanto casting sin más que introducir alguno de los números como decimales:
Código Saludos!. Título: Re: Ayuda con ejercicio en C Publicado por: xiruko en 31 Octubre 2012, 12:24 pm Citar Ya me habia dado cuenta, pero ahora mismo no me preocupa eso, lo que mas me interesa a mi es saber resolver el problema en si. tambien te lo conteste al principio del hilo y no me hiciste mucho caso. pero bueno, te dejo aqui el codigo a falta de implementar lo del numero de 100 cifras. Código
salida: Código: xiruko:~$ gcc segundos.c -o segundos un saludo! edito: modifico los if/else para que queden mas bonitos por recomendacion de BatchianoISpyxolo xD Título: Re: Ayuda con ejercicio en C Publicado por: BatchianoISpyxolo en 31 Octubre 2012, 12:45 pm tambien te lo conteste al principio del hilo y no me hiciste mucho caso. pero bueno, te dejo aqui el codigo a falta de implementar lo del numero de 100 cifras. Código
salida: Código: xiruko:~$ gcc segundos.c -o segundos un saludo! Y ya, si lo quieres hacer precioso, usas el operador ternario en vez de los ifs xD Por ejemplo: Código: puts ( horas%=24 ? "N" : "S" ); Título: Re: Ayuda con ejercicio en C Publicado por: xiruko en 31 Octubre 2012, 12:55 pm Citar Y ya, si lo quieres hacer precioso, usas el operador ternario en vez de los ifs xD Por ejemplo: Código: puts ( horas%=24 ? "N" : "S" ); ya lo habia pensado aunque no sabia que se podia usar como parametro. lo habia pensado asi: Código pero realmente era lo mismo que ponerlo con if/else asi que me decidi por lo que esta por ser mas claro. aunque gracias por la aclaracion, la verdad es que si que queda mas bonito xD Título: Re: Ayuda con ejercicio en C Publicado por: Caster en 31 Octubre 2012, 18:30 pm xiruko si que me habia fijado en tu respuesta, de hecho para hacer el codigo que hice yo me base en lo que respondiste tu, conocia el operador ternario, y para que quede mas bonito esta bien usarlo, pero a mi personalmente me gusta mas usar un if - else. Lo unico que no entiendo es esto:
Código
Saludos Título: Re: Ayuda con ejercicio en C Publicado por: leosansan en 31 Octubre 2012, 20:16 pm Lo unico que no entiendo es esto: Código
Citar segundos=1900 segundos/60=31==> esto serían minutos resto=segundos%60=40 es decir, te da los segundos inferiores a 60, o sea lo que quedarían en 1900 después de "quitar" los segundos múltiplo de 60 Título: Re: Ayuda con ejercicio en C Publicado por: xiruko en 31 Octubre 2012, 21:18 pm Citar Lo unico que no entiendo es esto: Código
es el operador resto o mod (como dije en el primer comentario), y esta sentencia es equivalente a esta: Código
exactamente igual que todas estas que quizas si que has visto: Código
Citar conocia el operador ternario, para que quede mas bonito esta bien usarlo, pero a mi personalmente me gusta mas usar un if - else. de hecho, a parte de bonito o no (que eso va a gustos), es mas eficiente que un if/else. pero bueno en este programa tampoco viene de ahi asi que... un saludo! Título: Re: Ayuda con ejercicio en C Publicado por: Caster en 1 Noviembre 2012, 00:01 am Vale, ahora lo entiendo todo perfectamente, me gusta mas el codigo de xiruko, es simple, no es largo y facil de entender, muchas gracias a todos por la ayuda.
Saludos |