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.

Pensamiento Computacional – Unidad 4: Algoritmos

4.1 Algoritmos

En esta unidad trabajaremos con algoritmos. Como en las otras unidades, partiremos de situaciones de la vida real para ejemplificar.

Probablemente muchos de nosotros compartamos este problema: ¡tenemos muchas contraseñas! La de TWITTER, la de FACEBOOK, la de INSTAGRAM, y más. ¿Cómo hago para acordarme de todas y no usar la misma? Es un tema de mucha importancia porque se trata de que sean seguras. Podría usar una contraseña aleatoria, pero son muy difíciles de recordar. ¿La solución? ¡Uso un algoritmo!

Un algoritmo es una secuencia ordenada y paso a paso de instrucciones para resolver un problema. Para este caso, el algoritmo podría ser: dar vuelta el nombre del sitio (ej. TWITTER → RETTIWT), cada letra que doy vuelta, si es vocal, la cambio por su número (considerando para la A el 1, para la E el 2, para la I el 3, para la O el 4 y para la U el 5) y le agrego al final el largo, aquí 7:

¿Cómo sería para Facebook? Voy dando vuelta cada letra (prestando atención si es vocal) y agrego el largo.

 

 

¡Tenemos resuelto el problema a través de un algoritmo!

Otro ejemplo de algoritmo bien sencillo de la vida real podría ser el de describir el proceso de coser un botón. Una versión sería:

si me falta hilo, aguja y, o botón
los consigo en la tienda
fin si
pasar un trozo de hilo por la aguja
anudarlo
tomar la tela
poner el botón en el lugar apropiado
insertar la aguja desde el reverso de la tela atravesando un agujero del botón
mientras no esté firme
pasar la aguja con el hilo hacia el otro lado de la tela atravesando un agujero diferente del botón
fin mientras
anudar el hilo del lado del revés
cortar el hilo

Esta es una secuencia de pasos en orden, y también incluye una decisión («si me falta hilo, aguja …») y una iteración: «mientras no esté firme». La secuencia, la decisión y la iteración son lo que llamamos «estructuras de control» y con ellas se construyen los programas.

El algoritmo es generalmente el punto de partida para crear efectivamente un programa, y se puede representar en seudocódigo, en una forma similar como vimos recién o también con un diagrama de flujo, como se muestra en la siguiente imagen:

 

 

Gráficamente se ve el proceso para coser un botón.

Así, a través de los algoritmos describimos procesos. En los próximos artículos haremos varias actividades para desarrollar algoritmos.

Pensamiento Computacional – Unidad 3: Actividades – Reconocimiento de Patrones

 

3.2 Actividad 3.1: Pulsera

Descripción:

Ana tiene una pulsera que se rompió:

 

¿Cuál de las figuras podría corresponder a la pulsera original?

 

 

Aquí se trata de reconocer patrones, o sea, identificar la secuencia y además verificar la solución.

 

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

 

3.3 Actividad 3.2: Animales con alambres

 

Descripción:

Juan diseñó estos animales, usando alambres y pelotitas de espuma plast:

Su hermanita, los modificó, sin sacar ningún alambre ni pelotita. ¿Con cúal de estas figuras puede obtener de nuevo el perro?

 

Aquí, también se trata de reconocer patrones. Cada animal puede ser descripto como conexiones entre partes.

Las posiciones específicas y los ángulos de dichas conexiones pueden variar, pero no cambia la constitución general. Hay que determinar cuál figura tiene la misma estructura que el perro original. La estructura general se mantiene. O sea, identificando el patrón encontramos la solución.

 

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

 

3.4 Actividad 3.3 Colcha

 

 

 

 

 

 

 

 

 

 

Descripción:

Para esta actividad se requiere conocimiento básico de Scratch. Te recordamos que están disponibles en el sitio de Ceibal los cursos de «Creación de Videojuegos» y «Scratch avanzado».
Queremos hacer un programa que dibuje una colcha de retazos similar a la de la imagen:

 

 

