AED1-Introd a La Programacion 2019 (Aprestamiento)

Introducción a la Programación Actividades de Aprestamiento 2019 Algoritmos y Estructuras de Datos I Licenciatura en Si

Views 106 Downloads 8 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Introducción a la Programación Actividades de Aprestamiento 2019

Algoritmos y Estructuras de Datos I Licenciatura en Sistemas de Información – FaCENA-UNNE

Material realizado en base al curso de capacitación de la iniciativa Program.Ar de la Fundación Sadosky: http://www.fundacionsadosky.org.ar/category/programar/. Febrero 2019.

INTRODUCCIÓN A LA PROGRAMACIÓN

INTRODUCCIÓN OBJETIVOS Este curso tiene como objetivo introducir a los alumnos en la utilización de metodologías y herramientas accesibles para aprender conceptos de programación mediante actividades entretenidas y amenas, buscando fortalecer el pensamiento computacional vinculado a la resolución de problemas. Se utilizarán herramientas especialmente diseñadas para tal fin, como PilasBloques y Lightbot.

PROPOSITOS DEL CURSO     

Presentar la idea de programa y demostrar que con estos se puede representar ideas y resolver problemas. Entender que las computadoras sirven para ejecutar programas y realizan lo que el programa indique. Incentivar a los alumnos a que se animen a ser creadores de programas y no sólo usuarios de aplicaciones hechas por terceros. Ejecutar programas diseñados por los propios alumnos. Detectar y corregir errores de los programas propios.

 Simplificar problemas de programación utilizando diversas técnicas. Las actividades están basadas en el curso de Introducción a la Programación, elaborado por la Fundación Sadosky. (www.fundaciónsadosky.com)

HERRAMIENTAS SOFTWARE El software necesario para la práctica se puede descargar del siguiente link: https://goo.gl/YmF992

2

INTRODUCCIÓN A LA PROGRAMACIÓN

Secuencia didactica 1: Autómatas, cómandós y prócedimientós Las computadoras hacen todo al pie de la letra

Ejercicio 1: que el docente salga del aula Actividad: El ROBOT HUMANO Objetivo: Introducir el concepto de orden o instrucción que un autómata (la computadora) debe realizar para lograr un objetivo predefinido.

Ejercicio: El docente “robot” debe salir del aula siguiendo instrucciones de los alumnos. Desarrollo:

-

Un docente se ubica en una posición fija. Los alumnos deben dar instrucciones para salir del aula. Otro docente hace de “escriba” y escribe las instrucciones dadas por los alumnos. El docente “escriba” tacha las instrucciones incorrectas cuando se trata de acciones que el robot no puede ejecutar (detecta “error” de ejecución).

Hacer hincapié en que el autómata ejecuta órdenes precisas y sólo hace lo que se le indica, ni más ni menos. Ejemplo de órdenes precisas:

   

avanzar cantidad pasos girar a derecha (90 grados) girar a izquierda (90 grados) abrir puerta

Estas instrucciones constituyen las “primitivas”, o “comandos”, es decir, las instrucciones predefinidas que el robot puede ejecutar. Para cualquier otra orden el autómata va a responder “no entiendo” Si se les da instrucciones que no contribuyen a lograr el objetivo el autómata las realiza de todas formas; por ejemplo, si las instrucciones hacen que el autómata se choque contra la pared el autómata debe chocarse. 3

INTRODUCCIÓN A LA PROGRAMACIÓN

Primitivas - Comandos

 Instrucciones básicas: órdenes o acciones sencillas  Ejemplos: “dar un paso hacia delante”, “girar hacia la derecha”, “girar hacia la izquierda”, “abrir puerta”, “levantar el brazo derecho”, etc… Secuencia lógica

 Orden en el que se indican las primitivas Para reflexionar: 

 

¿Qué pasaría con el autómata si las acciones hubieran sido muy generales o muy complejas (por ejemplo, “caminar” o “dibujar una casa”), ¿las podría haber ejecutado? ¿Por qué? ¿Se modificaría el resultado final de la secuencia al cambiar el orden de las acciones? ¿Qué ocurriría en los siguientes casos? o Se le ordena al autómata que se siente en una silla, pero no hay ninguna silla. o Se le dice al autómata que levante el brazo derecho y ya lo tiene levantado. o Se le pide al autómata que levante el brazo derecho mientras tiene levantado el brazo izquierdo, y no se especifica si antes debe bajar este brazo o no.

Metodología para resolución de ejercicios:  Identificar la estrategia de resolución del problema planteado  Identificar las partes que componen la estrategia, reconociendo aquellas que se repiten  Implementar la estrategia general y las partes que lo componen A modo de ejemplo, la estrategia de solución podría resumirse en:

-

Ubicarse frente a la puerta Abrir la puerta Salir Programa Girar 90 grados a la derecha Girar 90 grados a la derecha Avanzar 3 pasos Girar 90 grados a la izquierda Avanzar 7 pasos

Estrategia de solución

Ubicarse frente a la puerta

Extender el brazo Empujar la manija

Abrir la puerta

Avanzar 1 paso

Salir

4

INTRODUCCIÓN A LA PROGRAMACIÓN

Ejercicio 2: Seamos autómatas

Formar grupos de estudiantes de hasta 4 personas. Cada grupo debe:

-

Definir un conjunto de comandos simples Una tarea que pueda realizarse con los comandos simples Establecer un contexto inicial para realizar la tarea

Ejemplo: Baile cosaco



 

Conjunto de comandos: - Cruzar los brazos - Estirar los brazos - Decir ¡HEY! - Levantar rodilla izq/der - Estirar pierna izq/der - Bajar pierna izq/der tarea: - escribir un programa que indique cómo bailar cosaco. contexto inicial: - parado con los brazos al lado del cuerpo. Tiempo estimado para el trabajo del grupo 15 min 2 o 3 grupos pasan al frente a escribir el programa y ejecutarlo.

