Pensamiento Computacional – Unidad 4: Actividades – Algoritmos

4.2 Actividad 4.1: Poner la mesa

 

Descripción:

Observa la imagen. ¿En qué orden se pusieron los elementos mantel, plato pequeño, plato grande, cuchillo y servilleta en la mesa?

 

Analizando, descubrimos el orden, que es:

Poner el mantel
Poner el plato pequeño
Poner la servilleta
Poner el plato grande
Poner el cuchillo

En este caso, describimos el proceso como una secuencia. También podemos representar ese proceso con un diagrama de flujo, como se ve en la imagen.

 

Nota: Adaptado de: http://www.bebras.edu.au/wp-content/uploads/2016/09/2016-Bebras-Solution-Guide-AU-2.pdf

 

4.3 Actividad 4.2: Ordenar Palabras

 

Descripción:

Para esta actividad hay que preparar varios juegos de cartones. Cada juego consiste, a su vez, en varios cartones, cada uno con una palabra. Los juegos son:

a)

 

b)

 

c)

 

d)

 

e)

 

A cada grupo de 2-3 alumnos darle un juego de palabras. En cada caso, se trata de descubrir cómo se relacionan las palabras y establecer un criterio para ponerlas en secuencia. Luego de resolverlo, pueden intercambiar con otro grupo los juegos o discutir sus criterios.

Por ejemplo en el caso del juego que contiene: «palabra frase párrafo letra libro», se podría ordenar desde lo más sencillo (letra) a lo más complejo:

 

En el segundo caso, podría ser la secuencia para entrar a un cuarto y prender la luz:

 

En el caso de los animales, un posible criterio podría ser el tamaño (de menor a mayor):

 

Para el caso de «Pared casa cuarto ladrillo arcilla», podría establecerse la secuencia para construir con ladrillos, partiendo de arcilla, ladrillo, pared, cuarto, y finalmente casa.

 

En el último juego, un orden podría ser por edad creciente:

 

En todos los casos, se trata de descubrir una secuencia en orden lógico.

 

4.4 Actividad 4.3: Dirigir al Cohete

 

Descripción:

Tenemos un cohete y queremos darle las instrucciones para que llegue a la luna. Los tenemos representados en esta cuadrícula:

 

 

Las instrucciones que tenemos disponibles son: mover hacia arriba, mover hacia abajo, mover hacia la derecha, y mover hacia la izquierda. Todas refieren a moverse una posición por vez. ¿ Cúales serían las necesarias para lograr el objetivo?

 

En este caso podrían ser:

 

Otra posible solución sería:

 

Esta última también la podríamos haber detallado:

 

Hay otras formas válidas. Es de destacar que muchas veces hay más de un posible algoritmo que resuelve un problema particular.

 

Podemos analizar otros casos, cambiando el escenario. Por ejemplo, reubicando la nave y la luna e incorporando meteoritos y otros obstáculos a evitar:

 

También se pueden proponer algoritmos para evaluar qué hacen. Por ejemplo, dada la figura previa si se le indica al cohete:

 

¿qué hace el algoritmo?

Este algoritmo hace que de una vuelta alrededor del planeta y vuelva al mismo lugar de partida.

En resumen, en esta actividad, diseñamos algoritmos y también los evaluamos.

Nota: Tomado de: http://cs-unplugged.appspot.com/en/topics/unplugged-programming/kidbots-unit-plan/sending-a-rocket-to-mars/

 

4.5 Actividad 4.4: Flores

 

Descripción:

Queremos plantar un jardín de flores. Partimos mirando desde la izquierda de la imagen.

 

 

Tenemos este algoritmo:

Repetir 3 veces

Poner una flor a la izquierda
Caminar un paso hacia adelante
Poner una flor a la derecha
Caminar dos pasos

Fin repetir

 

¿Qué imagen representa el jardín?:

 

Se trata de analizar el algoritmo, «ejecutarlo» a mano e interpretar los resultados. Aquí se incluyeron varios casos no válidos, por ejemplo con 4 pares de flores. La correcta sería la primera imagen.

 

4.6 Actividad 4.5: Magia

 

Descripción:

¡En esta actividad propondremos un truco de magia!

Para hacerlo, se dispone en el pizarrón o una mesa una grilla de cartas, algunas de ellas con su dorso al frente y otras al revés. Inicialmente se le pide a un alumno que las disponga según su preferencia, en un cuadrado de 4*4.

 

