Algoritmo para Convertir Segundos a Horas, Minutos y Segundos en PSeInt (2026)

Nivel: Básico Tiempo: ~15 min

¿Alguna vez te has preguntado cómo tu reloj digital convierte un número gigante de segundos en un formato legible como 12:30:45? Este es uno de los ejercicios más efectivos para dominar la lógica de programación matemática. En este tutorial de PSeInt, aprenderás a descomponer una cantidad total de segundos utilizando dos herramientas poderosas: la División Entera (Trunc) para obtener las unidades grandes y el operador Módulo (MOD) para rescatar los residuos. Si logras entender este ejercicio, habrás dominado el manejo de datos numéricos enteros.

Conceptos Clave: Módulo y División Entera

Para resolver este problema, necesitamos algo más que sumas y restas. Necesitamos «repartir» el tiempo en bloques de 60:

Operador Módulo (MOD / %)

El operador MOD nos da el residuo de una división. Si tienes 65 segundos y los divides entre 60 (1 minuto), sobra 5. Ese «5» es lo que obtenemos con 65 MOD 60. Es esencial para calcular los segundos y minutos restantes.

Función Trunc (Parte Entera)

Al dividir segundos para obtener horas, el resultado suele tener decimales. En PSeInt, la función trunc() elimina los decimales, quedándose solo con la parte entera. Ejemplo: trunc(90 / 60) da 1 (no 1.5).

Análisis del Algoritmo

La estrategia es ir de la unidad más grande a la más pequeña (Horas -> Minutos -> Segundos):

  • ENTRADA Un número entero que representa la cantidad total de segundos (ej: 3665). Variable sugerida: segundosTotales.
  • PROCESO 1. Horas: Dividir el total entre 3600 y tomar la parte entera.
    2. Residuo: Calcular cuántos segundos sobran después de sacar las horas.
    3. Minutos: Dividir ese residuo entre 60 y tomar la parte entera.
    4. Segundos: Lo que sobre finalmente es el residuo de dividir entre 60.
  • SALIDA Mostrar el resultado formateado como reloj: HH : MM : SS.

Código Fuente (Solución Estándar)

Archivo: ConversorTiempo.psc
Algoritmo SegundosAHoras
    // 1. Definición de Variables
    // Todo debe ser Entero porque no existen "medias horas" en formato reloj digital
    Definir totalSeg, horas, minutos, seg, residuo Como Entero;
    
    // 2. Entrada de Datos
    Escribir "=== Conversor de Tiempo ===";
    Escribir "Ingrese la cantidad total de segundos:";
    Leer totalSeg;
    
    // 3. Proceso
    // Paso A: Calcular Horas (1 hora = 3600 segundos)
    horas <- trunc(totalSeg / 3600);
    
    // Paso B: Ver cuánto "sobra" después de quitar las horas
    residuo <- totalSeg MOD 3600;
    
    // Paso C: De lo que sobró, calcular Minutos (1 minuto = 60 segundos)
    minutos <- trunc(residuo / 60);
    
    // Paso D: Los segundos finales son lo que sobra de dividir entre 60
    seg <- residuo MOD 60;
    
    // 4. Salida de Resultados
    Escribir "--------------------------------";
    Escribir "El tiempo equivalente es:";
    Escribir horas, " Horas";
    Escribir minutos, " Minutos";
    Escribir seg, " Segundos";
    Escribir "Formato: ", horas, ":", minutos, ":", seg;
    Escribir "--------------------------------";
    
FinAlgoritmo

Diagrama de Flujo

⚠️ Errores Comunes al Usar MOD y TRUNC

La gestión del tiempo en programación tiene trampas sutiles:

Olvidar la Función TRUNC

Si escribes horas <- total / 3600, PSeInt devolverá un decimal (ej: 1.5 horas). Un reloj no muestra "1.5 horas y 30 minutos", muestra "1 hora y 30 minutos". Es obligatorio cortar los decimales con trunc().

Calcular Minutos sobre el Total

Error frecuente: minutos <- trunc(totalSeg / 60). Esto te dará el total absoluto de minutos (ej: 90 minutos), no los minutos *restantes* (30 minutos) después de sacar la hora. Debes usar el residuo, no el total original.

Reto: Código Optimizado (Validación)

¿Qué pasa si el usuario ingresa un tiempo negativo? Un buen algoritmo debe prevenir esto. Además, este código añade una lógica simple para mostrar los datos de forma limpia.

Algoritmo ConversorValidado
    Definir ts, h, m, s, r Como Entero;
    
    // Ciclo de validación: No acepta negativos
    Repetir
        Escribir "Ingrese los segundos totales (positivo):";
        Leer ts;
        Si ts < 0 Entonces
            Escribir "Error: El tiempo no puede ser negativo.";
        FinSi
    Hasta Que ts >= 0
    
    h <- trunc(ts / 3600);
    r <- ts MOD 3600;  // Residuo de horas
    m <- trunc(r / 60);
    s <- r MOD 60;     // Residuo final
    
    Escribir "Tiempo Convertido:";
    
    // Condicional para plurales (Estética)
    Si h = 1 Entonces
        Escribir h, " hora";
    SiNo
        Escribir h, " horas";
    FinSi
    
    Escribir m, " min y ", s, " seg";
    
FinAlgoritmo

Preguntas Frecuentes (FAQ)

¿Cómo hago el proceso inverso (HH:MM:SS a Segundos)?
Es mucho más fácil: solo multiplicas y sumas. Total = (Horas * 3600) + (Minutos * 60) + Segundos.
¿Qué significa el error "No coinciden los tipos"?
Probablemente definiste las variables como Real y estás intentando usar MOD, que es un operador exclusivo para números Enteros. Cambia la definición de tus variables.
¿Cómo muestro el cero a la izquierda (05 min)?
Necesitas una condición Si. Ejemplo: Si minutos < 10 Entonces Escribir "0", minutos; SiNo Escribir minutos; FinSi.
¿Por qué se divide entre 3600?
Porque una hora tiene 60 minutos, y cada minuto tiene 60 segundos. 60 x 60 = 3600. Es el "factor de conversión" directo de segundos a horas.

¿Listo para el siguiente nivel?

Domina la lógica de programación con nuestra colección completa.

Ver Más Ejercicios Resueltos

Publicaciones Similares

Deja una respuesta

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