5

INTRODUCCIÓN A LA PROGRAMACIÓN

Secuencia didactica 2: Presentación de Lightbót Lightbot es un juego de ingenio en el que se le indican instrucciones a un robot que tiene por objetivo llegar a un destino determinado. El objetivo del juego es lograr en cada nivel que el robot prenda la/s luces ubicadas en los cuadrados azules del piso. Para ello, el usuario cuenta con una serie de acciones en forma de íconos y una grilla en la que ubicarlas. Objetivos:



Inferir que los programas pueden resolver problemas específicos.



Identificar problemas y proponer soluciones a través de la programación.



Reconocer el patrón que permite descomponer un problema en acciones más acotadas.



Resolver problemas de manera más simple a partir del patrón que permite descomponerlos.



Proponer diversas soluciones para un mismo problema.

Comenzando…

 Descargar

el instalador del aula virtual de la asignatura: moodle.unne.edu.ar/login/index.php, sección Material de Laboratorio.

http://virtual-

 Ejecutar el instalador  Abrir la aplicación Lightbot, que presentará la interfaz que se muestra en la Fig.1.  También se puede: 

Jugar on line en su página oficial: http://armorgames.com/play/2205/light-bot?viasearch=1



Descargar el juego en su celular (disponible en Play Store de Android y en Apple Store de IOS). La versión gratuita es Lightbot Hour (de la Hora del Código).

6

INTRODUCCIÓN A LA PROGRAMACIÓN

Fig. 1. Interfaz de Lightbot

 Oprimir Play y aparecerá la pantalla que se muestra en la Fig. 2.

Fig. 2. Lightbot Nivel 1



Los comandos o primitivas que presenta el juego son los siguientes: Avanzar (hace que el robot avance un casillero, excepto si está frente a una pared o un desnivel, en cuyo caso permanece en el mismo lugar) Girar a la derecha Girar a la izquierda

7

INTRODUCCIÓN A LA PROGRAMACIÓN

Saltar (permite al robot saltar por encima de un solo bloque, o bien saltar de uno) Prender/Apagar luz

 El botón GO ejecuta el programa y el botón RESET borra las instrucciones y reinicia.  En todos los niveles hay un objetivo concreto que consiste en prender las luces.  Hay secuencias que sirven para alcanzar el objetivo y otras que no.  También pueden definirse procedimientos usando F1 y F2.

 Avanzar hasta el nivel 6 del juego utilizando solo la grilla correspondiente al Procedimiento principal (Main Method). Utilizar procedimientos Se puede avanzar hasta el nivel 5 sin dificultades. En el nivel 6 veremos que no alcanzan los espacios del MAIN METHOD para resolverlo. Entonces, es necesario utilizar las grillas correspondientes a los procedimientos o funciones

, que permiten definir subtareas.

o

Mediante los comandos

o

Cada grupo admite hasta ocho acciones por tarea ya que es parte del juego que el jugador piense la forma de utilizar las casillas eficazmente.

o

Así, por ejemplo, si el procedimiento o función 1 se define como avanzar tres veces, al colocar el comando en la primera grilla, se está indicando al robot que se mueva tres pasos hacia adelante.



Los procedimientos sirven para AGRUPAR SECUENCIAS DE ACCIONES QUE SE REPITEN (IDENTIFICACIÓN DE PATRONES).



Avanzar hasta el nivel 9 (del 10 en adelante son optativos).

y

se indica al robot que ejecute las nuevas tareas definidas.

Para finalizar:

 En cada nivel había un objetivo a cumplir  

El cumplimiento de los objetivos se lleva a cabo usando una estrategia. Cuando aparecen “patrones” que se repiten es conveniente usar procedimientos (F1, F2) 8

INTRODUCCIÓN A LA PROGRAMACIÓN

 En cada uno de los niveles hay una noción de estado: 

A partir de una secuencia, ¿dónde queda el robot?



¿Qué luces quedan prendidas?

Al finalizar los niveles de Lightbot, aparecerá la pantalla que se muestra en la Fig. 3.

Fig. 3. Final de Lightbot

9

INTRODUCCIÓN A LA PROGRAMACIÓN

Secuencia didactica 3: PilasBlóques Presentación de PILASBLOQUES PilasBloques es una aplicación para aprender a programar. Fue desarrollada por Program.AR - Fundación Sadosky con la colaboración de Huayra. Esta aplicación hace uso de la herramienta Pilas Engine de Hugo Ruscitti. Se proponen desafíos con diversos niveles de dificultad para acercar a los alumnos al mundo de la programación por medio de bloques. Pilas Bloques está pensado para trabajar con estudiantes que no tienen conocimientos previos en materia de programación. Objetivos:

 Comprender que un comando o primitiva es una acción que genera un efecto (reproducir un sonido, pintar a una imagen, mover un objeto, etcétera) y que las secuencias de comandos permiten encadenar (o componer) comandos de forma ordenada.

 Comprender que un programa es una secuencia de comandos y que ejecutar o correr un programa consiste en hacer que el autómata produzca un efecto al interpretarlo.

 Organizar secuencias de comandos ajustadas a un fin específico.  Distinguir entre instrucciones primitivas y procedimientos.  Identificar tareas nuevas y crear los procedimientos adecuados Introducción al entorno PILASBLOQUES

 Descargar el instalador 

Del aula virtual de la asignatura sección Material de Laboratorio, enlace PilasBloques



Del sitio Program.ar: http://bit.ly/2lTPtd9

 Ejecutar el instalador  Abrir la aplicación PilasBloques, que presentará la interfaz que se muestra en la Fig.4.  También

se puede abrir la http://pilasbloques.program.ar/online/#/desafios