Luego, con la «excusa» de que el tamaño es chico, el profesor agrega más cartas en el borde derecho y en el borde inferior para formar un cuadrado de 5*5.

 

 

Estas nuevas cartas están dispuestas de forma que haya cantidad par de cartas con dorso al frente tanto en cada fila como en cada columna.

 

 

Para hacer el «truco de adivinar», se le pide a otro alumno que, sin mirar el docente las cartas, de vuelta alguna carta, o sea, que ponga su frente hacia atrás o viceversa.

 

 

«Mágicamente» el profesor puede detectar cuál fue la modificada. Para descubrir la carta que fue dada vuelta, hay que contar cuántas cartas con el dorso al frente hay en cada fila y columna. La carta adicional que fue agregada en cada una de las filas y columnas aseguraba que esa cantidad fuera par. Cuando una sóla carta se da vuelta, no se cumplen estas reglas de paridad y la podemos detectar y corregir.

 

¿Y qué pasa si se dan vuelta 2 o más cartas? Detectamos que hay un problema pero no tenemos certeza de dónde está. Podemos detectar el problema pero no corregirlo.

Este ejercicio permite presentar el concepto de paridad, utilizado por ejemplo al transmitir datos por un cable. Se envía información en 0 y 1, y se agrega información redundante para poder detectar y corregir errores. Es una idea similar al dígito de control de la cédula, donde se agrega un dígito extra que está relacionado con los demás.

Luego de explicar el «truco», como segunda parte de la actividad, planteamos desarrollar el algoritmo para colocar las cartas adicionales.

 

Podría ser:

 

 

 

 

 

 

 

 

 

 

 

 

 

¡Y pronto!

Nota: adaptado de Computer Science Unplugged, http://csunplugged.org/error-detection/

 

4.7 Actividad 4.6: Contraseñas (Scratch)

 

Descripción:

¡Te desafiamos a implementar en Scratch el algoritmo de crear contraseñas que describimos en el video de algoritmo!. Te recordamos que, si no conoces Scratch o quieres ampliar tus conocimientos sobre ese lenguaje, en el sitio de Ceibal tienes disponibles los cursos de «Creación de Videojuegos» y «Scratch avanzado».

La descripción del algoritmo según vimos en ese video previo es: a partir del nombre del sitio, darlo vuelta, considerando cada letra que si es vocal, se cambia por un número (para la A el 1, para la E el 2, y así sucesivamente). Al final, se agrega el largo del nombre del sitio. Asegúrate de usar siempre mayúsculas o minúsculas.

Haremos una posible implementación.

En un nuevo proyecto agregamos la bandera verde y preguntamos cuál es el sitio.

 

 

La cantidad de veces que repetiremos el proceso de dar vuelta y cambiar la letra si es vocal está dada por el largo de la respuesta. Definimos una variable de nombre «veces» y también ya definimos una variable de nombre «clave» donde iremos armando la nueva clave.

 

También definimos una variable auxiliar «letra» que contendrá la letra que estemos trabajando.

 

Fijamos el valor de veces al largo de la respuesta y la clave la iniciamos con el texto vacío.

 

Recorreremos el nombre del sitio de atrás hacia adelante. Repetimos hasta que veces valga 0. Obtenemos la letra correspondiente a ese lugar.

 

Analizamos ahora cada uno de los casos. Si es la vocal «A», le corresponde el número 1, asi que modificaremos la letra a poner con ese nuevo valor.

Aquí estamos trabajando con mayúsculas.

 

 

Hacemos lo mismo para las demás vocales:

 

Agrego a la clave final la nueva letra, con el bloque unir y cambiamos veces en -1:

 

Al final, le concatenamos el largo y mostramos:

 

4.8 Actividad 4.7: Spinner (AppInventor)

Descripción:

En esta actividad utilizaremos AppInventor para crear una simulación del conocido juego «Spinner», tan de moda actualmente.

 

 

