Ejercicios con Scratch (IV)

2
421

Bienvenidas/os a un nuevo artículo de ejercicios con Scratch. En la primera tanda explicamos y ejercitamos los concepto básicos como, por ejemplo, las condiciones iniciales. En el segundo empezamos con ejercicios prácticos (incluso rompimos nuestro robot). En esta cuarta entrega seguiremos la misma metodología (la de los ejercicios prácticos, no la de romper el robot). Recordad que para ver los retos deberéis ir al usuario que he creado para estos artículos aquí.

La idea de estos artículos, me gustaría recordar, es la de aportar un texto orientado al educador para que este acompañe al usuario final de los artículos: los más pequeños.

Lo que haremos hoy será introducir el concepto bifurcación o instrucción condicional. Y, claro, repasaremos el concepto bucle que ya vimos en anteriores entregas.

UN POCO DE TEORÍA

Muy a menudo en un programa es imprescindible que el dispositivo tome decisiones. Vamos a ver un ejemplo: un control centralizado de temperatura de una oficina.

Tenemos programado el control para que la calefacción se encienda a 20ºC y el aire acondicionado al llegar a 26ºC. Evidentemente, habrá un sensor que constantemente irá midiendo la temperatura. Este sensor mandará los datos al control central una vez por segundo. Si la temperatura llega a los 26ºC el control central tendrá que dar una orden al aire acondicionado. Por el contrario, si llega a los 20ºC la orden la recibirá la calefacción. El sistema habrá tomado una decisión.

Una de las maneras de implementar esta toma de decisiones se puede hacer usando instrucciones condicionales. El sobrenombre que he usado antes, bifurcación, es porque alteran el camino de las instrucciones.

En anteriores artículos ya comentamos que el código que nosotros creamos siempre se ejecuta de manera secuencial. Arrancamos desde una instrucción y estas se van ejecutando en estricto orden. Una detrás de otra, sin excepción. Pero ¿podemos hacer «trampas»? Sí, podemos. Y hoy veremos cómo. Aunque en realidad sea todo muy legal.

INSTRUCCIÓN DE BIFURCACIÓN

Imaginemos que al lado de cada instrucción aparece una flecha virtual. Esta flecha indica la instrucción que se está ejecutando en un momento concreto. O mejor dicho, la flecha será la que ejecute la orden que señala.

Al ir ejecutando las instrucciones esta flecha se irá desplazando hacia abajo a medida que se vayan ejecutando las instrucciones. Es decir, la flecha indica las órdenes que se van a ejecutar.

Imaginemos ahora que una de las instrucciones que hay en nuestro código en lugar de dar una instrucción al robot lo que hace es darle instrucciones a la flecha. Lo que podríamos hacer entonces sería alterar el orden de ejecución. En lugar de saltar a la siguiente instrucción ahora debe saltar a una instrucción concreta. De esta manera alteraremos el orden secuencial. Aunque solamente por una única instrucción.

Así, pues, os presento las instrucciones de bifurcación:

  • Bifurcación clásica:

Esta bifurcación ofrece dos opciones en función del resultado de la comparación de la condición. Si la condición se cumple se ejecutará el código bajo la condición de la opción si. Si la condición no se cumple se continuarán ejecutando las instrucciones posteriores a la opción si no.

  • Bifurcación simple:

Esta bifurcación, en realidad y aunque no lo parezca, también ofrece dos opciones en función del resultado de la comparación. Si la condición se cumple, ejecutará el código que hay dentro de la bifurcación. Y, si no se cumple, sencillamente ignorará la posibilidad de la bifurcación (y lo que haya en su interior) y pasarán a ejecutarse directamente las instrucciones que haya a continuación de la bifurcación.

Bien, ahora sí, allá vamos allá con los retos para que quede más claro con los ejemplos.

EJERCICIOS CON SCRATCH

RETO 9

Si recordamos los últimos retos del anterior artículo (III) estuvimos trabajando el concepto de los operadores. Hoy los necesitaremos de nuevo.