aplicación

en

línea

en:

10

INTRODUCCIÓN A LA PROGRAMACIÓN

Fig. 4. Interfaz principal PilasBloques

 Hacer clic en la pestaña “Desafíos”. Se muestran las distintas actividades. -

Abrir la actividad “El Alien toca el botón”.

-

Todas las actividades tienen un objetivo, en este caso, el Alien debe tocar el botón. Para cumplir el objetivo cada actividad dispone de un conjunto de acciones, denominadas “Primitivas” (lo que el autómata es capaz de hacer).

-

El desafío consiste en indicar la secuencia de acciones (programa) que logrará cumplir el objetivo. Para ello, las primitivas se arrastran y se encastran en el bloque principal (ver Fig. 2).

Fig. 2 Bloque principal -

Para comprobar el programa, se oprime el botón “Ejecutar”. Una vez realizada las acciones el botón se convierte a “Reiniciar” (ver Fig. 5).

Fig. 3. Botón de ejecución/reinicio La Fig. 4 muestra el desafío resuelto. En el bloque principal se muestra la secuencia de primitivas que hacen que el Alien, desde su posición inicial, avance 3 pasos y apriete el botón.

11

INTRODUCCIÓN A LA PROGRAMACIÓN

Fig.5. Desafío resuelto Importante: los bloques deben estar perfectamente “encastrados” para que se ejecuten. Los bloques sueltos que se encuentren en el panel no se ejecutarán. Es recomendable guardar nuestro programa con el botón , dándole un nombre representativo. Si estás en el aula de laboratorio, añadir al nombre del archivo tu nombre y apellido para identificar la solución de las de tus compañeros. Por ejemplo: AlienTocaBotonJuanita Romero. Respetando las consignas dadas por el profesor respecto del almacenamiento (en qué carpetas guardar los archivos). Comentario: Si hay problemas con el tamaño de los objetos en la pantalla, el porcentaje de visualización de los gráficos se puede configurar en Opciones, ubicado en el engranaje que se muestra en el extremo superior derecho:

12

INTRODUCCIÓN A LA PROGRAMACIÓN Actividad: El gato en la calle

 Abrir la actividad El gato en la calle. Aparecerá la interfaz que se muestra en la Fig. 6.

Fig. 6. El gato en la calle La consigna es lograr que el gato avance, se acueste a dormir, se levante, salude y vuelva al inicio. En este desafío, aparece otro componente de programación “Mis procedimientos”. Un procedimiento permite crear bloques agrupando primitivas. Por ejemplo, podemos crear un procedimiento Dormir, que agrupa acciones primitivas: Acostarse, Cerrar los Ojos, Soñar. Solución: La Fig. 7 muestra la solución usando un procedimiento Dormir.

Fig. 7. Uso de procedimientos Ejercicio 1: Variante del ejemplo anterior: Resolver el desafío El gato en la calle, creando y utilizando un procedimiento Dormir y un procedimiento Despertar. 13

INTRODUCCIÓN A LA PROGRAMACIÓN Ejercicio 2: Explorar otras actividades que el gato pueda realizar. Por ejemplo: saludar, avanzar, volver, saludar, avanzar o avanzar, saludar, avanzar, saludar, volver. De este modo, observarán que distintas secuencias producen resultados diferentes. Como el ejercicio está pensado para ejercitar estas variantes, no tiene la leyenda de que se cumplió el objetivo.

Repasando: o

Un comando o “primitiva” es una acción que genera un efecto.

o

Un programa es una secuencia de comandos.

o

Correr o ejecutar un programa es hacer que un autómata realice los comandos de un programa.

o

Se pueden definir nuevos bloques (procedimientos) para realizar secuencias específicas.

o

La denominación adecuada de los procedimientos contribuye a la legibilidad.

o La definición de la estrategia y la división en tareas facilita la comprensión de la solución global.

14

INTRODUCCIÓN A LA PROGRAMACIÓN

Secuencia didactica 4: Repetición simple I Objetivos:



Aplicar herramientas de programación para la ejecución de tareas repetitivas.



Reconocer que las computadoras pueden repetir una tarea cuantas veces sea necesario.

Actividad: NO ME CANSO DE SALTAR -

Abrir la aplicación PilasBloques, en la pestaña “Desafíos”, abrir la actividad “No me canso de saltar”.

-

Escribir las instrucciones necesarias para que el gato salte 30 veces (sin utilizar 30 bloques).

En esta actividad, aparece como nuevo elemento el bloque Repetir que utiliza como parámetro la cantidad de veces que se repiten las instrucciones contenidas en el bloque (Ver Fig. 8).

Bloque Repetir

Fig. 8. No me canso de saltar Solución: Una buena práctica para mejorar la legibilidad de una solución es crear un procedimiento principal que contenga la solución al desafío. En este caso, crear un bloque Saltar 30 veces. Recordemos que conviene nombrar a los procedimientos con nombres que indiquen el propósito de ese conjunto de comandos, preferentemente usando un verbo en infinitivo (Saltar), en este caso, Saltar 30 veces que es el objetivo que pide el desafío.

15

INTRODUCCIÓN A LA PROGRAMACIÓN Dentro del procedimiento principal, utilizar el bloque Repetir que requiere seleccionar la/las primitivas que se repetirán (Saltar) e indicar cuántas veces debe repetirse (30 veces), como se muestra a continuación:

Para finalizar:



En un programa se pueden repetir secuencias de comandos tantas veces como sea necesario

 

Usar el bloque Repetir ayuda a generar programas más compactos y legibles.



En el casillero en blanco del bloque se indicará el número de veces que se deben repetir los comandos.



La invocación a un procedimiento principal (bloque “Saltar 30 veces”) hace más legible la solución que se busca.

En general, cuando un comando (o una secuencia de comandos) se repite se debe usar el bloque Repetir.

