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