Pensemos en primera instancia cómo lo resolveríamos. Hay que encontrar un posible patrón. Podría ser por filas, y dentro de cada fila, dibujar un retazo. Otra alternativa sería por columnas, y en cada una de ellas, dibujar un retazo. Con estas primeras ideas, revisar estos 4 programas y determinar cuál sería una solución posible.

 

 

Analizando los programas, observamos que el primero cumple lo pedido.

Se trata de otro ejemplo de reconocimiento de patrones, tratar de descubrir cuál es la regla para dibujar cada fila, además del conocimiento de los bloques básicos de Scratch.

 

3.5 Actividad 3.4: Estrellas

 

Descripción:

Juan dibuja figuras e inventó un sistema para numerarlas:

 

¿Cómo debería numerar esta figura?

Se trata de reconocer cuál es el patrón de numeración. El primer número representa la cantidad de «puntos» o vértices y el segundo número representa la cantidad de figuras diferentes que se forman (triángulo y pentágono en el primer caso, triángulo y hexágono en el segundo, etc.). En la nueva figura, sería 10:4. Así, a partir de analizar figuras, se descubre el patrón y es posible resolver el nuevo problema.

 

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

 

Actividad 3.5: Diseño de casas

 

 

Descripción:

Tenemos estas imágenes de diseño de casas, distribuidas por filas y columnas:

 

 

¿Cuál sería el diseño para la casa de la última posición? Debemos observar cuál es el patrón por cada fila y columna. En cada fila y en cada columna detectamos que no se repite la ubicación de la chimenea (izquierda, derecha o sin chimenea), la cantidad de ventanas en el primer piso es diferente (una, dos o tres) y la ubicación de la puerta en la planta baja varía (a la izquierda, centro o derecha). Así que debemos completar la posición faltante de manera de mantener la regla que descubrimos. Así, en la casa de abajo a la derecha, la puerta estaría al centro , con tres ventanas en el primer piso y el techo con la chimenea a la izquierda.

 

 

Nuevamente se trata de encontrar un patrón o regla que permita resolver el problema, en este caso, para encontrar el diseño de la última casa.

 

3.7 Actividad 3.6: Rutas

Descripción:

En esta actividad, se le entrega un plano a cada par de estudiantes. En el plano se observan rutas numeradas que van entre diferentes ciudades. Cada jugador tiene un color. En su turno respectivo, el jugador pinta una carretera de su elección en su totalidad.

 

 

El objetivo del juego es lograr tener pintado de un mismo color tres caminos que lleguen a una misma ciudad. Quien lo logre, ¡gana!

Para que puedan jugar varias veces, se puede entregar varios planos a cada par de estudiantes.

Luego de jugar varias veces, se descubren patrones. Este problema es «isomorfo», o sea, «de la misma forma» que el TaTeTi.

 

 

Este isomorfismo lo pueden descubrir los propios estudiantes, al preguntarles qué observan en este problema. Seguramente aparezcan respuestas como «es similar al TaTeTi»; «perder en este juego depende de que un jugador se distraiga, como el TaTeTi»; «es un juego de estrategia, hay que tratar de anticipar la jugada del oponente». Luego de descubrir estas características, volver a jugar. ¡No deberíamos perder!

Nota: presentado en «Incorporación de «Kinesthetic Learning Activities» al curso de Programación I: uso y resultados» – CLEI 2009, Inés Kereki, http://fi.ort.edu.uy/innovaportal/file/5553/1/55531_1.pdf

 

3.8 Actividad 3.7 Fractales

 

Descripción:

Un fractal es un objeto geométrico cuya estructura básica, fragmentada o aparentemente irregular, se repite a diferentes escalas. En la naturaleza aparecen, como por ejemplo en los copos de nieve:

 

En este ejemplo, a partir de un triángulo, se obtiene el siguiente. ¿Puedes descubrir la regla? ¿Cuál será el próximo?

 

 

