logo actividades basicas

69
Indice: MSWLogo Si quieres, puedes descargar el manual en formato pdf para imprimirlo MSWLogo Logo es un lenguaje de programación, desarrollado a finales de los años 70 por un equipo de matemáticos, dirigidos por Seymour Papert en la Universidad de California (Berkeley), con el fin de entrenar el pensamiento lógico. Todas las versiones de Logo desarrolladas para Unix, DOS, Macintosh y Windows, son gratuitas y pueden ser copiadas y distribuidas, sin ningún tipo de restricción, con fines educativos.MSWLogo es la versión de Logo para Windows. Originalmente, el lenguaje Logo estaba destinado a controlar el movimiento de un vehículo robotizado, con aspecto de tortuga, controlado desde un ordenador. En la actualidad, el icono de la tortuga se ha sustituido por un triángulo que se mueve en la pantalla del ordenador. Cada vez que el programador introduce una orden como, por ejemplo, AVANZA 200, el icono de la tortuga se mueve obedeciendo la orden y dibujando, si el lápiz de la tortuga está bajado, una linea en la pantalla. Ir al índice: Primitivas MSWLogo es un lenguaje interpretado, al igual que VisualBasic o Java. Cuando se escribe código de programa en un lenguaje interpretado, cada una de las órdenes escritas es interpretada y ejecutada al momento, lo que permite ver inmediatamente si la instrucción escrita produce el efecto deseado. Por el contrario, los lenguajes que deben ser compilados (como es el caso de C++, Fortran, Pascal, etc.), deben ser convertidos a lenguaje

Upload: paul-hershcules-hersh

Post on 18-Aug-2015

220 views

Category:

Documents


3 download

DESCRIPTION

logo

TRANSCRIPT

