next up previous contents
Siguiente: Elección del bucle más Subir: Estructuras repetitivas Anterior: while   Índice General

for

Si tenemos que repetir el bucle un número exacto de veces (que conocemos antes de empezar el bucle), debemos utilizar el bucle for. Al bucle for debemos asociarle una variable. Esta variable la crea automáticamente cuando comienza a ejecutar el bucle y la utiliza para llevar la cuenta de cuantas veces ha hecho el bucle. Podemos decirle a Ada que cuente hacia adelante o hacia detrás.

 
  for Contador in 1 .. 10 loop     for Indice in reverse 25 .. 50 loop 
      -----;                          -----; 
      -----;                          -----; 
  end loop;                        end loop;

Ada crea la variable Contador y la utiliza para llevar la cuenta del número de veces que repite el código que hemos puesto dentro del bucle. En el primer ejemplo, como le hemos dicho que cuente hacia adelante, llevará la cuenta como 1, 2, 3, ..., 10. En el segundo ejemplo Ada crea la variable Indice, pero esta vez cuenta al revés (50, 49, ..., 25).

Ada sabe que la variable que lleva la cuenta del bucle es una variable especial que podemos leer, pero nunca modificar. Sólo puede modificarla Ada incrementándola o decrementándola al repetir el bucle for.

El indice del bucle puede ser cualquier tipo discreto (enteros o enumerados), pero no de tipo flotante. En caso de ambiguedad, debemos ayudar a Ada a saber cual es el tipo de dato que debe utilizar para realizar la cuenta. Por ejemplo, si tenemos el tipo:

   type T_Colores is (Rojo, Amarillo, Naranja, Verde, Azul);
   type T_Semaforo is (Rojo, Amarillo, Verde);

...podemos escribir:

          for Indice in Rojo .. Azul loop
              ...
          end loop;

...ya que Ada sabe que el único tipo enumerado que tiene el valor Azul es el tipo T_Colores y, por tanto, deduce que la variable Color debe ser de tipo T_Colores. Sin embargo, si escribimos:

          for Indice in Rojo .. Verde loop
              ...
          end loop;

...Ada no sabe si Color debe ser de tipo T_Colores o de tipo T_Semaforo. Para resolver esta ambiguedad debemos especificar el tipo de una de las siguientes formas:

      --  METODO 1
      ------------
          for Color in T_Colores'(Rojo) .. Verde loop
              ...
          end loop;

      --  METODO 2
      ------------
          for Color in T_Colores range Rojo .. Verde loop
              ...
          end loop;


next up previous contents
Siguiente: Elección del bucle más Subir: Estructuras repetitivas Anterior: while   Índice General
Javier Miranda 2002-10-03