CAPITULO 9

USO DE VARIABLES

Ignacio Luppi

Este Capítulo no trata de ser una explicación sistemática y exhaustiva del tema variables, sino un primer acercamiento al mismo que permitirá al lector su uso en situaciones variadas.

§ 2.1. PROCEDIMIENTOS CON ARGUMENTO

Para crear un procedimiento utilizamos la palabra PARA seguida de un nombre. Por ejemplo:

para escalera (*)

repetir 12 [ad 8 de 90 ad 8 iz 90]

fin

 o bien:

para sonidos

repetir 10 [tono 200 20  tono 500 25]   (**)

fin

(* )  Esta palabra PARA es adoptada como idea de PARA QUE APRENDA LA PALABRA escalera., o PARA ENSEÑARLE LA PALABRA escalera.

(** ) TONO toca un sonido de frecuencia = 500 y duración 25 centésimas de seg.

Pero si en el procedimiento sonidos necesitamos ir cambiando alguno o algunos de los valores numéricos de las primitivas que figuran en él, por ejemplo, el número del repetir, resultaría muy tedioso cambiar ese número 10 por 15, luego por 20, y así continuar, generando para cada cambio un nuevo procedimiento. Al cambiar el 10 por 20, el procedimiento quedaría:

para sonidos

repetir 15 [tono 200 20  tono 500 25]

fin

Para un caso como éste resulta conveniente tener una forma de indicarle al procedimiento que deseo cambiar ese número en el repetir (llamémoslo por ej. veces) por distintos valores. Para eso se escribe el procedimiento así:

para sonidos :veces

repetir :veces [ tono 200 20 tono 500 25]

fin

siendo :veces el llamado argumento (o variable local) del procedimiento. Para indicarle al procedimiento que veces es una variable le ponemos pegado a la primera letra el signo " : ".

Para que el procedimiento funcione es necesario que éste encuentre dentro del mismo en qué lugar debe reemplazar el valor que le asignamos a :veces; por ello después del repetir escribimos el nombre de la variable (:veces).

Nótese que el nombre (que elegimos nosotros) podría ser cualquiera, por ejemplo :v , :n, etc. Si lo llamáramos :n quedaría:

para sonidos :n

repetir :n [ tono 200 20 tono 500 25]

fin

IMPORTANTE: Como las variables tienen un nombre cualquiera - al igual que los procedimientos - se indican precediéndolas de dos puntos (pegados a la primer letra) para identificarlas. Luego veremos en el parágrafo 2.3 que hay otro tipo de variables.

También a diferencia de otras versiones de LOGO, Logo Gráfico diferencia mayúsculas y minúsculas en los nombres de las variables .

Finalmente, para ejecutar el procedimiento debo asignarle un valor a la variable, por lo que queda:

sonidos 8

sonidos 12

sonidos 3

que es la manera de asignarle el valor 8, 12 o 3 a la variable :n ( o :veces). Ahora el procedimiento ejecutará las órdenes:  

repetir 8 [ tono 200 20 tono 500 25]

repetir 12 [ tono 200 20 tono 500 25]

repetir 3 [ tono 200 20 tono 500  25]

respectivamente.

De esta manera evitamos tener que repetir un procedimiento muchas veces por la variación de un solo valor.

2.2. PROCEDIMIENTOS CON ARGUMENTO COMPUESTO

El caso recién visto, se denomina con argumento simple, pues hemos necesitado una sola variable, pero puede ocurrir que sea necesario tener más de un valor que sea variable. Como ejemplo, veamos el caso de dibujar una escalera con un procedimiento escalera, como el del parágrafo anterior. Si queremos variar no sólo el número de escalones (12) sino también el 8 que representa el tamaño (alto y ancho)  de cada escalón, o sea:

para escalera :num :tam

repetir :num [ad :tam de 90 ad :tam iz 90]

fin

Para ejecutar este procedimiento debemos escribir después del nombre los dos valores de las variables definidas, en el orden que van y separadas de un espacio en blanco. Por ejemplo:

escalera 4 15(1)

(1) 4 es el número de escalones y 15 el tamaño del escalón

Nota: Es importante no alterar el orden de los valores. Si primero está definida la variable que cambia el número de repetir, cuando ejecutamos el procedimiento debemos poner como primer argumento ese valor.

También es importante no olvidar asignarle a cada variable o argumento definido su valor.

 

PREGUNTA:

Resultarán escaleras que cubrirán el mismo tramo los casos 1, 2 y 3?