La solución es la siguiente:

 

 

Es un ejemplo de reconocimiento de patrones, también incluye descomposición.

 

3.9 Cierre de la Unidad

En esta unidad tratamos el tema de reconocimiento de patrones, como una estrategia para resolver problemas.

Como comentamos, encontrar patrones es algo muy importante pues, al hacerlo es posible aplicar esas mismas reglas para la solución del problema en cuestión.

Vimos varios ejemplos de la vida real, desde la ortografía, a la geografía y la matemática. También presentamos varias actividades donde su aplicación resultaba de interés.

En la próxima unidad trabajaremos con algoritmos.

Pensamiento Computacional – Unidad 3: Reconocimiento de Patrones

3.1 Reconocimiento de Patrones

En esta unidad trabajaremos con otro elemento del pensamiento computacional: el reconocimiento de patrones. Veamos primero algunos ejemplos.

Repasemos un problema muy conocido. Supongamos que queremos sumar los números enteros del 1 al 200. Hacerlo a mano ciertamente es complicado, pero podemos detectar un patrón: el primero más el último, o sea, 1+200 es 201, el segundo más el penúltimo, 2+199 es 201, 3+198 es 201…, este patrón se repite 100 veces, así, la suma es 100*201. ¡Bien!

 

 

Otro caso de matemática: queremos determinar qué número continúa la serie: 10 15 25 40 60. Analizando, detectamos que la primera vez se sumó 5, la segunda se sumó 10, la tercera 15, la siguiente 20, … así que el próximo número de la serie será 60+25, o sea 85.

 

 

En estos dos ejemplos encontramos un patrón que nos permitió resolver nuestro problema.

Podemos pensar también ejemplos que no sean de matemática, veamos en otras áreas.

Existen patrones en la ortografía de español: escribamos las palabras: «cambio», «bombero», «tambor», ¿qué se observa? Que antes de «b», va «m», así que si debemos escribir la palabra «costumbre», lo haremos con «m» antes de la b. Descubrimos un patrón.

 

 

En geografía, miremos este mapa de Uruguay donde se incluye la información de densidad de población:

 

 

¿Qué observamos? Hay áreas mucho más densas que otras. Las regiones periféricas tienen mayor densidad de población. La región sur tiene aún mayor densidad. Se podrían analizar estas características por ejemplo relacionándolas con temperatura, lluvias, tipo de suelo, comunicaciones o cualquier otro factor. O sea, podemos encontrar ciertos patrones. Si agregamos más información, por ejemplo puertos, se podría encontrar una posible relación entre la densidad y esos elementos.

Otro caso… ¿has mirado alguna serie en sitios tales como Netflix?. O has ingresado con tu usuario para ver videos en Youtube? ¿Observaste que te ofrece nuevas sugerencias que probablemente te interesen? ¿Cómo lo hace? A partir de analizar las características de las series, películas o videos en general que uno mira, determina el patrón (por ejemplo: películas de acción en español) y cuando hay una nueva de ese patrón nos la sugiere automáticamente. Es la técnica de «aprendizaje automático», o «Machine learning» en inglés, que son programas que permiten encontrar patrones en grandes volúmenes de datos.

 

 

También, seguramente te ha pasado que cuando escribes un mensaje de texto en el celular, éste te va ofreciendo palabras que habitualmente usas. Por ejemplo, si todos los días antes de volver a casa mandas un mensaje «salgo para ahí», cuando empieces a escribir «salgo», ya te ofrecerá «para» y luego «ahí», porque es el patrón o regla que sigues siempre.

 

 

En los correos electrónicos, una funcionalidad que nos ofrece desde hace poco GMail es generar una posible respuesta automática a un correo recibido, la cual tiene un estilo de respuesta con las palabras que usamos nosotros en nuestras respuestas habitualmente, por ejemplo «OK, perfecto» o «Todo bien», según sea nuestro propio estilo.

 

 