16

INTRODUCCIÓN A LA PROGRAMACIÓN

Secuencia didactica 5: Repetición Simple II Objetivos

 Ejercitar

la resolución de problemas mediante programas.

 Establecer comparaciones entre las diversas maneras posibles de resolver un problema.

 Reforzar los conceptos de repetición y separación en procedimientos. Actividades

 Ejercicio 6.1.: El marciano en el desierto. Construya un programa en el cual el marciano coma todas las manzanas del tablero. Al presentar este desafío a los alumnos, hay que detenerse un momento para que analicen el “escenario”: ¿Cómo están distribuidas las manzanas? ¿Dónde se ubica el autómata? ¿Cuántos casilleros aparecen? Pedirles que ejecuten varias veces (siempre con el bloque Al empezar ejecutar vacío) para que se den cuenta que el escenario es FIJO y que el autómata siempre está en la misma posición inicial. Es decir, la solución que hagamos resuelve el problema siempre que se mantengan esas condiciones. La solución que se propone es la siguiente:

Se define un procedimiento para comer manzanas en cada ubicación de las mismas, y otro procedimiento para ubicar al autómata. El bloque Repetir se usa para repetir el conjunto de acciones o primitivas que se realiza más de una vez (por ejemplo, Mover a la derecha, Comer manzana). En este punto conviene introducir el concepto de “patrón”, como secuencia de primitivas que se realizan más de una vez. Los alumnos deben identificar estos patrones al analizar la estrategia que implementarán. 17

INTRODUCCIÓN A LA PROGRAMACIÓN Continuar resolviendo los demás ejercicios Los ejercicios a continuación deben ser resueltos utilizando los conceptos dados. Teniendo en cuenta que la dinámica de la clase es: se plantea el desafío, se dedica un tiempo para la resolución, se comparte la solución con los compañeros. Se espera que todos aporten opiniones que contribuyan a mejorar la estrategia de resolución. Evaluar: - Si definieron una estrategia previa, - Si identificaron patrones (secuencias que se repiten), - Si subdividieron la estrategia de solución en partes, - Si esas partes (procedimientos) tienen un nombre adecuado (verbo en infinitivo indicado el propósito del procedimiento).

 Ejercicio 6.2: Tito enciende las luces. Construya un programa que permita al robot encender todas las luces. En esta solución, probablemente intenten repetir 4 veces la primitiva Prender Luz porque existen 4 focos, pero hay un problema, ¿cuál es?

 Ejercicio 6.3: El Alíen y las Tuercas. Construya un programa que permita el Alíen junte todas las tuercas. En este desafío puede haber un problema con la última tuerca.

 Ejercicio

6.4: El recolector de estrellas. Construya un programa que permita al extraterrestre tomar todas las estrellas del tablero.

 Ejercicio 6.5: María come sandías. Construya un programa que permita a María morder todas las sandías que se encuentran en el tablero.

 Ejercicio 6.6: Alimentando a los Peces. Construya un programa que permita al buzo buscar la comida y que alimente a los peces. Prestar atención, en cada solución, a tener en cuenta la “pista” que se menciona en el enunciado del desafío.

 Ejercicio 6.7: Instalando Juegos. Construya un programa que permita al extraterrestre instalar videojuegos en las tres computadoras de la biblioteca. Para ello debe encender cada computadora, ingresar la contraseña (que en este caso es ABC), cargar el juego y finalmente apagar la máquina.

 Ejercicio 6.8: La gran Aventura del Mar Encantado. Construya un programa que permita al héroe (ubicado en el casillero del extremo inferior izquierdo) logre escapar en el unicornio con la princesa. Para ello debe superar una serie de pruebas en el siguiente orden.

 Ejercicio 6.9: Reparando la nave. Construya un programa que permita al marciano aprovisionarse de carbón y hierro para reparar su nave y así poder ponerla en funcionamiento. 18

INTRODUCCIÓN A LA PROGRAMACIÓN Para resolver los desafíos, tener en cuenta:

 Pensar una estrategia de solución,  Pensar un nombre adecuado para esa solución (como procedimiento principal),  Practicar el uso de procedimientos como medio de expresar ideas y aportar legibilidad al programa

 Nombrar adecuadamente a los procedimientos. El objetivo principal de esta secuencia didáctica es:

 Utilizar la estructura de control para repetición en diversas combinaciones.  Insistir para que los alumnos definan una estrategia de solución en forma previa a la resolución.

 Aportar a la Legibilidad mediante la división de la estrategia en tareas (procedimientos) y con nombres adecuados (verbo en infinitivo que indique la acción a realizar).

 Consolidar la didáctica por indagación

19

INTRODUCCIÓN A LA PROGRAMACIÓN

Metódó de resólución de próblemas Uno de los objetivos de esta etapa de aprestamiento es incorporar un método de resolución de problema que sirva para asimilar con mayor facilidad la tarea de programar. El método consiste en la aplicación rigurosa los pasos que se muestran a continuación, aplicados a dos actividades ejemplos:

Pasos

Ej. 1: Tito enciende las luces

Ej. 2: El recolector de estrellas

Encender todas las luces

Recolectar todas las estrellas

Pensar un nombre para la solución

EncenderLuces

RecolectarEstrellas

 Detectar “patrones” (Situaciones que se repiten)

