Contenido principal
Principios de ciencias de la computación avanzados (AP Computer Science Principles)
Repetición condicional de instrucciones
A veces no sabemos cuántas veces queremos repetir una instrucción, pero sabemos que queremos parar cuando cierta condición sea verdadera. En un caso como este, los programadores repiten código mediante una construcción de programación como el bucle "while".
El bucle while
Esta es la plantilla general de un bucle
while
en el lenguaje JavaScript:while ( <condición> ) {
<instrucciones>
}
Mientras la
<condición>
sea verdadera, la computadora sigue repitiendo las <instrucciones>
. Conceptualmente, un bucle
while
es muy similar a un condicional if
, excepto que while
se ejecuta continuamente hasta que la condición no sea verdadera, mientras que if
solo se ejecuta una vez. A veces visualizamos un bucle
while
con diagramas de flujo, similar a la visualización de condicionales:Vamos a ver un bucle
while
simple:var i = 1;
while (i <= 10) {
println(i);
i++;
}
Ese código imprimirá los números de 1 a 10, y luego cuando
i
llega 11, y entonces ya no es menor o igual a 10, la computadora para de imprimir el valor de i
.Este ejemplo es simple, pero también es similar a todos los usos de bucles
while
. Nuestro código a menudo empieza por inicializar una variable (o más de una) antes de while
, luego hace referencia a esa variable (o a una relacionada) en la condición, y modifica esa variable de alguna manera en las instrucciones. Este ejemplo particular de bucle
while
normalmente se programa como un bucle for
, pues de antemano sabemos la frecuencia con que se repite el código. Hay muchas casos en que no sabemos un número exacto de veces para repetir el código.Exploremos ahora uno de esos.El reproductor de conejos
Imagina que un granjero decide criar conejos, pero le preocupa que se reproduzcan demasiado rápido. El granjero sólo tiene espacio para 100 conejos y quiere saber cuánto tiempo tomará para que sus 2 conejos sean demasiados para la jaula.
Podemos construir un programa que simule continuamente la reproducción de conejos mientras la población sea menor que 100, y que dé seguimiento a los años que tarda.
Este es un primer borrador de ese programa:
var numRabbits = 2;
var numYears = 0;
while (numRabbits <= 100) {
numRabbits += (numRabbits/2 * 30);
numYears++;
}
Este programa empieza con inicializar la población de conejos a 2 (un par de apareamiento) y el número de años a 0. El bucle
while
comprueba si el número de conejos es menor que 100. Mientras esa condición sea verdadera, el código dentro del bucle incrementa el número de conejos (según una estimación de cuántas crías pueden tener las hembras cada año) y luego incrementa el número de años.Después de ejecutar el programa, podemos ver que se estima que tardará solo 2 años, y después de esos 2 años, habrá 512 conejos. ¡Sí, más vale que el granjero construya una jaula más grande, o considere algunas bonitas ovejas lanudas!
✏️ También podemos combinar bucles
while
con nuestras otras habilidades de programación. El siguiente programa es un reproductor de conejos más avanzado, que utiliza un bucle anidado for
y un if
para decidir al azar si un conejo tiene una cría hembra o macho. ¡Juega con él, y mira cómo cambian los números cada vez!Cuidado con el bucle infinito
La computadora solo saldrá de un bucle
while
cuando la condición sea falsa. Pero, ¿qué pasa si nunca es falsa? Dale un vistazo al siguiente programa:
var i = 0;
while (i < 100) {
println("It's the loop that never ends.");
println("Oh yes, it goes on and on, my friends…");
println("A computer started running it, not knowing what it was...");
println("And it will continue running it forever just because...");
}
¿Qué crees que ocurrirá? ¡Pruébalo tú mismo! No, espera, ¡no! Es un bucle infinito justo ahí, y es difícil saber cómo lo manejará una computadora. Intentamos detectar y prevenir bucles infinitos en el entorno de programación KA, pero no siempre tenemos éxito, así que es mejor evitarlos.
¿Por qué es infinito el bucle? El programa empieza por inicializar
i
a 0, y la condición del bucle while
es si i
es menor que 100. Mientras sea verdadera, muestra la letra de una canción. Pero nada dentro del bucle cambia el valor de i
, así que esa condición será siempre verdadera.Es probable que programes al menos un bucle infinito en tu viaje como programador. Cuando te encuentres mirando un largo flujo de salida mientras escuchas el ventilador de ru computadora, puedes celebrar el evento de tu primer bucle infinito. Después de haber terminado de celebrar (y curar tu computadora), puedes tomar nota de lo que no debes hacer en el futuro. 😉
Bucles condicionales en pseudocódigo
El pseudocódigo del examen de AP CSP no incluye un bucle
while
, pero incluye una construcción muy similar: REPEAT UNTIL
.REPEAT UNTIL ( <condición> ) {
<instrucciones>
}
Este código repetirá las instrucciones hasta que la condición sea finalmente verdadera.
Para convertir un
while
a un REPEAT UNTIL
, normalmente solo necesitamos invertir la condición.Aquí hay una conversión del bucle simple que muestra los números 1 a 10:
i ← 1
REPEAT UNTIL (i ≥ 11)
{
DISPLAY(i)
i ← i + 1
}
Cuando es
while
, comprobamos si i
es menor o igual a 10. Ahora que usamos UNTIL
, comprobamos si i
es mayor o igual a 11. En este caso, podríamos incluso simplificar esto a sólo comprobar si es igual a 11, ya que no hay forma que i
sea mayor que 11 en este código.Veamos ahora el reproductor de conejos en pseudocódigo:
numRabbits ← 2
numYears ← 0
REPEAT UNTIL (numRabbits > 100)
{
numRabbits ← numRabbits + (numRabbits/2 * 30)
numYears ← numYears + 1
}
Con el bucle while nuestra condición comprueba
numRabbits <= 100
. Ahora que usamos UNTIL
, comprobamos que numRabbits > 100
.🙋🏽🙋🏻♀️🙋🏿♂️¿Tienes alguna pregunta sobre este tópico? Nos encantaría contestarte; ¡simplemente pregunta en el area de preguntas abajo!
¿Quieres unirte a la conversación?
Sin publicaciones aún.