Las variables y las expresiones

 

  

Introducción

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":

Para insertar este bloque en un punto del programa, no hay más que pulsar sobre el símbolo indicado en la figura adjunta de la barra de herramientas, arrastrarlo y hacer clic en el punto seleccionado. En este momento se abre el cuadro de diálogo Editar Proceso que permite introducir los datos necesarios para manejar las salidas.

El botón Fijar permite acceder a la una instrucción similar a la correspondiente LET del BASIC, que proporciona el medio para asignar un valor a una de las ocho variables disponibles, cuyos nombres son a, b, c, d, n, x, y, z.

Volver al principio de página

 

Asignación de valores enteros

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...):

Volver al principio de página

 

Utilización de expresiones aritméticas

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:

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:

Volver al principio de página

 

Uso de variables en algunos casos de interés

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:

 

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.

 Volver al principio de página

Ir al índice de "El lenguaje de control Flowol"

2004 Víctor R. González

volver a Inicio