Las dos diagonales son iguales

 Las filas de estrellas son iguales  Ubicarse al inicio de cada fila

 Analizar el problema (Ver el escenario)  Determinar el QUE (objetivo)  Pensar una solución global

 Recolectar estrellas de la fila  Pensar una estrategia  Dividir el problema en tareas (procedimientos)

 Ubicarse al inicio de la primera diagonal  Encender la diagonal  Ubicarse al inicio de la segunda diagonal  Encender la diagonal

 Ubicarse en la siguiente fila  Recolectar estrellas de la fila  Ubicarse en la siguiente fila  Recolectar estrellas de la fila  Ubicarse en la siguiente fila  Recolectar estrellas de la fila  RecolectarFila

 UbicarseDiagonal_1  Pensar nombres representativos para las tareas

 EncenderDiagonal  UbicarseDiagonal_2  EncenderDiagonal

 UbicarseSiguienteFila  RecolectarFila  UbicarseSiguienteFila  RecolectarFila  UbicarseSiguienteFila  RecolectarFila

Luego, se escribe la solución en la herramienta:

20

INTRODUCCIÓN A LA PROGRAMACIÓN

Escribir la solución global

 Analizar las primitivas  Determinar el COMO  Armar la solución final con: o las primitivas o los procedimientos o las repeticiones



Programar

21

INTRODUCCIÓN A LA PROGRAMACIÓN

Secuencia didactica 6: Alternativas condicionales Escenarios cambiantes Esta secuencia didáctica propone volver al robot humano (SD 1) pero ahora el escenario puede sufrir variaciones y por lo tanto hace falta una nueva herramienta del lenguaje, no considerada hasta el momento: la alternativa condicional. El objetivo fundamental de esta secuencia es entender que un mismo programa tiene que funcionar en diversos escenarios, cada uno de los cuales puede presentar variaciones respecto de los otros. Objetivos

 Introducir la noción de alternativa condicional.  Reconocer escenarios fijos y escenarios cambiantes.  Identificar alternativas en un escenario.  Reforzar los conceptos de división de tareas en procedimientos. Actividad: El ROBOT HUMANO SALE DEL SALÓN En la clase, los alumnos deben construir un programa (en lenguaje natural) para que un robot humano (el docente) pueda salir del aula. Escenario: el aula tiene 2 puertas, y cada día solo una de ellas estará abierta y la otra estará cerrada, sin posibilidades de abrirla. Pista: Desde la posición del docente, es sencillo determinar cuál de las puertas está abierta. Hacer que el docente, siguiendo las instrucciones dadas por los alumnos, salga del aula por una puerta o la otra. Este es un caso de “escenario cambiante”, es decir, el autómata tiene que evaluar la situación y realizar una u otra acción (SI… Entonces … SINO …).

22

INTRODUCCIÓN A LA PROGRAMACIÓN

Secuencia didactica 7: Alternativas condicionales Objetivos

 Identificar los cambios que se producen en un escenario dado.

 Utilizar

correctamente los comandos necesarios para ejecutar alternativas condicionales.

 Definir los programas adecuados a escenarios cambiantes.  Establecer comparaciones entre las diversas maneras de resolver un problema.  Reforzar los conceptos de separación en procedimientos.  Definir los programas adecuados a escenarios cambiantes. Actividades



Ejercicio 8.1.: El mono y las bananas. Hacer que el mono coma la banana (si hay banana),

Fig. 11. El mono y las bananas Solución: Ejecutar varias veces la actividad. Podemos ver que el escenario, en algunos casos muestra la banana y en otros no. Decimos que tenemos un “escenario cambiante”. Por tanto, la solución debe incluir la evaluación de la situación para hacer una cosa u otra de acuerdo a la posición de los elementos del escenario. 23

INTRODUCCIÓN A LA PROGRAMACIÓN

Para manejar esto se utiliza el control Alternativa:

Este bloque ejecuta los comandos que contiene siempre y cuando se cumpla la condición indicada por el Sensor, en este caso: ¿Hay banana acá?

Con esta explicación, continuar resolviendo las siguientes actividades:



Ejercicio 8.2.: La elección del mono. Construya un programa en el cual el mono coma una manzana cuando hay una manzana y que coma una banana cuando hay una banana.

Para resolver este ejercicio, no alcanza con el bloque SI, dado que son 2 frutas: banana o manzana, por tanto, deben usar el control Si-sino Gracias a la Alternativa condicional, la cual consta de dos partes: una condición y una acción. (Si se cumple la condición, entonces será realizada la acción), podemos hacer que nuestro programa sea válido para escenarios cambiantes.

   

Ejercicio 8.3.: Laberinto corto. Construya un programa en el cual el robot avance un paso en la dirección correcta. Ejercicio 8.4.: Tres naranjas. Construya un programa en el cual el marciano recorrer las casillas y comer las naranjas. Ejercicio 8.5.: Tito recargado. Construya un programa en el cual Tito encienda las luces. Ejercicio 8.6.: Laberinto largo. Construya un programa en el cual el robot avance hasta el final, en las direcciones correctas.

24

INTRODUCCIÓN A LA PROGRAMACIÓN

Secuencia didactica 8: Repetición condicional Esta secuencia, al igual que en la secuencia didáctica anterior está enfocada en escenarios cambiantes. En este caso, la variación que debe considerarse tiene que ver con secuencias cuya cantidad de elementos no es conocida de antemano: cada escenario podrá tener diferente cantidad.

Objetivos

  

Distinguir entre escenarios con secuencias de tamaño fijo y escenarios con secuencias de tamaño variable. Comprender la noción de repetición condicional y reconocer las dos partes de las que consta toda repetición condicional. Identificar la estructura de un problema y utilizar esa información para resolverlo.

Actividad: SUPER TITO 1 El autómata (Tito) tiene que encender las luces de cada casilla hasta llegar al final.

Solución: Para determinar cómo es el escenario, primero hay que ejecutar varias veces la actividad. Podemos observar que varía el número de celdas hasta llegar al final. 25

