Guía mínima de Ada 95

Tipos estructurados.

Arrays.

Los arrays son estructuras homogéneas, es decir, están formados por un conjunto ordenado de elementos del mismo tipo que se pueden acceder individualmente mediante índices discretos.

En Ada hay dos clases de arrays: restringidos y no restringidos. Los restringidos son arrays para los que se especifica el tamaño en su definición (tamaño fijo). Los no restringidos son aquellos en los que el rango de los índices no se establece al definir el tipo, sino que se concreta posteriormente.

type Vector is array(1..10) of float; --array restringido de 10 elementos
type Libre is array(integer range <>) of float; --array no restringido
V: Vector;
L: Libre(1..10);

Si el array tiene más de una dimensión, se declara separando los rangos de cada dimensión mediante comas (",").
type Matriz is array(1..5,1..3) of integer;--matriz de 5x3
...
A: Matriz;

Los arrays tienen los siguientes atributos: First, Last, Range, Length. Si A es un array, entonces:

...
--Ejemplo que recorre una matriz escribiendo sus elementos
for i in A'Range(1) loop
   for j in A'First(2)..A'Last(2) loop
      put(A(i,j)); put(" ");
   end loop;
   new_line;
end loop;
...

Literales arrays e inicialización de arrays.

Se puede expresar un valor literal de tipo array utilizando paréntesis para agrupar los valores por filas y columnas. Se puede utilizar la palabra "others" para indicar un valor por defecto para las posiciones que no se especifiquen explícitamente. Un literal de tipo array se puede utilizar, entre otras cosas, para inicializar una variable de tipo array en su declaración.
...
    type matriz is array(1..5,1..5) of integer;
    type vector is array(1..5) of integer;
...
    v1 : vector := (1,2,3,4,5);
    v2 : vector := (9,8,7, others => 0);
    v3 : vector := (1 => 9, 3 => 8, 5 => 7, others => 0);
...
    m1 : matriz := (others => (others => 0));
    m2 : matriz := ((1,2,3,4,5),
                    (1,2,others => 0),
                    (1 => 9, 3 => 8, 5 => 7, others => 0),
                   others => (others => 0));
...
 

Rodajas (slices).

Se puede hacer referencia a un trozo de un array monodimensional, simplemente especificando sus límites. Este tipo de "corte" se conoce como rodaja o slice.

 v1(1..3):= v2(3..5);

Records.

Los records son estructuras heterogéneas, es decir, agregados de elementos del mismo o distintos tipos que se pueden acceder individualmente mediante su nombre.

Un record se define con la palabra "record", seguida de la declaración de los campos del record y "end record".

type Complejo is record
    real: float;
    imag: float;
end record;

Para acceder a una campo individual de un record se utiliza el operador punto ("."); mediante el nombre de la variable cualificada con el nombre del campo en cuestión:
...
x,w : Complejo; --Declaración de variables de tipo record
y   : array (1..20) of Complejo; --Declaración anónima de un array
...
x.real := 3.0;
x.imag := x.real;
y(7) := x;
...
y(1).real := 3.0;
...
 

Literales records e inicialización de records.

Se pueden formar literales records de dos formas:     x := (3.5, 7.1);     w := (real => 3.5, imag => 7.1);
    w := (imag => 7.1, real => 3.5);



[Anterior] [Inicio][Siguiente]