Lo que haremos en esta ocasión, según el código del RETO_9, será que BaMiau avance hasta alcanzar la pared y rebotará. Lo que queremos conseguir en este ejercicio es que al llegar BaMiau al borde haga lo siguiente:

  • No rebotará.
  • Se colocará en la posición (x: -150, y: 0).
  • Esperará 1 segundo.
  • Reanudará el funcionamiento normal (es decir, seguir avanzando hasta llegar al borde).

Consecuentemente, habrá que modificar el código propuesto. Para la resolución del reto será imperativo el uso de las bifurcaciones.

Os dejo un rato para que valoréis las soluciones y a continuación explicaremos alguna opción. ¡No lo leáis si queréis intentarlo sin ayuda!

SOLUCIÓN RETO 9

Podréis hallar una propuesta de solución al reto el fichero RETO_9_SOL.

Si examinamos el código de la solución del reto anterior podemos ver que el código sigue la siguiente estructura:

Como vemos el código sigue las siguientes fases:

  • Instrucción de arranque del código: Esta instrucción simplemente hará que al pulsar la bandera verde se de comienzo a la ejecución del código.
  • Establecer las condiciones iniciales:
    • Posición: (x=0, y=0)
    • Orientación: 90º
  • Arranca el bucle que mantendrá el programa funcionando.
  • Establecemos la bifurcación y su condición.
    • Código para el caso que se cumpla la condición.
    • Código para el caso que no se cumpla la condición.

NOTA: Sí, el lápiz y el papel son herramientas básicas e importantes aliados para diseñar códigos complejos. Poco a poco será interesante ir desgranando estos procesos de manera fragmentada antes de ponernos a programar.

Ya hemos usado por primera vez el sistema de las bifurcaciones. Vamos a complicar un poco el tema.

RETO 10

Lo que haremos en este ejercicio será considerar una bifurcación por omisión. En este caso queremos que el código haga lo siguiente:

  • Seguir ejecutándose hasta que se pulse la tecla c del teclado.
  • Si se pulsa la tecla espacio que BaMiau avance en línea recta.

Tenemos una propuesta de código en el RETO_10 que, evidentemente, habrá que modificar.

Os dejo un rato para que valoréis las soluciones y a continuación explicaremos alguna opción. ¡No lo leáis si queréis intentarlo sin ayuda!

SOLUCIÓN RETO 10

Bien, en realidad este ejercicio se puede solucionar de muchas maneras distintas, todas igualmente válidas… aunque no igual de eficientes.

En primer lugar consideraremos solucionarlo usando la opción de la bifurcación clásica. Podréis hallar el código en el fichero RETO_10_SOL1. Si examinamos el código de la solución del reto anterior podemos ver que el código sigue la siguiente estructura:

Como vemos el código sigue las siguientes fases:

  • Instrucción de arranque del código: Esta instrucción simplemente hará que al pulsar la bandera verde se de comienzo a la ejecución del código.
  • Establecer las condiciones iniciales:
    • Posición: (x=0, y=0)
    • Orientación: 90º
  • Arranca el bucle que mantendrá el programa funcionando hasta que se pulse la tecla c.
  • Establecemos la bifurcación y su condición (en este caso, que se pulse la tecla espacio).
    • Si se cumple la condición: BaMiau avanzará 10 pasos.
    • Si no se cumple la condición: dice Estamos en el caso «si no» y BaMiau no se moverá.
  • Instrucción de saludo: esta instrucción simplemente hará que podamos ver que hemos llegado a salir del bucle y que el código ha seguido adelante ejecutándose hasta llegar al final.

Esta solución ha resuelto el problema planteado en el RETO_10. No obstante, si revisamos el código, veremos que la instrucción en la que simplemente BaMiau nos dice que está en el caso «si no» es absolutamente innecesaria. Simplemente sirve para que nosotros sepamos que estamos en esa rama del código. Y nada más.

Para solucionar esta situación, consideraremos ahora resolverlo usando la opción de la bifurcación simple. Podréis hallar el código en el fichero RETO_10_SOL2. El esquema de funcionamiento será exactamente el mismo. Solo que, ahora, habremos eliminado una instrucción. Pero no perdamos de vista que, al final, sigue siendo una bifurcación.

