Make your own free website on Tripod.com

Posible solución Ejemplo 3

   Vamos a dar dos posibles soluciones para el problema que se nos plantea de coger un bloque que tenemos colocado en una de las tres posiciones. Antes de nada recordemos que el Robot siempre partirá de la posición 1.

   Pasaremos a ver y comentar la primera de las dos soluciones:

Si BloqueEncima = "A" entonces Miramos si encima de la primera posición está el bloque A.
        CogerBloque Si es verdad lo cogemos. En este caso hemos terminado el programa.
Sino Si no está el bloque A, continuamos el programa.
        MoverDer Nos movemos una posición a la derecha, ahora estamos en la plataforma 2.
        Si BloqueEncima = "A" entonces Miramos si encima de la segunda posición está el bloque A.
                CogerBloque Si es verdad lo cogemos. En este caso terminaríamos el programa.
        Sino Si no está el bloque A, continuamos el programa.
                MoverDer Nos movemos una posición a la derecha, ahora estamos en la plataforma 3.
                CogerBloque Como no queda otra posible colocación, cogemos el bloque.
        Fin Si Fin del segundo Si.
Fin Si Fin del primer Si.

   Observa como dentro de un Sino hemos puesto otro Si, con lo que hemos podido hacer una pregunta después de haber realizado una instrucción.

   Observa que para este ejemplo hemos necesitado 11 líneas y muchas de estas líneas están repetidas varias veces. Esto no quiere decir que no funcionaría, ya que hemos visto en la traza, (ejecución del programa línea a línea), que el Robot conseguiría su objetivo. Cuando veamos que una misma instrucción se repite muchas veces nos deberíamos pensar que puede ser que exista alguna otra solución que sea un poco más corta y con menos repetición de instrucciones. No pienses que esto siempre es así, ya que puede haber casos en los que la repetición de instrucciones no se pueda evitar.

   Ahora veremos un ejemplo en el que solo se utilizan 7 líneas y que en ellas solo se repite una instrucción 2 veces.

Si BloqueEncima <> "A" entonces Preguntamos si el bloque es diferente de A. Si fuera A saldríamos del Si.
        MoverDer Si fuera diferente de A nos moveríamos una posición a la derecha. Posición 2.
        Si BloqueEncima <> "A" entonces Preguntamos si el bloque es diferente de A. Si fuera A saldríamos del Si.
                MoverDer Si fuera diferente de A nos moveríamos una posición a la derecha. Posición 3.
        Fin Si Terminamos el segundo Si.
Fin Si Terminamos el primer Si.
CogerBloque Nos encontrásemos en la situación que fuese cogeríamos el bloque.

   Si te fijas en este ejemplo la instrucción CogerBloque está fuera del Si ya que lo que hemos conseguido, con todas las instrucciones que tenemos dentro de nuestra estructura condicional, a sido situar el Robot en la posición en la que se encuentra el bloque A. Observa que en este caso desde un principio preguntamos por diferente (<>) y no por igual (=) con lo que conseguimos que la forma de plantearnos el código sea un poco diferente. Mira la lista de operadores lógicos.


Volver