Fundamentos de programación con Módula-2 (7)

 

Tema 3
Constantes y Variables
 
 
Este tema complementa el anterior con nuevos elementos que permiten construir programas algo más realistas.
 
Primeramente se indica el interés que tiene dar nombre a las constantes que se manejan en los programas. A continuación se introduce el concepto de variable. Este concepto es muy importante y una gran parte del tema está organizada en torno a él. De hecho la existencia de variables constituye el elemento diferenciador del paradigma de la programación imperativa respecto a los demás.
 
El tema se completa con la presentación de varias sentencias de lectura simple. Estas sentencias permiten programas en los que se pueden introducir valores de entrada durante su ejecución.
 
 
3.1 Identificadores
 
La manera de hacer referencia a los diferentes elementos que intervienen en un programa es darles un nombre particular a cada uno. En programación se llaman identificadores a los nombres usados para identificar cada elemento del programa.
 
En el tema anterior ya se han utilizado identificadores para dar nombre a elementos tales como los tipos de datos, las operaciones de escritura, etc., que se suministran ya con un significado determinado. Igualmente se han inventado identificadores para nombrar los primeros programas (EscribirHola, SumaNumeros, etc.).
 
En Modula-2 los identificadores son una palabra formada con caracteres alfabéticos o numéricos seguidos, sin espacios en blanco ni signos de puntuación intercalados, y que debe comenzar por una letra. Pueden usarse las 52 letras mayúsculas y minúsculas del alfabeto inglés, y los dígitos decimales de 0 al 9.
 
Ejemplos de identificadores válidos son los siguientes:
 
         Indice         DiaDelMes         NombreApellido
         j5               Eje3                IdentificadorMuyyyyyyyLargo
 
No serían válidos los siguientes identificadores:
 
        3Eje             No puede comenzar por un dígito
        #50$            No se pueden usar los caracteres: # y $
        Dia Del Mes    No se pueden intercalar blancos
        Año              No se puede utilizar la letra ñ
 
Es importante resaltar que las letras ñ o Ñ o las vocales acentuadas no están incluidas en el alfabeto e la mayoría de los lenguajes de programación, y por supuesto tampoco en Modula-2, por lo que no pueden formar parte de ningún identificador. Sin embargo, ambas letras sí pueden ser utilizadas como valores de tipo CHAR o formando parte de una ristra.
 
Modula-2 distingue las letras mayúsculas de las minúsculas. Así, son identificadores distintos los siguientes:
 
         DiaSemana           Diasemana            DIASEMANA
 
En general, se debe tener cuidado al utilizar identificadores que difieran en pocas letras y en particular en el uso de las letras mayúsculas o minúsculas para distinguir identificadores diferentes. En estos casos, es difícil distinguir entre un cambio de alguna letra por error y una utilización correcta de identificadores distintos.
 
Las reglas exactas que determinan la formación de identificadores son las siguientes:
 
Identificador ::= letra { letra | dígito }
 
letra ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
 
dígito ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
 
 
3.2 El vocabulario de Modula-2
 
Si examinamos los ejemplos de programas presentados hasta el momento veremos que en ellos aparecen bastantes palabras que cumplen con las reglas de formación de identificadores. En realidad no todas las palabras que forman parte de un programa en Modula-2 son identificadores, aunque se formen de la misma manera. Hay que distinguir ciertas palabras reservadas o palabras clave que tienen un significado invariable dentro del lenguaje y que no pueden ser utilizadas nunca como identificadores en un programa. Entre ellas se encuentran algunas que ya han sido utilizadas en los ejemplos anteriores.
 
Las palabras clave sirven para delimitar determinadas construcciones del lenguaje de programación, tales como un programa completo (MODULE, BEGIN, END) o una lista de elementos importados (FROM, IMPORT).
 
Todas las palabras clave de Modula-2 están definidas en mayúsculas. La lista completa de ellas es la siguiente:
 
       AND                    ARRAY                    BEGIN
       BY                      CASE                      CONST
       DEFINITION           DIV                        DO
       ELSE                   ELSIF                     END
       EXIT                   EXPORT                   FOR
       FROM                  IF                          IMPLEMENTATION
       IMPORT               IN                          LOOP
       MOD                   MODULE                   NOT
       OF                      OR                         POINTER
       PROCEDURE          QUALIFIED               RECORD
       REPEAT               RETURN                   SET
       THEN                  TO                         TYPE
       UNTIL                  VAR                       WHILE
       WHIT
 
