miércoles, 11 de mayo de 2016

bgt clase 12 - bucles while

  En lecciones anteriores hicimos un juego de dado donde repetíamos bastante código. Una de las reglas del programador es no repetir código, pero en esa instancia no nos quedaba de otra. Ahora ya tenemos otras herramientas, sabemos construir funciones, y sabemos manipular condicionales, hoy veremos otro de los temas muy importantes, los bucles.

¿Qué es un bucle?: un siclo de repetición de código mientras se cumpla una proposición.
  Por ejemplo:
espera en la parada hasta que pase el taxi.

  • inicia el bucle:
  • pasa un auto y espero
  • pasa otro auto y espero
  • pasa un tercer auto y espero
  • pasa otro y es un taxi, ahí llegó.
  • fin del bucle.

  El primer bucle que utilizaremos es el while (en inglés significa mientras).
  Mientras la proposición sea verdadera, seguirás ejecutando. Vamos a ver un ejemplo:

void main() {
int contador=1;

while(contador<=10) {
alert("contamos", contador);
contador = contador + 1;
}

}

  Si ejecutamos el anterior código veremos que cuenta hasta 10 y termina. ¿cómo lo hace?.
Si analizamos el código veremos que lo primero que hace es iniciar una variable contador y lo iguala a 1:
int contador=1;

  Luego dice: mientras contador sea menor o igual a 10 ejecuta el siguiente bloque:
while(contador<=10)

y en el bloque tenemos este código:
{
alert("contamos", contador);
contador = contador + 1;
}
  Que lo que hace es mostrar un alert con el conteo y luego a la variable contador le suma 1.

Advertencia: Esto es importante notar...
¿qué pasaría si eliminamos la parte que sumamos 1 al contador?.
el código incorrecto quedaría así:
while(contador<=10) {
alert("contamos", contador);
}

  Esto se lo conoce como bucle infinito, siempre contaría 1 y entonces contador jamás superaría a 10 y nunca acabaría, tendrías que matar el proceso para que esto se termine, si no jamás terminará.
  Vamos a ver otro ejemplo:

Adivina la contraseña

  Vamos a hacer un juego donde tendremos que adivinar la contraseña que será: "1234". El código final sería:

void main() {
alert("adivina la contraseña", "pensaré una contraseña, tendrás que adivinarla");
string cadena = "";

while(cadena!="1234") {
cadena=input_box("password", "adivina el password para ingresar al sistema", "");
}

alert("lo lograste", "felicitaciones");
}

     Lo analizaremos:

  Primero pondremos un mensaje para iniciar.
alert("adivina la contraseña", "pensaré una contraseña, tendrás que adivinarla");

  Luego iniciamos la variable "cadena", que la necesitaremos:
string cadena = "";

  Y aqui iniciamos con el bucle, pondremos mientras cadena no sea igual a "1234".
while(cadena!="1234")
  Aquí podemos ver que el condicional que usamos es el: != que significa no es igual.

  El bloque del bucle es el siguiente:
{
cadena=input_box("password", "adivina el password para ingresar al sistema", "");
}
  Que lo único que hace es preguntar con un input_box que contraseña es, y lo que ingreses lo guarda en la variable cadena, que es la que va a verificar una y otra vez.
  Cuando Cadena valga "1234" ya no cumple con la condición del bucle y ya no lo ejecuta mas, entonces pasa a el segundo alert y finaliza:
alert("lo lograste", "felicitaciones");

  Eso es todo. Para practicar puedes intentar hacer el ejercicio de los dados, haber si lo puedes adaptar con bucle para que no se repita el código.
  Y además puedes probar en este ejemplo de la contraseña, ponerle un random para que elija un número del 1 al 99 y te pregunte dando pistas haber si lo adivinas. Una vez que lo logres armar, puedes mejorarlo agregando que te diga al final cuantos intentos tuviste para poder adivinarlo.
  Antes del sábado aprenderemos a convinar el bucle while con condicionales para poder capturar que teclas pulsa el jugador y vamos avanzando hacia un nuevo juego.

1 comentario:

Gabriel Schuck dijo...

Hola, Miguel! Todo bien? Sigue aquí un código que hice para exercitar el bucle. En este código usé verificaciones dentro de esos bucles, creo que va a ser bien fácil de entender.
string palabra;
void main(){
while (palabra!="listo"){
palabra=input_box ("","Teclee palabras, la última será listo.");
if(string_is_alphabetic(palabra)) alert ("información"," Usted tecleó "+palabra+" y ella tiene "+palabra.length()+" letras");
else alert ("Error","Sólo acepto letras, no números");
}
alert ("Listo!","Esta palabra concluye el programa");
}

Aquí usé dos funciones. string_is_alphabetic retorna true si la variable contener sólo letras, sino retorna false. La otra función (nombre de la variable seguido de un punto . y la palabra length), retorna el número de caracteres de una string
abrazo