Este documento introduce el lenguaje de programación Logo. Explica que Logo es un lenguaje interpretado de alto nivel que permite mover una tortuga gráfica mediante comandos. Describe algunas de las primitivas básicas de Logo como 'avanzar', 'girar' y 'borrar pantalla', y cómo crear formas geométricas simples. También presenta conceptos como variables, condicionales y estructuras repetitivas que son fundamentales para la programación en Logo.
2. Introducción. Lenguajes de programación El lenguaje de programación permite dar órdenes al ordenador utilizando un idioma parecido al nuestro. Después una parte del lenguaje de programación, denominado compilador o intérprete, traduce estas órdenes a código máquina, el único lenguaje que entiende el ordenador (0 y 1). Como ocurre con los idiomas, existen muchos lenguajes de programación. Cada no tiene su propio vocabulario (órdenes) y sintaxis (forma de utilizar y combinar las órdenes). Según su función se diferencian dos tipos de lenguajes de programación: El lenguaje ensamblador (de bajo nivel), que es muy complicado, pero aprovecha el máximo los recursos del sistema, ya que da las órdenes prácticamente en código máquina. Lenguajes de alto nivel , que no dependen del tipo de componentes del ordenador y son más sencillos (Visual Basic, pascal, fortran, LOGO, etc).
3. Logo es un lenguaje interpretado (de alto nivel) , lo que significa que las órdenes introducidas por el usuario son interpretadas por el ordenador y ejecutadas inmediatamente en orden. Los lenguajes compilados , por otro lado son convertidos primero a código máquina antes de que cualquier parte del programa pueda empezar a funcionar. El lenguaje Logo fue desarrollado a finales de los 70 y su símbolo es una tortuga que se mueve bajo el control del ordenador. Hay varios programas para trabajar bajo lenguaje Logo (mswlogo, winlogo, logo writer, logo gráfico, etc). Nosotros trabajaremos con Mswlogo que es el más usado y freeware. Nota: es importante que realices todos los ejercicios según avanza el tutorial para poder comprender bien los programas más complicados que tendrás que realizar más adelante (por muy sencillos que te parezcan).
4. Ventana de gráficos .- Utilizando las órdenes adecuadas, podremos mover un pequeño triángulo (denominado tortuga), realizar dibujos y rotulos, así como insertar bitmap realizados, por ejemplo, con el programa Paint. Ventana de trabajo .- Aquí aparecerán las órdenes introducidas en la caja de entrada, los mensajes de error y el resultado de la ejecución de algunas instrucciones. Caja de entrada .- En esta zona podemos escribir instrucciones y ejecutarlas de inmediato pulsando la tecla enter o el botón ejecutar. VENTANA DE TRABAJO DE MSWLOGO
5. PRACTICAS CON MSWLOGO En logo las órdenes se llaman primitivas (algunas tienen abreviatura). Cuando ponemos una primitiva en la ventana de trabajo se ejecuta en la pantalla de Mswlogo. El tamaño de la pantalla se puede modificar pero por defecto es de 1000 x 1000 siendo el punto [0 0] el centro de la pantalla, los puntos por arriba y derecha del [0 0] son positivos ejem [250 500] y por debajo e izquierda negativos [-250 -500]. En la barra de trabajo se pueden escribir varias órdenes separadas por un espacio para ser ejecutadas (las ejecuta en el orden en que se escribe). Vamos a dibujar un cuadrado: Ejercicio1: Bp av 50 gd 90 av 50 gd 90 av 50 gd 90 av 50 gd 90 Medidas de la Pantalla de trabajo Centro bp La tortuga va al centro pero dibujando a no ser que este activado subelapiz Centro Sl re 70 bl av 300 La tortuga se mueve pero sin dibujar. Al moverse no borra. / baja lápiz Subelapiz o sl / bl Ponlapiz av 25 La tortuga en goma pasa a lapiz ponlapiz Av 50 goma re 25 Convierte a la tortuga en una goma y borra por donde pasa. goma Es [hola] Escribe en pantalla trabajo Escribe o es Av 50 / re 40 / bp Avanza /retrocede Av / re Gd 90 / gi 75 Gira derecha / izquierda Gd / gi Bp Borra todo y deja la tortuga en el centro Borra pantalla o bp Rotula [hola empezamos] Escribe en pantalla rotula EJEMPLO QUE HACE PRIMITIVA
6. En mswlogo podemos rellenar una figura de un color cualquiera, pero la orden de rellenar se debe de dar con la tortuga dentro de la figura , decirle con que color queremos que se rellene ( poncolorelleno ) y después rellena pero con el lapiz levantado sl . Por ejemplo el cuadrado anterior si lo queremos poner relleno primero pondremos la tortuga dentro de él y con el lápiz levantado sl. Ejercicio 2º) Gd 35 sl av 20 poncolorrelleno [255 0 0] rellena Por ejemplo el color del número [0 255 0] será el verde y el [0 0 255] el azul Para el resto es una mezcla de los colores que pongamos Ejercicio 3º) dibuja un cuadrado y un triangulo rellenos de un color cualquiera (diferente relleno el cuadrado que el triangulo y de lado 80)
7. Mediante la barra de menú y en configurar podemos cambiar el tamaño del lapiz (ancho, el tipo de letra rotulador (letra que sale en pantalla), letra de la órdenes, y los colores del lápiz, de relleno, de fondo pantalla, aunque no es aconsejable hacerlo desde aquí, ya que se haría de forma manual no mediante una órden para que lo haga solo el ordenador Si queremos poner un color de fondo se usa la primitiva poncolorpapel [0 0 255] pero ojo cuando cambiamos el fondo todo lo que teníamos antes no se ve por que lo sobrescribe . En el caso del lápiz sería poncolorlapiz [0 255 0] Para cambiar el grosor de lápiz pongrosor [1 4] el 1 es fijo y el segundo número le dice el ancho, en este caso 4
8. El tipo de fuente (letra) y su ancho y largo se cambia con la primitiva: pontamañotipo [[Times New Roman] 60 0] primero se pone el tipo de letra, el primer número es el alto de la letra y el segundo el ancho de la letra Muestra hora nos muestra la fecha y hora del sistema muestra colorlapiz el color del lapiz muestra colorpapel el del papel ¡OJO! Cuando programamos en logo debemos de fijarnos en los espacios, corchetes y errores de ortografía ya que cualquier pequeño fallo en algo de esto nos va a dar como salida un error y suele ser muy común equivocarse Ejercicio 4º) Práctica todas las primitivas vistas hasta ahora y al final deja la configuración inicial. Según avanzamos vete realizando una tabla, como la primera que vimos, en tu cuaderno con todas las primitivas que veamos.
9. A veces para realizar algo con logo las órdenes se repiten varias veces las mismas, como en el caso del cuadrado. En estos casos se usa la primitiva repite Nº [lista de instrucciones a repetir Nº de veces] para reducir el número de órdenes. ESTRUCTURAS REPETITIVAS En el caso de un cuadrado: Bp repite 4 [gd90 av 50] Ejercicio 5º) Haz un cuadrado de lado 100, y otro de lado 60 con la orden repite Para un triangulo sería repite 3 [gi 120 av 100] Ocultatortuga o ot : la tortuga no se ve / muestratortuga o mt : vuelve a ser visible.
10. Ejem. Repite 5 [gi 360/5 av 50] Repite Nº lados [gi 360/(nº de lados) av (tamaño del lado)] y para construir un polígono cualquiera sería: Para una circunferencia se pone más de 36 en nº de lados, y el valor de av será el radio Ejemplo: Repite 36 [gi 360/36 av 50]. Recuerda que puedes darles color a las figuras. Ejercicio 6º) Crea un pentágono y una circunferencia. Pon el color del lápiz y el color de relleno de colores diferentes
11. Con mswlogo podemos trabajar con 1024 tortugas diferentes a la vez. Tortuga : nos dice el número de la tortuga con la que estamos trabajando. Activa 1 o ac 1 : activa la tortuga 1 y todo las órdenes que se den a continuación serán para esta tortuga hasta que no activemos otra diferente . Ejem. mt ac 1 av 100 ac 0 gd 90 av 100 Si queremos quitar una tortuga lo haremos con ocultatortuga 1 MAS TORTUGAS Con pos nos da como salida la posición de la tortuga activada ponpos [0 10] ponemos la tortuga en esa posición [x y].
12. Podemos retrasar la ejecución de una orden con espera Nº , el tiempo de retraso será Nº/60 segundos, espera 60 se retrasará 1 segundo la orden Ejemplo: Av 100 espera 120 gd 90 av 50 Ejercicio 7º) dibuja una polígono que espere 3 segundos cuando acabe de dibujar cada lado para que vuelva a dibujar el siguiente lado. Ponle un color de relleno y al cabo de 3 segundos que cambie el color de relleno por otro diferente.
13. Vamos a ver las primitivas para realizar operaciones matemáticas con varios ejemplos (no hay espacio entre los números). Entre una operación y otra pon la orden bp. Realiza las operaciones de los ejemplos con mswlogo : OPERACIONES MATEMATICAS Escribe 2+5 Suma de números rotula 12–5 Resta de números muestra 3*4 Multiplicación de números rotula 6/3 Divide números ¿Qué diferencia hay entre escribe, rotula y muestra? Otras operaciones son: rotula raiz cuadrada 9 redondea 8.3 (los decimales van separados por un punto) rotula entero 5/2 (da como salida el número entero sin decimales) rotula abs -5 (da como salida el valor absoluto).
14. Rotula elemento 2 [a b c] rotula el elemento segundo de la lista entre corchetes Elección de elementos y primitiva AZAR rotula sacaalazar [1 2 3 4] saca un elemento de la lista al azar Nota: Si estos elementos no funcionan es por que hay que sacarlos de la librería de mswlogo mediante archivo cargar y el archivo librería.log Escribe estas instrucciones Una primitiva muy usada es azar con ella el ordenador sacará un número al azar desde 0 hasta el nº que pongamos por ejemplo para que saque un nº entre 0 y 5 debemos poner rotula azar 6 (el 6 no lo sacará) Ejercicio 8º) pon las siguientes instrucciones y razona lo que hace: ot Repite 5 [bp gd 90 espera 60 rotula azar 10 espera 60] bp mt
15. Variables globales Una variable la podemos considerar como un almacén de diferentes valores, donde su valor podemos cambiarlo en cualquier momento o hacer que cambie de valor ella sola de alguna forma . En logo primero deberemos dar el nombre de la variable mediante: haz “nombredelavariable valordelavariable Donde el nombre puede ser una letra, un número o lo mas aconsejable para no perdernos cuando tengamos muchas variable es ponerlas con una palabra que la identifique (o palabras pero juntas o unidas por la barra baja _). Una vez que ya tenemos metida la variable cuando queramos sacarla se hará mediante (rotula, escribe u otra orden). rotula :nombredelavariable ¡OJO! no olvidar los : delante y juntos con el nombre VEAMOS ALGÚN EJEMPLO
16. Ejemplo: haz “x 45 rotula :x ;dará como salida 45 rotula :x*2 ;dará como salida 90 Fijate que ahora ponemos ; para poner notas dentro del programa. Esto es muy útil Cuando tenemos grandes programas y queremos poner anotaciones aclaratorias dentro del propio programa. Todo lo que tengamos puesto después de ; no lo leera como instrucciones, si no que solo le servirá al programador para leerlas. Cuidado: Si no ponemos los : en la variable dará error y si ponemos rotula [x] dará la letra x como salida y no el valor de la variable. También podemos asignar una palabra como valor de la variable: haz “x [hola] rotula :x ;dará como salida la palabra hola Fíjate que en estos casos la palabra que tomará la variable va entre corchetes [ ]
17. VAMOS A UTILIZAR VARIABLES CON LA PRIMITIVA AZAR Realiza estos programas en mswlogo: Haz”x azar 6 Rotula :x Nos escribirá un numero al azar entre 0 y 5 ( el 6 nunca) Haz “numero_azar sacaalazar [1 2 3 4] Rotula :numero_azar Nos mostrará el número que ha elegido el programa al azar entre 1 2 3 y 4. Haz”palabra sacaalazar [hola adios] Rotula :palabra Nos mostrará una de las dos palabras
18. Otra primitiva muy importante en programación es la condicional, para que nos de una salida u otra diferente en función de si se cumple o no una condición. ESTRUCTURAS SELECTIVAS Las condiciones pueden ser si =, > y < Las salidas que dará en función de si se cumple o no la condición, que ira entre corchetes Si 1=1 [rotula [cierto]] Si queremos una salida para cuando se cumpla la condición y otra diferente para cuando no se cumpla la condición será: Ejemplo: Sisino 1=1 [rotula [vale 1]] [rotula [no vale 1]] condición salida Sisino 1>2 [rotula [cierto]] [rotula [falso]] condición Salida si Cumple la condición Salida si NO la cumple
19. VAMOS A UTILIZAR LAS VARIABLES CON LAS CONDICIONALES Y CON LA PRIMITIVA AZAR haz “numeroazar azar 7 sisino :numeroazar<3 [rotula [menor de 3]] [rotula [mayor de 3]] ¿Qué hará este programa? Compruébalo en tu ordenador. Ojo al dar el nombre de la variable al azar el ordenador asigna un nº al azar a la variable, y hasta que no volvamos a dar la orden de haz “numeroazar azar 7 la variable numeroazar no cambiará de valor. Ejercicio 9º) Crea un programa con 2 variable numéricas (del 1 al 10) al azar y que haga la multiplicación de los dos números. El programa nos tendrá que decir si El resultado es mayor o menor de 100 de la siguiente forma: La multiplicación es mayor que 100 o la multiplicación es menor de 100 Pista: Sisino :multiplicación>100 [rotula [la multiplicación es mayor de 100]]……….
20. Alternativas múltiples o con varias condiciones Es muy probable que tengamos la necesidad de incluir en nuestros programas alternativas con muchas opciones posibles. ¿Cómo se puede conseguir? Pues muy fácil. Pondremos una variable que pueda tomar varios valores, y para cada valor una condición diferente. Ejemplo: Haz”x azar 10 Si :x=1 [rotula [uno]] Si :x=2 [rotula [dos]] Si :x=3 [rotula [tres]] ;y así con todas las posibles salidas del valor x Esto es muy útil para programas que tengan una salida diferente en función de lo que elija el usuario del programa. ¿¿¿Se te ocurre algo para hacer un dado y que la tortuga avance en función de lo que saque el dado???? ¿O para hacer que el usuario deba contestar a una pregunta y dependiendo de lo que responda le demos una puntuación u otra? (variable con valor de texto) La mayoría de las veces el valor de la variable lo pone el usuario del programa (no el programador), pero para eso tenemos que hacer que el usuario pueda poner datos mientras se está ejecutando las instrucciones, es decir interactuar con el programa. Veamos como podemos conseguirlo
21. Entrada de datos mientras el procedimiento está en uso Logo es un lenguaje de programación con entorno de windows, es decir puede mostrar mensajes de dialogo e interaccionar con el usuario, para aceptar, por ejemplo, entrada de datos desde el teclado y el programa actúe en consecuencia con los datos introducidos. Preguntabox [entrada de datos] [¿te parece difícil logo?] ¿Cómo se consigue que le programa nos muestra una ventana como la de de arriba? Lógicamente te dirá que no sabe que hacer con los datos introducidos. Si antes de preguntabox ponemos la primitiva rotula rotulará lo que escribamos en la ventana: Rotula preguntabox [entrada de datos] [pon un número]
22. En el caso anterior lo que ponemos dentro de la caja lo considera una letra o una palabra, aunque escribamos un número. Si queremos que lo que escribimos lo considere un número (por ejemplo para que lo multiplique por otro) deberemos escribir la palabra primero delante de preguntabox Rotula primero preguntabox [entrada de datos] [pon un número] Ejercicio 10º) Vamos hacer que el ordenador multiplique dos números que el usuario introduzca ( variables asignadas por el usuario ), y lógicamente nos enseñe el resultado de la multiplicación Solución en la siguiente diapositiva Si queremos asignar el valor de lo que se introduzca en la caja sea una variable: Haz “numero primero preguntabox [ventana numero] [introduce el número]
23. Haz “primernumero primero preguntabox [multiplicación] [introduce el primer número] Haz “segundonumero primero preguntabox [multiplicación] [introduce el segundo número] Haz “respuesta :primernumero*:segundonumero rotula :respuesta Si no hubiéramos puesto la palabra primero delante de preguntabox nos daría error por que no podría multiplicar los dos números por que los consideraría caracteres (letras). RECUERDA: Para palabras y frases en la caja preguntabox Para números primero preguntabox SOLUCIÓN:
24. Haz “tu_nombre preguntabox [nombre] [¿Cuál es tu nombre?] Ot Gd 90 rotula ( frase [mi nombre es] :tunombre [y estudio 4º de la ESO]) La variable puede ir en cualquier posición de la frase, pero no nos olvidemos de cerrar paréntesis y de poner frase. A veces creamos una variable no numérica con lo que el usuario introduce en la caja , pero la variable es una palabra que después deberá pertenecer a una frase. Para que podamos rotular una frase que alguna de sus palabras son variables que debe introducir el usuario (por ejemplo su nombre) deberemos de poner toda la frase entre paréntesis y la primitiva frase (pocas veces se usan paréntesis en logo). Veamos un ejemplo. Hazlo en tu ordenador : Abrimos paréntesis Cerramos paréntesis
25. Las órdenes de estos dos últimos ejemplos podrían ser por si mismas un pequeño programa. Para ello tendríamos que escribir todas las órdenes y que se ejecutaran cuando yo quisiera automáticamente, por ejemplo poniendo un nombre al programa y que se ejecutara cuando pongo el nombre del programa en la caja de la ventana de trabajo. Esto es lo que se conoce con el nombre de Procedimientos. Un procedimiento es un conjunto de órdenes guardadas con un nombre que se realizarán cuando introduzcamos su nombre en logo. Un programa completo puede constar de uno o varios procedimientos (programación estructurada). La técnica buena de programación dice que las tareas grandes ( programas grandes ) se deben de fraccionar en pequeños procedimientos (programas) donde cada uno de ellos realiza una sencilla o pequeña tarea. Estos pequeños programas (procedimientos) deben de guardarse e ir a ellos (llamarlos) cuando se necesiten dentro del programa grande. Cuando en logo ponemos dentro de un programa el nombre de un procedimiento el programa realizará el procedimiento (pequeño programa) y luego continuará con la siguiente orden .
26. Los procedimientos y programas siempre empiezan por la palabra para nombredelporcedimiento INSTRUCCIONES ;y acaban con la palabra fin Para escribir un procedimiento deberemos ir a archivo y editar, a continuación escribimos el nombre del procedimiento (o programa si solo tiene ese procedimiento) y se abre un editor de texto para escribir el procedimiento (o programa). Ejercicio nº 11: Crea un procedimiento ( en este caso programa) para escribir la frase de tu nombre y que se ejecute cuando escribimos la palabra nombre. Al acabar no te olvides de guardar y salir en el editor del programa Si queremos cambiar o revisar el programa iremos a archivo editar y seleccionamos el nombre desprograma de la lista que aparece.
27. Ejercicio 12º) : Crea un programa que nos sirva para dividir dos números y nos muestre el resultado. El programa se deberá ejecutar al escribir la palabra division. A veces el nombre del procedimiento es una variable que debe introducir el usuario. Veamos un ejemplo. Imaginemos que queremos crear un programa que nos realiza un cuadrado de lado 50: Para cuadrado50 Repite 4 [av 50 gd 90] Fin Al escribir cuadrado50 en la ventana de trabajo se dibuja el cuadrado. Pero ahora imagina que quieres que el programa sirva para que dibuje un cuadrado que el tamaño de sus lados sea el que quiera el usuario. Debe de ejecutarse al escribir cuadrado mas el número del tamaño del cuadrado, pero ese número es variable, en función de lo que escriba el usuario. Haremos lo siguiente:
28. Para cuadrado :longitud ;longitud es un número variable que será el que escriba el usuario Repite 4 [av :longitud gd 90] ;ojo espacio entre cuadrado y :longitud, y a la hora de ejecutarlo también. Ejemplo cuadrado 50 Fin Ejercicio 13º): Escribe un programa que dibuje un triangulo cualquiera. ¿Qué hará este programa?: Para poligono :longitud :lados ;para ejecutarlo se escribe poligono y dos números separados por espacio Repite :lados [av :longitud gd 360/:lados] fin
29. ¡ OJO IMPORTANTE ! : los procedimientos al guardar y salir se guardan temporalmente en mswlog, si cerramos el programa y volvemos abrirlo, ya no estarán los procedimientos. Para que todos los procedimientos se guarden y pueden cargarse siempre debemos de almacenarlos (guardarlos) en un archivo dentro de la carpeta de libreria de mswlogo. Una vez que salimos del editor guardando el último procedimiento vamos a archivo en la ventana del mswlogo guardar como, dentro de la carpeta mswlogo buscamos una carpeta que se llame librería y dentro de ella ponemos el nombre al archivo (con extensión .log) y guardamos. En ese archivo estarán todos los procedimientos que teníamos en ese momento. Cuando volvamos abrir mswlogo para cargar los procedimientos iremos archivo cargar y cargaremos el archivo. Cuando vayamos a archivo editar aparecerán los procedimientos guardados en ese archivo. También se pueden escribir programas con otro editor por ejemplo con notepad o word y luego copiarlo y pegarlo. GUARDAR LOS PROCEDIMIENTOS
30. En programas muy largos cuando lo ejecutamos para probarlo puede sernos muy útil el botón trazar de la ventana de trabajo, ya que de esa forma nos va saliendo en la ventana de trabajo las órdenes que se van ejecutando en cada momento para facilitarnos la depuración de errores. Con el botón alto se detiene el proceso y con el botón paso se ejecutan las órdenes instrucción a instrucción. ¡Vamos a empezar a programar! Ejercicio 14º) Crea un programa que multiplique dos números introducidos por el usuario (está hecho antes) pero llámalo dibujo y que el resultado sea esta frase: El resultado de multiplicar primernumero por el segundonumero es resultado (3 variables) Vamos a ampliar este un poco más, que este era muy fácil
31. Ejercicio 15º) Imagina que ahora quieres que el ordenador dibuje un cuadrado cuyos lados sean el resultado de esa multiplicación en ese mismo programa (en dibujo ). Haremos un procedimiento llamado cuadrado :respuesta pero en el programa solo meteremos el nombre del procedimiento para que se ejecute dentro del programa dibujo (procedimiento dentro de un programa). Ojo no podemos dar el nombre a un procedimiento con el nombre de una primitiva . Intenta hacerlo. Ejercicio 16º) Crea un programa que en una ventana aparezcan 3 colores para que el usuario pueda elegir como fondo de pantalla y a continuación el fondo de la pantalla se ponga de ese color. A los 3 segundos el fondo debe de volver a su color inicial (blanco).
32. Analiza lo que hace el siguiente programa y las primitivas leepalabra y alto: Para juego ot haz “x (1+azar 5) repite 5 [ haz “n leepalabra si :x=:n [gd 90 rotula [acertaste] espera 60 bp alto ] gd 90 rotula [fallaste] espera 60 bp ] fin Con leepalabra hacemos que el ordenador saque una ventana para meter un número y lo acepte como el número de la variable n. Con alto hacemos que si acertamos antes de 5 intentos el ordenador no siga con el programa, pero si no acertamos no se ejecuta alto y pasa a la siguiente línea rotulando fallaste. ¡¡¡Hazlo en tu ordenador!!!
33. Fíjate y crea este programa: Para pantalla1 Ponpos [-150 0] Repite 5 [ Poncolorpapel [0 255 0] rotula [ACERTASTE ENHORABUENA] ESPERA 30 Poncolorpapel [0 0 255] rotula [ACERTASTE ENHORABUENA] ESPERA 30 Poncolorpapel [255 0 0] rotula [ACERTASTE ENHORABUENA] ESPERA 30 ] fin Crea otro procedimiento llamado pantalla2 para fallaste Ejercicios 17º) ¿Cómo meterías estos programas para que se activaran cuando acertamos o fallamos en el juego anterior?
34. Ejercicio 18º) Mejora el programa anterior para que al fallar salga la frase ¡Fallaste nombredelusuario inténtalo de nuevo! ó ¡Acertaste nombredelusuario enhorabuena!. Ojo con ponpos al inicio del programa haz que salga la frase centrada y en la parte superior de la ventana principal Intenta mas mejoras con preguntabox , que las letras giren, vayan cambiando de tamaño, etc. Ejercicio 19º) Crea un programa que haga que una figura se mueva por la pantalla de mswlogo.
35. Estructuras recursivas Recursividad es una llamada al propio programa para que vuelva a realizar unas determinadas órdenes en un ciclo sin fin, o que acabe solo al pulsar el botón alto o cuando se cumpla alguna condición que provoque la orden alto. Imagina que quieres realizar un contador hasta 21 y que empiece a contar por un número cualquiera (n) menor que 20 lógicamente. Para contador :n Gd 90 Rotula :n espera 30 bp ;cada medio segundo cambia de número Si :n>20 [alto] Contador :n+1 fin Cuando el programa llega a la orden condicional si, el número es menor de 20 no hace la orden de alto con lo que pasará a la siguiente orden que es activar el programa otra vez pero la n de antes será un número mas (n+1), recuerda que n es un número cualquiera que metamos (en este caso n+1). Estamos llamando de nuevo al programa hasta que se cumpla la condición y se ejecute la orden alto.
36. ¿Cómo harías para que al acabar el contador anterior se pare pero salga la palabra FIN en la pantalla?. Ejercicio 20º) Crea un programa que el usuario mediante una ventana ponga el numero desde el que quiere empezar a contar, otra con el tiempo que pasa entre un número y otro y otra para que decida hasta que numero quiere contar. ¡¡¡VAMOS A APRENDER A QUE EL USUARIA PUEDA INTERACTUAR MÁS CON NUESTROS PROGRAMAS!!!
37. ventanas Creaventana “ventanadelaquedepende “identificador [titulo de la ventana] x y ancho alto [órdenes a ejecutar cuando se crea la ventana, normalmente vacio] Creaventana “main “ventana1 [ventana de prueba] 0 0 100 100 [] Vamos a crear una ventana de windows Las ventanas pueden ser ventanas dependientes de otra ventana. Sino depende de ninguna otra ventana se pone “main. El identificador es el nombre que le damos a la ventana. X e Y son los puntos para especificar donde queremos que empiece a crearse la ventana siendo 0 0 la esquina superior izquierda de la ventana principal de mswlogo Borraventana “ventana1 ;Ojo cuando se borra una ventana se borra todo lo vinculado a ella. Crea y borra la ventana anterior
38. Los botones pueden ir solos o dentro de una ventana. Si el botón no depende de ninguna ventana, se pone, en el nombre de la ventana de la que depende, un nombre cualquiera. BOTONES Creaboton “nombreventanaquepertenece “nombredelboton [palabra que aparecerá en el botón] x y ancho alto [orden que se ejecuta al pulsarlo] En este caso X e Y son los puntos de referencia desde donde empieza a crearse el botón pero partiendo desde la esquina superior izquierda de la ventana a la que pertenece. Si el botón no pertenece a ninguna ventana la referencia será el centro de la pantalla Creaboton “ninguna “boton1 [avancemos 50] 0 0 110 100 [av 50] (sin ventana de referencia) Crea este botón. ¿Qué hace cuando picamos en el? Borraboton “boton1
39. Creaventana “main “ventana1 [ventana de prueba] 50 50 200 200 [] Creaboton “ventana1 “boton1 [dibuja un cuadrado] 0 0 100 50 [av 80 gd 90] Fíjate que 0 0 es la esquina superior izquierda de la ventana a la que pertenece, no el centro de la pantalla. Borraventana “ventana1 (borra también el botón) Botón dependiente de una ventana Practica creando botones y ventanas que realicen alguna cosa Podemos vincular a una ventana una lista para que el usuario pueda seleccionar una de las opciones de la lista. Primero se crea la ventana y luego vinculamos una lista a la ventana con crealistbox. Ventanas con lista para elegir Crealistbox “ventanaalaquepertenece “nombredellistbox X Y ancho alto Ejemplo: Creaventana “main “ventana2 [listado] 0 0 100 100 [] Crealistbox “ventana2 “lista1 25 25 30 30
40. Para añadir cosas a la lista creada se hace con añadecadenalistbox “ nombredelalistabox [palabra o procedimiento a seleccionar en la lista] Vamos añadir dos listas: añadecadenalistbox “lista1 [uno] añadecadenalistbox “lista1 [dos] ¡¡¡PERO NO HAY NADA EN LA LISTA!!! Ahora deberemos de decirle al programa que hacer cuando seleccione una palabra u otra de la lista: si [uno]= leeseleccionlistbox "lista1 [rotula [has elegido la opción uno] Así para cada opción de la lista borralistbox "lista1 borra toda la lista borracadenalistbox "lista1 [uno]
41. Vamos a crear una ventana con una lista con las opciones cuadrado y triangulo, y un boton que cuando pulsemos sobre el se dibuje la opción seleccionada en la lista: Creaventana “main “ventana1 [vamos a dibujar] 0 0 100 100 [] Crealistbox “ventana1 “lista1 25 0 50 50 añadecadenalistbox “lista1 [CUADRADO] añadecadenalistbox “lista1 [TRIANGULO] Creaboton “ventana1 “boton1 [dibuja] 25 50 50 25 [ dibujos ] dibujos será un programa que se ejecutará al pulsar el botón y que tendrá que dibujar en función de lo elegido en la lista. Será este: Bp si [CUADRADO]=leeseleccionlistbox “lista1 [repite 4 [av 100 gd 90]] Si [TRIANGULO]=leeseleccionlistbox “lista1 [repite 3 [av 100 gd 120]] ¡¡¡¡¡¡PERO NO HAY OTRA FORMA MÁS FACIL!!!!!
42. ¡¡¡¡PUES SI!!! mediante seleccionbox seleccionbox [escoja color] [rojo verde azul] si elegimos la primera opción la salida es 1, si es la segunda 2 y si es la tercera 3 Si pulsamos cancelar la salida será 0 Después podemos programar en función de la salida si es 0, 1, 2 o 3. ¿Qué haría este programa? haz "x seleccionbox [escoja color] [rojo verde] si :x=1 [poncolorpapel [255 0 0]] si :x=2 [poncolorpapel [0 255 0]] Otros elementos Mensaje [titulo ventana] [mensaje] Sale una ventana con los botones aceptar o cancelar sinobox [Pregunta] [¿Le gusta logo?] si pulsamos si la salida es verdadero, si pulsamos no es falso y si cancelamos se para. Preguntabox [pregunta] [¿Le gusta logo?] la salida es lo que escribamos en la caja
43. Para poder utilizar el teclado como elemento de control tenemos que usar dos instrucciones ponfoco y ponteclado: CONTROL DESDE EL TECLADO ponfoco [nombre de la pantalla que queremos tener activa] Ejemplo ponfoco [Pantalla de MSWLogo] Activa los eventos del teclado, es decir, cada vez que pulsemos una tecla Logo detendrá lo que esté haciendo en ese momento y ejecutará las instrucciones y/o procedimientos escritos en el corchete, posteriormente continuará con el trabajo que había parado. Ejemplo: ponteclado [gd 20] cada vez que pulsemos una tecla la tortuga gira 20º a la derecha. OJO situarnos en la ventana de MSWLOGO para que funcione, después de poner la orden. ponteclado [instrucciones cuando pulsamos la tecla] Pasa el control a la pantalla especificada: Pantalla de MSWLogo o Trabajo. Quitateclado ; devuelve al control a la ventana trabajo Ventana de gráficos
44. ¿Y si quiero especificar la tecla que da la orden? Para eso debemos tener en cuenta que cada tecla tiene un valor en código ASCIIL. Por ejemplo la a vale A vale 65 y la z 122. Mediante la primitiva lc Podemos saber el codigo ASCIIL de una tecla: lc Devuelve el valor ASCII (número entre 1 y 127) de la ultima tecla pulsada. Pulsa sobre la ventana de gráficos. Pulsa una tecla, y depués en la ventana de trabajo pulsa lc. Te dirá el código ASCIIL que le corresponde a la letra pulsada. Car Devuelve el carácter (letra, número, signo,…) correspondiente al código ASCII indicado. Pon car 122 Te devuelve la letra que le corresponde al ASCIIl 122 (la z). Estas dos primitivas se sulen usar de la siguiente forma: car lc Así, obtenemos el carácter correspondiente al código de la última tecla pulsada. Es decir convierte el código de la ultima tecla pulsada en el carácter. ¿Y para qué? Veamos….. caracteres Será un numero
45. Mira este ejemplo para control ponteclado [ haz "tecla car lc ;asigna a tecla el valor de la tecla pulsada si :tecla=4 [gi 20] ;si la tecla es la 4 gi 20 si :tecla=6 [gd 20] ;si la tecla es la 6 gd 20 si :tecla=9 [quitateclado parada] ] Fin ¡¡¡OJO puede que solo funcione con números.!!! Para el programa ¿Y si hacemos un juego que se mueva la tortuga y podamos controlar la dirección de la misma?. Para el control ya tenemos el procedimiento. Será control. Ahora hagamos el juego:
46. para juego bp sl ponfoco [Pantalla de MSWLogo] ponteclado [control] ; pasa el mando al teclado de la forma que especificamos en el procedimiento control siempre [av 1 espera 6] ; avanza despacio, pero con control desde el teclado fin Puedes probar a cambiar la velocidad con lo orden espera ¡La primitiva siempre hace que lo que hay dentro de ella se ejecute siempre! ¿Y si quiero que la tortuga se mueva por un circuito? Debemos cargar una imagen en logo Dibujos en logo Logo solo permite archivos .bmp o .gif. En la barra de menú bitmap cargar y se carga el archivo. Crea un dibujo de una carretera con Paint y cárgalo en mswlogo. Saca dos tortugas y muévelas por el camino compitiendo con tu compañero (cada uno con una). Es complicado colocar bien el dibujo en pantalla cargadib “circuito.bmp OJO El archivo debe estar en la misma carpeta que el procedimiento que lo utilice.
47. La tortuga se sitúa inicialmente en el centro de la pantalla, posición que no coincidirá con la línea de salida del circuito que hayamos cargado. ponpos [coordenadaX coordenadaY] Ubica la tortuga en el punto cuyas coordenadas que quieras. ¡OJO! Si el lápiz está bajado dibuja una línea recta en su desplazamiento. Ejemplos ponpos [0 50] o ponpos [0 0] ¿Lo complicamos más? El choque de la tortuga con los bordes negros del circuito lo detectaremos preguntando, cada vez que la tortuga avanza, por el color del punto de la pantalla (píxel) en el que se sitúa. si píxel = [255 0 0] [re 10 gi 50] La línea de programa anterior pregunta si el color del punto en el que se encuentra la tortuga es rojo y en caso afirmativo ejecuta las instrucciones del último corchete: retrocede 10 pasos y gira a la izquierda 50 grados o podemos hacer que vuelva al inicio. ¿¿¿¿¿Y que emita un sonido??????
48. Sonidos podemos cargar pequeños sonidos con suenatono frecuencia duración. Ejem suenatono 30 400 También se pueden reproducir ficheros .wav pero hay que especificar la ruta del archivo suenawave "c:windowstada.wav 1 El 1 es un número fijo que siempre se pone. Intenta que suene un archivo .wav que bajes de internet (lo mejor es que esté en c: para simplificar la ruta). poncontador numero tiempo [instrucciones o procedimiento a ejecutar] Ejecuta las instrucciones o procedimientos encerrados entre los corchetes cada vez que transcurre el tiempo indicado (en milésimas de segundo). MSWLogo puede activar a la vez hasta 31 contadores, por ello, hay que indicar el número del contador activado en la instrucción. Ejemplo: poncontador 1 1000 [haz “tiempo :tiempo+1] El ejemplo anterior activa el contador 1 para que, cada segundo, se incremente la variable tiempo ,que se habrá definido con anterioridad. CONTROL DEL TIEMPO
49. Programación en árbol (Inteligencia artificial) Se trata de ir preguntando y en función de la respuesta seguir por un camino u otro hasta llegar al final. ¿Cómo funciona un programa capaz de jugar a un juego de inteligencia, tal como el ajedrez o las damas? La palabra clave es programación en árbol.
50. La figura 1 muestra una hipotética situación. Las letras A, B y C representan sendas fichas. Para cada una tenemos uno o varios movimientos, que a su vez provocarán movimientos en las piezas de nuestro contrincante. Los números representan la puntuación de cada jugada. Para calcular la jugada óptima se toman cada una de las jugadas propias y a su puntuación se le resta la de la jugada del oponente. Por ejemplo, una jugada de la pieza A nos reporta 9 puntos, pero a continuación la del contrincante le puede suponer 11 puntos, de forma que quedan -2 puntos globales. Por otra parte, una jugada de la figura C nos supone sólo 2 puntos, pero al restarle los -2 de la jugada más óptima del contrincante nos da una ganancia neta de 4 puntos. De esta manera, se puede encontrar la mejor jugada en aquella que proporciona una puntuación neta mayor. Con sólo dos niveles de profundización se tiene un nivel de juego comparable al de un niño de seis años. Ampliando el número de niveles se puede ir mejorando el nivel de juego, a costa de un mayor tiempo de cómputo. Por ello, se han desarrollado técnicas para "podar" el árbol, y eliminar aquellas ramas que a priori se puede saber que no van a dar puntuaciones altas.
51. EJERCICIOS CON PUNTUACIÓN Ejercicio 1: Realiza un programa que me diga los billetes de cambio que debería de dar cuando me pagan con billetes de 100€, de 50€ o de 10€ si el producto cuesta 20€. (En árbol) 1 PUNTO Ejercicio 3: crea un juego de tecnología en que el usuario pueda elegir una pregunta en función del curso que estudie (solo 3º y 4º) y el nivel de la pregunta fácil media o difícil y que además le de una puntuación por acertar la pregunta ( 0 puntos si falla 1 punto fácil 2 media y 3 difícil). ¿Podrías hacer que le hiciera 2 preguntas y se sumaran los puntos? 1 PUNTO Ejercicio 2: crear un semáforo que se active el verde a los 10 segundos de pulsar el usuario para que pueda pasar. 1 PUNTO PROGRAMAS OBLIGATORIOS
52. Ejercicio 4: crea un programa en el que se puedan seleccionar varias figuras en color o imágenes y que el ordenador las enseñe sonando una música para cada figura o imagen. . ¿Y qué se muevan las figuras? Ejercicio 5: crea un programa en el que el usuario vaya eligiendo contestaciones a preguntas y en función de lo que responda le digas la personalidad del usuario (busca información en internet). Ejercicio 6: Haz un programa de preguntas, pero en el que las preguntas sean de 3 áreas diferentes y que el usuario al apretar un botón (sería como tirar el dado) el ordenador elija al azar el tema de la pregunta que le va hacer. Intenta mejorarlo sumando puntos. Ejercicio 7: queremos que el ordenador nos de el precio de los productos vendidos a un cliente en una tienda en la que solo se venden barras de pan (pequeñas, medianas y grandes) y botellas de agua (de ½ y de 1 litro) Por ejemplo si compran 3 barras de pan pequeñas. Realiza el programa en forma de árbol. ¿Serías capaz de que sacara el precio cuando se compra pan y agua a la vez?. (En árbol) ELIGE UNO DE ESTOS 4 PROGRAMAS PARA REALIZARLO 2 PUNTOS
53. PRÁCTICA FINAL DEBEREIS CREAR UN PROGRAMA IDEADO, DISEÑADO Y REALIZADO POR VOSOTROS EN GRUPOS DE 2 PERSONAS 5 PUNTOS ¿QUIERES SABER MÁS SOBRE TECNOLOGÍA? VISITA NUESTRA WEB : WWW.AREATECNOLOGIA.COM