Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


5. Constantes y tipos

5.1. Definición de constantes

5.1.1. Valores que no cambian

Cuando desarrollamos un programa, nos podemos encontrar con que hay variables que realmente "no varían" a lo largo de la ejecución de un programa, sino que su valor es constante.

Hay una manera especial de definirlas: con el especificador "const", que tiene el formato

const Nombre = Valor;

Cuando las declaramos, no será necesario indicar el tipo de datos, porque el compilador lo puede deducir:

const MiNombre = 'Nacho Cabanes'; 
const PI = 3.1415926535; 
const LongitudMaxima = 128; 

Ya en el cuerpo del programa, estas constantes se manejan igual que variables como las que habíamos visto hasta hora, con la diferencia de que no se nos permitirá cambiar su valor. Por tanto, es válido hacer

WriteLn(MiNombre); 
if Longitud > LongitudMaxima then ... 
OtraVariable := MiNombre; 
LongitudCircunferencia := 2 * PI * radio; 

pero no podríamos hacer

PI := 3.14; 
MiNombre := 'Nacho'; 
LongitudMaxima := LongitudMaxima + 10;

Con los pocos conocimientos que llevamos hasta ahora, las constantes nos resultarán especialmente útiles para indicar el tamaño máximo de un array, de modo que los cambios en el programa sean mínimos en caso de que decidamos usar un tamaño de array mayor o menor, como en este ejemplo:

(* CONST01.PAS, Const y arrays (01)   *)
(* Parte de CUPAS5, por Nacho Cabanes *)
 
Program Const01;
 
const
    MAXIMO = 5;
 
var
    datos: array[1..MAXIMO] of integer;
    i: integer;
 
begin
    for i := 1 to MAXIMO do
    begin
        write('Deme el dato ',i,': ');
        readLn(datos[i]);
    end;
 
    write('Los datos al reves son: ');
    for i := MAXIMO downto 1 do
        write(datos[i], ' ');
 
    writeLn;
end. 
 

Si decidimos que queremos trabajar con 10 datos, el único cambio sería el valor de la constante; el resto de programa se comportaría correctamente en cuanto recompilásemos.

Como se ve en este ejemplo, las declaraciones de constantes se hacen antes del cuerpo del programa principal, y generalmente antes de las declaraciones de variables.

Ejercicio propuesto 5.1.1.1: Crea una nueva versión del programa 4.1.3.1 (pedir 10 números reales, guardarlos en un array y luego buscar el menor de todos ellos), usando una constante para el tamaño del array, en vez de una variable.
Ejercicio propuesto 5.1.1.2: Crea una nueva versión del programa de adivinar números (3.4.6) para que el número a adivinar deba estar entre 1 y 1000 (estos límites se definirán mediante constantes) y el máximo de intentos permitidos sea 10 (también usando una constante).

5.1.2. Inicialización: Constantes "con tipo"

En Turbo Pascal (y Free Pascal), el identificador "const" tiene también otro uso menos habitual: definir lo que se suele llamar "constantes con tipo", que no son más que variables normales, pero a las que damos un valor inicial antes de que comience a ejecutarse el programa. Se usa

const variable: tipo = valor;

Un ejemplo más detallado sería:

(* CONSTTIPO.PAS, Constantes con tipo *)
(* Parte de CUPAS5, por Nacho Cabanes *)
 
Program ConstTipo;
 
const
    x: integer = 5;
    y: byte = 2;
 
begin
    writeLn('La suma de X e Y es: ', x+y);
 
    write('Nuevo valor para X? ');
    readLn(x);
 
    write('Nuevo valor para Y? ');
    readLn(y);
 
    writeLn('La nueva suma de X e Y es: ', x+y);
end. 
 
(* Ejemplo de ejecucion:
La suma de X e Y es: 7
Nuevo valor para X? 3
Nuevo valor para Y? 6
La nueva suma de X e Y es: 9
*)
 

La única ventaja real sobre el uso "habitual" de una variable es la legibilidad: en el mismo punto en el que se declara la variable, queda indicado cuál queremos que sea su valor inicial.

Ejercicio propuesto 5.1.2.1: Crea un programa que pida al usuario 10 números enteros y vaya calculando y mostrando su suma. No debes almacenar los datos en un array, y la suma debe guardarse en una variable que se haya inicializado a 0, usando una "constante con tipo".
Ejercicio propuesto 5.1.2.2: Crea un programa que pida al usuario 5 números enteros y vaya calculando y mostrando su producto. No debes almacenar los datos en un array, y el producto se debe guardar en una variable que se haya inicializado a 1, empleando una "constante con tipo".

5.1.3. Inicialización de arrays

Las "constantes con tipo" son especialmente útiles para dar valores iniciales a todo un array, indicando todos sus valores entre paréntesis y separados por comas, así:

(* CONSTTIPOARR.PAS, Constantes con tipo          *)
(* como forma de dar valores iniciales a un array *)
(* Parte de CUPAS5, por Nacho Cabanes             *)
 
program ConstTipoArr;
 
const
    diasMes : array[1..12] of byte =
        (31,28,31,30,31,30,  { Enero a Junio }
         31,31,30,31,30,31); { Julio a Diciembre }
 
var
    mes: byte;
 
begin
    write('Dime un numero de mes: ');
    readLn(mes);
 
    writeLn('Ese mes tiene ', diasMes[ mes ], ' dias');
end. 
 
(* Ejemplo de ejecucion:
Dime un numero de mes: 7
Ese mes tiene 31 dias
*)
 

No sólo se pueden emplear valores numéricos. Por ejemplo, también podemos crear un array de cadenas de texto, si delimitamos los valores entre comillas simples, de la siguiente manera:

(* CONSTTIPOARR2.PAS, Constantes con tipo         *)
(* como forma de dar valores iniciales a un array *)
(* Version con cadenas de texto                   *)
(* Parte de CUPAS5, por Nacho Cabanes             *)
 
Program ConstTipoArr2;
 
const
    nombreMes : array[1..12] of string =
        ('enero', 'febrero', 'marzo', 'abril',
         'mayo', 'junio', 'julio', 'agosto',
         'septiembre', 'octubre', 'noviembre', 'diciembre');
 
var
    mes: byte;
 
begin
    write('Dime un numero de mes: ');
    readLn(mes);
 
    writeLn('Ese mes se llama ', nombreMes[ mes ]);
end. 
 
(* Ejemplo de ejecucion:
Dime un numero de mes: 4
Ese mes se llama abril
*)
 

Ejercicio propuesto 5.1.3.1: Crea una nueva versión del programa 4.1.1.1 (que reserva espacio para un array de 3 números enteros, asigna a sus elementos los valores 3, 5 y 8, y que después muestre en pantalla la suma de los valores de sus 3 elementos), empleando constantes con tipo para dar esos valores iniciales.
Ejercicio propuesto 5.1.3.2: Crea un programa que pida al usuario el número de un mes y muestre la cantidad de días que tiene ese mes, así como el nombre del mes, usando dos arrays definidos mediante "constantes con tipo".
Ejercicio propuesto 5.1.3.3: Crea un programa que pida al usuario el nombre de un mes y muestre la cantidad de días que tiene ese mes, usando dos arrays definidos mediante "constantes con tipo".
Ejercicio propuesto 5.1.3.4: Crea un programa que pida al usuario un número del 1 al 7 y muestre el nombre del correspondiente día de la semana, usando un array definido con una "constante con tipo".