Si se cumple la condición, saltaremos a la instrucción pertinente:

Pero si no se cumple saltaremos directamente fuera de la bifurcación:

Finalmente os dejo una tercera solución propuesta que deja unos acabados un poco más elegantes. La podréis hallar en el fichero RETO_10_SOL3.

CONCLUSIÓN

Hoy hemos realizado unos ejercicios que, aunque puedan parecer simples a nivel de ejecución, son bastante importantes a nivel conceptual. Y para nada triviales. Hoy hemos trabajado intensamente el concepto línea de ejecución del código. Es decir, tener una idea mental del orden en el que se irán ejecutando las instrucciones.

Este proceso será muy importante tenerlo claro a medida que se vayan complicando los ejercicios. En el próximo artículo haremos uso de estas instrucciones de dirección de la línea de ejecución (a saber: bucle, bifurcación clásica y bifurcación simple) para desarrollar estructuras más complejas pero, a la vez, mucho más interesantes y productivas.

Por cierto, aprovechemos el RETO_10 para notar que las condiciones iniciales sí son muy útiles. Esto se verá claramente ya que al tocar la bandera verde BaMiau se colocará en el centro de la pantalla, pero no se moverá hasta que no se pulse la tecla espacio.

Y con esto y un bizcocho (yo siempre los recomiendo con chocolate) habremos terminado los nuevos ejercicios. Espero que os hayan gustado y recordad que podéis consultarme cualquier duda, ya sea de estos ejercicios con scratch o cualquier otra cosa, mandando un correo electrónico a marc@bebeamordor.com. ¡Nos vemos en el siguiente artículo!

2 COMENTARIOS

  1. Gracias por el articulo!
    Estoy buscando algún libro o articulo donde vengan más ejercicios. Es para mi hijo de 9 años que esta aprendiendo scratch y necesito algún sitio donde buscar ese tipo de información.
    ¿Conoces alguno?
    Gracias y un saludo

  2. Hola David,

    la pregunta que me planteas no es tan fácil, para mi, como parece.

    Si le das a la pestaña «Explorar» de la página principal de Scratch te saldrán cientos de ejercicios, incluso tiene un grupo de tutoriales. Pero al ser un software libre, el MIT ofrece la plataforma para que educadores o aficionados, podamos compartir nuestros proyectos. De ahí que muchas academias o centros educativos realicen sus propios programas. Se buscas por internet encontrarás cientos, si no miles de ellos. Pero las unidades didácticas, cursos o clases (presenciales o virtuales), generalmente son de pago.

    El principal motivo por el que escribo estos artículos es que a mi parecer, muchos de ellos, son guías para realizar una tarea pero que no exponen cual es el funcionamiento interno (sin duda, porque es lo que explican en las clases).

    Permite que te facilite la guía que hizo el propio MIT, que podría decirse que es la oficial:
    https://scratch.mit.edu/ideas

    Así como los primeros proyectos simples:
    https://scratch.mit.edu/starter-projects

    No obstante sí hay un par de libros que me gustaría recomendarte (y que siempre aconsejaré que adquieras en tu librería más cercana):

    -«Learn to Program with Scratch: A Visual Introduction to Programming with Games, Art, Science, and Math» de Majed Marji (ignoro si lo han traducido al castellano)
    -«Scratch. Aprende a programar jugando» de Edgar D´Andrea

    No dudes en preguntar o escribirme un email ante cualquier duda.

    Un abrazo.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí

En cumplimiento de la legislación española vigente en materia de protección de datos de carácter personal y del reglamento europeo RGPD 679/2016 le informamos de:
Responsable: Julia María Iriarte Gahete + info
Finalidad: Gestión del envío de información solicitada, gestión de suscripciones al blog y moderación de comentarios. + info
Legitimación:: Consentimiento expreso del interesado. + info
Destinatarios: No se cederán datos a terceros para la gestión de estos datos.
Derechos: Tiene derecho a Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional. + info
Información adicional:: Puede consultar la información adicional y detallada sobre Protección de Datos Personales en mi página web bebeamordor.com + info