Encontrar patrones es muy importante. Hacen nuestra tarea más sencilla. Los problemas son más fáciles de resolver cuando comparten patrones, ya que aplicamos la misma solución cada vez que encontramos el patrón.

Así, a través de descubrir patrones se pueden hacer predicciones, crear reglas, generalizarlas y así resolver problemas más generales.

En el siguiente artículo veremos varias actividades que presentan claramente estos conceptos vinculados a reconocimiento de patrones.

Pensamiento Computacional – Unidad 2: Actividades – Descomposición de Problemas

2.2 Actividad 2.1: Collares

Descripción:

En una tienda nos indican que el costo de las joyas artesanales que crean dependen de color de las piedras o cuentas utilizadas. Así, queremos calcular el costo de un collar particular de cuentas verdes, rojas y azules.

¿Cómo calculo su precio? Una alternativa podría ser ir sumando el precio de cada cuenta. Otra estrategia podría ser, contar la cantidad de cuentas verdes y multiplicar por el valor de la verde; lo mismo para las rojas, las azules y ¡pronto!

Lo que hice en la segunda opción fue descomponer el problema: por un lado calcular la cantidad de cuentas de cada color y multiplicar por el valor de la cuenta de ese color, luego , sumando todos los valores tengo el total del collar.

 

2.3 Actividad 2.2: Famosos

Descripción:

Queremos adivinar una persona famosa en un tope de 20 preguntas. Cada alumno elige un personaje famoso y anota su nombre en un papel. Otro compañero lo tiene que adivinar formulando hasta 20 preguntas.

Podemos analizar la estrategia para adivinar al personaje. Tiene sentido preguntar inicialmente, por ejemplo, ¿»es Forlán?» o «¿es Shakira?». Probablemente no. Conviene hacer primero preguntas más generales, para descartar mayor cantidad de personas cada vez. Por ejemplo: ¿es hombre?, ¿vive?, ¿es deportista? …

Aquí aplicamos también descomposición de problemas.

 

Nota: ejemplo tomado de https://teachinglondoncomputing.files.wordpress.com/2014/01/activity-20questions.pdf.

 

2.4 Actividad 2.3: Mensajes de texto

Descripción:

Pedro tiene un celular de los más viejos. Para mandar, por ejemplo, la letra «E», debe presionar rápidamente 2 veces el número 3; si quiere mandar una «L» debe presionar rápidamente 3 veces el número 5.

Las amigas de Luis son: Miriam, Iris, Ema y Paz. Luis indica que presionó en total 6 veces para escribir el nombre de una de ellas. ¿Qué nombre eligió?

¿Cómo podemos resolver el problema? La estrategia puede ser descomponer en los distintos casos y analizar cada uno de los nombres en particular.

Así, analizamos que para escribir Miriam, como mínimo debe presionar 6 veces (si cada letra llevara un sólo toque), y para la letra «i» necesita 3 toques, así que ese nombre no puede ser porque superaría los 6 en total.

Para formar Iris: necesita 3 toques por cada letra «I», ya tendría los 6 ahí, pero aún faltan letras, así que queda descartado también.

Para escribir Ema, necesita 2 de la letra «E», 1 de la «M» y 1 de la «A», en total 4.

Para escribir Paz, necesita 1 de la «P», 1 de la «A» y 4 de la «Z», total 6.

¡Tenemos resuelto el problema a través de la descomposición! ¡Eligió a Paz!

Nota: Adaptado de Bebras Australia Computational Thinking Challenge, Tasks and Solutions 2015, http://www.bebras.edu.au/wp-content/uploads/2016/10/2015-Bebras-Solution-Guide.pdf

 

2.5 Actividad 2.4: Carga de Celular

Descripción:

Queremos cargar 1 hora cada uno de los 3 celulares de una familia, y tenemos solamente 2 cargadores. ¿Cuál es el tiempo mínimo para que los 3 celulares reciban una carga total de 1 hora cada uno?