Indice:MSWLogoSi quieres, puedes descargar el manual en formato pdf para imprimirloMSWLogoLogo es un lenguaje de programacin, desarrollado a fnales de los aos 70 por un equipo de matemticos, dirigidos por Seymour Papert en la Universidad de California (Berkeley), con el fn de entrenar el pensamiento lgico.Todas las versiones de Logo desarrolladas para Unix, DOS, Macintosh y Windows, son gratuitas y pueden ser copiadas y distribuidas, sin ningn tipo de restriccin, con fnes educativos.MSWLogo es la versin de Logo para Windows.Originalmente, el lenguaje Logo estaba destinado a controlar el movimiento de un vehculo robotizado, con aspecto de tortuga, controlado desde un ordenador. En la actualidad, el icono de la tortuga se ha sustituido por un tringulo que se mueve en la pantalla del ordenador.Cada vez que el programador introduce una orden como, por ejemplo, AVANZA 200, el icono de la tortuga se mueve obedeciendo la orden y dibujando, si el lpiz de la tortuga est bajado, una linea en la pantalla.Ir al ndice: PrimitivasMSWLogo es un lenguaje interpretado, al igual que VisualBasic o Java. Cuando se escribe cdigo de programa en un lenguaje interpretado, cada una de las rdenes escritas es interpretada y ejecutada al momento, lo que permite ver inmediatamente si la instruccin escrita produce el efecto deseado.Por el contrario, los lenguajes que deben ser compilados (como es el caso de C++, Fortran, Pascal, etc.), deben ser convertidos a lenguaje mquina, es decir, convertidos a unos y ceros, para que se puedan cargar en memoria y ser ejecutados.Las rdenes o instrucciones bsicas de MSWLogo se llaman primitivas. Las primitivas deben escribirse en el cuadro inferior de la ventana de trabajo. Al pulsar Enter o hacer clic en el botn Ejecutar, la primitiva escrita se ejecuta. Si la primitiva est mal escrita o si le faltan datos, el intrprete contesta no s cmo... Cada una de las rdenes ueda anotada en la ventana de trabajo.Un programa tpico, para dibujar un tringulo equiltero, en lenguaje Logo tiene el siguiente aspecto:avanza 100giraderecha 120avanza 100giraderecha 120avanza 100giraderecha 120Las palabras avanza y giraderecha son primitivas, que indican a la tortuga que debe desplazarse hacia adelante o girar hacia la derecha. Los nmeros que completan las instrucciones son losargumentos, que le indican cunto debe avanzaro qu ngulo, en grados, debe girar.Para salir de MSWLogo basta con introducir la primitiva adios en la ventana de trabajo o seleccionar Archivo / Salir en el men principal.Ir al ndice: Veamos a continuacin una pequea muestra de las primitivas ms sencillas de MSWLogo y de sus abreviaturas:PRIMITIVA ACCI! A"REVIA#$A!A"#A $%& La tortu'a avan(a el n)mero indicado de puntos *$%&+. A! $%&,-.,/C-0- 1& ,etrocede el n)mero de puntos especificado *1&+. ,- 1&23,A0-,-C4A $% 2ira a la derecha el n'ulo especificado en 'rados *$%5+. 20 $%23,A3#673-,0A 8& 2ira a la i(uierda el n'ulo indicado *8&5+. 23 8&S79-LA:3# Levanta el lpi( ; no pinta al moverse por la pantalla. SL9A *punto ; coma+. .odo lo ue se escriba a continuacin del punto ; coma no se ejecuta en el pro'rama.2racias a los comentarios es ms fcil recordar las ideas ue tuvimos al pro'ramar, ; otro pro'ramadorpuede reparar o mejorar el cdi'o de nuestro pro'rama.Ejercicio 23: por mejoradoPor ejemplo, el procedimiento por se entendera mejor si el cdigo ejecutable estuviese complementado con comentarios como estos:para porbphaz numero1 15;la primera variable toma el valor 15haz numero2 68;la segunda variable toma el valor 68haz resultado :numero1 * :numero2 ;calculamos el productobp gd 90 ;la tortuga en el centro y horizontalrotula [15 x 68 = ];rotula los factores de la operacinav 90;se desplaza a la derecha del signo =rotula :resultado;rotula el resultadofnIr al ndice: Sangrado del cdigoCuando una lEnea contiene muchas instrucciones juntas resulta difEcil comprender los efectos ue producir dicho cdi'o. Slo se deben unir las instrucciones ue forman una unidad funcional. Adems, para mejorar la lectura resulta mu; )til san'rar ; alinear las lineas ue corresponden al mismo bucle o subrutina. En el procedimiento del ejercicio anterior hay muchos corchetes que encierran partes que se ejecutan por separado. Fjate cmo mejora la lectura del cdigo si utilizamos tabuladores para que cada seccin del procedimiento quede claramente separada:para blondabprepite 12 [;hace 12 veces lo que siguerepite 40 [;hace 40 veces lo que siguerepite 4 [av 100 gd 90] gd 9] ;hace un cuadrado y gira a la derechaav 60 gi 30];avanza y gira a la izquierdafnIr al ndice: Los coloresLos colores de la pantalla ; el lpi(, se fijan con las rdenes poncp ; ponc& se'uidos de un cdi'o de color.-se cdi'o del color puede ser un n?mero@ entre A 9 23, de modo ue cada n)mero se corresponde con un color de la tabla si'uiente, por ejemploH ponc& 2 eli'e el lpi( a(ul..ambin se puede emplear un conjunto Be tres ci%ras entre corchetes, entre A 9 133, ue se corresponden con la cantidad de lu( roja, verde ; a(ul ue compone el color deseado. :or ejemploH poncp )1A, 2,C 4-*Tabla de colores& $ C 8 B % I J1 K $& $$ $C $8 $B $%Ejercicio 24: hexaHaz un procedimiento, llamado hexa, que dibuje un hexgono de lado 120, con grosor 3 y de color marrn (8) sobre fondo carmn (12).para hexabp blponcp 12;papel de color carmnponcl 8 ;lpiz marrnpong [3 3] ;grosor de 3 puntosrepite 6 [av 120 gd 60];dibuja un hexgonootfn23.Haz un procedimiento llamado dode que dibuje un dodecgono de lado 40, congrosor 2 y de color azul (1) sobre fondo amarillo (6)para dodebp blponcp 6 poncl 1 pong [2 2]repite 12 [av 40 gd 30]otfnFjate que, para dibujar cualquier polgono regular de 80 puntos de lado, el conjuntode rdenes es el mismo. La nica variacin entre un polgono y otro es el nmero de lados, que coincide con el nmero de repeticiones, y el ngulo que debe girar la tortuga.24.Toma una hoja de papel, copia la tabla siguiente y rellena las celdas vacas conlos valores adecuados:PolgonoLadosOrden que se repiteTringulo3repite 3 [av 80 gd 120]Cuadrado4repite 4 [av 80 gd 90]Pentgono5Hexgono6Heptgono7OctgonoEnegonoDecgonoIcosgonoRellenar de colorLas fguras creadas en el entorno grfco pueden rellenarse de color, utilizando la primitiva rellena.El color de relleno se establece con la primitiva poncolorrelleno.Para que el relleno funcione se deben cumplir algunos requisitos: la fgura debe estar cerrada, la tortuga debe situarse en el interior de dicha fgura y el lpiz debe estar levantado con la primitiva subelpiz sl.25.Por ejemplo: vamos a modifcar el procedimiento cuadro para que el cuadrado que resulta quede relleno de color.para cuadrobp blponcp 14;el papel ser de color naranjaponcl 0;el lpiz pintar en negroponcolorrelleno 10;el relleno ser verde oscurorepite 4 [ av 80 gd 90];dibuja un cuadradosl gd 45 av 3;levanta el lpiz y se mete dentro del cuadradorellena;rellena de colorotfnProcedimientos con parmetrosSe puede escribir un procedimiento de tal manera que se ejecute con el valor de la variable que acompaa al nombre del procedimiento.Una variable permite guardar un valor, tanto numrico como de texto. En cualquier momento se puede tomar el contenido de esa variable o cambiarlo por otro nuevo. Cuando damos un valor a una variable que ya exista, el valor antiguo se pierde.26.Escribe un procedimiento capaz de dibujar un cuadrado cualquiera. El tamao del cuadrado se especifcar mediante la variable lado que acompaar al nombre del procedimiento cuando lo invoques.para cuadro :ladobprepite 4 [av :lado gd 90]fnAhora invcalo para que dibuje un cuadrado de lado 100, tecleando cuadro 100. Prueba tambin a teclear cuadro 20, cuadro 78 o cuadro 35. Lo ves?. Te obedece.27.Piensa: Sera posible construir un nico procedimiento, que fuese capaz de dibujar cualquier polgono regular? Si, porque el ngulo que debe girar la tortuga puede deducirse fcilmente a partir del nmero de lados del polgono.28.Escribe un procedimiento, de nombre poli seguido de la variable lados, que dibuje un polgono regular de 80 puntos de lado, con el nmero de lados indicado enla variable ladospara poli :ladosbp blponcp 12 poncl 8 pong [3 3];fja los colores y el grosor del lpizhaz angulo 360/:lados;calcula el ngulo de giro en cada vrticerepite :lados [av 80 gd :angulo];dibuja el polgonootfn29.Modifca el procedimiento poli para que admita dos parmetros: el nmero de lados y la longitud de esos ladospara poli :lados :longitudbp blponcp 12 poncl 0 pong [3 3]haz angulo 360/:ladosrepite :lados [av :longitud gd :angulo]otfnPara probarlo, escribe en la lnea de rdenes el polgono que quieres que dibuje. Por ejemplo, si le ordenas poli 5 90 deber dibujar un pentgono cuyos lados miden 90 puntos.30.Y, si somos capaces de dibujar un polgono cualquiera, podremos dibujar un crculo?. Escribe un procedimiento, llamado aro, capaz de dibujar un crculo del radio que se le indique.para aro :radiohaz "avance :radio*tan 1repite 360 [av :avance gd 1]fnPrimitivas circulo, arcodeelipse Afortunadamente, hay primitivas que dibujan un crculo de una forma ms sencilla, como la primitiva circulo, cuya sintaxis es as: circulo r donde r es el radio del crculo, cuyo centro estar en el centro de la tortuga. As pues, para dibujar un crculo cuyo radio es 75, bastar escribir la orden: circulo 75Tambin puedes utilizar la primitiva arcodeelipse, cuya funcin es dibujar arcos de elipse y su sintaxis es como sigue: arcodeelipse angulo mayor menor inicial donde angulo es el ngulo recorrido por el arco, mayor es la longitud del eje semiejemayor de la elipse, menor es la longitud del semieje menor e inicial es el ngulo o rumbo desde el que empieza el arco. Para dibujar el mismo crculo de 75 deradio, bastar con escribir: arcodeelipse 360 75 75 0 31.Ahora, para practicar la programacin de reiteraciones con parmetros, modifca el procedimiento trazos para crear otro procedimiento llamado trazo :longitud, que dibuje en la pantalla una lnea de trazos, de longitud ajustable, que ocupe toda la pantalla.Redacta un programa con el menor nmero posible de lneas de cdigo, utilizando larepeticin de una nica orden. El procedimiento debera tener un aspecto como este:para trazo :longitud...fnUso de procedimientos como primitivasUn procedimiento creado con primitivas u otros procedimientos, puede ser utilizado como una primitiva ms del lenguaje.32.Haz un procedimiento, llamado penta, que dibuje en la pantalla grfca un pentgono de cualquier longitud de lado. Posteriormente utiliza ese procedimiento ya creado, en uno nuevo que dibuje seis pentgonos, unidos entre s por un vrtice yformando una estrella.para penta :ladorepite 5 [av :lado gd 72]fnpara estrella :ladobp blponcp 10 poncl 0 pong [3 3]repite 6 [penta :lado gd 60]otfnFjate que, en el cdigo del procedimiento estrella aparece una llamada al procedimiento penta :lado, como si fuese una primitiva ms del lenguaje!33.Guarda este grfco, creado con MSWLogo, en una carpeta de tu disco duro con formato de mapa de bits .bmp. Para ello abre el menbitmap Guardar como... Estrellapenta34.brelo con un editor de imgenes, como Gimp o Pixia, y comprobars que puedes trabajar con l y exportarlo a otro formato. Insrtalo tambin en un documento de texto como OpenOfce Writer.35.Escribe un procedimiento, llamado fgura, que dibuje una fgura compuesta por un cuadrado, de lado cualquiera, que tiene un tringulo equiltero en cada uno de sus lados, como el de la siguiente ilustracin:Figura 36.Aprovechando el procedimiento aro :radio que ya tienes creado, escribe un procedimiento llamado donut :radio que dibuje crculos consecutivos, pero de forma que cada vez que empieza a dibujar un crculo nuevo lo haga desvindose un cierto ngulo respecto al anterior, para llegar a formar una corona con aspecto de rosquillacomo la de la ilustracin siguiente:Figura donutCuando veas aparecer el donut ante tus ojos podrs comprender, quiz, qu es la programacin elegante: conseguir un resultado espectacular con muy pocas lneas de cdigo.37.Podras dibujar una for? Un mtodo sencillo podra consistir en dibujar cada ptalo con un cuarto de crculo hecho con varios segmentos. Por ejemplo:para cuarto :pasorepite 9 [av :paso gd 10]fnDibujar un ptalo es fcil, con dos cuartos de crculo:para petalo :pasorepite 2 [cuarto :paso gd 90]fn38.Ahora te toca a ti lo ms fcil: escribe un procedimiento, llamado for que sea capaz de dibujar una for compuesta de varios ptalos, como esta:Figura for39.Ahora, utilizando repeticiones de procedimientos, experimenta a tu aire creando imgenes hechas con fguras sencillas (polgonos simples, crculos, etc.), que vuelven a dibujarse una y otra vez, tras desplazamientos y giros de la tortuga.Estructuras de datosA veces, manejamos muchos datos y variables en un programa. Los programadores suelenagrupar los datos y variables formando estructuras regulares, tales como matrices, listas, frases o palabras. Estas estructuras nos permiten manejar, de forma racional y ordenada, grupos de caracteres o grupos de datos para utilizarlos como variables en nuestros programas.Una lista es una entidad compuesta por una sucesin de datos, que pueden ser letras, palabras completas, variables o nmeros. Para referirnos a uno de los elementos de una lista bastara con utilizar el ndice que seala al elemento.Una matriz es una entidad que organiza los datos en flas y columnas. De este modo,para referirnos a un dato de una matriz bastara con citar los ndices que sealan a la fla y la columna en la que se encuentra dicho dato.Primitiva listaLa primitiva lista crea una lista cuyos elementos son los datos que se declaran. Por ejemplo:escribe (lista Zaragoza Toledo Len Huelva)har que aparezca Zaragoza Toledo Len Huelva en la ventana de textosrotula lista [2 3 7 9] [rojo negro]har que aparezca [2 3 7 9] [rojo negro] en la pantalla grfcahaz k -240haz w 110ponpos (lista :k :w)desplazar la tortuga hasta las coordenadas -240 11040.Al presentar datos en pantalla comprenders la utilidad prctica de las listas. Por ejemplo, escribe un procedimiento, llamado sumar, que nos pida dos nmeros y nos devuelva el resultado de sumarlos en la ventana de grfcos.para sumarbp gd 90 ot sl bt; inicializa las pantallasponpos [-200 0]; sita el punterorotula [Qu nmeros quieres sumar?]haz "num1 leepalabra; pide al usuario el primer nmerohaz "num2 leepalabra; pide y captura el segundo nmerobp gd 90; limpia la pantallaponpos [-200 0]; sita el puntero al comienzorotula [LA SUMA DE ]ponpos [-85 0]; de cada uno de losrotula :num1ponpos [-45 0]; fragmentos del mensajerotula [+]ponpos [-30 0]; de salidarotula :num2ponpos [10 0]rotula [= ]ponpos [30 0]rotula :num1 + :num2; calcula la suma y la presentafnObserva que, si introduces nmeros largos, se producen problemas al rotular cada una de las partes del mensaje de salida.41.Si quieres que la presentacin del resultado sea ms elegante, en una sola lnea de cdigo y sin tener que preocuparte de cunto espacio necesitas para cada cifra, puedes conseguirlo utilizando la primitiva lista. El procedimiento sumar quedara as:para sumarbp gd 90 ot sl btponpos [-200 0]rotula [Qu nmeros quieres sumar?]haz "num1 leepalabrahaz "num2 leepalabrabp gd 90ponpos [-200 0]rotula (lista "La "suma "de :num1 "+ :num2 "= :num1+:num2)fnEn una nica lnea de cdigo hemos resuelto la presentacin. Mucho ms elegante, no es cierto? Prubalo introduciendo nmeros muy largos o muy cortos.Primitiva leelistaLa primitiva leelista presenta una ventana de entrada de datos en pantalla y construye una lista con los caracteres tecleados por el usuario en su terminal. Por ejemplo:rotula leelistarotular en la pantalla cualquier texto que teclees en la ventana de entradahaz "k leelistaescribe elemento 2 :kescribir en la ventana de textos la segunda de las palabras tecleadas42.Por ejemplo; hagamos un procedimiento llamado identidad, capaz de preguntarte tu nombre y luego saludarte escribindolo en la pantalla.para identidadbp gd 90 ot sl btrotula [Cul es tu nombre y apellidos?]haz "napel leelistabp gd 90rotula (lista Hola! :napel)fn43.Escribe un procedimiento llamado pesetas capaz de convertir euros a pesetas y que presente el resultado sin espacios superfuospara pesetasbp gd 90 sl ot ponpos [-200 0]rotula [De cuntos euros se trata?]haz euros leelistahaz pesetas :euros *166.386bp gd 90ponpos [-200 0] rotula (lista :euros Euros son: :pesetas Pesetas.]fnPrimitivas elemento, ponelemento, primeroLos elementos de una lista pueden seleccionarse citando el ndice, como vimos en la sintaxis de la primitiva lista. Tambin pueden modifcarse utilizando el ndice. Por ejemplo;haz ww lista (verde azul sepia morado)rotula elemento 3 :wwrotular la palabra sepia en la pantalla grfcahaz ww lista (verde azul sepia morado)ponelemento 3 :ww amarilloescribe :wwescribir verde azul amarillo morado en la ventana de textoshaz ww lista (verde azul sepia morado)rotula primero :wwrotular la palabra verde en la pantalla grfca44.Haz un procedimiento, llamado nombre, que pregunte su nombre de pila al usuario, lo guarde en una variable, y lo rotule en la pantalla con el formato TU NOMBRE ES: nombre.para nombrebp sl ot gd 90; prepara la pantallarotula [Cmo te llamas?]haz "name primero leelista; toma la primera palabra tecleadabp gd 90; limpia la pantallarotula (lista Hola!, :name Qu tal ests?)fnPrimitivas palabra y fraseUna palabra es una lista de caracteres.Puede construirse desde un programa o solicitrselas al usuario desde el teclado. Una frase, por su parte, es una lista de palabras.Las palabras y las frases se manejan, por tanto, como una lista cualquiera, cuyos elementos pueden seleccionarse y modifcarse.palabra dato1 dato2 dato3 ...;forma una palabra con los datos indicadosfrase palabra1 palabra2 ...;forma una frase con las palabras indicadaselemento indice objeto;devuelve el carcter, o la palabra, que ocupa la posicin del ndice45.Por ejemplo, podemos componer el cdigo de un procesador, por ejemplo, uniendo en una palabra la marca, el modelo y la velocidad:para codigobp gd 90 othaz "numserie (palabra "Intel- "PIV "- "3,2 "Ghz);construye la palabrarotula:numserie;escribe la palabrafnLa primitiva palabra ignora los espacios, que nunca pueden formar parte de una palabra.46.Ahora modifcaremos el anterior procedimiento, aadiendo una instruccin que extrae algunos elementos de una palabra y los escribe en la ventana de textos:para codigobp gd 90 othaz "numserie (palabra "Intel- "PIV "- "3,2 "Ghz);construye la palabrarotula:numserie;escribe la palabrahaz j elemento 7 :numserie;toma tres letras de la palabrahaz k elemento 8 :numseriehaz m elemento 9 :numseriehaz tipo (palabra :j :k :m);construye una nueva palabraescribe (lista microprocesador :tipo);la escribe en los textosfn47.Haz un procedimiento con el nombre inicial, que pregunte tu nombre y responda cul es la letra inicial de tu nombre.para inicialbp ot sl gd 90rotula [Cul es tu nombre?]haz "letra primero leepalabrabp gd 90ponpos [-100 0]rotula [Tu nombre empieza por ]ponpos [125 0]rotula :letrafnClculos matemticosPrimitivas entero, redondea y raizcuadrada48.Haz un procedimiento que nos pida un nmero con decimales y nos devuelva la parte entera del mismo, el nmero redondeado y su raz cuadrada, en la ventana de trabajo.para numerosbtescribe [ESCRIBE UN NUMERO CON DECIMALES]haz "valor leepalabraescribe (lista "NUMERO "SOLICITADO: :valor)escribe (lista "LA "PARTE "ENTERA "ES: entero :valor)escribe (lista "SU "VALOR "REDONDEADO "ES: redondea :valor)escribe (lista "SU "RAIZ "CUADRADA "ES: rc :valor)fnPrimitivas azar, resto y muestra49.Haz un procedimiento, llamado loteria, que genere dos nmeros aleatorios entre el 0 y el 255 y los muestre en la ventana de trabajo. Adems devolver el resultado de dividir el primero entre el segundo, y su resto.para loteriabt;borra la pantalla de trabajohaz "num1 azar 255;genera al azar dos nmeros menores que 255haz "num2 azar 255escribe (lista "Primer "nmero "aleatorio: :num1)escribe (lista "Segundo "nmero "aleatorio: :num2)escribe (lista "Su "cociente "es: :num1/:num2)escribe (lista "Y "queda "un "resto "de: resto :num1 :num2)fn50.Escribe un procedimiento, llamado num10, que sea capaz de escribir 6 nmeros aleatorios entre 0 y 10.para num10btrepite 6 [muestra azar 11]fn51.Ahora escribe un procedimiento, al que llamaremos num25, que escriba ocho cifras elegidas al azar entre el 2 y el 5. Las cifras no deben ser menores que 2 ni mayores que 6para num25btrepite 8 [haz "num1 azar 4escribe :num1+2]fn52.Finalmente, te voy a presentar un procedimiento, que he llamado multistar, que dibuja estrellas al azar en la pantalla:para multistarbpponcp [20 9 60];Sobre un fondo azul oscurorepite 100 [haz "lado azar 40;Sortea el tamao de la estrella < 40haz "x -450 + azar 900;Sortea la coordenada xhaz "y -300 + azar 600;Sortea la coordenada yponcl azar 15;Sortea el color del lpizsl ponpos (lista :x :y) gd :y bl;Colcate en la posicin de dibujorepite 5 [av :lado gd 144]];Dibuja una estrellaot;Oculta la tortugafnQu bonito! Lee atentamente el cdigo de las lneas en las que se fjan las coordenadas en las que dibujar una estrella y trata de comprender por qu las he escrito as.Primitivas sen, cos y tan53.Haz un procedimiento, con el nombre de trigo, que nos pida el valor de un ngulo y nos devuelva el seno, el coseno y la tangente en la ventana de trabajo.para trigobthaz "valor leepalabraescribe (lista ngulo: :valor grados)escribe (lista Su seno es: sen :valor)escribe (lista Su coseno: cos :valor)escribe (lista Y su tangente: tan :valor)fn54.Ahora t solo: escribe un procedimiento, llamado senoide :pico, capaz de dibujar en la pantalla la funcin y = Vmax *sen x dndole el valor mximo de la funcin :picoFigura senoideProcedimientos recursivosA veces nos puede interesar que un procedimiento se repita una y otra vez. Podemosordenar que se repita un nmero determinado de veces, como ya has visto. Tambin podemos hacer que se repita indefnidamente, incluyendo una lnea de cdigo, antesdel comando fn que vuelve a llamar al propio procedimiento para que vuelve a empezar. En este caso, el procedimiento necesitan una orden alto para detenerse.Auto llamada55.En el siguiente ejemplo, haremos un procedimiento que se llama a si mismo: elprocedimiento al que llamaremos zigzag, dibujar una lnea en zigzag, indefnidamente:para zigzagponrumbo 45;orienta la tortuga en diagonalav 150 gd 90;traza un segmento y gira a la derechaav 150 gi 90;traza otro segmento y gira a la izquierdaespera 2;espera un pocozigzag;se llama a si mismofnQu pasara si el segmento de subida del zigzag fuese ms largo o ms corto que el fanco de bajada? Comprubalo.Qu pasara si incluimos una orden de borrar pantalla en el cdigo de este procedimiento?Uso de contadores56.Con el cdigo del siguiente procedimiento, llamado fligrana, el ordenador dibujar 200 pentgonos. Pero cada vez lo har en un lugar distinto y con una orientacin inicial distinta. Para ello utilizaremos una variable k que ir contando. Cada vez que dibuje uno de esos pentgonos, cambiaremos el valor de dicho contador en una cantidad fja.para fligranahaz "k 1.5;inicia un contadorrepite 200[blrepite 5 [av 50 gd 72];dibuja un pentgonosl gi :k*3 av :k+12;cambia la posicin de la tortugahaz "k :k+1];incrementa el contadorfn57.En este otro ejercicio, llamado espiral, utilizaremos un contador llamado r queiremos incrementando geomtricamente, multiplicndolo por una cantidad fja. De este modo dibujaremos una espiral, mediante arcos de circunferencia que van aumentando su radio progresivamente.para arco :r;dibuja un arco de circunferenciahaz "step :r*tan 1;calcula el lado de un polgono de 360 ladosrepite 90 [av :step gd 1];dibuja un ladofnpara espiral;para dibujar una espiralbp ot;limpia la pantallahaz "r 2;empezamos fjando un arco pequeorepite 22 [;para dar varias vueltas completasarco :r;dibuja un arcohaz "r :r*1.28];aumenta el radio 1,28 vecesfnManejo del tiempoPrimitivaesperaPodemos conseguir que el procesador haga una pausa, con la primitiva espera, antes de ejecutar la siguiente instruccin. La primitiva espera detiene la ejecucin del programa durante un lapso de tiempo que se especifcar en 1/60 de segundo. As, por ejemplo:espera 120;detiene el programa durante 2 segundos58.Por ejemplo, escribe un procedimiento llamado num :bajo :alto, que muestre una vez cada segundo un nmero elegido al azar, entre dos cifras lmite.para num :bajo :altobthaz "lapso :alto-:bajohaz "num1 azar :lapso+1escribe :bajo+:num1espera 60num :bajo :altofnPuedes detener la ejecucin del procedimiento tecleando Alto en la botonera del reade comandos.Primitiva horamiliLa primitiva horamili lee en los registros de Windows y averigua cunto tiempo ha estado encendido el ordenador y lo expresar en milisegundos.59.Una aplicacin prctica de la primitiva horamili es la medida del tiempo que tarda en ejecutarse un programa. El procedimiento siguiente cronometrar cunto tarda en ejecutarse un dibujo compuesto por 60 elipses:para cronobp othaz "start horamilirepite 60 [elipse 50 220 gd 6]haz "tiempo horamili-:startescribe (lista :tiempo "milisegundos)fnCunto tiempo tardar en dibujar 120 elipses, el doble? Haz la prueba.Cunto tiempo tardar en dibujar elipses ms grandes o ms pequeas? Comprubalo.Primitiva horaEsta primitiva lee en los registros de Windows y devuelve la hora actual del sistema, como una lista de palabras. Por ejemplo:escribe hora ;escribe en la ventana de textos algo as:Wed May 10 13:31:16 2006;el formato es anglosajn: Semana Mes Dia Hora Ao60.Ahora te toca a ti: escribe un procedimiento llamado clock que rotule en la pantalla grfca, centrado y con un tamao grande, qu hora es:Figura Reloj digitalControl de la ejecucin con el tecladoImagina que quieres que un programa se est ejecutando indefnidamente, hasta que el usuario pulse una tecla del teclado. Un modo de conseguirlo sera con un procedimiento de control, que activase la parada del siguiente modo:para controlponfoco [pantalla de mswlogo]ponteclado [parada]instrucciones del programafnLa primitiva ponfoco permite a Logo tomar el control de la ventana que tiene el foco.La primitiva ponteclado permite capturar eventos ocurridos en el teclado.61.Por ejemplo, con el siguiente procedimiento, llamado lunares, se desarrollar un programa que dibujar crculos de color aleatorio, en una posicin aleatoria de lapantalla, hasta que el operador lo detenga pulsando en cualquier tecla del teclado:para lunaresbp ot poncp 0;prepara la pantallaponfoco [pantalla de mswlogo];pone el foco en la pantallaponteclado [parada];un evento en el teclado detiene el programadiscos;llama al procedimiento discosfnpara discosrepite siempre [haz "x -500 + azar 900;elige coordenadas al azarhaz "y -350 + azar 700sl ponpos (lista :x :y) bl;sita la tortuga en las coordenadashaz "radio 10+azar 30;elige el radio al azarhaz "color azar 16;elige un color al azarponcl :color poccr :colorcirculo :radio rellena;dibuja un crculo y lo rellenaespera 3];una pequea pausafnDebes comprobar que la ejecucin del programa se detiene pulsando en cualquier tecla del teclado.62.Ahora te toca a ti: escribe un procedimiento llamado semana capaz de rotular en pantalla, uno tras otro, los das de la semana (lunes, martes, mircoles, etc.) en un bucle que no se detiene hasta que el usuario pulse una tecla en el teclado:Figura semanaCdigo ASCIIEl cdigo ASCII establece la equivalencia entre cada uno de los smbolos de texto que pueden introducirse en el teclado, y un valor numrico binario de 8 bits (1 byte).A la letra "A", por ejemplo, le corresponde el nmero 65 en binario determinado, a la"z" le corresponde el nmero 122, y as sucesivamente. Tambin estn incluidos los smbolos grfcos y los comandos no imprimibles, como el espacio o el retorno de carro.Primitivas ascii y caracter.63.Haz un procedimiento llamado tabasci, que genere una tabla entre el 0 y el 255 en la que aparezca el valor decimal y su correspondiente cdigo ASCII. Se mostrar en la ventana de trabajo.para tabascibt; Borra la pantalla de trabajohaz "x 0; Crea un contador y lo pone a 0repite 256 [escribe (lista :x caracter :x); Escribe un nmero y el carcterhaz "x :x+1]; equivalente en asciifn64.Te sientes capaz de escribir un procedimiento, llamado tabasci2 que, en lugarde escribir los caracteres ASCII en una sola columna en el cuadro de texto, los presente rotulados en la pantalla grfca en forma de tabla? Intntaloa)65.Escribe ahora un procedimiento que nos pida una letra y devuelva su cdigo ASCII en la pantalla.para traducebt; borra la ventana de textosescribe [INTRODUCE UNA LETRA EN LA VENTANA]haz "valor leepalabrabtescribe (lista "LETRA: :valor)escribe (lista "Su "valor "ASCII "es: ascii :valor)fnEjecucin secuencial y ejecucin condicionada.En algunos casos, para escribir el cdigo de un programa, basta con escribir una serie ordenada de primitivas, que se ejecutarn una detrs de otra (ejecucin secuencial).Pero es frecuente tambin que en un programa haya que ejecutar unas primitivas u otras en funcin de alguna condicin. De esta forma la ejecucin del programa se ramifcar por unas primitivas u otras, segn se vayan dando determinadas condiciones (su ejecucin est condicionada).Primitivas si y sisinoLa primitiva si permite ordenar al programa que ejecute una accin, en funcin de que una condicin se cumpla o no. La sintaxis de la primitiva si es la siguiente:si condicin accionSi la condicin es verdadera ejecuta la accin. Si la condicin es falsa no hace nada y pasa a la instruccin siguiente. Por ejemplo:si 1>0 escribe ciertohar que el programa escriba la palabra cierto66.Por ejemplo: escribe un procedimiento llamado numpos que nos pida un nmero. Si el nmero que introducimos es positivo se mostrar su raz cuadrada. Si es negativo no debe calcularlo, ya que dara un error.para numposbtescribe [INTRODUCE UN NMERO EN LA VENTANA]haz "valor leepalabrabtescribe (lista "El "nmero "es: :valor)si :valor>0 [escribe (lista "Su "raiz "cuadrada "es:rc :valor)]fnLa primitiva si tambin permite ordenar al programa que ejecute una accin u otra, en funcin de que una condicin se cumpla o no. En este caso, la sintaxis de la primitiva si es la siguiente:si condicin [accion1] [accion2]Si la condicin es verdadera ejecutar la accin1. Si la condicin es falsa ejecutar la accin 2. 67.Por ejemplo: escribe un procedimiento, llamado posneg, que nos pida un nmero. Si el nmero que introducimos es positivo se mostrar su raz cuadrada. Si es negativo se escribir un mensaje que diga "NO SE PUEDE CALCULAR LA RAIZ DE UN NEGATIVO".para posnegbtescribe [INTRODUCE UN NMERO EN LA VENTANA]haz "valor leepalabrabtescribe (lista "El "nmero "es: :valor)si :valor>0 [escribe (lista "Su "raiz "cuadrada "es: rc :valor)][escribe (lista "No "tiene "raiz, "es "un "nmero "negativo)]fnLa sintaxis de la primitiva si exige que las dos acciones estn en la misma lnea de cdigo. Hay una primitiva que se comporta de un modo semejante: se llama sisino. Su sintaxis es similar:sisino condicin [accion1] [accion2]68.Escribe un procedimiento, llamado santiago, que formule una pregunta y que informe si la respuesta es correcta o no lo es. No olvides escribir todas las acciones en la misma lnea:para santiagobt bp sl ot gd 90 poncp 14ponpos [-50 100]rotula [De qu color es el caballo blanco de Santiago?]haz "respuesta leepalabralimpia ponpos [-50 100]sisino :respuesta="blanco [rotula (lista "!Muy "bien!! "Acertaste! ""Es "blanco)] [rotula (lista "Cunto "lo "siento!! "Fallaste. ""No "es :respuesta)]fn69.Ahora, y para terminar con las prcticas de ejecucin condicionada, escribe un procedimiento llamado elegir que te ofrezca la posibilidad de elegir entre cuatro tareas distintas. Por ejemplo, que te pregunte qu tipo de fgura quieres que dibuje:b)Un cuadrado rojoc)Un crculo azuld)Un tringulo amarilloe)Un pentgono blancoSi respondes a dibujar un cuadrado rojo; si tecleas b deber dibujar un crculo azul, y as sucesivamente. Si tecleas cualquier otra tecla por error te lo debe advertiry negarse a hacer ninguna de las cuatro tareas previstas. Procura que las fguras sean de tamao semejante, rellenas de color y sobre un fondo del mismo color.Concepto de bucle en un programaUn bucle es una subrutina de un programa, que se ejecuta repetidamente un nmero determinado de veces o hasta que se cumple una condicin fjada de antemano.Primitivas mientras y hastaHay dos primitivas, llamadas mientras y hasta, que permiten la ejecucin repetida de un bucle del programa mientras una expresin sea cierta o hasta que una expresin sea cierta. Su sintaxis es como sigue:mientras [expresin] [lista de instrucciones a ejecutar]hasta [expresin] [lista de instrucciones a ejecutar]La primitiva hasta ejecutar repetidamente la lista de instrucciones establecida tantas veces como haga falta, hasta que la expresin tenga el valor cierto. En cambio, la primitiva mientras ejecutar repetidamente la lista de instrucciones establecida tantas veces como haga falta, hasta que la expresin tenga el valor falso.Lo primero que hacen ambas primitivas es evaluar si la expresin da como resultadocierto o falso, por lo que las instrucciones de la lista podran no ejecutarse nunca si la primera evaluacin de la expresin arrojase como resultado falso (en la primitiva mientras) o cierto (en la primitiva hasta).70.Por ejemplo, haz un procedimiento, llamado tablamul, que genere un nmero aleatorio entre el 0 y el 30. Una vez elegido ese nmero, el programa debe presentarlo en la pantalla y, adems, presentar en la ventana de texto la tabla de multiplicar por 7, desde el 0 hasta el nmero generado al azar.para tablamulbp bt gd 90 sl othaz "num azar 30;elige un nmero al azar menor que 30rotula (lista "Nmero "elegido: :num)escribe (lista "TABLA "DEL "SIETE "DE "0 "A :num)escribe [ ];lnea en blancohaz "contador 0;inicializa un contadormientras [:contador100 :num2>100 [rotula (lista "La "suma "de :num1 "y :num2 "es: :num1+:num2)] [rotula (lista "Error!!! "Uno "de "los "dos "nmeros "es "menor "que "100)]fnLa funcin lgica o evala varias expresiones. Devuelve el valor cierto si alguna de las expresiones evaluadas tienen el valor cierto y devuelve el valor falso si todas las expresiones son falsas. Su sintaxis es como sigue:o expresion1expresion2si debe evaluar 2 expresiones(o expresion1expresion2expresion3 ...)si debe evaluar ms de 2 expresiones77.Para comprenderlo, vamos a redactar un procedimiento llamado logica2 que nos pida dos nmeros, uno de los cuales debe ser mayor que 500. Si uno o los dos nmeros son mayores que 500, nos devolver la suma de ambos. Si los dos nmerosson iguales o menores que 500, nos devolver un mensaje de error.para logica2bp gd 90 sl ot ponpos [-200 0]rotula (lista "Introduce "dos "nmeros. "Uno "de "ellos "debe "ser "mayor "que "500)haz "num1 leepalabrahaz "num2 leepalabrabp gd 90 ponpos [-200 0]sisino o :num1>500 :num2>500 [rotula (lista "La "suma "de :num1 "y :num2 "es: :num1+:num2)] [rotula (lista "Error!!! "Ambos "nmeros "son "menores "que "500)]fnLa primitiva bity devuelve el resultado de aplicar la funcin lgica Y sobre dos o msnmeros, que deben ser nmeros enteros. Su sintaxis es como sigue:bity numero1 numero2Si debe hacer el clculo con 2 nmeros(bity numero1 numero2 numero3 ...)Si debe calcularlo con ms de 2 nmerosLa primitiva bito devuelve el resultado de aplicar la funcin lgica O sobre dos o msnmeros enteros. Su sintaxis es similar a la de la primitiva bity78.Para practicarlo, escribe un procedimiento llamado funcionyo, que nos pida dos nmeros enteros y nos devuelva el resultado de hacer la funcin lgica Y entre ellos, y la funcin lgica O.para funcionyobp gd 90 sl otponpos [-50 0]rotula (lista "Introduce "dos "nmeros "enteros.)haz "num1 leepalabrahaz "num2 leepalabrabp gd 90ponpos [-50 0]rotula (lista "Los "nmeros "introducidos "son: :num1 "y :num2)ponpos [-50 -20]rotula (lista "El "resultado "de "aplicar "la "funcin "Y "es: bity :num1 :num2)ponpos [-50 -40]rotula (lista "El "resultado "de "aplicar "la "funcin "O "es: bito :num1 :num2)fnPrimitivas prueba, sicierto y sifalsoEstas tres primitivas estn vinculadas entre si. La primitiva prueba evala una expresin y recuerda si el resultado ha sido cierto o falso, para que luego puedan utilizarlo las otras dos primitivas: sicierto, que puede abreviarse como sic y sifalso, que puede abreviarse como sif.La sintaxis del conjunto es como sigue:prueba expresionsic [acciones a realizar]sif [acciones a realizar]79.Veamos un ejemplo, con un procedimiento, llamado sorteo50 que genera un nmero aleatorio entre el 0 y el 100. Si el nmero generado es menor que 50 aparecer un mensaje indicndolo. Si el nmero es igual o mayor que 50 aparecer otro mensaje que nos lo indica.para sorteo50bp gd 90 sl othaz "num azar 100ponpos [-50 0]rotula (lista "El "nmero "agraciado "es: :num)ponpos [-50 -20]prueba :num