INTRODUCCIÓN A LA PROGRAMACIÓN Para afrontar esta situación aparece un nuevo control, Repetir hasta que, que requiere no una cantidad fija para repetir como antes sino un SENSOR que le indique la ocurrencia de un suceso, en este caso, si llegó al final. Se utiliza el control Repetir hasta que, que ejecutará las primitivas que se incluyen en el bloque (Prender Luz y Mover abajo), hasta que, se cumpla la condición expresada por el sensor ¿Llegué al final?

Solución:

Una repetición condicional consta: 

Una condición ante la cual el autómata deja de repetir algo.



La tarea que el autómata/programa debe repetir hasta que la condición se cumpla. momento trabajados

Recorridos y repetición condicional  

Un recorrido es una forma de procesar una secuencia de elementos de manera estructurada. Es un esquema de cómo dividir en subtareas una tarea que implica procesar una secuencia. 26

INTRODUCCIÓN A LA PROGRAMACIÓN Un recorrido tiene las siguientes partes:

-

Iniciar recorrido: usualmente, posicionarse en el primer elemento, y realizar las inicializaciones que correspondan.

-

Condición de fin de recorrido: condición que indique cuándo se acabaron los elementos a procesar.

-

Procesar elemento actual: el procesamiento propiamente dicho de un elemento por vez.

-

Pasar al siguiente elemento: la forma de pasar al siguiente elemento de la secuencia, si existe.

-

Finalizar recorrido: en los casos en que fuera necesario, retornar la información pedida, volver a una posición dada, etc.

Actividades: Resolver estas actividades, recordando que deben: definir la estrategia, dividir en subtareas, representar cada subtarea con un procedimiento y nombrarlos adecuadamente.

 Super Tito 2: Variante del anterior, el escenario presenta ahora algunas celdas sin luz.

 Laberinto con queso  Fútbol para robots  Prendiendo las compus  El superviaje

27

INTRODUCCIÓN A LA PROGRAMACIÓN

MARCO CONCEPTUAL 1. Herramientas conceptuales  Estrategia de solución y división en subtareas  Legibilidad y elección de nombres adecuados  Algorítmica básica: recorridos 2. Herramientas del lenguaje 2.1. Acciones (comandos - “verbos”)  Comandos primitivos; secuencia de comandos  Procedimientos y parámetros  Repetición simple y repetición condicional  Alternativa condicional 2.2. Datos (expresiones - “sustantivos”)  Valores (literales numéricos y otros)  Sensores y datos primitivos; sensores de interactividad  Operadores, parámetros y Variables 1. Herramientas conceptuales a) La noción de estrategia de solución, y la de su explicitación para aplicar la metodología de división en subtareas, b) La noción de que los programas son fundamentalmente un medio de comunicación entre personas, además de servir como vehículo para hacer funcionar máquinas, capturado en la importancia de que los programas sean legibles (o sea, claramente entendibles por otros programadores) y esto a su vez expresado mediante la metodología de elección de nombres adecuados para cada una de las partes de un programa que se escribe. c) La noción de algorítmica básica, expresada en este curso en forma simplificada, por ejemplo, en la noción de recorrido. a) Estrategia de solución y división en subtareas Toda vez que se busca solucionar algún problema, es necesario contar primero con alguna idea de cómo encarar dicha solución, o sea, qué elementos disponer para la solución y de qué manera. Esto en programación se conoce como estrategia de solución: ¿qué cosas considerar a la hora de realizar la solución? ¿Cuáles son los componentes que interactuarán en la solución para obtener la respuesta deseada, y de qué manera lo harán? Una forma de expresar estrategias de solución es considerando pequeños problemas cuyas soluciones combinadas provean la solución al problema general. Esta forma de descomponer un problema en sub-problemas (o una tarea a realizar en subtareas) es una de las bases conceptuales de la programación. La división en subtareas, representa a la forma de pensar composicionalmente y es una herramienta conceptual invalorable en el pensamiento de alto orden. Vale la pena remarcar que mientras que la estrategia de solución es una idea particular de cómo resolver un problema, la división en subtareas es una forma específica de cómo expresar dicha estrategia a través de soluciones a problemas más pequeños. 28

INTRODUCCIÓN A LA PROGRAMACIÓN Si bien, los primeros ejercicios son muy sencillos, es básico para el objetivo de este curso que en cada uno de los ejercicios la estrategia de solución elegida sea explicitada y luego expresada a través de subtareas. Esto se logra combinando las herramientas del lenguaje con las demás herramientas conceptuales de manera adecuada; pero el concepto fundamental subyacente en todo momento explicitar la estrategia de solución a través de la adecuada división en subtareas (además de la habilidad de nombrar adecuadamente cada una y de utilizar las herramientas del lenguaje adecuadas para construir la solución). La herramienta del lenguaje básica para expresar subtareas y estrategias es el procedimiento. Resumiendo, los pasos recomendados para solucionar un problema mediante un programason: 1. Idear una estrategia de solución, y explicitarla. 2. Expresar la estrategia mediante alguna división en subtareas. 3. Declarar y nombrar adecuadamente un procedimiento principal que exprese la estrategia ideada. 4. Declarar y nombrar adecuadamente procedimientos que expresen las subtareas. 5. Utilizar estos procedimientos para definir el procedimiento principal, y validar que la estrategia de solución resulte clara al leerlo. Seguir para esto el principio de utilizar como máximo una estructura de control por procedimiento (para fomentar aún más la subsiguiente división en subtareas). 6. Definir cada uno de los procedimientos que expresan subtareas, repitiendo para cada subproblema particular los pasos antedichos para definir la solución a un problema. b) Legibilidad Para entender el concepto de legibilidad, primero tenemos que saber que “un programa es una descripción ejecutable de la solución a un problema computacional”. Los programas son entidades “duales” dado que deben indicarle a una máquina cómo funcionar, pero, también deben comunicar la solución propuesta a las personas. O sea, los programas son manipulados por dos entidades: máquinas, pero también personas. Las definiciones y propuestas tradicionales ponen todo el énfasis en la máquina que ejecuta el programa y en su funcionamiento, y dejan en segundo plano el valor comunicacional del programa, invisibilizando de alguna manera a las personas que los programan. En este curso se enfatiza el valor comunicacional de un programa y se valora la “legibildad” de las soluciones propuestas. Se dice que un programa es legible cuando puede ser leído con sencillez por una persona, y entendido con poca o ninguna explicación adicional. La legibilidad se ve expresada en la elección de nombres adecuados para las entidades que se escriban en el programa: procedimientos, parámetros, variables y otras entidades. Si bien no existe una definición precisa de qué constituye un nombre adecuado, existen algunos criterios generales: Por ejemplo, es universalmente aceptado que los nombres de una o dos letras son extremadamente inadecuados en la mayoría de los casos, y también que los nombres extremadamente largos (por ejemplo, que ocupan todo un renglón o más), también. Se suelen favorecer nombres cortos pero descriptivos. En el caso de los comandos, por ejemplo, estos nombres usualmente requieren verbos en infinitivos: Avanzar, tocar, … 29