Una primera idea sería poner a cargar uno a continuación del otro. ¿Cuánto tiempo llevaría? Llevaría 3 horas usando uno sólo de los cargadores. Otra opción sería poner a cargar dos de ellos una hora (uno en cada cargador), luego ponemos en uno de los cargadores el tercer celular por otra hora. El tiempo total en este caso es de 2 horas.

¿Podemos reducir este tiempo? Sí, si ponemos en uno de los cargadores un celular por una hora, en el otro ponemos el segundo celular por media hora, luego cambiamos en ese mismo cargador por el tercer celular (así al cabo de una hora, tenemos pronto el primer celular con su carga de una hora y los otros dos recibieron media hora cada uno). Luego de la hora, ponemos en cada cargador uno de los celulares que recibieron sólo 30 minutos de carga, para completar 30 minutos más. El tiempo total es 1 hora 30. ¡Una solución bien ingeniosa! Descompusimos el problema y aplicamos también trabajo en paralelo.

Un detalle interesante es que podemos plantear un problema similar, análogo, en otro contexto completamente distinto. La situación podría ser: en una hamburguesería, previendo la hora pico de consumo, realizan la precocción de las hamburguesas. Cada hamburguesa debe tener 10 minutos de cocción (no necesariamente consecutivos). Hay 2 planchas para cocinar (que permiten una hamburguesa por vez) y 3 hamburguesas, ¿cuál es el tiempo mínimo que necesito para que las 3 tengan en total 10 minutos de precocción? ¿30 minutos? ¿20? ¿15?

Es un caso análogo al anterior. Si aplicamos la misma lógica que en el ejemplo de los cargadores, el tiempo mínimo para cocinar las 3 hamburguesas sería 15 minutos.

Este problema, en el área de computación, se conoce como «scheduling» o planificación. Por ejemplo, hay varias tareas para hacer y se deben repartir entre distintos procesadores de una misma computadora o entre distintas computadoras. Se debe decidir dónde se realizará cada una de esas tareas y por cuánto tiempo. Hay varios algoritmos para resolver este problema. El más sencillo, aunque no necesariamente óptimo, trata de ejecutar las tareas en el orden que llegan. En el ejemplo de la carga de celulares sería: «cargar el primer celular», luego «cargar el segundo celular», y finalmente «cargar el tercer celular».

 

2.6 Actividad 2.5: Desafío Palitos

Descripción:

El juego tiene 4 palitos o bolitas de un color, 4 de otro color diferente y un bloque de madera con 9 agujeros alineados como guía. Inicialmente, los palitos del mismo color están puestos en los extremos, dejando el centro vacío. El objetivo es invertir los palitos, esto es, si estaban a la izquierda todos los azules y a la derecha los verdes, deben quedar a la derecha todos los azules y a la izquierda los verdes.

Los movimientos permitidos son:

a) avanzar una posición un palito a un lugar vacío adyacente, o

b) saltar una posición sobre un palito del color contrario a una posición vacía.

¿Cómo hacemos la actividad en clase? Se reparte un juego a cada equipo de 3 o 4 estudiantes, se detallan las reglas y se les pide que lo resuelvan. Este proceso es observado por el docente y se toma nota de qué es lo que hacen los estudiantes. Se observa así que algunos estudiantes lo resuelven, otros detectan que no entendieron las reglas y abandonan, y algunos han generado ideas nuevas para nuevos problemas a partir del original.

El docente recorre los equipos y presta especial atención sobre qué estrategia utiliza cada equipo para resolver el juego. Algunas de las estrategias utilizadas comúnmente por los alumnos serán: prueba y error, simplificación del problema considerando 2 ó 3 palitos en vez de 4; e intención de deducir otras reglas o relaciones.

Como cierre y conclusión del juego, se discuten las observaciones realizadas y se anotan en el pizarrón las recomendaciones hacia la resolución de problemas, que combinan y resumen como principales puntos:

a) entender el objetivo,

b) entender las reglas,

c) evaluar alternativas (simplificar, ensayo y error, analogías),

d) resolver el problema, y

e) verificar.

Nota: Actividad presentada en Incorporación de «Kinesthetic Learning Activities» al curso de Programación I: uso y resultados, I. Kereki, CLEI 2009, http://fi.ort.edu.uy/innovaportal/file/5553/1/55531_1.pdf.

 

2.7 Actividad 2.6: Armar figuras

Descripción:

En esta actividad se solicita ir construyendo figuras geométricas reconocibles a partir de ciertas piezas o fichas. Se entrega a cada alumno un conjunto de fichas numeradas y se le indica que arme una figura geométrica reconocible utilizando únicamente la pieza 1 y la pieza 2. Luego que armó una primera figura, se señala que se incorpore la ficha 3, formando con esas 3 piezas una figura geométrica reconocible. A continuación, se indica que se forme una figura geométrica reconocible con las piezas 1, 2, 3, 4 y 5. El último paso es hacer una figura, también reconocible, que incorpore la sexta ficha. En la gran mayoría de los casos, la figura armada no permitirá agregar esta última ficha.

Así, si se empieza con la construcción, por ejemplo, de un cuadrado, no es posible incorporar la última pieza, es necesario volver atrás y reestructurar el modelo. O sea, a pesar de haber procedido correctamente en cada fase, se requiere reestructurar la solución para poder incluir la última pieza.

Cuando diseñamos software, a veces, ocurre la situación que presentamos. Se van modelando los distintos requerimientos, como por ejemplo: “el sistema debe permitir tal cosa”, “tal proceso se realiza de tal manera”, pero luego, aparece un nuevo requerimiento que no es posible incluirlo en el diseño actual, es necesario reestructurar.

Hay que tener esto presente cuando resolvemos problemas.

 

Nota: Actividad presentada en “Incorporación de «Kinesthetic Learning Activities» al curso de Programación I: uso y resultados”, I. Kereki, CLEI 2009, http://fi.ort.edu.uy/innovaportal/file/5553/1/55531_1.pdf

 

2.8 Actividad 2.7: Imágenes de Casas

Descripción:

En esta actividad, se muestran las siguientes 8 imágenes, que incluyen una casa con y sin árbol, de día y de noche, con y sin personas:

Cada alumno debe responder si:

a) ¿Quieres una imagen que sea de día?

b) ¿Quieres una imagen que tenga un árbol?

c) ¿Quieres una imagen que tenga personas?

A partir de las 3 respuestas, se debe elegir la imagen que cumpla las 3 condiciones que indicó. Así, cada alumno responde las preguntas con «sí» o «no» y otro le otorga la imagen que eligió de acuerdo a esas respuestas.

Además de estar vinculado con el tema de descomposición, este problema está relacionado con la representación de información en la computadora usando «bits».

En Computación, un bit es un dígito binario y es la unidad mínima de información. Puede valer 0 ó 1. En este ejemplo, cada imagen tiene asociados 3 bits. Así, vinculamos el primer bit a «día», el segundo a «árbol» y el tercero a «personas». La respuesta «sí» se puede ver como 1 y la respuesta «no» se puede ver como 0.

 

Las secuencias posibles de 3 bits son: 000, 001, 010, 011, 100, 101, 110 y 111. Así, la imagen «de día, con árbol y sin personas», corresponde al valor 110.

 

Nota: Actividad adaptada de http://www.bebras.edu.au/wp-content/uploads/2016/10/2015-Bebras-Solution-Guide.pdf.

 

2.9 Actividad 2.8: Personajes de TV

Descripción:

Llevamos a la clase varias fotos o caricaturas de personajes de TV y dibujos animados.

La idea es analizar las características de ellos en cuanto a la resolución de problemas.

Algunas imágenes posibles son:

a) Pinky y Cerebro: aquí se destaca la persistencia y cómo manejan situaciones difíciles.