En general, los identificadores utilizados en un programa han de ser declarados o definidos antes de utilizarlos. Una forma de declararlos es importarlos de algún módulo donde ya estén definidos, como se ha hecho en los primeros ejemplos.
 
Sin embargo en Modula-2 existen elementos de uso tan frecuente que se ha considerado conveniente tenerlos disponibles en cualquier programa sin necesidad de declararlos explícitamente. Para ello el compilador reconoce una serie de identificadores predefinidos para nombrar los tipos de valores básicos, algunas funciones de utilidad, etc. Algunos de estos identificadores (INTEGER, REAL, TRUNC, MAX, …) ya han sido introducidos en el tema anterior, aunque sin precisar que se trataba de identificadores predefinidos. La lista completa de identificadores predefinidos en Modula-2 es la siguiente:
 
       ABS                  BITSET                BOOLEAN
       CAP                  CARDINAL            CHAR
       CHR                  DEC                    EXCL
       FALSE               FLOAT                 HALT
       HIGH                 INC                     INCL
       INTEGER            LONGINT              LONGREAL
       MAX                  MIN                    NIL
       ODD                  ORD                    PROC
       REAL                 SIZE                   TRUE
       TRUNC               VAL
 
Esta lista contiene los identificadores que el compilador reconoce por si mismo. Obsérvese que en ella no aparecen, por ejemplo, los nombres de las operaciones de escritura, que están definidos en los correspondientes módulos estándar y que han de ser importados explícitamente si se quiere hacer uso de ellos.
 
Aunque los identificadores de esta lista estén totalmente en mayúsculas, como las palabras clave, no hay que confundirlos con ellas. Los identificadores predefinidos no son palabras reservadas, sino que el programador puede, si lo desea, definirlos por su cuenta con otro significado diferente del habitual. Al hacerlo así pierde automáticamente la posibilidad de usarlos con el significado predefinido. Además, esta redefinición causaría cierta confusión en otros programadores que lean el programa, ya que no tendrán su significado habitual. Por estas razones no es aconsejable usar esta facilidad de redefinición, a menos que resulte realmente ventajosa en determinadas aplicaciones.
 
 
3.3 Constantes
 
Primeramente se introduce el concepto de constante y a continuación se explica como se manejan las constantes en Modula-2.
 
3.3.1 Concepto de constante
Una constante es un valor fijo que se utiliza en un programa. El valor debe ser siempre el mismo para cualquier ejecución del programa, es decir, el valor no puede cambiar de una ejecución a otra. Son ejemplos de constantes el número de meses del año, el número de días de una semana, las constantes matemáticas tales como el número pi, los factores de conversión de unidades físicas de medida, etc.
 
Hasta el momento se ha visto la manera de representar valores constantes en un programa escribiéndolos explícitamente, en forma de constantes literales, como se las denomina en programación. Otra posibilidad es definir estos valores como constantes simbólicas o constantes con nombre.
 
3.3.2 Declaración de constantes con nombre
La declaración de un valor constante con nombre consiste en asociar un identificador a dicho valor constante. Si queremos declarar el valor de la constante (pi) asociada al nombre Pi escribiremos:
 
            CONST Pi = 3.14159265;
 
La declaración se inicia con la palabra clave CONST, y a continuación se escribe el nombre simbólico de la constante, seguido del signo igual y el valor asociado.
 
Una vez definida la constante se puede utilizar su nombre exactamente igual que si fuera su valor explícito. Por ejemplo, serán equivalentes las expresiones siguientes:
 
        2.0*3.14159265*R                       2.0*Pi*R
 
Las constantes simbólicas pueden declararse de una en una, en la forma anterior, o bien pueden declararse varias de ellas seguidas, tras una única palabra CONST que introduce la declaración de todas ellas. Por ejemplo:
 
            CONST
                 Largo = 34;
                 Ancho = 78;
                 Punto = ".";
                 NumeroE = 2.718281828459
                 Pregunta = ‘¿Año de nacimiento ?’;
                 MinimaTemperatura = -50;
                 Radio = 1.5;
 
Las constantes con nombre tienen asociado el tipo de dato correspondiente al valor con que se declaran. En los ejemplos anteriores los tipos de las constantes serán los siguientes:
 
                 PI                           REAL
                 Largo                      INTEGER o CARDINAL
                 Ancho                     INTEGER O CARDINAL
                 Punto                      CHAR
                 NumeroE                  REAL
                 Pregunta                  ristra
                 MinimaTemperatura    INTEGER
                 Radio                       REAL
 
