Bucles (II).

Recapitulemos.
Nueva estructura de bucles.
Ejemplo.

Recapitulemos.

Como hemos visto hasta este momento los bucles son una de las instrucciones más utilizadas dentro del mundo de la programación, ya que muchos de los problemas con los que nos encontramos y queremos que resuelva un ordenador suelen ser rutinas repetitivas. Hasta este momento hemos visto la instrucción Mientras... Fin Mientras, pero esta nos puede traer un pequeño problema que deberíamos solucionar con líneas adicionales fuera del bucle, veamos esto con un ejemplo.

Tenemos al Robot, que al final le tendremos que poner nombre (si se te ocurre algún nombre puedes decirlo), subido en una plataforma con 10 posiciones, en algunas de estas posiciones tendremos puestos diferentes bloques, incluidas la primera y última posición. El Robot, para facilitar la cosa siempre partirá de la primera posición. El Robot deberá recorrer cada una de las posiciones mirando si hay un bloque llamado A en ella. Al llegar al final y después de mirar si hay bloque en la posición en la que se encuentra nos deberá decir cuantos bloques ha encontrado por el camino. Recordemos que el Robot nunca podrá salir de las 10 posiciones indicadas.

Utilizando las instrucciones que hemos visto hasta el momento tendríamos que realizar un código parecido a este:

NumBloques: Número
NumBloques = 0
Mientras Posición <> 10 hacer

Si BloqueEncima = "A" entonces

NumBloque = NumBloque + 1

Fin Si

MoverDer

Fin mientras
Si BloqueEncima = "A" entonces

NumBloque = NumBloque + 1

Fin si
Mostrar NumBloque

Mira detenidamente el código anterior. Fíjate que las instrucciones que tenemos dentro del Mientras, hacen que el brazo se mueva de la posición 1 a la 10, pero solo miran los bloques que hay en las posiciones de la 1 a la 9, ya que cuando llega a la posición 10 la condición ya es VERDADERA con lo que no entra. Por eso hemos tenido que añadir las tres líneas antes de mostrar el número de bloques. Ya que sabemos seguro que el Robot se encuentra en la posición 10 pero no hemos mirado si en esta posición encontramos bloque A o no.

Nueva estructura de bucles.

Ahora vamos a ver el mismo ejemplo que hemos puesto antes pero utilizando una nuevas estructura repetitiva. Primero veamos la estructura y después como la podemos aplicar.

Repetir

<instrucciones>

Hasta que <condición>

Esta es otra estructura de bucle pero tiene un pequeño matiz que la hace diferente a la ya estudiada anteriormente. Tanto una como la otra se utilizan, pero cada una de ellas va bien para según que caso ya que ese matiz pueden hacer su uso muy diferente

Observa que esta estructura primero ejecutaría las instrucciones y después miraría si se cumple o no la condición, con lo que tenemos que tener mucho cuidado ya que las instrucciones como mínimo se ejecutarán una vez (las veces restantes ya dependerán de la condición). La condición se evalúa después de realizar las instrucciones y no antes como pasaba en el caso del Mientras.

Ejemplo.

Vamos a aplicar esta estructura al ejemplo del principio de la lección:

NumBloque: Número
NumBloque = 0
Repetir

Si BloqueEncima = "A" entonces

NumBloque = NumBloque + 1

Fin Si

MoverDer

Hasta que Posición = 10
Mostrar NumBloque

Observa detenidamente las líneas en las que aparece la nueva estructura. Observa que en un principio, después de crear la variable e inicializarla a 0 lo único que ve el programa es que entra en una estructura repetitiva pero no lleva a cabo ninguna verificación de ningún tipo, con lo que ejecuta las dos instrucciones que tiene dentro. Cuando llega a la línea Hasta que... es cuando el programa mira a su alrededor para ver si se encuentra en la posición 10. Observa también como en este caso es necesario preguntar por si la posición es IGUAL (=) y no DIFERENTE (<>) como en el caso de la estructura Mientras. Por lo que, cuándo nuestro Robot se encuentra en la posición 10 terminará de ejecutarse el bucle, pero con la diferencia, de que aquí ya habrá mirado si existe algún bloque A en la última posición y no necesitaremos volver a preguntar si en esa posición existe un bloque llamado A. ¡¡Verdad que es fácil!!.