Caso 1:  escalera  10 10

Caso 2 : escalera 20 5

Caso 3:  escalera 4 25

DESAFIO:

Cómo hacemos un procedimiento escalera2 que haga escaleras con el ancho del escalón distinto del alto y con distintas cantidades de escalones. ¿Cuántas variables usaremos?

DESAFIO:

Cómo haríamos para lograr repeticiones de sonido (tono) de diferentes alturas y duraciones? Cuántas variables puede tener el procedimiento sonidos? (ver archivo VARIABLS.LGO).

DESAFIO:

Sabiendo que con la primitiva HORA se obtienen la hora minutos y segundos (probarlo) y con ROTULARC seguido de una palabra la tortuga la escribe en la pantalla gráfica, podemos probar de hacer:                   

rotularc hora

Como esta primitiva escribe en el sentido en que apunta la tortuga debemos hacerla mirar primero hacia la derecha con la orden de FRUMBO 90  (fija el rumbo hacia la derecha).

¿Cómo hacer un procedimiento con una variable que haga rotular una cantidad de veces cualquiera un reloj digital? . (respuesta en el archivo VARIABLS.LGO).

Ver también los procedimientos CUADRADO, PALOTES, CIRCUNF, POLI del archivo VARIABLS.LGO

2.3. VARIABLES GLOBALES

Las variables como las que hemos visto en los ejemplos anteriores adoptan valores válidos sólo para esos procedimientos. Justamente por eso son llamadas "variables locales". Son valederas dentro del procedimiento donde se definen y luego desaparecen, no quedan en memoria.

Existen otras llamadas globales, que resultan muy útiles, una vez creadas permanecen en memoria y pueden ser utilizadas y/o modificadas por cualquier procedimiento.

Estas variables se definen con la primitiva HACER  (o su sinónimo ASIGNA ) que son las primitivas que permiten definir y asignarle un valor a una variable.

Estos valores pueden ser palabras, números, listas de palabras o números, etc. Las usamos como "pequeños depósitos" en los que se guarda información. En este libro usaremos la primitiva HACER, pero ambas funcionan igual.

Para definir una variable se procede así:

hacer "veces 5      (Se le asigna a la variable que llamamos

"veces el valor 5)