Una posibilidad interesante es pode declarar el valor de una constante en forma de expresión. En Modula-2 sólo se permite hacer esto si la expresión puede ser evaluada por el compilador en el momento de traducir el programa fuente a programa objeto. Para ello es necesario que todos los operandos que intervengan en la expresión sean valores constantes, y que las operaciones entre ellos sean operadores fijos del lenguaje o funciones predefinidas (que tienen identificadores predefinidos). En este caso la expresión se denomina expresión constante. Los operandos constantes pueden ser valores explícitos o constantes con nombre declaradas en algún punto anterior del programa.
 
Por ejemplo, tras las declaraciones anteriores se podría añadir:
 
                CONST
                     Diametro = 2.0*Radio;
                     ConstanteRara = (23*5) DIV ((7-4) MOD 2 ));
                     Area = Largo * Ancho;
                     Perimetro = 2*(Largo + Ancho);
 
Estas constantes tendrán asociado el tipo de valor que se deduzca de la evaluación de la correspondiente expresión constante. En este caso será:
 
              Diametro                          REAL
              ConstanteRara                  INTEGER o CARDINAL
              Area                               INTEGER o CARDINAL
              Perimetro                         INTEGER o CARDINAL
 
Las reglas precias que han de seguir las declaraciones de constantes con nombre son las siguientes:
 
Declaración_de_constantes ::=
           CONST { Asociación_constante ;}
 
Asociación_constante ::=
           Identificador = Expresión_constante
 
Una expresión constante incluye, como caso particular, un único término que sea un valor explícito.
 
 
3.4 Variables
 
En este apartado se introduce el concepto de variable y a continuación se explica como se declaran y utilizan las variables en Modula-2.
 
3.4.1 Concepto de variable
El concepto de variable en programación imperativa es diferente del concepto de variable algebraica. Cuando escribimos expresiones algebraicas usamos variables para representa un valor indefinido, pero fijo. Por ejemplo, cuando escribimos la igualdad:
 
                 (a+b)^2 = a^2 + 2ab + b^2
 
queremos indicar que dicha igualdad se cumple asociando a y b con valores cualesquiera, pero siempre los mismos. No tiene sentido pretender que a tenga un valor en una parte de la expresión y otro diferente en otra parte.
 
Algo similar ocurre cuando escribimos fórmulas matemáticas o leyes físicas, que ligan diversas magnitudes. Por ejemplo, la fórmula del volumen (V) de un cilindro en función de su radio (R) y su altura (A) es:
 
               V = (pi)(R^2)A
 
Una vez asociadas las variables R y A con el radio y altura de un cilindro en particular, la variable V debe tomar necesariamente el valor del volumen de dicho cilindro.
 
Insistiendo en esta idea, consideremos un sistema de ecuaciones, tal como:
 
            3x + 5y = 19
            7x – 5y = 11
 
Las variables x e y, denominadas incógnitas, representan los valores, inicialmente desconocidos, que satisfacen dichas ecuaciones, y en concreto:
 
         x = 3             y = 2
 
Con todo ello insistimos en que las variables algebraicas representan valores simbólicos, bien valores cualesquiera, o bien valores desconocidos, pero de manera que una vez asociada la variable a un valor determinado dicho valor no debe cambiarse.
 
En programación el concepto de variable es diferente, y está directamente asociado a la memoria del computador. La memoria del computador permite almacenar información para ser usada posteriormente. La función de la memoria es mantener dicho valor todo el tiempo que sea necesario para usarlo tantas veces como se necesite.
 
Pero los valores almacenados en la memoria pueden ser modificados cuantas veces se desee. Al almacenar un valor en un elemento determinado de la memoria, dicho valor se mantiene de ahí en adelante, pero sólo hasta que se almacene en dicho elemento un nuevo valor diferente.
 
Las variables en los lenguajes de programación imperativa son el concepto abstracto equivalente a la memoria física de la máquina. Una variable representa un valor almacenado, y que se puede conservar indefinidamente para ser usado tantas veces como se desee. Pero el valor de una variable se puede modificar en cualquier momento, y será el nuevo valor el que estará almacenado en ella a partir de entonces.
 
Las variables de un programa se designan mediante nombres o identificadores. El identificador de una variable representa el valor almacenado en dicha variable. El programador puede elegir los nombres que considere más apropiados para las variables que utilice en su programa.
 
3.4.2 Declaración de variables
Cada variable en un programa en Modula-2 debe tener asociado un tipo de valores determinado. Esto quiere decir que si una variable tiene asociado el tipo INTEGER, por ejemplo, sólo podrá almacenar valores de este tipo pero no valores de tipo REAL u otro diferente.
 
