Algoritmo de Reloj Digital en PSeInt: Simulación con Ciclos (Guía 2026)

Nivel: Intermedio Tiempo: ~25 min

¿Cómo funciona el cronómetro de tu celular o el reloj de tu computadora? La respuesta está en los Ciclos Anidados. En este tutorial avanzado de PSeInt, construiremos un simulador de reloj digital que cuenta horas, minutos y segundos en tiempo real. Aprenderás a dominar la técnica de «un ciclo dentro de otro ciclo» (Nesting) y utilizarás comandos especiales como Esperar y Borrar Pantalla para crear la ilusión de movimiento y actualización constante. Este es el ejercicio definitivo para entender cómo interactúan múltiples contadores simultáneos.

Conceptos Clave: La Mecánica del Tiempo

Para simular un reloj, debemos replicar el comportamiento de los engranajes: el segundero mueve al minutero, y este a la hora.

Ciclos Anidados (Nesting)

Necesitamos tres bucles Para, uno dentro del otro.
1. Externo (Horas): De 0 a 23.
2. Medio (Minutos): De 0 a 59.
3. Interno (Segundos): De 0 a 59.
Por cada vuelta del ciclo de horas, el de minutos da 60 vueltas, y el de segundos da 3600.

Comandos de Interfaz

Para que parezca un reloj y no una lista infinita de números, usamos:
Esperar 1 Segundos: Frena la ejecución para marcar el ritmo.
Borrar Pantalla: Limpia la consola antes de escribir la nueva hora, creando la animación.

Análisis del Algoritmo

La jerarquía de los bucles es fundamental. El ciclo más interno es el que cambia más rápido.

  • BUCLE HORAS Controla las horas del día. Va desde 0 hasta 23. Una vez termina, el día (o la simulación) acaba.
  • BUCLE MINUTOS Está dentro de las horas. Se repite 60 veces (0-59) por cada hora que pasa.
  • BUCLE SEGUNDOS El corazón del reloj. Está dentro de los minutos. Aquí es donde ponemos el Escribir, el Esperar y el Borrar Pantalla.

Código Fuente (Estructura Básica)

Archivo: RelojSimple.psc
Algoritmo RelojDigital
    // 1. Definición de Variables
    Definir h, m, s Como Entero;
    
    Escribir "Iniciando Reloj...";
    Esperar 1 Segundos;
    
    // 2. Ciclos Anidados (La lógica del reloj)
    
    // Bucle para las Horas (0 a 23)
    Para h <- 0 Hasta 23 Hacer
        
        // Bucle para los Minutos (0 a 59)
        Para m <- 0 Hasta 59 Hacer
            
            // Bucle para los Segundos (0 a 59)
            Para s <- 0 Hasta 59 Hacer
                
                // 3. Actualización de la Pantalla
                Borrar Pantalla; // Limpia el número anterior
                
                // Dibujo del reloj
                Escribir "=================";
                Escribir "  RELOJ DIGITAL  ";
                Escribir "    ", h, ":", m, ":", s;
                Escribir "=================";
                
                // 4. Pausa de tiempo real
                Esperar 1 Segundos;
                
            FinPara
            
        FinPara
        
    FinPara
    
FinAlgoritmo

Diagrama de Flujo

⚠️ Errores Comunes en Simulaciones

Lograr que el reloj se vea bien requiere evitar estos fallos:

Olvidar 'Borrar Pantalla'

Si no borras la pantalla, PSeInt escribirá una hora debajo de la otra infinitamente (00:00:01, 00:00:02...). Para simular un reloj fijo, debes limpiar la consola en cada segundo.

Poner 'Esperar' en el bucle incorrecto

El comando Esperar 1 Segundos debe ir estrictamente dentro del bucle de los Segundos. Si lo pones en el de Minutos, los segundos volarán a la velocidad de la luz y el reloj solo se detendrá cada minuto.

Reto: Formato Profesional "00:00:00"

El código básico muestra 9:5:1. Los relojes reales muestran 09:05:01. Para lograr esto, necesitamos condicionales que agreguen un "0" extra si el número es menor a 10.

Algoritmo RelojEstetico
    Definir h, m, s Como Entero;
    
    Para h <- 0 Hasta 23 Hacer
        Para m <- 0 Hasta 59 Hacer
            Para s <- 0 Hasta 59 Hacer
                
                Borrar Pantalla;
                Escribir "==================";
                
                // Lógica de visualización (Cero a la izquierda)
                // Usamos 'Sin Saltar' para armar la línea
                
                // Horas
                Si h < 10 Entonces
                    Escribir "0", h, ":" Sin Saltar;
                SiNo
                    Escribir h, ":" Sin Saltar;
                FinSi
                
                // Minutos
                Si m < 10 Entonces
                    Escribir "0", m, ":" Sin Saltar;
                SiNo
                    Escribir m, ":" Sin Saltar;
                FinSi
                
                // Segundos
                Si s < 10 Entonces
                    Escribir "0", s;
                SiNo
                    Escribir s;
                FinSi
                
                Escribir "==================";
                Esperar 1 Segundos; // También puedes probar con 'Esperar 100 Milisegundos' para pruebas rápidas
                
            FinPara
        FinPara
    FinPara
    
FinAlgoritmo

Preguntas Frecuentes (FAQ)

¿Cómo detengo el reloj?
Como el ciclo dura 24 horas, parece infinito. Para detenerlo en PSeInt, simplemente cierra la ventana de ejecución o presiona el botón de "Pausa/Stop". Programáticamente, necesitarías leer una tecla con Esperar Tecla, lo cual cambiaría la lógica.
¿Puedo poner una alarma?
Sí. Pide una hora de alarma al inicio (ej: h_alarma, m_alarma). Dentro del ciclo de segundos, agrega: Si h=h_alarma Y m=m_alarma Y s=0 Entonces Escribir "¡DESPIERTA!" FinSi.
¿Por qué parpadea la pantalla?
El comando Borrar Pantalla y volver a escribir causa un leve parpadeo visual en la consola. Esto es normal en aplicaciones de consola simples y difícil de evitar en PSeInt puro.
¿Cómo lo hago infinito?
Envuelve todo el bloque de los ciclos Para dentro de un ciclo Mientras Verdadero Hacer ... FinMientras. Así, cuando llegue a 23:59:59, volverá a 00:00:00 automáticamente.

¿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 *