Bloque de Adsense

Ejemplo 1 - Situarse en la última posición de nuestra plataforma (II)  

Posted by Danny in

Continuamos con el ejemplo que planteamos en la lección anterior.

-Tenemos el Robot en la posición 2.

a)Miramos la condición que nos pone la estructura Mientras, como no nos encontramos en la posición 3, entramos en el bucle.

b)Nos movemos una posición hacia la derecha (MoverDer).

c)Vamos a la última línea del bucle. (Fin Mientras), la cual nos manda a la primera línea del bucle.

d)Volvemos a mirar si se cumple la condición. Vemos que ya nos encontramos en la tercera posición. Ya no hace falta que entremos en el bucle. Ya podemos seguir con las instrucciones que tenemos después del bucle.

A este proceso que acabamos de realizar le llamaremos Traza. La traza, realizar paso por paso un código, es muy importante en el momento de poder detectar posibles errores en nuestra implementación del código; ya que nos podemos dar cuenta si nuestro código falla o realiza alguna acción que no deseamos. Es muy importante que al realizar la traza hagamos todos y cada uno de los pasos indicados y no demos nada por supuesto. En el momento de realizar la traza debemos actuar como si nosotros fuéramos la máquina que realizará el código.



Ejemplo 1 - Situarse en la última posición de nuestra plataforma (I)  

Posted by Danny in

Imagine que tenemos a nuestro Robot en la plataforma móvil que definimos en lecciones anteriores, con tres posibles posiciones 1 - 2 - 3.

Nuestro Robot lo podemos tener situado en la primera o segunda posición y nosotros queremos que se desplace hasta la tercera posición.

Pasemos a implementar el ejemplo:

Mientras Posición <> 3 hacer
MoverDer

Fin Mientras

Observe el código que hemos propuesto para la resolución de este primer ejemplo con bucles. Vamos a seguir paso a paso cómo miraríamos si hemos realizado bien la solución del código en los dos posibles casos (Robot posicionado en la posición 1 ó en la 2).

-Tenemos el Robot en la posición 1

a)Miraríamos la primera línea, la que marca la condición. La condición nos dice que entremos en el bucle mientras no estemos en la posición 3 (Mientras Posición <> 3 hacer). Como en este caso no estamos en la posición indicada, ya sabemos lo que nos toca, entrar en el bucle.

b)Nos movemos una posición a la derecha (MoverDer).

c)Vamos a la última línea del bucle. (Fin Mientras).

d)Volvemos a mirar si se cumple la condición. Como todavía no se cumple, ya que nos encontramos en la posición 2, entraríamos otra vez dentro del bucle.

e)Nos volveríamos a desplazar una posición a la derecha.

f)Volveríamos al final del bucle donde nos mandaría otra vez a la primera línea de éste para así volver a comprobar la condición.

g)Ahora, como ya nos encontramos en la posición deseada, no entraríamos dentro de nuestro bucle y seguiremos con la instrucción que encontrásemos después de (Fin Mientras); en este caso finalizamos el programa.

Los bucles  

Posted by Danny in

Un bucle no es más que una serie de instrucciones que se repiten.

Podemos tener dos tipos de bucles según lo que nos interese comprobar.

- Bucle que se repite mientras se cumple una condición determinada.

- Bucle que se realiza hasta que se cumple la condición que marcamos.

En esta lección nos encargaremos del primer tipo.

A la hora de utilizar un bucle, sea del tipo que sea, debemos ir con cuidado y pensar cuando debe acabar ya que; si no tuviéramos en cuenta esto, podríamos entrar en un bucle sin fin, bucle que no terminaría nunca. Por esto, es de suma importancia que pensemos, antes de hacer nada, en qué momento, cómo, dónde y por qué debe acabar el bucle.

Estructura básica.- En nuestro curso, es la estructura básica de un bucle y se representará de la siguiente manera:

Mientras hacer

Fin Mientras

Explicaremos línea a línea este bucle:

-Primera línea: en esta línea escribiremos la que se debe dar para que se ejecute el bucle. En el momento en que la condición que estamos evaluando sea Falsa, se terminará el bucle y se continuarán ejecutando las instrucciones que aparecerían después de la tercera línea de esta estructura básica.

