Introducción al tipo de bucle do while
Llegamos al último tipo de de bucle, el bucle
do while
.
El tipo de bucle que nos queda por ver en PSeInt es
Repetir
, que equivale al bucle
do while
en programación general.
La palabra do se traduce al español como hacer.
Espacio publicitario
El bucle do while
es casi idéntico al bucle
while
(Mientras
). La única
diferencia reside en que este tipo de bucle, se va a
ejecutar siempre mínimo una vez, aunque la expresión no se
cumpla ni una sola.
Este tipo de bucle es importante cuando queremos estar seguros de que el código del bucle se vaya a ejecutar al menos en una ocasión, independientemente de las circunstancias.
Para añadir esta estructura a tu algoritmo, puedes pulsar este botón en la sección de comandos de PSeInt:
Sintaxis del bucle Repetir de PSeInt
En la siguiente página, podrás ver la sintaxis de este tipo de bucle.
Definir variable
variable <- valor
Repetir
secuencia_de_acciones
Paso (incremento/decremento)
Hasta Que expresion_logica
Definimos una variable iteradora fuera del bucle, se indica un bloque de código a repetir y después del bloque, la condición de salida. Así, nos aseguramos de que la primera vez que entra en el bucle, lo haga sin condición alguna, ejecute las instrucciones del bloque y luego, compruebe si la cumple. Si no la cumple, ya no se ejecuta más. Si la cumple, se ejecuta las veces que haga falta hasta terminar con la condición de salida.
También tenemos el
Paso
(incremento/decremento) para hacer que
el valor del iterador vaya cambiando.
Ejemplo de uso práctico del bucle Repetir de PSeInt
Probemos este bucle con un ejemplo un poco más sofisticado que los anteriores. Así vamos a poder probar el cometido real de este tipo de bucle. Esta vez, en lugar de poner un iterador fijo con un valor, vamos a dejar que sea el usuario el que pueda introducirlo en la consola. Así, no sabemos cuantas veces se va a ejecutar el bucle.
Algoritmo bucle_repetir
// Se declara y solicita el valor del iterador
Definir i Como Entero
Escribir "Introduzca un número del 0 al 5."
Leer i
// Bucle Repetir
Repetir
Escribir "El valor del bucle es: ", i
i <- i + 1
Hasta Que i > 5
FinAlgoritmo
Primero, le solicito al usuario un valor para
i
. Le digo que del 0 al 5 para que mi bucle
funcione correctamente, ya que con otros valores más altos
que 5, no funcionaría bien por la expresión de salida.
Con el valor del usuario, es con lo que se itera el bucle hasta que valga más de 5.
Probando el bucle Repetir
Probemos introduciendo el valor 2 en el iterador:
¿Qué pasa si el usuario no sigue mis instrucciones? En este caso, con los otros tipos de bucles, no se ejecutaría ninguna vez. Sin embargo, gracias a esta sintaxis, es capaz de ejecutarse al menos una vez, por lo que he explicado al principio.
Diagrama de flujo del bucle Repetir
El diagrama del bucle Repetir
es un poco
diferente al de los anteriores bucles. Puedes ver, como la
frase que se imprime está lo primero en el camino, después
llega a la expresión.
Curiosamente, la lógica de la expresión en este tipo de
bucle, está invertida. Si te fijas, si la expresión es
VERDADERA
(i mayor que 5), se deja de
ejecutar el bucle, sin embargo, si i
no es mayor que 5, evalúa como FALSO
y
se sigue ejecutando.
Lo que te tiene que quedar claro, es que el bucle se ejecuta "Hasta Que se cumpla la condición".
Esta lógica te puede confundir enormemente si sabes poco
de programación, ya que en todos los lenguajes de
programación que conozco, la expresión de salida es al
revés. Sigue siendo Mientras y no Hasta Que. Por lo tanto,
evalúa FALSO
para salir del bucle, y no
VERDADERO
.
Mira este código de JavaScript. Es un bucle
do while
. El equivalente al
Repetir
de PSeInt. Si imprimimos en la
consola los valores booleanos de la expresión en cada
ejecución, vemos que van a la inversa. Se termina cuando
la expresión nos da
false
(FALSO
).
let i = 1
do {
i++;
console.log("La condición es: ", i <= 5, "Valor de i: ", i);} while (i <= 5);
La condición es: true Valor de i: 2
La condición es: true Valor de i: 3
La condición es: true Valor de i: 4
La condición es: true Valor de i: 5
La condición es: false Valor de i: 6
Curiosamente, te he puesto este ejemplo en código JavaScript y no en Python (como suelo hacer con muchos ejemplos), porque este tipo de bucle no existe en Python (al menos en el momento de escribir esto). Realmente no existe, porque podemos emular el mismo comportamiento, sin tener un elemento dedicado a ello, así que las necesidades en este aspecto, están cubiertas.
Espacio publicitario
Espacio publicitario