Vous êtes sur la page 1sur 33

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 Estrategia de solución


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

Extender el brazo Abrir la puerta


Empujar la manija

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: http://virtual-


moodle.unne.edu.ar/login/index.php, sección Material de Laboratorio.

 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?via-
search=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 correspon-

dientes a los procedimientos o funciones , que permiten definir subtareas.

o Mediante los comandos y se indica al robot que ejecute las nuevas tareas definidas.

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

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 aplicación en línea en:
http://pilasbloques.program.ar/online/#/desafios

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: AlienTocaBoton-
Juanita 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 general, cuando un comando (o una secuencia de comandos) se repite se debe usar el
bloque Repetir.
 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.

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


 Analizar el problema (Ver el
escenario)
 Determinar el QUE (objetivo) Encender todas las luces Recolectar todas las estrellas
 Pensar una solución global

Pensar un nombre para la EncenderLuces RecolectarEstrellas


solución
 Detectar “patrones” Las dos diagonales son  Las filas de estrellas son iguales
(Situaciones que se repiten) iguales  Ubicarse al inicio de cada fila
 Recolectar estrellas de la fila
 Ubicarse al inicio de la  Ubicarse en la siguiente fila
primera diagonal
 Pensar una estrategia  Recolectar estrellas de la fila
 Encender la diagonal
 Dividir el problema en tareas  Ubicarse en la siguiente fila
 Ubicarse al inicio de la
(procedimientos)  Recolectar estrellas de la fila
segunda diagonal
 Encender la diagonal  Ubicarse en la siguiente fila
 Recolectar estrellas de la fila
 RecolectarFila
 UbicarseSiguienteFila
 UbicarseDiagonal_1
 RecolectarFila
 Pensar nombres  EncenderDiagonal
representativos para las  UbicarseSiguienteFila
tareas  UbicarseDiagonal_2
 RecolectarFila
 EncenderDiagonal
 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 sub-
tareas) 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 sub-
problema 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