Notar que para definir una variable NO usamos los dos puntos (:) sino que se escribe con comillas ( " ) pegadas a la primera letra, y estas comillas no se cierran. También puede usarse una comilla ( ' ) que está en la misma tecla de las comillas. Esto indica que la variable se llamará veces y su valor será 5.

De esta manera la variable "veces permanece en la memoria y puede ser usada por cualquier procedimiento.

Si deseamos saber el valor o contenido de una variable escribimos:

esc :veces

5

Aquí va con dos puntos (:) ya que estamos preguntando por su valor o contenido, y no definiéndola con un nombre.  Puede ponerse ESC valor "veces, ya que VALOR es otra primitiva, pero esta notación es poco usada.

 

Otro caso sería asignarle a una variable el valor o contenido de otra o de sí misma, por ejemplo:

hacer "CARLOS 8

hacer "veces :CARLOS

esc :veces                                

8

Primero creamos una variable llamada "CARLOS y le damos valor 8.

Luego a la variable "veces  le damos el valor o contenido de la variable "CARLOS.

Finalmente pedimos ver en pantalla el valor de la variable "veces.

Las variables globales se pueden usar para múltiples propósitos, por ejemplo para guardar información numérica o textual, hacer contadores y acumuladores (ver parágrafos 4 y 5), llevar información de un procedimiento a otro, etc.

Por ejemplo:

hacer "vocales [ a e i o u]       (1)

hacer "notas [ DO RE MI FA SOL LA SI](2)

hacer "capitales [ LIMA BRASILIA QUITO SANTIAGO CARACAS];

hacer "colores [ azul verde rojo]

hacer "x 1(3)

hacer "nombre "Roberto(4)

En los 4 primeros ejemplos estamos guardando información en una lista que quedará en la memoria para consultarla cuando sea necesario. En los dos últimos casos estamos guardando - o asignándole a las variables creadas - un número y una palabra respectivamente.

(1) Está asignándole a la variable :vocales una lista con las 5 vocales.

(2) Está guardando en la variable :notas los nombres de las 7 notas musicales.

(3) Guarda en la variable :x el valor 1.

(4) Guarda en la variable :nombre la palabra "Roberto. Notemos que como es una palabra se precede con comillas (Ver Capítulo 3) En el caso (3) es indistinto poner las comillas o no ponerlas, pues es un número.

2.4. ¿COMO SE USAN LOS CONTADORES?

Los contadores son variables que sirven para contar la cantidad de veces que ocurre algo, que se ejecuta un procedimiento, que se acierta un número, etc.

Podríamos necesitar un contador que guarde en la memoria una variable, que indique  cuántas veces se ejecutó un procedimiento. Para ello será necesario, primero definir la variable en donde guardamos la información. Entonces quedaría:

hacer "num 0

Le asignamos a la variable de nombre "num  el valor 0. Seguidamente haremos un procedimiento sencillo donde veremos como se usa un contador

para ganarpuntos

esc [GANASTE UN PUNTO MÁS](1)

hacer "num :num + 1(2)

esc :num(3)

fin

(1) Se escribe en pantalla de texto el mensaje:    GANASTE UN PUNTO MÁS.

(2) Le asignamos a la variable "num el valor de esa misma variable :num más una unidad. De esta manera la variable suma al valor que tenía  una unidad.

(3) Escribimos el nuevo valor de la variable "num.

Si no quedó claro probemos en modo directo este otro ejemplo:

hacer "puntos 4

esc :puntos

4

hacer "puntos :puntos + 5

esc :puntos

9

EJERCICIOS

Otro uso de las variables podría se el de definir 2 variables con al alto y ancho de un rectángulo y una tercera con el área del mismo:

hacer  "ALTO 5

hacer  "ANCHO 6

hacer  "AREA  :ALTO * :ANCHO

esc  :AREA

30

 2.5 QUE ES UN ACUMULADOR?

Es muy parecido a un contador, pero en vez de irle sumando 1,  le vamos sumando un valor cualquiera, o sea que el acumulador va guardando la suma parcial obtenida en cada momento.

Se usa cuando tenemos procedimientos o primitivas que generan distintos valores que queremos ir sumando, por ejemplo si cada vez que uno gana a un juego se le suman 100 puntos, será: 

 hacer "suma :suma + 100

En el archivo ACUMULAD.LGO hay un ejemplo con el uso de acumuladores en un juego de azar.

ARCHIVO VARIABLS.LGO

para sonidos :veces :alt1 :dur1 :alt2 :dur2

repetir :veces [tono :alt1 :dur1 tono :alt2 :dur2]

fin

 

para escalera :num :tam

repetir :num [ad :tam de 90 ad :tam iz 90]

fin

 

para escalera2 :num :tam1 :tam2

; se usa asi...  ESCALERA2 10 3 5

repetir :num [ad :tam1 de 90 ad :tam2 iz 90]

fin

 

para escaleras

rg

escalera 4 25

sp centro cp

escalera 20 5

sp centro cp

escalera 10 10

fin

 

para reloj :seg

rg frumbo 90  ot

; fanchotipo 4 ; (probarlo para que qude más grande )

repetir :seg [lp rotularc hora esperar 100]

fin

 

para cuadrado :lado

repetir 4 [ad :lado de 90]

fin

 

para palotes :n

repetir :n [ ad 15 at 15 de 90 ad 10 iz 90]

fin

 

para circunf :ang

; probar desde CIRCUNF 1 hasta CIRCUNF 15

repetir 360/:ang [ad 1 de :ang ]

fin

 

para poli :num

; probar por ej.  con POLI 3 hasta POLI 12

repetir :num  [ ad 20 de 360/:num]

fin

ARCHIVO ACUMULAD.LGO

para inicio

bt modotexto

hacer "ganancia 0

hacer "jugadas 0

dado

fin

 

para dado

si :jugadas = 20 computofinal parar

hacer "dado 1 + azar 6

hacer "jugadas :jugadas + 1

apostar

dado

fin

 

para apostar

bt linea

esc [A QUE NUMERO LE APUESTA? (Pulsar 1 a 6)]

hacer "num leercar

si :dado = :num gana sino pierde

escribirs [SALIO EL...] esc :dado

fin

 

para gana

esc [GANASTE!]

hacer "ganancia :ganancia + 100

escs [ HASTA AHORA GANASTE ...PUNTOS=]

esc :ganancia

fin

 

para pierde

esc [LO LAMENTO MUCHO]

hacer "ganancia :ganancia - 10

fin

 

para computofinal

escs [ TOTAL PUNTAJE =]

esc :ganancia

fin