|
INDICE METODOLOGIA Agradecimientos a Area Interactiva por facilitarnos este curso |
Posible solucion 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 posicion 1.
Pasaremos a ver y comentar la primera de las dos soluciones:
| Si BloqueEncima = "A" entonces | Miramos si encima de la primera posicion 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 posicion a la derecha, ahora estamos en la plataforma 2. |
| Si BloqueEncima = "A" entonces | Miramos si encima de la segunda posicion 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 posicion a la derecha, ahora estamos en la plataforma 3. |
| CogerBloque | Como no queda otra posible colocacion, 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 instruccion.
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, (ejecucion del programa línea a línea), que el Robot conseguiría su objetivo. Cuando veamos que una misma instruccion se repite muchas veces nos deberíamos pensar que puede ser que exista alguna otra solucion que sea un poco más corta y con menos repeticion de instrucciones. No pienses que esto siempre es así, ya que puede haber casos en los que la repeticion 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 instruccion 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 posicion a la derecha. Posicion 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 posicion a la derecha. Posicion 3. |
| Fin Si | Terminamos el segundo Si. |
| Fin Si | Terminamos el primer Si. |
| CogerBloque | Nos encontrásemos en la situacion que fuese cogeríamos el bloque. |
Si te fijas en este ejemplo la instruccion 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 posicion 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.