INTRODUCCIÓN A LA PROGRAMACIÓN Adicionalmente, se requiere que el nombre brinde una idea correcta respecto del propósito de la entidad nombrada, pues si no usualmente conduce a confusiones que limitan o complican la legibilidad (por ejemplo, es inadecuado nombrar con el identificador Rojo a un valor que luego se utiliza para dibujar figuras verdes, o nombrar como Avanzar un paso adelante a un procedimiento que permanece en el lugar; en cambio habrían sido nombres adecuados Verde y Permanecer en el lugar, respectivamente. La correcta utilización de estas herramientas conceptuales tiene un impacto directo en la calidad de los programas que se escriben. Esto es fundamental cuando se forman programadores profesionales, pues código de calidad significa mayor productividad. Sin embargo, esta forma de pensar y organizarse tiene valor más allá de las aplicaciones profesionales de la programación, y es por eso una de las razones por las que desde la iniciativa Program.AR, que provee el contexto de este curso, se busca generalizar la enseñanza de las Ciencias de la Computación. Las estrategias de solución, la correcta comunicación de soluciones a problemas, y mecanismos elementales de solución de problemas sencillos habilitan y fomentan la formación de capacidades de pensamiento de alto orden, que hoy día es aceptado como forma fundamental del pensamiento humano. c) Algorítmica básica: recorridos Básicamente, un recorrido es un esquema de repetición en el cuál se realiza una tarea para cada uno de los elementos de una serie, pues recorre la secuencia de elementos de a uno, procesando de alguna forma cada uno de ellos. La idea de un recorrido es organizar la división en subtareas a la hora de resolver una tarea que requiere trabajar con cada uno de los elementos de una secuencia, de manera tal de simplificar la confección de una solución y garantizar el correcto funcionamiento de la misma. De esta forma, habrá subtareas para iniciar el recorrido, determinar si se terminaron los elementos, procesar un elemento, pasar al siguiente elemento y para finalizar el recorrido. La secuencia de elementos que un recorrido se encarga de procesar puede ser muy concreta (por ejemplo, una serie de elementos en fila, como ser frutas o señales) o ser más abstracta (por ejemplo, una serie de posiciones distantes a visitar en un mapa o incluso un recorrido sobre números para resolver un problema numérico tal como calcular una factorial). Sin embargo, cuanto más abstracta resulte la secuencia, más complejo será transmitir la idea adecuadamente. Por eso, se recomienda que en un curso inicial los recorridos se mantengan lo más concretos que sea posible. Los ejemplos del cuaderno fueron elegidos para garantizar esta cuestión. 2. Herramientas del lenguaje 2.1. Acciones (comandos - “verbos”)  Comandos primitivos; secuencia de comandos  Procedimientos y parámetros  Repetición simple y repetición condicional  Alternativa condicional 2.2. Datos (expresiones - “sustantivos”)  Valores (literales numéricos y otros)  Sensores y datos primitivos; sensores de interactividad  Operadores, parámetros y Variables 30

INTRODUCCIÓN A LA PROGRAMACIÓN En la programación, la forma de expresar las ideas y soluciones propuestas es, invariablemente, a través de un lenguaje de programación. Un lenguaje de programación determinado establece cómo escribir programas en dicho lenguaje, y provee diferentes herramientas, y diferentes formas de combinarlas, pero todas esas formas se pueden entender como casos particulares de una serie genérica de herramientas. Las herramientas del lenguaje se pueden clasificar según el tipo de elementos que describen: los comandos se utilizan para describir acciones y las expresiones se utilizan para describir datos. En un lenguaje natural, las acciones se describen mediante verbos y los datos se describen mediante sustantivos. Por esa razón, se puede establecer la analogía y pensar a los comandos como “verbos” y a las expresiones como “sustantivos”. El programa se arma combinando verbos y sustantivos para brindar a la máquina que lo ejecutará la descripción adecuada para que pueda llevar a cabo la solución. Los comandos le indicarán acciones que debe realizar, y las expresiones le indicarán con qué datos deben llevarse a cabo las acciones. Ejemplo: Avanzar (10 pasos), el comando Avanzar indica la acción y la expresión (10 pasos), indica cuánto avanzar. 2.1. Acciones (comandos-verbos)

Los comandos se pueden clasificar de diversas maneras. 

Comandos primitivos:

Descripción de las acciones elementales que la máquina que ejecutará el programa puede realizar; cada máquina considerada tendrá diferentes capacidades, lo cual se verá reflejado en el conjunto de comandos primitivos que se manejen desde el lenguaje. La primera forma de combinación de comandos primitivos (y luego, de comandos en general) es la secuenciación. En una secuencia de 2 comandos, por ejemplo, se realiza la acción indicada por el primer comando y habiendo terminado esa acción, se realiza la acción indicada por el segundo comando. Es la forma básica de combinación, que resulta imprescindible para construir acciones más complejas. 

