Saltar al contenido

Convertir segundos a horas y minutos y segundos

Presta atención porque en esta noticia vas a hallar el resultado que buscas.

Solución:

Pruebe esto en su lugar, probado y funciona:

int seconds, hours, minutes;
cin >> seconds;
minutes = seconds / 60;
hours = minutes / 60;
cout << seconds << " seconds is equivalent to " << int(hours) << " hours " << int(minutes%60) 
     << " minutes " << int(seconds%60) << " seconds.";

Como los minutos son segundos/60, dividirlo por 60 nuevamente es equivalente a sumergir los segundos por 3600, por eso funciona.

seconds/3600 es división entera, por lo que para seconds < 3600, hours es 0entonces cosas como seconds%(hours*3600) se convierte seconds % 0provocando una división por cero.


Primero hagamos bien la lógica. Supongamos que quieres escribir 5000 seconds como x horas y minutos z segundos, tales que los tres son enteros y ninguno y ni z es mayor que 59. ¿Qué haces?

Bueno, primero puedes escribirlo como q minutos z segundos, tal que ambos son enteros y z no es mayor que 59. Eso es fácil:

q = 5000 / 60 = 83  // integer division
z = 5000 % 60 = 20

Entonces 5000 segundos son 83 minutos 20 segundos. ahora como se escribe 83 minutes dentro x horas y minutos, tal que ambos son enteros y y no es mayor que 59? Haces lo mismo:

x = 83 / 60 = 1
y = 83 % 60 = 23

Bien, generalicemos esto:

int total, seconds, hours, minutes;
cin >> total;
minutes = total / 60;
seconds = total % 60;
hours = minutes / 60;
minutes = minutes % 60;
cout << total << " seconds is equivalent to " << hours << " hours " << minutes 
     << " minutes " << seconds << " seconds.n" ;

Tienes un problema de dividir por cero aquí:

seconds % (hours*60);

hours es 0 en virtud de la división de enteros.

hours = seconds/3600;

Por lo que está tratando de hacer, debe considerar la lógica condicional para imprimir los minutos si la cantidad total de segundos es mayor que 3600. También querrá investigar una lógica similar en la siguiente parte de su flujo de impresión.

Mi C++ está oxidado, así que perdona si no lo está. exactamente sintaxis válida:

cout << (seconds > 3600 ? seconds % (hours*60) : seconds) << endl;

Si entiendes que ha sido de provecho este artículo, te agradeceríamos que lo compartas con el resto juniors y nos ayudes a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *