next up previous contents
Siguiente: Copia Subir: Formación (array) Anterior: Formación multidimensional   Índice General

Inicialización

Obviamente las formaciones pueden inicializarse mediante múltiples asignaciones individuales, o mediante bucles. Sin embargo, Ada también permite que las formaciones puedan inicializarse y asignarse mediante agregados (pudiendo utilizarse tango la notación posicional como la nombrada). Por ejemplo:

      type T_Vector5 is array(1 .. 5) of Float; 

      A : constant T_Vector5 := (2.0, 4.0, 8.0, 16.0, 32.0); 
      B : constant T_Vector5 := (1 => 2.0,  2 => 4.0,  
                                 3 => 8.0,  4 => 16.0, 
                                 5 => 32.0);

El agregado debe especificar todos los elementos de la formación. Si hay muchos elementos que deben tener el mismo valor inicial, podemos decirle a Ada los que son diferentes y utilizar la palabra reservada others para dar el valor del resto. Por ejemplo:

      type T_Vector500 is array(1 .. 500) of Float;
 
      V1 : T_Vector500 := (others => 0.0); 
      W  : T_Vector500 := T_Vector500'(10 => 1.3,  
                                       15 => -30.7,  
                                       others => 0.0);

También podemos especificar varios elementos del array mediante la barra vertical. Por ejemplo:

      type T_Tabla is array (1 .. 15) of Boolean; 
      Mi_Tabla : T_Tabla; 
      ... 
      Mi_Tabla := T_Tabla'(1 | 3 | 5 | 7 | 9 => True,  others => False);

También podemos especificar rangos. Por ejemplo, para inicializar a 1 los elementos 1, 6, 7, 8, 9 10 y el resto a cero:

      type T_Tabla is array(1 .. 15) of Natural; 

      Tabla_1 : T_Tabla :=T_Tabla'(1 | 6 .. 10 => 1,  others => 0); 
      Tabla_2 : T_Tabla := (1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0);

En el caso de las formaciones multidimensionales podemos utilizar agregados anidados para su inicialización. Por ejemplo:

  Matriz : array(0 .. 9, 1 .. 5) of Float := (others => (others => 1.0));.

  type T_Cuadrado is array (1 .. 10, 1 .. 10) of Integer; 
  ...
  Cuadrado : T_Cuadrado := T_Cuadrado'(4 => (5 => 1, others => 0), 
                                       others  => (others => 0)       
                                      );



Javier Miranda 2002-10-03