Anterior | Superior | Siguiente

Guía de referencia básica de Ada 95

Tipos simples o escalares.

Introducción.

Los tipos escalares se clasifican en: tipos enumerados, tipos enteros y tipos reales. Los tipos enumerados y los tipos enteros pertenecen a la categoría de tipos discretos u ordinales que se caracterizan porque a cada valor le corresponde una posición que se representa por un número entero. Los tipos enteros y reales se clasifican también como tipos numéricos. Todos los tipos escalares admiten los operadores relacionales, los tipos numéricos admiten diversos operadores aritméticos.

Tipos enumerados.

Los tipos enumerados se definen enumerando la lista de valores literales del tipo (un valor literal enumerado puede ser un carácter literal o una secuencia de caracteres válida como identificador).

type Días is (Lunes,Martes,Miércoles,Jueves,Viernes,Sabado,Domingo);
type Color is (Rojo,Azul,Amarillo);

El orden y la posición de los valores de un tipo enumerado vienen determinados por el orden en que se enumeran (al primer valor de la lista le corresponde el valor cero). Tipos enumerados distintos pueden definirse con literales iguales, cuando el uso de estos literales pueda resultar ambiguo se deberán cualificar con el nombre del tipo:

type Semaforo is (Rojo,Amarillo,Verde);
...
for A in Color'(Rojo)..Color'(Amarillo) loop
...

Se pueden definir subtipos de un tipo enumerado especificando un rango de valores:

subtype Laborables is Días range Lunes..Viernes;

La entrada/salida de valores de un tipo enumerado se realiza con el paquete Enumeration_IO.

Tipos carácter.

Un tipo carácter es cualquier tipo enumerado que tenga al menos un valor literal que sea un carácter literal. Está predefinido el tipo Character que comprende los 256 caracteres del conjunto de caracteres del lenguaje.

Tipos booleanos.

Existe predefinido en el paquete estándar un tipo enumerado llamado Boolean con los valores True y False.

Tipos enteros.

Los tipos enteros se dividen en enteros con signo y modulares, cuya aritmética está definida en función de un módulo (si A y B son variables de un tipo modular con módulo M, pueden tomar valores comprendidos entre 0 y M - 1, y una expresión como "A + B" representa el "resto de la división (A +B) / M". En los enteros con signo está predefinido el tipo Integer, con dos subtipos: Natural y Positive que abarcan todo el rango positivo de los enteros incluyendo, o no, el cero, respectivamente.

Un entero con signo se define especificando un rango de valores enteros, mientras que un entero modular requiere un módulo, que debe ser un valor entero positivo.

type Sig_Byte is range 0..255; --tipo entero con signo (de 0 a 255)
type Mod_Byte is mod 256; --tipo entero modular (con módulo 256, valores de 0 a 255)

En ambos casos se pueden definir subtipos especificando un rango de valores comprendido en los valores del tipo.

subtype De_30_A_90 is Sig_Byte range 30..90;

La entrada/salida de valores de un entero con signo se realiza con el paquete Integer_Io. La entrada/salida de valores de un entero modular se realiza con el paquete Modular_Io. Se puede realizar entrada/salida de valores del tipo predefinido integer usando el paquete no genérico Ada.Integer_Text_Io.

Tipos reales.

Los tipos reales se dividen en reales en coma flotante y reales en coma fija; los reales en coma fija pueden a su vez ser ordinarios o decimales. En todos los casos representan aproximaciones de los números reales matemáticos, con un límite de error relativo en el caso de coma flotante y absoluto en el caso de coma fija. Está predefinido el tipo Float que designa números reales en coma flotante.

Se pueden definir tipos en coma flotante especificando la precisión relativa deseada por medio de un valor entero que indique el número de dígitos requeridos. También se puede especificar un rango real para los valores del tipo.

type Real is digits 8;
type Real_Corto is digits 5 range -1.0 .. 1.0;

Para los tipos en coma fija se debe especificar el límite absoluto de error (delta), que debe ser potencia de 10 en el caso de los decimales (para los que también se debe especificar el número total de dígitos a representar), y si se desea un rango real.

type Real_Fijo is delta 0.125 range -100000.0 .. 100000.0; --tipo fijo ordinario
type Tipo_Dec is delta 0.01 digits 6 range -1000.00..1000.00; --tipo fijo decimal

La entrada/salida de valores de un tipo real en coma flotante se realiza con el paquete Float_Io. La entrada/salida de valores de un tipo real en coma fija ordinario se realiza con el paquete Fixed_Io. La entrada/salida de valores de un tipo real en coma fija decimal se realiza con el paquete Decimal_Io. Se puede realizar entrada/salida de valores del tipo predefinido float usando el paquete no genérico Ada.Float_Text_Io.

Atributos de los tipos escalares.

Llamamos atributos de los tipos escalares a determinadas operaciones especiales que permiten averiguar propiedades del tipo y que se invocan cualificadas por el nombre del tipo mediante un apóstrofe (si T es un tipo escalar y Op una operación con un parámetro, X, para ejecutar Op se escribe T'Op(X)); las hay aplicables a cualquier tipo escalar y otras que dependen de la categoría a la que pertenezca el tipo.

Atributos generales de los escalares.

A cualquier tipo escalar, T, le son aplicables, entre otros, los siguientes atributos:

T'First Devuelve el valor más pequeño del tipo T.
T'Last Devuelve el valor más grande del tipo T.
T'Range Devuelve el rango T'First..T'Last.
T'Succ(V) Siendo V un valor de tipo T, devuelve el valor que le sigue (en los tipos reales depende de la representación). T'Succ(T'Last) no pertenece al tipo T.
T'Pred(V)

Siendo V un valor de tipo T, devuelve el valor que le precede (en los tipos reales depende de la representación). T'Pred(T'First) no pertenece al tipo T.

T'Image(V) Siendo V un valor de tipo T, devuelve una ristra con la representación literal de V.
T'Width Devuelve el número máximo de caracteres que requerirá un literal de tipo T devuelto por T'Image(V).
T'Value(S) Siendo S una ristra con la representación literal de un valor de tipo T, devuelve el valor correspondiente.

Atributos de los tipos discretos.

A cualquier tipo discreto, T, le son aplicables los siguientes atributos:

T'Pos(V) Siendo V un valor de tipo T, devuelve la posición de V en el rango de valores de T.
T'Val(P) Siendo P un valor entero, devuelve el valor de T que le corresponde (de no existir se produce un Constraint_Error).

Atributos de los tipos reales.

Permiten conocer datos relacionados con la precisión del tipo (dígitos, delta, escala, etc.).

© Grupo de Estructuras de Datos y Lingüística Computacional - ULPGC.

Anterior | Superior | Siguiente