A la hora de crear un programa de ordenador, independientemente del lenguaje utilizado, debemos seguir una serie de pasos básicos que simplifiquen nuestra tarea y que nos ayuden a perfeccionar el código y limpiarlo de posibles fallos y errores.
En el artículo anterior observamos por encima cómo trabajar, pero ahora vamos a profundizar en este vasto mundo de la computación y el desarrollo de algoritmos a través de una serie de ejemplos de aplicación práctica en la ESO.
Deberemos tener en cuenta para ello el punto de vista de nuestros estudiantes casi siempre neófitos en estas lides para conducirles por el camino del pensamiento lógico y los conceptos de subrutinas, bucles y contadores.
Figura 1. Programación
En una secuencia lógica procederemos con los siguientes pasos:
Problema comprensión: En un parking de 10 plazas de capacidad se quiere diseñar un programa de control que gestione las entradas y salidas de vehículos del mismo. Cuando existan plazas libres la barrera de entrada debe permitir el acceso y en el exterior se mostrará un luminoso con la palabra libre en verde. Cuando el parking alcance su límite, la barrera de entrada quedará bloqueada y se exhibirá el mensaje lleno en rojo. Al principio del día el parking se supone vacío.
Siempre explico a los estudiantes que cuando no entiendan un problema o les genere cualquier tipo de duda, antes de lanzarse al diseño del diagrama de flujo, dibujen un boceto del mismo en forma simple para tener claros todos los detalles del mismo.
En el caso del parking, si bien pudiera parecer obvio, un esquema aproximado puede aclarar las ideas y generar el tipo de pensamiento lógico que es la finalidad de la programación. El punto clave en este problema es detectar la necesidad de un contador de coches que llevaremos a una variable, concepto clave en si mismo de la programación.
L@s alumn@s normalmente presentan problemas con la comprensión de las variables. Siempre podemos hablarles de un hueco vacío en la memoria del ordenador que podemos ir completando con valores alfanuméricos y que puede cambiar y cambiará durante la ejecución de nuestro programa.
Figura 2. Parking
Planificación: Un buen esquema que refleje todos los sucesos de nuestro programa y las condiciones que llevan a los mismos será esencial antes de lanzarnos al teclado.
Un flujograma, también denominado diagrama de flujo, es una representación gráfica de una secuencia de actividades o acciones que implican un proceso determinado. Es decir, el flujograma consiste en representar gráficamente, situaciones, hechos, movimientos y relaciones de todo tipo mediante el uso de símbolos.
Entre las ventajas de utilizar el diagrama de flujo, es posible resaltar que él:
- Mejora la comprensión del proceso de trabajo.
- Muestra los pasos necesarios para la realización del trabajo.
- Demuestra la secuencia e interacción entre las actividades / proyectos.
- Puede ser utilizado para encontrar fallas en el proceso.
- Se puede utilizar como fuente de información para el análisis crítico.
- Facilita la consulta en caso de dudas sobre el proceso.
Problema. Diagrama de flujo 1. Diseñar el flujograma para un programa que controle las puertas de acceso en un centro comercial. Si las puertas detectan la presencia de personas para entrar, salir o en el paso, deben abrirse. Cuando no haya nadie en las inmediaciones se cerrarán automáticamente. Debe prevenirse el comportamiento impredecible de gente absorta en sus smartphones o de niños jugando para evitar accidentes.
Este es un flujograma muy básico que puede perfectamente servir para la introducción de este tipo de esquemas de planificación con los alumnos de 2º o 3º ESO. Veamos su resolución;
Figura 3. Flujograma puertas
Después se pueden introducir conceptos horarios quedando así;
Figura 4. Flujograma con horario
Más tarde establecemos el uso de contadores para llegar al requerido por el parking, uno de los más complejos en estos niveles. Los contadores son gestionados en forma de variables que podemos incrementar o reducir en el número de unidades que se requiera, para nuestro problema de uno en uno.
También se debe establecer el concepto inicialización tan útil en la programación y diseño de videojuegos en cuanto a la puntuación, las vidas del jugador o los indicadores de características del avatar utilizado.
Desde el punto de vista de nuestr@s pupil@s es un error común olvidar dicha inicialización en los flujogramas y en los propios programas con lo que se generan errores de cuentas o incrementos incorrectos de las mismas.
Figura 5. Flujograma parking
De la experiencia extraída trabajando con l@s alumn@s podemos observar los errores más comunes en la confección de los diagramas de flujo y sobre los que habrá que insistir para su evolución en la comprensión de los mismos.
- No sacar más de una línea de ejecución de programa después de una elipse o un rectángulo.
- Nunca dejar un rectángulo sin continuación. La ejecución del programa posterior no sabría por dónde seguir.
- No repetir bloques de órdenes o preguntas siempre que sea posible.
- No cruzar unas líneas sobre otras.
Diseño algoritmo
Una vez los conceptos de planificación mediante flujogramas están claros podemos adentrarnos en la programación, que, en la ESO, se basa sobre todo en Scratch, ya sea para hacer programas simples como juegos sencillos, demos o para aplicarlo sobre tarjetas arduino.
En este sentido los errores más comunes en los alumnos es el uso de sentencias “si” que solo se ejecutan una vez cuando necesitamos que sean de “polling” continuo, es decir, que estén comprobando su condición constantemente para lo cual debemos insertarlas dentro de bucles más amplios como “repetir” o “por siempre”.
Otro error bastante extendido es el uso de un “por siempre” dentro de otro lo que causará que quedemos atrapados dentro del bucle más interno sin hacer caso a las instrucciones externas.
También y muy repetido el hecho de usar sensores de “toque” para los personajes de nuestros programas, pero sin introducir tiempos de espera al tocar de forma que un contador virtual estará incrementando variables todo el tiempo que dura el roce de ambos personajes.
Podemos empezar con programas sencillos de encendido y apagado de leds para ir pasando a estructuras más complejas que requieran el concepto de bucle en su procesamiento.
Figura 6. Estructura de bucle para semáforo con arduino y circuito
En un paso más de nuestra evolución con los estudiantes podemos requerir estructuras que involucren varias tomas de decisión (rombos en los flujogramas) anidadas como en el ejemplo siguiente donde se emplea un sensor de sonido para encender un led cuando se detecta un nivel de decibelios por encima de un determinado nivel. Podría aplicarse a mediciones en el aula durante las explicaciones teóricas para que los alumnos se controlen a si mismos en sus comentarios a deshora y sus charlas paralelas a las de los docentes.
Los tiempos de espera son vitales en este tipo de programación para controlar el “tempo” de ejecución y prevenir comportamientos encadenados como los descritos anteriormente para los avatares que establecen contacto entre ellos.
Figura 7 Estructura de condiciones para sensor sonido
Figura 8 Circuito para sensor sonido con módulo de arduino
Una vez acostumbrados a los algoritmos simples que resuelven un único problema, podemos escalar y, en el ámbito de los videojuegos, podemos requerir que después de alcanzar una puntuación determinada nuestro juego pase a un nivel superior cambiando escenario de fondo e implementando un entorno diferente en cuanto a los personajes “rivales” y la misión acometida en cada pantalla.
En el siguiente fragmento se muestra como realizar una decisión entre entornos basada en el envío de mensajes. Posteriormente a la recepción de según y qué mensaje estableceremos un entorno u otro.
Figura 9 Fragmento programas elección entorno
Depuración errores
La depuración de errores o debugging (eliminación bichos, “bugs”) es una actividad que, si bien cuenta con herramientas automáticas, en el caso de scratch, desafía la paciencia, la imaginación y la intuición de los alumnos programadores.
En este sentido podemos introducir mensajes que el ordenador debería mostrar por pantalla para verificar que el programa en su ejecución está pasando por las estructuras que nos generen dudas. Además, en la mayoría de lenguajes de programación existen opciones para añadir comentarios a las líneas de código que permitan un mejor seguimiento del mismo. También se pueden poner leds testigo que hagan la misma función cuando estamos trabajando con el S4A..
Por otro lado, trabajar usando la función de subrutinas que scratch ofrece (o existente en otros lenguajes de programación como las funciones en el IDE de Arduino) simplifica la depuración de fallos y la restringe bastante a las estructuras repetitivas que se definen aparte y son llamadas durante la ejecución del programa.
Figura 10 Definición subrutinas
Verificación funcionamiento
Finalmente pediremos a los alumnos que permitan a otr@s compañer@s probar sus creaciones durante una sesión para descubrir aquellos errores de funcionamiento que se nos hayan pasado o verificar la correcta ejecución del programa ante cualquier circunstancia o variación.
Errores como determinados posicionamientos de nuestro avatar en pantalla, repetición de ciclos innecesarios o cuentas erróneas en nuestros marcadores son las taras más habituales en esta fase. Se procederá a la revisión y chequeo del programa para eliminar tales fallos y mejorar en lo posible la calidad de la aplicación.
Bibliografía y referencias
- Alexander Nova (31 mayo, 2017) El Flujograma como herramienta para mejorar procesos. BDO. Recuperado en:
https://www.bdo.com.do/es-do/blogs/articulos/mayo-2017/el-flujograma-como-herramienta-para-mejorar-proces - Miere (4 Junio 2018). Diagrama de Flujo (Flujograma) de Proceso. Bog de la Calidad. Recuperado en:
https://blogdelacalidad.com/diagrama-de-flujo-flujograma-de-proceso/ - Jaume Ramonet (11 Enero 2013). Teoría y practica del modelado de procesos mediante Diagramas de Flujo. Recuperado en:
https://www.jramonet.com/sites/default/files/adjuntos/diagramas_flujo_jrf_v2013.pdf - Wikipedia (12 noviembre 2019) Depuración de programas. Licencia Creative Commons. Recuperado de:
https://es.wikipedia.org/wiki/Depuraci%C3%B3n_de_programas
Figuras
- Figura 1. : Gerd Altmann. (23 enero 2017) Programación – [Fotografía] recuperada de: https://pixabay.com/es/illustrations/aprender-escuela-estudiante-2001838/
- Figura 2. Álvaro Cabrero. (10/marzo/2020) Parking – Montaje propio
- Figura 3. Álvaro Cabrero. (10/marzo/2020) Flujograma puertas – Montaje propio con aplicación Lucidchart.
- Figura 4. Álvaro Cabrero. (10/marzo/2020) Flujograma con horario – Montaje propio con aplicación Lucidchart.
- Figura 5. Álvaro Cabrero. (13/marzo/2020) Flujograma parking – Montaje propio
- Figura 6. Álvaro Cabrero. (13/marzo/2020) Estructura semáforo y cirtuito – Montaje propio con aplicación fritzing
- Figura 7. Álvaro Cabrero. (13/marzo/2020) Estructura condicionales – Montaje propio con aplicación S4A
- Figura 8. Álvaro Cabrero. (13/marzo/2020) Circuito sensor sonido – Montaje propio con aplicación fritzing
- Figura 9. Álvaro Cabrero. (13/marzo/2020) Fragmento programa elección – Montaje propio
- Figura 10. Álvaro Cabrero. (13/marzo/2020) Definición subrutinas – Montaje propio