-Segunda línea: línea o líneas donde escribiremos las instrucciones a efectuar en caso de que la condición sea Verdadera.

-Tercera línea: marca el final del bucle. Podemos decir que nos indica hasta dónde están las líneas que se repiten o justo el final del bucle para poder seguir con las demás instrucciones de nuestro programa.

En esta estructura no tenemos ninguna línea que sea opcional.



Otra posible solución al ejemplo 3  

Posted by Danny in

Ahora veremos una solución al mismo problema en el que sólo se utilizan 7 líneas.

1.- Si BloqueEncima <> "A" entonces
2.-
MoverDer
3.-
Si BloqueEncima <> "A" entonces
4.-
MoverDer
5.-
Fin Si
6.-
Fin Si
7.-
CogerBloque

1.- Preguntamos si el posible bloque que hay en esta posición es diferente a "A". De esta forma, si el bloque fuera el "A", saldríamos del bucle en la línea 6.

2.- Nos moveríamos una posición a la derecha, con lo que ya estaríamos situados en la segunda posición.

3.- Preguntamos si el posible bloque que hay en esta posición es diferente a "A".

4.- Si estamos en esta línea quiere decir que el bloque "A" no estaba en la primera posición, ni en la segunda; con lo que nos desplazaremos otra posición a la derecha para situarnos en la tercera posición.

5.- Línea que nos indica el final del segundo Si.

6.- Línea que nos indica el final del primer Si.

7.- En esta línea, sería el momento en el que cogemos el bloque que existe en la posición que nos encontramos.

Si se fija 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, ha sido situar el Robot en la posición en la que se encuentra el bloque A.

Observe 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.

Aquí le muestro una lista de operadores lógicos que podemos utilizar:

- = Igual que

- < Menor que

- > Mayor que

- <> Diferente que

Intente ampliar los ejemplo que hemos dado hasta este momento y buscar una implementación del código lo más sencilla posible. En próximas lecciones, pondremos más ejemplos y algunos ejercicios a realizar.

Posible solución al ejemplo 3  

Posted by Danny in

Vamos a dar dos posibles soluciones para el problema que se nos plantea, en este e-mail y en el siguiente. Recordemos que el Robot siempre partirá de la posición 1 tal y como indica el enunciado.

Primera solución.-

1.- Si BloqueEncima = "A" entonces
2.-
CogerBloque
3.-
Sino
4.-
MoverDer
5.-
Si BloqueEncima = "A" entonces
6.-
CogerBloque
7.-
Sino
8.-
MoverDer
9.-
CogerBloque
10.-
Fin Si
11.-
Fin Si

Explicación del ejemplo.-

1.- Miramos si encima de la primera posición, posición en la que sabemos que se encuentra seguro al iniciar el programa, está el bloque A.

2.- Si es así, verdadera lo cogemos. En este caso, hemos terminado el programa. Ya que continuaría con la línea 3, punto donde se separa la parte de la respuesta a la condición verdadera y falsa, y al haberse cumplido la parte Verdadera saltaríamos hasta la línea 11.

3.- Si no se cumple la puesta en la línea 1, continuamos el programa.

4.- Hacemos desplazar al Robot hacia la derecha. Hecho esto, nos encontramos en la posición 2 de nuestra plataforma.

5.- Miramos si encima de esta posición (segunda posición) está el bloque A.

6.- Si es así, verdadera la cogemos. En este caso, hemos terminado el programa; ya que continuaría con la línea 7, punto donde se separa la parte de la respuesta a la condición verdadera y falsa, y al haberse cumplido la parte Verdadera saltaríamos hasta la línea 10.

7.- Si no se cumple la puesta en la línea 5, continuamos el programa.

8.- Hacemos desplazarse el Robot a una posición derecha. Hecho esto, nos encontramos en la posición 3 y última de nuestra plataforma.

9.- Como sabemos seguro que el bloque "A" está en alguna de las 3 posiciones y ya hemos visto que no estaba ni en la 1, ni en la 2. Sin mirar qué bloque hay en esta posición podemos cogerlo.

10.- Fin del segundo Si.

