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:
A'First es el límite inferior del rango del primer índice
de A.
A'First(N) es el límite inferior del rango del N-ésimo
índice de A
A'Last es el límite superior del rango del primer índice
de A.
A'Last(N) es el límite superior del rango del N-ésimo
índice de A
A'Range es equivalente al rango A'First .. A'Last.
A'Range(N) es equivalente al rango A'First(N) .. A'Last(N).
A'Length es el número de valores del rango del primer
índice.
A'Length(N) es el número de valores del rango del N-ésimo
índice.
...
--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:
-
como agregado posicional, especificando los valores de todos los campos
en el orden adecuado y entre paréntesis
x := (3.5, 7.1);
-
como agregado nominal, especificando los nombres de los campos junto
con los valores
w := (real => 3.5, imag => 7.1);
w := (imag => 7.1, real => 3.5);
[Anterior] [Inicio][Siguiente]