b) Dr House: analiza, trabaja en equipo, busca una posible causa, y la evalúa hasta el final. Si no es, recomienza.

c) Sheldon (The Big Bang Theory): analiza en detalle, trabaja solo.

d) El Coyote (del Correcaminos): la persistencia es una de sus características. Utiliza ensayo y error como metodología de resolución de problemas.

e) McGiver: aprovecha los elementos que dispone para resolver creativamente los problemas.

f) Sherlock Holmes: analiza todo y realiza deducciones lógicas.

¿Qué otros personajes podríamos incorporar en la lista y analizar?

 

2.10 Cierre de la unidad

En esta unidad trabajamos con la noción de descomposición de problemas, que significa dividir un problema inicialmente complejo, en subproblemas que probablemente sean más sencillos de resolver. Luego, combinando sus soluciones tenemos el problema original resuelto.

Como ejemplos , vimos juegos como el de los palitos, el cual nos permitió además discutir sobre estrategias de resolución de problemas en general. También hicimos actividades como la de adivinar el personaje elegido por una persona, cargamos en forma eficiente varios celulares y mandamos mensajes. En todos ellos, aplicamos descomposición.

En la próxima unidad trabajaremos con reconocimiento de patrones, una estrategia importante dentro del pensamiento computacional. ¡Ahí vamos!

Pensamiento Computacional – Unidad 2: Descomposición de Problemas

2.1 Descomposición de Problemas

Pensemos en la habitación habitual de un adolescente. Si nos dicen «ordená este cuarto», la primera sensación que experimentamos probablemente sea de desborde o «pánico», es mucha cosa para hacer y no sabemos ni por dónde empezar.

Si nos dicen en cambio «poné la ropa en los estantes» o «guardá los lápices en el cajón» resulta más sencillo y viable. ¿Qué cambió? Se dividió el problema original en subproblemas, se resolvió cada uno de ellos y luego, combinando sus soluciones, tenemos el problema original resuelto.

Esta misma idea se aplica en muchísimos casos.

Por ejemplo, queremos hacer un recorrido turístico por un departamento del interior. ¿Por dónde empiezo? ¿Qué ver? ¿Cómo me organizo? Puedo dividir el problema por ejemplo por días, o por ciudades y pueblos a recorrer. A su vez, en cada lugar, identificar las atracciones turísticas, los horarios, costos e integrando todo, armo el plan del paseo.

Otro caso más de la vida diaria…hacer el desayuno: ¿qué implica? Implica por ejemplo hacer café con leche y hacer tostadas. Hacer las tostadas consiste en sacar el pan, cortarlo y ponerlo a tostar.

Hacer café conlleva calentar agua, poner café instantáneo en la taza, agregar agua y un poco de leche. Cuando dividimos en partes, podemos ir resolviendo el problema.

También cuando nos piden hacer un resumen de un tema para el liceo…implica definir los contenidos, buscar las fuentes de información, decidir la introducción, el desarrollo y el cierre.

Aún si pensamos en casos de tecnología se aplica esta misma idea de descomposición. Querría crear mi primera aplicación para celular con Android usando AppInventor. ¿Cómo lo hago? ¡Descomponiendo! Tenemos que resolver: qué tipo de app quiero, para quién está dirigida, qué tipo de gráficos incluirá, qué sonidos tendrá, cómo navegará el usuario por la app, cómo la probaré, cómo la venderé. En cada una de esas partes puedo trabajar sola o con otras personas. Por ejemplo podría pedirle ayuda a un diseñador para que haga los gráficos.

En todos estos casos, la estrategia seguida fue dividir el problema, descomponerlo de alguna manera. La descomposición es una forma de pensar sobre los problemas, algoritmos, procesos y sistemas. Cada parte puede ser entendida, analizada, desarrollada, y evaluada por separado.

En el siguiente artículo veremos varias actividades para aplicar esta idea.