11.- Fin del primer Si.

Observe como dentro de un Si hemos puesto otro Si. Con lo que hemos podido hacer una pregunta después de haber visto que la primera era falsa.

Observe 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 al final conseguiría su objetivo. Cuando veamos que una misma instrucción se repite muchas veces nos deberíamos plantear que puede ser que exista alguna otra solución que sea un poco más corta y con menos líneas repetidas.

Ejemplo 3 - Coger el bloque y moverse  

Posted by Danny in

Ahora que ya sabemos cómo hacer que nuestro Robot se mueva según la posición en la que se encuentra; vamos ha realizar un ejercicio que nos haga lo siguiente: tenemos a nuestro Robot en la plataforma móvil definida anteriormente, pero esta vez con tres posiciones: 1 - 2 - 3. Y encima de una de estas tres posiciones pondremos un bloque (caja) llamada "A". Puede que en alguna de estas posiciones haya un bloque que no se llame "A", si fuera así no deberíamos hacer nada con él.

Lo que queremos que realice nuestro Robot es lo siguiente: el Robot siempre partirá de la posición 1, pero no sabrá dónde está situado el bloque y éste siempre debe estar en una de las 3 posiciones. Nosotros deberemos hacer que nuestro Robot se desplace por la cinta mirando si el bloque se encuentra en esta posición. Si el bloque está en esa posición, debe cogerlo.

Como siempre, vamos a definir las nuevas instrucciones que necesitaremos para solucionar este problema, recuerde que si necesita alguna de las instrucciones definidas anteriormente puede hacerlo. Eso sí, no puede inventarse ninguna instrucción nueva. Es recomendable que vaya haciendo una lista de todas las instrucciones que vamos definiendo.

Nuevas instrucciones:

-BloqueEncima: será el equivalente a hacer que el robot mire arriba y mire el nombre que tiene escrito el bloque.

-CogerBloque: el robot alargará su brazo y cogerá el bloque.

Sería muy recomendable que antes de mirar la solución lo intentara usted solo, para ver si ha comprendido a la perfección todo lo que llevamos de curso.



Ejemplo 2 - Moverse de una posición a otra  

Posted by Danny in

Una vez visto el ejemplo anterior vamos a plantear otros que nos ayudarán a entender y a familiarizarnos con esta estructura condicional. Con la práctica, podrá ver que esta es una de las estructuras que más se utilizan en programación. En casi todos los programas hay que tomar algún tipo de decisión.

Este es un ejemplo un poco tonto pero nos puede servir para acabar de entender cómo funciona esta estructura condicional.

Imagine que tenemos a nuestro Robot trabajando en una cadena de montaje en una plataforma móvil que tiene dos posiciones posibles: la 1 ó la 2 a derecha e izquierda.

Lo que nosotros queremos que haga el Robot es lo siguiente: si el Robot inicialmente se encuentra en la posición 1 deberá moverse a la 2, y si se encuentra en la posición 2 deberá moverse a la 1.

Para este ejemplo definiremos unas nuevas instrucciones que iremos utilizando en futuros ejemplos:

-MoverDer: moverá el robot a la derecha una sola posición.

-MoverIzq: moverá el robot a la izquierda una sola posición.

-Posición: esta instrucción nos servirá para saber en qué posición se encuentra el robot.

Antes de mirar la solución que yo le propongo estudie una posible solución, piense un poco y no tenga miedo en equivocarse con la solución.

Posible solución Ejemplo 2.- Una posible solución a nuestro programa del Robot que se debe mover de una posición a la otra podría ser la siguiente:

Si Posición = 1 entonces
MoverDer

Sino

MoverIzq

Fin Si

Observe que en este ejemplo lo que hacemos es preguntar si el Robot se encuentra en la posición 1. Si la respuesta es Verdadera haremos que se mueva a la derecha "MoverDer" (con lo que se quedará en la posición 2), mientras que si la respuesta fuera Falsa (cosa que querría decir que está en la posición 2) se movería a la izquierda "MoverIzq" (quedando situado el Robot en la posición 1). Así de fácil podemos hacer que nuestro Robot cambie de posición dependiendo de su posición inicial.