Ejercicio 17. Hora de llegada

Un ciclista parte de una ciudad A a las HH horas, MM minutos y SS segundos. El tiempo de viaje hasta llegar a otra ciudad B es de T segundos. Escribir un algoritmo que determine la hora de llegada a la ciudad B.

En este ejercicio, una vez más tenemos que tener en cuenta, que en el momento que lo hacemos no podemos hacer uso de expresiones condicionales, por lo que dependiendo de los valores que nos indique el usuario podríamos obtener resultados incoherentes, y con condicionales también podríamos formatear la salida para que nos quede “más bonito”… Nos lo apuntamos para más adelante volver sobre él y poder arreglarlo.

Para realizar el ejercicio, pediremos al usuario que introduzca la hora de salida, indicando horas, minutos y segundos y también se le solicitará el tiempo que dura el trayecto en segundos. Todas estas variables serán de tipo int.

Para llevar a cabo los cálculos de la hora de llegada, hemos pensado en convertir la hora recibida a segundos, y sumarle el tiempo facilitado por el usuario.

Una vez obtenido el tiempo total en segundos, debemos ir dividiendo para calcular cuantas horas hay en primer lugar, cuantos minutos y cuantos segundos quedan.

Para calcular las horas debemos dividir por 3600 (1 hora = 60 minutos, 60 minutos = 3600 segundos) y quedarnos sólo con la parte entera.
Para calcular los minutos debemos dividir por 60 el resto que nos había quedado.
El nuevo resto obtenido son los segundos que quedarían.

Ejemplo:
17600 segundos, traducidos a horas, serían las:
* 17600 / 3600 = 4
* 3200 / 60 = 53
* 20

La hora sería 4:53:20

package ejerciciosSecuenciales;

import java.util.Scanner;

/**
17 Ejercicios secuenciales en Java

Programa:
Un ciclista parte de una ciudad A a las HH horas, MM minutos y SS segundos.
El tiempo de viaje hasta llegar a otra ciudad B es de T segundos. Escribir 
un algoritmo que determine la hora de llegada a la ciudad B.

@author: manolohidalgo_
@date: 02-11-19

Variables a utilizar:
    * hh (long)
    * mm (long)
    * ss (long)
    * tiempo (long)
    * totalSegundos (long)
   
ALGORITMO
    - LEER hh, mm, ss, tiempo
    - Cálculos
        * Separamos en segundos la hora de salida y añadimos el tiempo de
          viaje que será en segundos:
          * totalSegundos = (hh*3600 + mm*60 + ss) + tiempo
        * Separamos el totalSegundos y almacenamos la nueva hora en hh, mm, ss
          * hh = totalSegundos / 3600
          * mm = totalSegundos - (hh*3600)
          * ss = totalSegundos - (hh*3600) - (mm*60)
    - MOSTRAR resultado
*/

// Inicio del programa y declaración de variables:
public class Ejercicio17TiempoViaje {
  public static void main(String[] args) {
    Scanner scanner = new Scanner (System.in);
    int hh;
    int mm;
    int ss;
    int tiempo;
    int totalSegundos;
    int segundosRestantes;

// Solicitud de datos al usuario
    System.out.println("Este programa calcula la hora de llegada de un ciclista conociendo la hora de salida" +
                        "y el tiempo de viaje en segundos");
    System.out.print("Pediremos la hora segmentada, introduce la HORA: ");
    hh = scanner.nextInt();
    System.out.print("Introduce los MINUTOS: ");
    mm = scanner.nextInt();
    System.out.print ("Introduce los SEGUNDOS: ");
    ss = scanner.nextInt();
    System.out.print ("Duración del viaje en segundos: ");
    tiempo = scanner.nextInt();
    
// Realizamos Cálculos 
    // convertimos la hora dada por el usuario a segundos y le sumamos el tiempo del trayecto
    totalSegundos = hh *3600 + mm *60 + ss + tiempo;
    // Volvemos a traducir, ahora el total de segundos al formato hora.
    hh = totalSegundos / 3600;
    segundosRestantes = totalSegundos % 3600;
    mm = segundosRestantes / 60;
    ss = segundosRestantes % 60;

// Mostramos en pantalla
    System.out.println("La hora de llegada a la ciudad B será: "+ hh +":" + mm + ":"+ss);
    
  }
}

Puedes acceder a este ejercicio en GitHub en este enlace

Si tienes alguna duda al respecto, alguna sugerencia o algo que no te haya quedado claro, no tienes más que escribirme en los comentarios, estoy aquí para ayudarte y aprender, ¡Nos leemos!