|
Las variables son contenedores con nombre que almacenan temporalmente valores para su uso en el programa. Son el medio para que el programa "recuerde" datos. En otros lenguajes, como BASIC, las variables pueden ser numéricas o de texto; a su vez, las variables numéricas pueden ser enteras, de precisión simple, etc. En Flowol, las variables sólo pueden ser numéricas, y no existe especificación de tipo, es decir, no se puede distinguir entre enteros, decimales, etc.
Se pueden utilizar 8 variables distintas (nombradas como a, b, c, d, n, x, y,
z), aunque el nº total disponible en cada momento depende de la interfaz
de control que se esté usando (por ejemplo, con la interfaz FlowGo sólo
están disponibles las variables x e y,
mientras que con la interfaz Fischetechnik todas se hallan disponibles).
A una variable se le puede asignar un valor entero, o el resultado de una
operación entre dos variables o entre una variable y un número entero.
La manera de asignar un valor a una variable consiste en utilizar el bloque "Proceso":
Si en el cuadro de diálogo anterior se pulsa el botón del nombre de la variables deseada, por ejemplo, a, se obtiene:
se observa que este cuadro presenta el botón ,
que da acceso a la asignación de valores:
Si se pulsan los botones numéricos hasta obtener el valor que se desea asignar:
y se pulsa el botón Aceptar, se obtiene un resultado como:
Obsérvese que el cuadro anterior sólo permite introducir números enteros entre 0 y 9999999.
Flowol no permite más de 16 diferentes definiciones de una variable.
Por ejemplo, si se usa Fijar a=327
cinco veces en un programa
esto cuenta como una sola definición. Si se usa Fijar x=0
, Fijar
x=1
, Fijar x=2
, esto cuenta como tres definiciones
diferentes.
Se puede observar a tiempo real el valor de las variables durante la ejecución de un programa, al utilizar la ventana "Variables" (menú Ventana/Variables...):
Al igual que se asignan valores numéricos a una variable, se le puede asignar el resultado de una operación aritmética entre un número y otra variables o entre dos variables.
Para conseguirlo, no hay más que partir del cuadro de diálogo:
y pulsar alguno de los botones de variables para construir el segundo miembro de la operación de asignación. Por ejemplo, pulsamos el botón b y obtenemos un nuevo cuadro que permite acceder a los operadores aritméticos disponibles:
que son:
adición (+)
sustracción (-)
multiplicación (*)
división (/)
Pulsando los botones pertinentes y finalmente Aceptar se pueden conseguir expresiones como:
que realiza una operación aritmética de sólo dos operandos (variable y número), o como:
que involucra una operación de dos variables. Con ello, al pulsar el botón OK se obtiene un bloque como:
Se comentarán en este apartado tres casos de interés en los que el uso de variables resuelve o simplifica distintos problemas de programación:
utilización de variables contador en un proceso repetitivo
uso de variables como "semáforos", que abren o cierran el paso a la ejecución de procesos simultáneos.
Supongamos que deseamos ejecutar un proceso (por, ejemplo, el subprograma Sub 1) 10 veces seguidas y, desde luego, no queremos programar esto arrastrando 10 veces seguidas el bloque de proceso y unir los 10 bloques resultantes mediante líneas. Una solución más inteligente sería habilitar una variable como contador, por ejemplo, la x, asignarle 0 como valor inicial e incrementarla en una unidad comprobando con un bloque "Decisión" cuándo alcanza el valor 10:
Este fragmento de programa llama al subprograma Sub 1 mientras que la variable x es menor de 10 y, como su valor inicial es 0, conseguimos repetir la llamada 10 veces.
Supóngase ahora que en un programa se desea realizar dos veces el bucle
del ejemplo anterior: la primera con 10 repeticiones y la segunda con 20
repeticiones. La manera inmediata de hacerlo sería repetir el diagrama
anterior completo dos veces: en la primera mantener el bloque decisión con la
condición ¿Es x < 10?
, y en la segunda poner el bloque
decisión con la condición ¿Es x < 20?
. Evidentemente,
es una solución sencilla pero no resulta estructurada, compacta y elegante.
En su lugar, sería bueno definir un subprograma (Sub 2
) que
incluyese el código del bucle, y llamar dos veces al subprograma desde el
programa principal. Esto plantea el problema de que el número de repeticiones
que hace el bucle es fijo (10). ¿Cómo se podría cambiar el nº de
repeticiones en el subprograma de forma que se pudiese llamar desde el
programa principal ordenándole que realizase cada vez el nº de repeticiones
que fuese necesario?. Una solución se puede observar en el siguiente
diagrama:
Fijemos la atención en el subprograma Sub 2
. En
el bloque decisión se ha escrito la condición ¿Es x < y?
,
es decir, se ha utilizado una nueva variable: la y
. Si en el
programa principal se fija un valor para la variable y
antes de
llamar al subprograma Sub 2
, se consigue que se realice un nº de
repeticiones igual al valor de dicha variable y
. Por tanto, y
es una variable que permite pasar un valor desde el programa principal
hasta el subprograma Sub 2
.
Así, el resultado del programa del diagrama anterior es el que se pretendía:
realizar en primer lugar 10 repeticiones y después otras 20 más.
De la misma manera, se podría utilizar una variable para
pasar un valor desde el subprograma hasta el programa principal. De hecho,
siguiendo con el ejemplo anterior, el valor de la variable contador x
propia del subprograma se podría "ver" y utilizar sin mayor
problema desde el programa principal.
Supóngase que se desea programar la intermitencia de una lámpara situada en la primera salida digital de la interfaz de control, con un período de 2 s (1 s de encendido y 1 s de apagado). Por otra parte, se desea hacer sonar un zumbador situado en la segunda salida digital durante 1.5 s cada 2 períodos de intermitencia. ¿Cómo podemos activar el zumbador cuando es debido sin dejar de seguir realizando los destellos?. Esto supone la ejecución simultánea de dos procesos independientes entre sí. Para llevarlo a cabo, podemos iniciar dos líneas de flujo simultáneas: una que controle el parpadeo de la lámpara y otra que controle el sonido del zumbador. Ahora bien, teniendo en cuenta que el sonido sólo debe activarse una vez cada dos destellos. Obsérvese el siguiente programa, que ofrece una posible soulución:
En este programa, se utiliza la variable x
de la
siguiente forma: en la primera línea de flujo se asigna a x
el
valor 1 (Fijar x=1
) tras un destello de la lámpara. Por otra
parte, la segunda línea de flujo espera continuamente a que x tenga el valor
1 (¿Es x=1?
) para iniciar el sonido del zumbador. Tras la
emisión completa del sonido, vuelve a poner el valor de x a 0 (Fijar
x=0
), quedando de nuevo a la espera. Es decir, x
actúa
como un semáforo que un proceso abre o cierra para dar paso a la ejecución
de otro proceso distinto.
2004 Víctor R. González