El problema y su planteamiento
Lee números hasta que escriban 0 y muestra la suma de todos.
Con 4, 6, 10 y 0, muestra:
Suma: 20
| Entrada | Proceso | Salida |
|---|---|---|
| Una lista de números, que termina cuando se escribe 0. | Ir sumando cada número a un acumulador mientras no sea 0. | El texto Suma: seguido del total. |
Diagrama de flujo
Así se dibuja el algoritmo: el óvalo marca el inicio y el fin, el paralelogramo es una entrada o una salida, el rectángulo es un proceso y el rombo es una decisión.
Pseudocódigo
Esta es una solución. Léela línea por línea con el diagrama al lado y compara con lo que tú escribirías.
Algoritmo suma_hasta_cero
suma <- 0
Leer n
Mientras n <> 0 Hacer
suma <- suma + n
Leer n
FinMientras
Escribir "Suma: ", suma
FinAlgoritmo
| Entrada | Salida esperada |
|---|---|
| 4, 6, 10, 0 | Suma: 20 |
| 0 | Suma: 0 |
Con estas entradas, el programa debe mostrar exactamente esa salida.
Cómo pensarlo
No sabes de antemano cuántos números van a escribir, así que no sirve un ciclo que cuente. Se usa Mientras: se repite mientras la condición sea verdadera, y se revisa antes de cada vuelta.
La suma empieza en 0 antes del ciclo: es el acumulador. Cada vuelta le suma el número leído. El 0 que escriben al final es el valor centinela: avisa que se acabó y no se suma.
El truco es leer un número antes del ciclo y otro al final de cada vuelta. Así, la condición n <> 0 siempre revisa el número más reciente. Si el primero ya es 0, el ciclo no se ejecuta y la suma queda en 0.
Errores comunes
- No leer el siguiente número dentro del ciclo: el programa repetiría el mismo número para siempre (ciclo infinito).
- Empezar la suma sin inicializarla en 0: la variable no tendría valor al sumar.
- Leer solo dentro del ciclo y no antes: la condición se revisaría con una variable vacía.
El mismo programa en Python
Si más adelante pasas a Python, así se ve la misma lógica. Cambian las palabras (print, input, if) y los bloques se marcan con sangría en lugar de FinSi o FinPara.
# Algoritmo suma_hasta_cero
suma = 0
n = float(input())
while n != 0:
suma = suma + n
n = float(input())
print("Suma: ", suma, sep="")
Preguntas frecuentes
¿Qué es un valor centinela?
Es un valor especial que marca el final de los datos. Aquí es el 0: cuando se escribe, el ciclo termina y no se suma.
¿Cuál es la diferencia entre Mientras y Para?
Para se usa cuando sabes cuántas vueltas dar. Mientras repite hasta que una condición deje de cumplirse, sin saber cuántas serán.