Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Pasar de segundos a horas,minutos y segundos correspondientes.

Estas en el tema de Pasar de segundos a horas,minutos y segundos correspondientes. en el foro de C/C++ en Foros del Web. Hola,el programa consiste en que el usuario introducirá un número de segundos y se mostrará a cuánto equivale ese número en horas,minutos y segundos. He ...
  #1 (permalink)  
Antiguo 12/09/2014, 03:26
Avatar de anggiebs  
Fecha de Ingreso: julio-2014
Ubicación: Madrid
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Pregunta Pasar de segundos a horas,minutos y segundos correspondientes.

Hola,el programa consiste en que el usuario introducirá un número de segundos y se mostrará a cuánto equivale ese número en horas,minutos y segundos.
He avanzado esto ,lo he probado con ciertos números como:
3601 segundos = 1h 0min 1 segundo.
7204 segundos = 2h 0min 4 segundos.
pero a la hora de probarlo con :
10806 debería de darme 3h 0min 6 segundos y me sale 2h 0min 6 segundos.

Creo que mi error es sencillo pero no lo veo :/ .Espero puedan ayudarme,gracias :) .

Código C++:
Ver original
  1. int s=0,horas=0,min=0;
  2. int aux;
  3.  
  4. cout << "Introduce los segundos:" ;
  5. cin >> s;
  6.  
  7. if(s>3600){
  8.         aux = s-3600;  
  9.         if(aux > 0){   
  10.             horas = 1;
  11.             if(aux % 60 == 0){  //Si es múltiplo de 60.
  12.                 min = aux/60;
  13.                 if(min >=60){
  14.                     horas++;
  15.                     min = 0;
  16.                 }
  17.                 s = 0;
  18.             }
  19.             else{  
  20.                 if(aux >60){
  21.                     s = aux % 60; //El resto de dividir entre 60 será s.
  22.                     aux = aux - s;
  23.                     min= aux/60;
  24.                     if(min >= 60){
  25.                         horas++;
  26.                         min=0;
  27.                     }
  28.                 }
  29.                 else{
  30.                     s=aux;
  31.                 }
  32.             }
  33.         }
  34.     }
  #2 (permalink)  
Antiguo 12/09/2014, 04:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Pasar de segundos a horas,minutos y segundos correspondientes.

Creo que el error lo tienes en que sólo incrementas como mucho la variable "horas" en dos unidades.
En la línea 10:
Código C++:
Ver original
  1. horas = 1;
y en las líneas 14 ó 25,
Código C++:
Ver original
  1. horas++;
dependiendo de por donde discurra el programa
Pero en esas líneas, la variable "horas" sólo se incrementa en una ud si la variable min>=60.

Pero...qué pasa si la variable min>=120? Eso son 2 horas, y tú sólo incrementas el valor de horas en una ud, sólamente con la condición de que min sea >= a 60.

Por otro lado, la verdad es que en mi opinión el método seguido es un poco lioso. Seguro que lo puedes mejorar un poco
  #3 (permalink)  
Antiguo 12/09/2014, 09:36
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 4 meses
Puntos: 29
Respuesta: Pasar de segundos a horas,minutos y segundos correspondientes.

Te complicas demasiado la vida con este codigo. Porque no haces algo como esto:

Código Javascript:
Ver original
  1. function a(s){
  2.    var horas = Math.floor(s/3600);
  3.    var minutos = Math.floor((s - horas*3600)/60);
  4.    var secundos = (s - horas*3600 - minutos*60);
  5.    return [horas,minutos,secundos];
  6. }
  #4 (permalink)  
Antiguo 12/09/2014, 10:52
Avatar de anggiebs  
Fecha de Ingreso: julio-2014
Ubicación: Madrid
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Pasar de segundos a horas,minutos y segundos correspondientes.

Apenas pocas líneas de código...tengo que practicar mucho para hacerlo así.
Gracias a ambos por la ayuda :)!
  #5 (permalink)  
Antiguo 12/09/2014, 18:39
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Pasar de segundos a horas,minutos y segundos correspondientes.

Hola anggiebs.

Ese cáculo lo podes realizar con operaciones básicas sin necesidad de usar ciclos:
Código C++:
Ver original
  1. void segsToHMS(const unsigned int sgs, int& h, int& m, int& s) {
  2.   h = sgs / 3600;
  3.   m = sgs / 3600 % 60;
  4.   s = sgs % 3600 % 60;
  5. }

Saludos.
  #6 (permalink)  
Antiguo 15/09/2014, 00:33
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Pasar de segundos a horas,minutos y segundos correspondientes.

Te corrijo un poco:

Código C:
Ver original
  1. void segsToHMS(const unsigned int sgs, int& h, int& m, int& s)
  2. {
  3.     h = sgs / 3600;
  4.     m = (sgs % 3600) / 60;
  5.     s = sgs % 60;
  6. }
  #7 (permalink)  
Antiguo 15/09/2014, 02:53
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Pasar de segundos a horas,minutos y segundos correspondientes.

Tenes razón, al escribir invertí la operación en la segunda línea.

Debería haber sido:
Código C++:
Ver original
  1. void segsToHMS(const unsigned int sgs, int& h, int& m, int& s) {
  2.   h = sgs / 3600;
  3.   m = sgs % 3600 / 60;
  4.   s = sgs % 3600 % 60;
  5. }

Etiquetas: int, programa, segundos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:15.