Las variables han de ser declaradas en el programa antes de ser utilizadas. La declaración de una variable especifica su nombre y el tipo de valor asociado.
 
Por ejemplo, para usar una variable que almacene la edad de una persona como un número entero de años, podríamos declarar:
 
        VAR edad: INTEGER;
 
Podemos observar que la declaración se inicia con la palabra clave VAR, y detrás de ella se escriben el nombre de la variable y el identificador de su tipo, separados por el carácter dos puntos (:). La declaración termina con punto y coma (;).
 
Pueden ponerse varias declaraciones de variables, seguidas, después de una sola palabra VAR. Por ejemplo:
 
         VAR
             dia: INTEGER;
             mes: INTEGER;
             anno: INTEGER;
 
Si varias variables tiene el mismo tipo, se pueden declarar todas conjuntamente, escribiendo sus nombres seguidos, separados por el carácter coma (,) y luego el tipo común a todas ellas, en la forma habitual. El ejemplo anterior podría haberse escrito en forma abreviada:
 
         VAR dia, mes, anno: INTEGER;
 
La descripción BNF de la declaración de variables es la siguiente:
 
Declaración_de_variables ::= VAR { Lista_de_variables ;}
Lista_de_variables ::= Lista_de_identificadores : Tipo
Lista_de_identificadores ::= Identificador {Identificador }
Tipo ::= INTEGER | CARDINAL | REAL | CHAR
 
Por el momento las posibilidades de especificación de tipos se limita a los tipos predefinidos presentados hasta ahora; más adelante se indicará la manera de definir nuevos tipos.
 
3.4.3 Uso de variables. Inicialización
El valor almacenado en una variable puede utilizarse usando la variable como operando en una expresión aritmética. El tipo declarado para cada una de las variables determina las operaciones que posteriormente se podrán realizar con ella, de la misma forma que sucedía para los valores constantes según se explicó en el tema anterior.
 
Por ejemplo, si declaramos las variables:
 
         VAR
            Base, Altura : CARDINAL;
            Saldo, Meses, Dias : INTEGER;
            Volumen, Area, Gastos : REAL;
            Modelo, Codigo : CHAR;
 
podremos escribir expresiones tales como:
 
           Base * Altura
           Dias + ORD( Codigo )
           Volumen / Area
 
pero sería incorrecto escribir
 
           Area / Base
           CHR( DIAS )
           Base + Area
 
porque combinan operandos de tipos diferentes.
 
Si se usan correctamente los tipos de operandos para cada operación, en una misma expresión pueden intervenir operandos de diferentes clases. Por ejemplo, pueden usarse a la vez variables, constantes con nombre, y valores numéricos constantes. Con las declaraciones de constantes de la sección anterior, y las variables del último ejemplo, se podría escribir:
 
           Pi * Volumen * 5.7
           Base * Altura DIV ConstanteRara
           FLOAT( Saldo ) + NumeroE
           TRUNC( Area ) DIV Ancho MOD 5
 
Estos ejemplos de expresiones son formalmente correctos, de acuerdo con las reglas de Modula-2, pero no se pretende que tengan ningún sentido intuitivo, que se ajuste al significado de los nombres empleados.
 
Con independencia de que las operaciones con variables sean consistentes con los tipos de valores que almacenan, para que sea válido evaluar una expresión aritmética en la que intervengan variables es necesario que todas ellas tengan un valor definido. Tal como se ha dicho anteriormente, los nombres de las variables representan los valores almacenados en ellas. Si en una variable no se ha almacenado todavía ningún valor, su uso conduce a un resultado imprevisible.
 
Para usar una variable de manera correcta es necesario inicializarla antes de usar su valor en ningún cálculo. Inicializar una variable es simplemente darle un valor determinado por primera vez.
 
Algunos lenguajes de programación permiten especificar el valor inicial de una variable en la declaración de la misma. Modula-2, sin embargo, no admite esta posibilidad. Cada variable deberá ser inicializada en el momento adecuado asignándole valor de alguna manera durante la ejecución del programa.

3 comentarios en “Fundamentos de programación con Módula-2 (7)

  1. Hi,Do you have used LCDs, second hand LCDs, used flat screens and used LCD monitors? Please go here:www.sstar-hk.com(Southern Stars).We are constantly buying re-usable LCD panels and working for LCD recycling.The re-usable panels go through strictly designed process of categorizing, checking, testing, repairing and refurbishing before they are re-used to make remanufactured LCD displays and TV sets.Due to our recent breakthrough in testing and repairing technology of LCD, we can improve the value for your LCD panels.
    website:www.sstar-hk.com[eadcjbidgcdhag]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s