Bucles while en Octave
Hoy, en nuestra lección, vamos a explorar cómo se construye un bucle while en Octave.
Quizás te preguntes, ¿qué es exactamente un bucle while? Bueno, es una estructura de control que nos permite ejecutar un bloque de instrucciones de manera reiterada, o sea, mediante iteraciones, hasta que una condición lógica específica se cumple.
Antes de entrar en acción y ejecutar nuestro bloque de instrucciones, el bucle while verifica una condición lógica inicial.
El bucle seguirá su curso hasta que dicha condición inicial deje de ser satisfecha, momento en el cual el bucle finalizará.
while condición
bloque de instrucciones
endwhile
Si desde el inicio, la condición no se cumple, el bucle while ni siquiera realizará una iteración.
Se considera que un bucle while es un bucle indefinido, ya que puede que no sepas cuántas iteraciones se llevarán a cabo de antemano.
A diferencia de otros lenguajes de programación como Java o C, no necesitas encerrar el código entre llaves en el bucle while en algunos lenguajes. Aun así, es importante aclarar que tampoco es imprescindible la indentación, como sucede en Python. Para que el código sea más legible, te sugiero escribir el bloque de instrucciones un poco más a la derecha que la declaración while.
Por ejemplo, pongamos por caso un uso práctico donde el bucle calcula el cuadrado de los números del 1 al 9.
x=1;
while x<10
disp(x**2);
x=x+1;
endwhile
Los resultados serán:
1
4
9
16
25
36
49
64
81
En este caso, el bucle while completa un ciclo predefinido porque conocemos el número de iteraciones de antemano.
No obstante, este no es siempre el caso y el bucle while puede también completar un número indefinido de iteraciones previamente desconocido.
El riesgo de un bucle infinito
Cuando estés escribiendo un bucle en un programa, es crucial ser consciente del riesgo potencial de caer en un bucle infinito.
Un bucle infinito se produce cuando el número de iteraciones es incierto y el bucle continúa ejecutándose sin cesar. Esto puede provocar que el programa se quede colgado y puede llevar a fallos en el sistema.
Para prevenir esto, es siempre recomendable añadir una condición de salida forzada después de un número máximo de iteraciones.
Por ejemplo, piensa en el siguiente script que genera un número aleatorio entre 1 y 100 y pide al usuario adivinarlo.
number=randi(100);
x=0;
while x!=number
x = input("¿Qué número saqué? ")
if (x!=number)
disp("Incorrecto")
else
disp("¡Acertaste!")
break;
endif
endwhile
A simple vista, podría parecer un bucle básico que termina cuando el usuario acierta el número.
Sin embargo, si el usuario no acierta, el bucle seguirá ejecutándose indefinidamente, cayendo en un bucle infinito.
Para evitar esta situación, debemos introducir un número máximo de iteraciones en el bucle.
Podemos hacerlo añadiendo una variable contador, t, que incrementamos después de cada iteración.
Cuando t alcance el número máximo de iteraciones, el bucle finalizará aunque el usuario no haya adivinado el número.
number=randi(100);
x=0;
t=0;
while x!=number
x = input("¿Qué número saqué? ")
if (x!=number)
disp("Incorrecto")
else
disp("¡Acertaste!")
break;
endif
t=t+1
if (t==10)
disp("Has hecho demasiados intentos.")
break;
endif
endwhile
Al agregar esta condición, nos aseguramos de que el bucle termina dentro de un número razonable de iteraciones, evitando que el programa se quede colgado y preveniendo posibles fallos del sistema.