Procedimientos:

La siguiente forma de combinación de comandos primitivos que se propone trabajar es el procedimiento. Los procedimientos son la herramienta que plasma de manera más precisa la noción de abstracción que se busca transmitir, y por eso se consideran una herramienta fundamental. Un procedimiento en su forma más simple no es más que una acción compleja (obtenida, por ejemplo, por secuenciación de acciones más elementales) a las que se les asigna un nombre que la identifica. Puede entenderse esta herramienta también como una forma de definición de nuevos comandos. Por ejemplo, si se cuenta con el comando primitivo AvanzarUnPaso(), se puede definir el procedimiento AvanzarTresPasos() como la secuencia AvanzarUnPaso(); AvanzarUnPaso(); AvanzarUnPaso(). Tal cual se describió anteriormente, la elección de un nombre adecuado que describa de manera precisa el propósito del procedimiento es básica para la correcta legibilidad del programa. 31

INTRODUCCIÓN A LA PROGRAMACIÓN Los procedimientos constituyen uno de los pilares fundamentales de este enfoque de enseñanza de la programación. Son la forma de explicitar en el lenguaje la división en subtareas, y por ello comparten la importancia de dicha herramienta conceptual. La división en subtareas y procedimientos pueden verse como dos instancias, una del lado conceptual y la otra del lado del lenguaje, del mismo concepto fundamental: la abstracción. Es importante hacer una observación sobre la denominación de procedimiento, en algunas herramientas o enfoques lo que aquí se denomina procedimiento se puede encontrar nombrado como funciones, bloques, subrutinas, o alguna otra forma. Pero en cada caso, es claro que se trata de un mecanismo de abstracción sobre comandos, una forma de definir nuevos comandos. En su forma más simple, los procedimientos solamente le dan nombre a alguna acción compleja devenida a partir de combinación de otros comandos. Sin embargo, el verdadero poder expresivo de los procedimientos se encuentra cuando se los combina con la noción de parámetro. Los parámetros son una herramienta que permite expresar muchos procedimientos diferentes mediante un único procedimiento parametrizado. Un parámetro es como un “agujero” que el procedimiento tiene, y que debe ser completado con un dato: el argumento. El argumento provisto para completar el parámetro determina cuál de las instancias específicas expresadas por el procedimiento parametrizado se busca utilizar. Los parámetros son otra forma de conseguir abstracción: muchos casos particulares son expresados de una sola vez a través de un procedimiento parametrizado. Sin embargo, esta forma de abstracción es mucho más difícil de transmitir que la de procedimiento, especialmente a estudiantes que recién se inician en la programación. Por esa razón, en este curso los parámetros aparecen de manera tardía, y no se hace un fuerte hincapié en ellos. La noción de parámetro y parametrización es crítica en la formación de un programador profesional. 

Repetición simple y condicional

La clasificación de comandos continúa con diversas formas de combinación de comandos: dos formas de repetición (simple y condicional) y una forma de alternativa (condicional). Estas herramientas permiten aumentar el poder expresivo de la persona que programa al habilitar o facilitar comportamientos complejos, que son o bien difíciles o bien imposibles de expresar utilizando solamente las herramientas previas. Nuevamente, la didáctica por indagación debe ser tenida en cuenta al presentar las herramientas, para que de esa forma la utilización de las mismas no sea el resultado de una receta, sino el fruto de la necesidad. Los ejercicios propuestos guían en este enfoque. A la hora de presentar repeticiones es conceptualmente más simple comenzar con una forma de repetición que repite un número fijo de veces. La forma avanzada de repetición que se presenta en el curso es la que se denomina repetición condicional, pues la cantidad de repeticiones no se conoce a priori, y se utiliza una condición como mecanismo para determinar cuándo dejar de repetir. Esta forma de repetición es conocida por muchos con nombres menos descriptivos, como “while” o “do while” (mientras) o “repeat 32

INTRODUCCIÓN A LA PROGRAMACIÓN until” (repetir hasta); sin embargo, es conveniente utilizar la denominación de repetición condicional, pues es más descriptiva y adecuada a la hora de ubicarla en el marco conceptual. También importa la dificultad didáctica de cada una de las variaciones de la repetición condicional. En este curso se propone la utilización de la forma “repetir hasta” por ser más sencilla desde el punto de vista didáctico que su equivalente “repetir mientras”. Esto se refleja en los ejercicios propuestos, y no debe ser pasado por alto.  Alternativa condicional La alternativa condicional es una forma de elegir entre dos posibles cursos de acción, basándose en una condición. Es comúnmente conocida como “if-then-else” o simplemente “if” o a veces “condicional”. Pero estas formas familiares de denominarla ignoran el hecho fundamental de que lo que se está expresando es una alternativa entre dos posibles acciones. 2.2. Expresiones

La siguiente categoría de elementos de un lenguaje de programación que consideramos es la de expresiones, que son la manera de describir información, y por ello equiparables a los “sustantivos” de un lenguaje natural. En su forma más básica, las expresiones aparecen en forma literal, por ejemplo, para representar números (2, 17, 42, etc.) o cadenas de caracteres ("hola", "Este es un string", etc.) o valores de verdad (verdadero y falso). Las expresiones pueden ser:  nombres que representan información de manera indirecta, a saber, parámetros y variables, y  sensores y datos primitivos que representan la información que la máquina puede recolectar del medio ambiente en el que ejecuta. No se continúa profundizando en las herramientas del lenguaje de la categoría expresiones porque no se presentan en los ejercicios previstos, dado que, se realizó una selección de los más básicos, enfocados principalmente en los comandos más usuales.

33