TEMA III.- VARIABLES I. Introducción En la mayoría de los programas necesitamos trabajar con datos bien digitales, bien analógicos por lo que tenemos que crear variables que nos permitan realizar dichas operaciones. II. Variables Las variables son una parte muy importante de cualquier programa porque son la base de muchas funciones que deseamos hacer con el computador. Casi todos los programas contienen variables. Piensa en ellas como cajas etiquetadas que esconden números dentro. Las variables pueden recibir cualquier nombre, igual que una caja puede ser etiquetada con cualquier nombre. El usar números para denominar a las variables nos puede llevar a confusión. Utiliza nombres que te ayuden cuando escribes el programa. Recuerda "si una caja contiene manzanas no la etiquetes con plátanos". Las variables deberían comenzar siempre por una letra y a continuación otras letras o números y no deben incluir espacios o símbolos a excepción del signo de subrayado “_”, por ejemplo, son nombres correctos de variables ♦ Edad ♦ Contador ♦ X1 ♦ Num01 ♦ Cont_01 En cambio, nos puede inducir a error los siguientes nombres de variables ♦ 1Edad ♦ 2Contador ♦ Cont&01 Las variables deben ser siempre “declaradas” en alguna parte del programa para que este pueda funcionar correctamente o el programa nos dará error. El número máximo de variables que admite el programa es de 200 Quizás los siguientes diagramas nos permitan entender mejor el uso de las variables Teleformación proyecto Medusa. 1 El diagrama de la izquierda imprime directamente [Display “50”] en pantalla un número mientras que en el segundo caso realizamos primero una declaración de la variable “x” a la que asignamos el valor de 50 [x = 50] y a continuación sacamos por pantalla el valor de la variable [Display x]. III. Trabajar con variables Trabajo con variables. Este comando está compuesto por tres iconos que a su vez incluyen otra serie de iconos. ♦ Declarar variables Este icono es el que utilizaremos para declarar las variables que utilizaremos en nuestro programa. Si picamos en él veremos que nos aparecen dos iconos mas. Al picar sobre este icono procederemos a la declaración de variables. Veamos ⇒ diversas formas de declarar a las mismas. - Crear una variable y asignar un valor: Al picar sobre el icono anterior la barra de herramientas adopta la siguiente apariencia. Teleformación proyecto Medusa. 2 En el recuadro de texto de la izquierda introducimos el nombre de nuestra variable, por ejemplo, “Contador” y en el segundo recuadro introducimos el valor que le asignamos , por ejemplo, “1” y arrastramos el icono hasta la ventana de trabajo. Es importante recalcar lo siguiente: En programación el símbolo “=” nos indica que a la variable se le asigna el valor indicado. Este signo no equivale a nuestro “igual” (Lo entenderemos mejor mas adelante”. - Crear una variable partiendo de otra u otras variables: Supongamos que la variable “z” tiene que tomar siempre el valor suma de otras dos variables “x” e “y”. Primero declaramos las variables “x” e “ y” tal como hemos hecho en el apartado anterior. Y a continuación declaramos la nueva variable “z” como suma de las otras. Teleformación proyecto Medusa. 3 El resultado es el que a continuación se representa. Vemos que la variable “z” ha quedado declarada como la suma de las variables “x” e “y” sin necesidad de tenerla que declararla al principio del programa tal como se hizo con las variables “x” e “y”. Veamos un caso que nos aclarará el concepto de asignar. Si aplicamos nuestros conceptos matemáticos al bloque de la izquierda diremos que la igualdad “x = x + y” no se cumple, pero en programación lo que deseamos expresar es que a la variable “x” le asignamos como nuevo valor el que ya tenía mas el valor de la variable “y”. Por ejemplo, si “x” tuviera el valor 5 y la variable “y” el valor de 7 cuando se ejecute este bloque la variable “x” adoptará el valor de 12. Importante: Los valores de las variables son enteros, es decir, no admite decimales y no se puede superar los valores máximos prefijados en el apartado de “Variables Range” dentro de Options-> FlowChart (Tema I). Teleformación proyecto Medusa. 4 Debemos tener en cuenta esta circunstancia cuando realicemos operaciones en nuestros diagramas. Imaginemos que en nuestro programa necesitemos un contador que nos permita determinar el número de veces que hemos realizado una determinada acción. Este contador debe incrementarse en la unidad cada vez que la acción se ejecuta pues este icono nos permite realizar esta acción. En el diagrama hemos creado una contador hemos a variable la que asignado el valor de 0. Cuando se ejecuta el programa la variable Contador se incrementa alcanzar hasta un valor superior a 5. Teleformación proyecto Medusa. 5 ♦ Visualización Detrás de este icono se encuentran diversos comandos que nos permiten realizar acciones relacionadas con la visualización de las variables Si picamos en él veremos que nos aparecen cuatro iconos mas: El primer icono es el comando que ejecuta la acción de visualizar la ⇒ variable mientras que el segundo icono es la pantalla de visualización donde podremos observar las órdenes de visualización. Con un ejemplo podremos entender mas fácilmente el uso de estos comandos. Supongamos que deseamos visualizar los valores de una variable “x” que va incrementándose, cada nuevo valor deberá aparecer en una línea diferente. Antes de exponer el diagrama de flujo de este ejemplo veamos las diversas opciones que el icono nos ofrece. En nuestro ejemplo lo veremos de la siguiente forma: En la primera línea hemos elegido la opción “text” y en el recuadro de texto hemos escrito x= , en el segundo bloque hemos elegido la opción “value of” para expresar el valor de x y en el recuadro de texto hemos escrito x y en el tercer bloque hemos elegido la opción “new line”. Para monitorizar las variables únicamente debemos picar sobre el icono seleccionar el programa o subrutina que deseamos monitorizar Teleformación proyecto Medusa. 6 y a continuación arrastrar el icono hasta la zona de trabajo. Con todo lo dicho la resolución de nuestro ejemplo lo podemos ver en el siguiente diagrama: ♦ Introducción de valores Estos dos iconos se usan conjuntamente. Veamos como es su uso. Picamos sobre el icono y en la barra de herramientas seleccionamos la variable que tomará el valor que introducimos y arrastramos el icono hasta la zona de trabajo. Cuando se ejecuta el programa cada vez que pase por el bloque “Read x” se detendrá esperando que introduzcamos el valor. A continuación picamos sobre el icono y en la barra de herramientas únicamente tenemos que relacionar este comando con el programa. Teleformación proyecto Medusa. 7 Un ejemplo completo lo podemos ver en el siguiente diagrama de flujo. Podemos utilizar tantas veces ambos comandos como deseemos. Importante: Los comandos de Visualización y de Introducción de Datos no se utilizan con la tarjeta microcontroladora pues esta no admite estos comandos. Teleformación proyecto Medusa. 8 ♦ Decisión Tras este icono se esconde uno de las mas importantes herramientas de la programación. En un programa nos podemos encontrar con la necesidad de realizar una acción u otra completamente diferente dependiendo del valor que adopte una variable, de la respuesta a una determinada pregunta, etc, para estos casos existe el comando que nosotros hemos denominado Decisión aunque podemos darle el nombre de Bifurcación, Pregunta , etc. Este comando es el único que dispone de tres terminales , uno de entrada y ⇒ dos de salida, una salida en caso de que la respuesta sea positiva y otra salida en caso de que la respuesta sea negativa. Importante: Las dos salidas deben estar siempre conectadas a alguna parte del programa Podemos deducir que realmente lo que hacemos es una comparación entre dos variables o valores de tal forma que no podemos sino tener dos posibles respuestas Si o No. Antes de arrastrar el icono a la zona de trabajo podemos elegir la posición de los terminales de salida seleccionando uno de los cuatros iconos situados en la parte derecha de la barra de herramientas. Teleformación proyecto Medusa. 9 Descifremos el siguiente diagrama de flujos: En primer lugar y como es lógico nos encontramos la orden de Inicio (Start) a continuación declaramos la variable “x” y le asignamos el valor 0, en el siguiente paso incrementamos el valor de la “x” en la unidad (x = 1) para a continuación hacer un beep (sonido), en el siguiente paso nos preguntamos si la variable “x” ha alcanzado el valor de 10 lo que no ocurre pues en esta primera vez que preguntamos la variable “x” tiene el valor de la unidad con lo que el programa sigue por la salida “No” que devuelve el programa al bloque “incrementar x” (x=2) para a continuación hacer un nuevo Beep y volver a realizar la pregunta, repitiéndose esta secuencia hasta que la variable “x” alcance el valor 10 momento en el que se finaliza el programa. Observamos que una parte del programa se repite recibiendo el nombre de “bucle”. En nuestro ejemplo el bucle es la parte del programa compuesta por los bloques “Incrementar x” + “beep” + Pregunta “x=10?”. En este caso el bucle es finito pues finaliza al alcanzar x el valor 10. En el siguiente diagrama de flujos el bucle es infinito pues se repite de forma indefinida. El bucle del ejemplo es un bucle condicional denominado Bucle Repeat-Until (Repetir – Hasta) pues se repite hasta que se cumple la condición (X=10). En cambio el bucle del diagrama de la izquierda es un bucle condicional denominado Bucle Do-While (Hacer-Mientras) pues el bucle se repite que la variable no supere el valor de 10. Observar el cambio del signo “=” por el signo “< menor que”. Teleformación proyecto Medusa. 10 Pero la pregunta puede llevarnos a dos caminos diferentes dentro del mismo programa. En el diagrama de flujo anterior podemos observar que dependiendo de la respuesta ante la pregunta “si hemos introducido un número mayor que 5” el programa puede seguir el camino de la derecha en caso de que hayamos introducido un número menor que 5 visualizando el indicador “Valor menor que 5” o bien seguir el otro camino y en este caso nos visualizará “Valor mayor que 5” ⇒ Antes de explicar este comando veamos una pequeña introducción matemática aplicada a la electrónica digital. No debemos perder de vista que estamos trabajando con máquinas electrónicas realizadas con circuitos digitales, es decir, dispositivos que sólo ofrecen dos posibles valores (On y Off , Encendido-Apagado) a los que nosotros generalmente asignamos respectivamente los valores 1 (On) y 0 (Off). Esto nos induce a pensar que cualquier número decimal se puede representar como una serie de dígitos binarios ( 0 y 1) n determinados por la ecuación N < 2 donde N es la cantidad de números que podemos representar y n el número de bits (dígitos binarios), por ejemplo para representar el número 7 necesitaríamos 3 dígitos pues 7 < 23, para representar el 6, 5 o el 4 también necesitamos 3 dígitos o bits, entonces ¿cómo hacemos para representar cada uno de una forma diferente? Pues es sencillo puesto que a cada bit le asignamos un peso, para entenderlo mejor veamos la siguiente tabla en la que hemos representado una serie de 8 bits ( los numeramos del 0 al 7), es decir que podemos representar 256 números (0-255). Teleformación proyecto Medusa. 11 Posición Peso 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 2 2 2 2 2 2 2 20 128 64 32 16 8 4 2 1 Para representar cualquier número únicamente debemos conseguir alcanzar el valor deseado mediante la suma de pesos colocando un 1 si lo utilizamos y un 0 si no lo utilizamos. Quizás se entienda mejor a través de varios ejemplos Ejemplo : Representar en binario el número 101 Solución 101 = 64 + 32 + 4 + 1 luego Posición 7 6 5 4 3 2 1 0 Peso 27 26 25 24 23 22 21 20 128 64 32 16 8 4 2 1 0 1 1 0 0 1 0 1 101 Luego 101decimal = 01100101binario Ejemplo : Representar en binario el número 30 Solución 30 = 16 + 8 + 4 + 2 luego Posición 7 6 5 4 3 2 1 0 Peso 27 26 25 24 23 22 21 20 128 64 32 16 8 4 2 1 0 0 0 1 1 1 1 0 30 Luego 30decimal = 00011110binario Ejemplo : Representar en decimal el número 01011101 Solución colocamos la serie dentro de la tabla y calculamos el valor Posición Peso 30 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 2 2 2 2 2 2 2 20 128 64 32 16 8 4 2 1 0 1 0 1 1 1 0 1 Luego 01011101binario=64+16+8+4+1=93decimal Teleformación proyecto Medusa. 12 Con lo visto anteriormente podemos deducir que el valor de cualquier variable de nuestro programa la podemos descomponer en una serie de 8 bits y aquí es donde es donde interviene el comando . Veamos como trabaja este comando Observamos que primero escribimos la variable, a continuación seleccionamos el bit que deseamos chequear (0-7) y lo comparamos con el valor que deseamos averiguar (1 en ON o 0 en Off). En el siguiente ejemplo que realiza la detección de números impares menores de 128 lo podemos entender mejor. Primero creamos una variable Contador para saber en cada momento el número de impares que hemos introducido y la iniciamos a valor 0. A continuación hacemos que se introduzca [Read x] un valor seguidamente detectamos si es mayor de 127 para lo cual preguntamos si el bit 7 esta en On (mayor de 127 ) o si está en Off (menor de 128). Si la respuesta es afirmativa finalizamos el programa en caso contrario detectamos si este número es impar o par para lo Teleformación proyecto Medusa. 13 que testeamos el bit 0 de forma que si está en On el número es impar ( pues todos los números impares tienen activo este bit) y si está en Off es número par. En caso afirmativo incrementamos el Contador y visualizamos este valor mientras que en caso contrario hacemos un bucle permitiendo la entrada de un nuevo valor . Teleformación proyecto Medusa. 14