Si no conoces AppInventor, te invitamos a tomar el curso disponible en Ceibal (https://ceibal.schoology.com)

Podemos crear una versión sencilla. Los componentes que utilizaremos son: un lienzo, un image sprite y un reloj. También necesitamos una imagen de un spinner. Los agregamos, cada uno con su nombre apropiado.

Al image sprite se le pone como características que pueda rotar. Su tamaño puede ser, por ejemplo, 150 pixels*150 pixels y se le asocia la imagen que subimos.

 

 

 

Cuando se inicie la ventana, reubicamos el spinner, al igual que cuando se gira la pantalla.

Para ello definimos el procedimiento reubicar que lo coloca en el centro:

 

 

Lo utilizamos en inicializar y en cambiar orientación:

 

El funcionamiento será detectar cuando se hace el movimiento de lanzamiento sobre el spinner, y a partir de sus características, representar la simulación. Ese movimiento incluye las coordenadas de donde comenzó y la velocidad con que fue hecho. Para hacer la simulación, utilizaremos un reloj, que nos avisará cada un tiempo pequeño. Al momento de ese aviso, rotaremos el spinner, para dar la sensación de que gira.

Para detener el giro en cualquier momento, se presionará sobre el propio spinner. Así agregamos:

 

Definimos dos variables: velocidadRotacion y sentido.

 

 

La variable velocidadRotacion inicialmente contendrá la velocidad del movimiento, y luego la iremos decrementando.

La variable sentido la utilizaremos para determinar si se debe girar en forma horaria o antihoraria. En esta primera versión haremos un análisis muy simple, según la dirección del movimiento. Esto se puede ampliar y mejorar en futuras versiones.

Agregamos además dos variables auxiliares:

 

Detectaremos cuando se hace el lanzamiento. Agregamos el bloque «cuando spinner lanzado».

Calculamos la posición del centro del lienzo. Tomamos la velocidad con la cual fue hecha el movimiento, la multiplicamos por 10 para que dure un poco más el efecto, y establecemos el sentido de giro. En esta versión preliminar, simplemente consideramos si la posición x donde se hizo el movimiento está a la izquierda de la pantalla y movió hacia abajo, el sentido de giro será antihorario; lo mismo si estoy a la derecha de la pantalla y movió hacia arriba. Los demás casos los consideramos sentido horario.

 

Cuando avisa el reloj, disminuimos la velocidad. Si es mayor que 0, ajustamos la dirección del spinner. En otro caso, detenemos el reloj.

 

El código completo de esta primera versión es:

 

Un divertido juego, ¿no?

 

4.9 Evaluar Soluciones

Un tema importante también es que, una vez que llegamos a una solución de un problema, debemos asegurarnos que la solución sea apropiada. O sea, luego que resolvemos el problema, quedan algunas preguntas a responder, como por ejemplo:

– ¿Está completamente descompuesto el problema?
– ¿Es fácilmente entendible la solución que proponemos?
– ¿Es completa la solución?
– ¿Es eficiente? Esto es, ¿resuelve el problema haciendo el mejor uso posible de los recursos?

Por ejemplo, cuando estamos resolviendo el problema de «hacer una torta», tenemos que saber entre otras cosas: qué tipo de torta se quiere preparar, qué ingredientes y qué cantidad, pues depende de para qué cantidad de personas sea la torta, qué equipo necesito (tazas, bowls, cucharas), así como cuánto tiempo lleva hornearla. En relación a los ingredientes, descomponer el problema implica por cada ingrediente: saber cuánto necesito y cuándo agregarlo. Debo asegurarme de tener toda la información para hacer la torta.

Debemos verificar al evaluar si cumplen los criterios requeridos, por ejemplo si se pidió una torta de chocolate… ¿es hecha de chocolate? ¿rellena de chocolate? ¿bañada de chocolate? Es importante tener la especificación inicial clara, para poder verificar nuestra solución.

También se trata de ver si es eficiente la solución que proponemos. Por ejemplo, por cada ingrediente, podría ir a buscarlo, ponerlo en la mesa, medirlo, guardarlo; ir a buscar otro, ponerlo en la mesa, medirlo, guardarlo. Esta solución no sería eficiente, porque haría varios viajes a buscar cosas, quizás sea más eficiente traer varios ingredientes a la vez y luego, cuando termine de incorporarlos, guardarlos todos juntos.

En resumen, luego de resolver el problema, hay que verificar que la solución cumpla con los requisitos exigidos y que sea eficiente y eficaz.

 

4.10 Cierre del Curso

Llegamos al final del curso. Hemos presentado los conceptos fundamentales del pensamiento computacional, aplicados en forma práctica a través de diversos ejemplos. Analizamos conceptos tales como abstracción, descomposición, reconocimiento de patrones, algoritmos y evaluación. Como se pudo observar, el área de aplicación del pensamiento computacional es bien amplia.

Esperamos que les sean de utilidad las actividades y los invitamos a que compartan sus propias ideas y sugerencias para así aumentar y enriquecer los materiales a disposición de todos.