Guía mínima de Ada 95 |
Los tipos enumerados son aquellos que se definen especificando la lista ordenada de valores que lo componen:
type Día is (Lun, Mar, Mie, Jue,
Vie, Sab, Dom);
type Palos is (Oros, Bastos, Espadas,
Copas);
type Género is (M, F);
type Color is (Blanco, Rojo, Amarillo,
Verde, Azul, Marrón, Negro);
type Luz is (Rojo, Naranja, Verde);
Una vez definido el tipo, se pueden declarar variables. Si, como ocurre con los tipos Color y Luz, hay valores que se repiten, habrá que cualificar ese valor cuando su uso pueda ser ambiguo:
x := Color'Rojo; -- x debe ser de tipo Color
y := Luz'Rojo; -- y debe ser de tipo Luz
Ada tiene predefinido el tipo enumerado character --que representa el alfabeto de caracteres utilizado--, y el tipo boolean, que puede tomar los valores true o false.
Ada posee un tipo
integer
predefinido cuyo rango de valores depende de la implementación del
lenguaje. Además, se pueden definir nuevos tipos enteros que pueden
ser, con signo o sin signo:
type MiEntero is range -32768..32767;
--Entero con signo
type MiNatural is mod 32767;
--Entero sin signo (rango 0..32766)
En ambos casos se pueden usar expresiones para definir los límites
del tipo:
type MiEntero is range -2**15..2**15;
--Entero con signo
type MiNatural is mod 2**16;
--Entero sin signo (rango 0..65535)
Existen predefinidos en el paquete standard dos
subtipos del tipo integer:
subtype Natural is integer range
0..Integer'last;
subtype Positive is integer range
1..Integer'last;
Todos los tipos ordinales tienen asociadas, entre otras, las siguientes operaciones como atributos (todas se usan cualificadas con el nombre del tipo), sea T un tipo ordinal:
T'pred(x) devuelve el valor que precede a x en la lista de valores del tipo(el primer valor no tiene predecesor)
T'pos(x) devuelve la posición que ocupa x en la lista de valores del tipo (al primer valor le corresponde la posición 0)
T'val(x) devuelve el valor correspondiente a la posición x en la lista de valores del tipo
T'first devuelve el valor más pequeño del tipo
T'last devuelve el mayor valor del tipo
T'range devuelve el número de valores posibles del tipo
x:=Día'succ(Mar); --x toma el valor Mie
x:=Día'pred(Mar); --x toma el valor Lun
y:=Día'Pos(Mar); --y toma el valor 1
x:=Día'Val(3); --x toma el valor Jue
Ada también tiene un tipo predefinido, float, para representar números reales, cuyo rango y precisión dependen de la implementación. No obstante, el programador también puede definir sus propios reales con dos posibles formatos: coma fija y coma flotante.
Al definir un tipo real de coma flotante se puede especificar el número de dígitos significativos, y el rango de valores posibles.
type rflotante is digits 5 range
-1.0..1.0;
Al definir un tipo real de coma fija, se pretende obtener una precisión definida. Los números reales en coma fija se pueden catalogar en: ordinarios y decimales. En el primer caso, se especifica el límite de error en su representación (delta) y, si se quiere, el rango de variación. En el segundo se indica el número de dígitos significativos y el incremento entre valores sucesivos admitidos (delta).
type rfija1 is delta 0.01 range
-1.0..1.0; --Coma fija ordinario
type rfija2 is delta 0.01 digits
5; --Coma fija decimal
En el caso de números decimales en coma fija, el delta tiene que ser potencia de 10.