Algoritmo para Sumar Números hasta que se Ingrese Cero (PSeInt 2026)

Nivel: Básico Tiempo: ~15 min

¿Cómo sumamos una lista de números cuando no sabemos cuántos son? A diferencia del ciclo Para (que tiene un fin fijo), aquí nos enfrentamos a un Ciclo Indeterminado. En este tutorial de PSeInt, aprenderás a utilizar un «Valor Centinela» (en este caso, el número 0) para controlar el flujo del programa. Utilizaremos las estructuras Repetir-Hasta Que y Mientras para crear un acumulador dinámico que sigue sumando indefinidamente hasta que el usuario decide detenerse. Este concepto es la base de aplicaciones como cajas registradoras o ingreso de datos masivos.

Conceptos Clave: Centinelas y Acumuladores

Para dominar este ejercicio, es necesario entender dos patrones de diseño de algoritmos:

Valor Centinela (Flag)

Es un valor especial que no forma parte de los datos a procesar, sino que sirve como señal de «STOP». Se elige el 0 porque es el elemento neutro de la suma (sumarlo no afecta el resultado), lo que simplifica mucho el código.

Variable Acumulador

A diferencia de una variable normal que sobrescribe su valor, un acumulador suma sobre sí mismo.
Fórmula: suma = suma + nuevo_numero.
¡Regla de oro! Siempre debe inicializarse en 0 antes de entrar al ciclo.

Análisis del Algoritmo

El flujo de ejecución es cíclico y depende totalmente de la entrada del usuario:

  • INICIO Inicializar la variable suma <- 0. Esto limpia la memoria para empezar a contar desde cero.
  • BUCLE (Repetir) 1. Pedir un número al usuario.
    2. Leer el número en la variable n.
    3. Sumar n al acumulador: suma <- suma + n.
  • FIN Y SALIDA Evaluar: ¿El número ingresado fue 0?
    Si es SÍ: Terminar el ciclo y mostrar la suma total.
    Si es NO: Volver a pedir otro número.

Código Fuente (Con Repetir-Hasta Que)

Archivo: SumaHastaCero.psc
Algoritmo SumarNumerosIndefinidos
    // 1. Definición de Variables
    // 'num' es el valor temporal que ingresa el usuario
    // 'suma' es el acumulador total
    Definir num, suma Como Real;
    
    // 2. Inicialización
    // ¡Fundamental! Si no empieza en 0, la suma será incorrecta.
    suma <- 0;
    
    Escribir "=== SUMADORA INFINITA ===";
    Escribir "Ingrese números para sumar.";
    Escribir "Digite 0 para terminar y ver el resultado.";
    Escribir "-----------------------------";
    
    // 3. Estructura Repetitiva (Bucle)
    // Usamos 'Repetir' porque al menos debemos pedir un número una vez
    Repetir
        Escribir "Ingrese un número:";
        Leer num;
        
        // Acumulamos el valor
        // Nota: Si num es 0, suma + 0 sigue siendo suma. No afecta.
        suma <- suma + num;
        
        // Opcional: Mostrar subtotal parcial
        // Escribir "Subtotal parcial: ", suma;
        
    Hasta Que num = 0
    
    // 4. Salida Final
    Escribir "-----------------------------";
    Escribir "PROCESO TERMINADO (Se ingresó 0)";
    Escribir "La suma total es: ", suma;
    
FinAlgoritmo

Diagrama de Flujo

⚠️ Errores Comunes con Acumuladores

Cuidado con estos detalles que pueden romper la lógica de tu suma:

No Inicializar el Acumulador

Si olvidas poner suma <- 0 al principio, PSeInt podría asignar un valor "basura" o lanzar un error de variable no inicializada, causando que la suma total sea incorrecta desde el inicio.

Usar 'Mientras' incorrectamente

Si usas Mientras num <> 0, debes leer el número antes del ciclo Y dentro del ciclo. Si olvidas leerlo dentro, el valor de num nunca cambiará y crearás un bucle infinito.

Reto: Calcular también el Promedio

Ahora que sabemos sumar, ¿qué tal si también contamos cuántos números ingresó el usuario para calcular el promedio? Necesitaremos una variable extra llamada contador.

Algoritmo SumaYPromedio
    Definir num, suma, promedio Como Real;
    Definir contador Como Entero;
    
    suma <- 0;
    contador <- 0;
    
    Repetir
        Escribir "Ingrese número (0 para salir):";
        Leer num;
        
        Si num <> 0 Entonces
            suma <- suma + num;
            contador <- contador + 1; // Solo contamos si no es el 0 de salida
        FinSi
        
    Hasta Que num = 0
    
    Escribir "--- RESULTADOS ---";
    Escribir "Suma Total: ", suma;
    Escribir "Números ingresados: ", contador;
    
    // Validación para evitar división por cero si no ingresó nada
    Si contador > 0 Entonces
        promedio <- suma / contador;
        Escribir "Promedio: ", promedio;
    SiNo
        Escribir "Promedio: 0 (No se ingresaron datos)";
    FinSi
    
FinAlgoritmo

Preguntas Frecuentes (FAQ)

¿Por qué se usa el 0 como centinela?
Porque el 0 es el elemento neutro de la suma. Si usaras el "-1" para salir, tendrías que restar o evitar sumar ese -1 al final para no alterar el resultado total. El 0 no daña la cuenta.
¿Cuál es la diferencia entre Acumulador y Contador?
Un Contador aumenta en una constante (generalmente de 1 en 1: 1, 2, 3...). Un Acumulador aumenta en valores variables (ej: suma = suma + precio).
¿Puedo usar el ciclo Mientras?
Sí. Sería: Leer num; Mientras num <> 0 Hacer ... Leer num; FinMientras. Es un poco más seguro si no quieres que el código se ejecute ni una vez si el primer número es 0.
¿Funciona con números negativos?
¡Claro! El algoritmo suma algebraicamente. Si ingresas 5 y luego -3, la suma será 2. Solo se detiene estrictamente con el 0.

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