Introducción a la Programación • Comportamientos Actividad4 Comportamientos complejos Ejemplo: Seguir una ruta definida por un laberinto Estos son comportamientos de alto nivel, como atravesar un laberinto. Aunque pueden parecer complicados, una propiedad de los comportamientos complejos es que están compuestos de pequeños comportamientos. Siempre un comportamiento complejo lo puedes dividir en comportamientos más pequeños hasta llegar a comportamientos básicos task main() { motor[leftMotor] = 63; motor[rightMotor] = 63; wait1Msec(2000); motor[leftMotor] = -63; motor[rightMotor] = 63; wait1Msec(400); motor[leftMotor] = 63; motor[rightMotor] = 63; wait1Msec(2000); } Comportamiento básico: Este código baja la potencia del motor izquierdo a la mitad. Comportamientos simples: Este código hace que el robot avance durante 2 segundos a la mitad de potencia. Comportamientos complejos: Este código hace que el robot gire sobre su propio eje. Comportamientos Composición y Análisis Comportamientos complejos Quizás la idea más importante en los comportamientos, es que pueden ser descompuestos en otros comportamientos. Los comportamientos complejos, como atravesar un laberinto, pueden ser desglosados en comportamientos más pequeños, comportamientos simples. Se pueden descomponer hasta llegar a comportamientos tan simples o básicos que puedes reconocer y programar. Mirando el camino de los comportamientos descompuestos, puedes ver cómo deben ser programados los comportamientos pequeños para ser combinados nuevamente y obtener un comportamiento más grande. De este modo, analizando un comportamiento complejo trazamos un mapa de piezas que tienen que ser programadas, y luego te permite programarlas y juntarlas para desarrollar el producto final. 34 Introducción a la Programación • Comportamientos Actividad4 Comportamientos Grandes Comportamientos Pequeños Follow the path to reach the goal Go forward for 2 seconds Go forward 2 seconds Turn left 90º Go forward 2 seconds Turn right 90º Go forward 2 seconds Turn right 90º Go forward 2 seconds Turn on left motor Turn on right motor Wait 2 seconds Turn off left motor Turn off right motor Paso a paso 1. Empieza con un comportamiento grande que solucione el problema. 2. Descómponlo en pequeñas partes. Enseguida vuelve a romper las pequeñas piezas de nuevo. 3. Repítelo hasta tener comportamientos suficientemente pequeños que ROBOTC comprenda. Comportamientos RobotC 1. Enciende motor izquierdo 2. Enciende motor derecho 3. Espera 2 segundos 4. Apaga motor izquierdo 5. Apaga motor derecho Turn left 90º 6. Invertir motor izquierdo 7. Encender motor derecho 8. Esperar 0.4 segundo 9. Apagar motor izquierdo 10. Apagar motor derecho Reverse left motor Turn on right motor Wait 0.4 seconds Turn off left motor Turn off right motor Go forward for 2 seconds 11. Encender motor izq. 12. Encender motor der. 13. Esperar 2 segundos Turn on left motor Turn on right motor Wait 2 seconds A veces resulta difícil decir cuándo un comportamiento es “simple” o “complejo”. Algunos programas son tan complejos que necesitan múltiples capas de comportamientos simples antes de alcanzar el nivel básico. “Básico”, “Simple” y “Complejo” son categorías de comportamientos para ayudarte a pensar en la estructura de los programas. Son puntos de referencia en el mundo de los comportamientos. Usa estas distinciones a tu favor, pero no te preocupes si de pronto tu comportamiento “complejo” se hace uno “simple” en tu próximo programa... sólo selecciona la referencia más útil para lo que necesites. 35 Introducción a la Programación • Comportamientos Actividad4 Comportamientos con lenguaje natural Programación basada en comportamientos con Lenguaje Natural ROBOTC El Lenguaje Natural ROBOTC está diseñado para evitar las barreras de entrada en la sintáxis de programación al combinar múltiples comportamientos básicos en comandos independientes. En otras palabras, los programadores pueden escribir sus programas al nivel “comportamiento simple”, sin preocuparse sobre cada comportamiento básico. Los nombres de estos nuevos comandos también son diseñados para ser más intuitivos y fáciles de recordar. El código mostrado debajo, hace al robot comportarse exactamente igual que en el ejemplo anterior (hacer un giro sobre su propio eje hacia la derecha), pero tiene muchas menos líneas y se puede entender fácilmente. task main() { robotType(recbot); forward(63); wait(2.0); pointTurn(right, 63); wait(0.4); forward(63); wait(2.0); } Más comandos adicionales están disponibles en Lenguaje Natural que los que aparecen en este código de muestra. Comportamientos comunes como un seguidor de línea, avance en lìnea recta, espera de valores de sensor especiales, control remoto y otros están disponibles. Para más información, consultar el documento de Lenguaje Natural ROBOTC o la ayuda ROBOTC incorporada. En ROBOTC, el lenguaje natural se puede habilitar al seleccionar el menú Robot > Tipo de Plataforma. 36 Introducción a la Programación • Diagramas de Flujo y Pseudocódigo Actividad 4 Pseudocódigo Pseudocódigo es una notación corta conformada por palabras para la programación que usa una combinación de estructuras de programación informales y descripciones verbales del código. El énfasis está en expresar el comportamiento de cada parte del código más que ser estrictos en la sintáxis (sin embargo, necesita ser razonable). En general, el pseudocódigo se usa para dar una idea general de un programa antes de convertirlo a la sintáxis correcta. Esto ayuda en la planeación inicial de un programa, creando el marco lógico y la secuencia del código. Un beneficio adicional es que como el pseudocódigo no necesita una sintáxis específica, puede ser traducido a distintos lenguajes de programación y es por lo tanto universal. Capta la lógica y el flujo de una solución sin la mayor parte de estrictas reglas de sintáxis. Debajo hay un pseudocódigo escrito para un programa que hace que un robot se mueva mientras un sensor de tacto no sea presionado, si su radar detecta un objeto a una distancia menor de 20 pulgadas, el robot se detiene y gira a la derecha. Sintáxis intacta task main() { while ( touch sensor is not pressed ) { Robot runs forward if (sonar detects object < 20in away) { Robot stops Robot turns right } } } El uso de la función repetitiva “while” encaja con el pseudocódigo porque la manera en que se lee un ciclo “while loop” es similar a la manera en que es utilizado en programación. Descripciones No hay ningún comando de motor en esta sección del código, pero el pseudocódigo sugiere qué tipos de comandos son utilizados y la tarea que tienen que lograr. Este ejemplo de pseudocódigo incluye elementos de ambos lenguajes de programación y del idioma inglés. Las llaves son usadas como ayuda visual para indicar los lugares donde el código tiene que ser colocado cuando sea escrito en la sintáxis completa y correcta. 37 Introducción a la Programación • Diagramas de Flujo y Pseudocódigo Actividad4 Diagramas de Flujo Los diagramas de flujo son una representación visual del flujo o secuencia de un programa. Un diagrama de flujo combina el uso de bloques y flechas para representar las acciones y secuencias. Los bloques representan acciones. El orden en la que las acciones ocurren se muestra usando flechas que van de sentencia en sentencia. Algunas ocasiones un bloque tendrá múltiples flechas entrando y saliendo, que representan un paso donde debe tomarse una decisión sobre el camino a seguir. Inicio / Final Los símbolos que representan Inicio y Final son rectángulos redondeados, conteniendo el palabra “Inicio” o “Final” generalmente, pero pueden cambiar a “Apagar el Robot” o “Parar todos los Motores”. Acción Las Acciones son representadas como rectángulos y actúan como comandos básicos. Ejemplos: “wait1Msec(1000)”; “incrementar el contador de línea en 1”; ó “motores funcionando a máxima velocidad hacia el frente”. Acción Los bloques de Decisión se representan como diamantes. Estos suelen contener preguntas de Si o No. A los bloques decisivos le salen dos o más flechas, representando los caminos distintos a seguir, dependiendo de la decisión. Las flechas deben siempre ser etiquetadas correctamente. A la derecha está un diagrama de flujo de un programa que obliga al robot a avanzar de frente mientras su sensor de tacto no sea presionado. Cuando éste sea presionado el motor para y el programa termina. Para leer el diagrama: de flujo: * Comenzar por el bloque “Inicio”, y seguir su flecha al bloque “Decisión”. * El bloque decisión verifica el estado del sensor de tacto con los dos posibles resultados: el sensor de tacto está presionado o no. * Si el sensor de tacto no está presionado, el programa sigue la flecha “No” al bloque de acción a la derecha, que dice a ambos motores que avancen. La flecha regresa al bloque Decisión. Esto forma una Repetición. * La repetición puede realizarse muchas veces, mientras el Sensor de Tacto siga sin estar presionado. * Si el sensor de tacto está presionado, el programa sigue la flecha “Sí” y para los motores, y el programa termina. 38 Inicio ¿El Sensor de Tacto está presionado? Parar motores Final Activar ambos motores Introducción a la Programación • Pensando como Programador Actividad4 Pensado como Programador Programador y Robot En esta lección aprenderás sobre los papeles del programador y el robot, y cómo deben los dos trabajar en conjunto para lograr sus objetivos. Los robots están hechos para llevar a cabo tareas útiles. Cada uno es diseñado para solucionar un problema específico, de una manera específica. Problema Tractor Robot: Conducirse sin peligro a través de un campo de obstáculos. Solución: Se mueve hacia su destino, haciendo pequeños desvíos si cualquier obstáculos es detectado. Problema Laberinto Robot: Atravesar el laberinto. Solución: Se mueve a lo largo de una ruta predeterminada en segmentos de tiempo. 39 Introducción a la Programación • Pensando como Programador Actividad4 Demos un vistazo al Laberinto robot. ¿Cómo logra encontrar la salida? ¿Cómo sabe la manera de hacerlo? Problema ????? Objetivo Alcanzado Crear un robot exitoso requiere del esfuerzo del equipo humano y las máquinas. 2 17.75” 17.75” El Papel del Robot El robot sigue las instrucciones que se le dan, llevando a cabo el plan. 58.5” 17.75” 26” 1 17” El Papel del programador El programador humano identifica la tarea y planea una solución, luego le indica al robot lo que necesita hacer para llegar al objetivo. 40 Introducción a la Programación • Pensando como Programador Actividad4 El programador humano y el robot juntos logran la tarea al dividir las responsabilidades. El programador humano debe formular el plan y comunicárselo al robot. El robot debe seguir al plan. Problema HUMANO Crear un plan ROBOT Seguir un plan Objetivo Alcanzado Porque los humanos y los robots no hablan el mismo lenguaje, un lenguaje especial debe ser usado para traducir las instrucciones necesarias del humano al robot. Estos se llaman lenguajes de programación. Las instrucciones escritas en ellos se llaman programas. ROBOTC es sólo uno de muchos lenguajes de programación que los humanos usan para hablar con las máquinas. HUMANO Problema Crear un plan ROBOT Seguir un plan Objetivo Alcanzado Hacer un programa Los humanos y los robots se comunican usando lenguajes de programación como ROBOTC. Un humano que escribe un programa se llama programador. El trabajo del programador es identificar el problema que el robot debe solucionar, crear un plan para solucionarlo y convertir ese plan en un programa que el robot pueda comprender. El robot entonces correrá el programa y seguirá sus instrucciones para llevar a cabo la tarea. Un robot sólo puede seguir las instrucciones de un programa. ¡No puede pensar por sí solo! Así como no puede ser más fuerte que la estructura sobre la que se construyó, el robot no puede ser más inteligente que el programa que el humano le dió. Tú, como programador, serás responsable de planear e indicarle al robot exactamente qué tiene que hacer para lograr su tarea. 41 Introducción a la Programación • Pensando como Programador Actividad4 Pensado como Programador Planeación y Comportamientos En esta lección, aprenderás cómo pensar, en términos de “comportamiento”, puede ayudarte a ver la lógica detrás de las acciones de tu robot y dividir un gran plan en partes prácticas. 2 2 1 1 Comportamiento Básico o Simple Comportamiento Complejo Algunos comportamientos son pequeños, “avanzar durante 3 segundos”. Los comportamientos grandes están formados por estos más pequeños. Algunos comportamientos son grandes, como “solucionar un laberinto”. Cuando empiezas a programar, debes empezar a pensar en las acciones del robot como comportamientos. Recuerda que como programador, tus principales responsabilidades son: • Primero, tener un plan para que el robot logre su objetivo. • Segundo, convertir ese plan en un programa que el robot pueda seguir. El plan será sólo la secuencia de comportamientos que el robot tiene que seguir. El programa serán esos comportamientos traducidos al lenguaje de programación. 42 Introducción a la Programación • Pensando como Programador Actividad4 2 1. Examina el problema Para encontrar una solución, empieza examinando el problema. Aquí, el problema es ir del punto de partida (1) al objetivo (2). 1 2. Solución General 2 Trata de ver lo que el robot tiene que hacer, en un nivel alto, para lograr el objetivo. Sigue la ruta para alcanzar el objetivo. Hacer que el robot siga la ruta indicada a la izquierda, por ejemplo, puede solucionar el problema. Aacabas de identificar el primer comportamiento que necesitas. 1 Escríbelo. 3. Separa la solución en comportamientos pequeños Sigue la ruta para alcanzar el objetivo. 2 ndos 3 segu 0º Avanza ierda 9 u q iz a Vuelt ndos 5 segu Avanza recha 90º de Vuelta ndos 2 segu a z n Ava a 90º derech dos Vuelta n 2 segu Avanza 1 4. Vuelve a separar en pequeñas piezas Avanza 3 segundos 2 1 Ahora, empieza a dividir ese comportamiento en partes más pequeñas. Seguir este camino implica avanzar, luego girar, enseguida avanzar otra distancia, luego girar al otro lado, y así sucesivamente. Cada una de estas pequeñas acciones son también comportamientos. Escíbelos y asegúrate mantenerlos en el orden correcto. Enc i Enc ende mo ien t d Esp era e mot or izq. Apa 3 se or d Apa ga mo gundo er. ga m tor s oto izq. r de r. 43 Si vuelves a separar esos comportamientos en piezas aún más pequeñas, podrás obtener cada vez comportamientos más pequeños con más detalle. Eventualmente, obtendrás comandos que podrás escribir directamente en el lenguaje de programación. Por ejemplo, ROBOTC tiene un comando para encender un sólo motor. Cuando llegues a este comportamiento, podrás dejar de separarlo porque estará listo para ser traducido. Introducción a la Programación • Pensando como Programador Actividad4 Comportamientos Grandes Comportamientos Pequeños Comportamientos RobotC Sigue la ruta para alcanzar el objetivo Avanza 3 segundos Avanza 3 segundos Gira izq. 90º Avanza 5 segundos Gira der. 90º Avanza 2 segundos Gira der. 90º Avanza 2 segundos 1. Encender motor izq. 2. Encender motor der. 3. Esperar 3 segundos 4. Apagar motor izq. 5. Apagar motor der. Enciende motor izq. Enciende motor der. Espera 3 segundos Apaga motor izq. Apaga motor der. Paso a paso 1. Empieza con un comportamiento grande que resuelva el problema 2. Sepáralo en pequeñas piezas. Luego vuélvelo a separar en más pequeñas 3. Repite lo mismo hasta obtener comportamientos lo suficientemente pequeños para que ROBOTC los entienda. Gira izq. 90º Invierte motor izq. Enciende motor der. Espera 0.8 segundos Apaga motor izq. Apaga motor der. 6. Invertir motor izq. 7. Encender motor der. 8. Esperar 0.8 segundos 9. Apagar motor izq. 10. Apagar motor der. Avanza 5 segundos Enciende motor izq. Enciende motor der. Espera 5 segundos 44 11. Encender motor izq. 12. Encender motor der. 13. Esperar 5 segundos Introducción a la Programación • Pensando como Programador Actividad4 Cuando todas las piezas hayan alcanzado un nivel de detalle con las que ROBOTC pueda trabajar – como las del listado de la derecha – da un vistazo a la lista que hiciste. Estos comportamientos, en el orden que especificaste, son el plan que el robot debe seguir para llegar al objetivo. Como estos pasos están escritos en inglés, deben de tener un mínimo de dificultad para el programador para entenderlo. Al obtener experiencia el programador, la organización de comportamientos comenzará a incluir importantes técnicas del propio lenguaje de programación, como sentencias si entonces y repeticiones. Este lenguaje híbrido, se llama pseudocódigo. Es una herramienta importante para permitir la comprensión de programas largos. 1. Encender motor izquierdo 2. Encender motor derecho 3. Esperar 3 segundos 4. Apagar motor izquierdo 5. Apagar motor derecho Pseudocódigo Simple Tu lista de comportamientos en un orden específico son una forma simple de pseudocódigo. if (the light sensor sees light) { turn on left motor hold right motor still } Pseudocódigo Compuesto Al aumentar tus habilidades en programación tu pseudocódigo incluirá lógica compleja, que servirá para el mismo propósito: ayudar a encontrar y expresar los comportamientos necesarios para el robot en simple inglés. Empieza la solución con un comportamiento largo y divídelo en pequeños sub-comportamientos. Esto te lleva de manera lógica a definir lo que necesita el robot hacer para completar su tarea. Registrar los comportamientos del robot en inglés es el primer paso para escribir pseudocódigo. Te permite revisar fácilmente estos comportamientos y organizarlos mientras los traduces al código de programación. El único paso que falta es la traducción de tus comportamientos del pseudocódigo a lenguaje de programación ROBOTC. 45