next up previous contents
Siguiente: while Subir: Estructuras repetitivas Anterior: Estructuras repetitivas   Índice General

loop

La estructura loop nos permite repetir un bloque de código infinitas veces. Se expresa así:

          loop 
                -----; 
                -----; 
          end loop;

Si queremos que, cuando se cumpla una determinada condición, Ada salga del bucle, debemos utilizar una frase exit indicando la condición de salida. También podemos hacerlo con un bucle if y una frase exit. Por ejemplo, los dos fragmentos de código siguientes son equivalentes:

  loop                             loop
     -----;                           -----;
     exit when Total > 300;           if Total > 300 then
     -----;                              exit;
  end loop;                           end if;
                                      -----;
                                   end loop;

En caso de que tengamos varios bucles anidados (uno dentro de otro), al decirle a Ada exit le estamos indicando que debe salir del bucle donde está el exit (el bucle más interno). Por ejemplo:

          loop 
              -----;
              loop
                 -----
                 -----
                 exit when Condicion_1;
              end loop;
              -----;
              exit when Condicion_2; 
              -----; 
          end loop;

El primer exit le está diciendo a Ada que cuando se cumpla su condición salga del bucle más pequeño. El segundo exit le está diciendo que, cuando se cumpla la segunda condición salga del bucle más grande.

La ejecución de este programa sería así. Ada comienza a ejecutar el bucle grande. Tras ejecutar la primera línea del bucle grande, comienza a ejecutar el bucle pequeño, y no sale de él hasta que se cumpla Condición_1. Cuando Ada sale del bucle pequeño, continua ejecutando el resto de las líneas del bucle grande hasta llegar al exit del bucle grande. Si su condición es cierta, Ada sale del bucle grande (no ejecuta el resto de líneas); si es falsa, ejecuta el resto del líneas y vuelve a ejecutar el bucle grande desde el principio.

Como ejemplo de uso, veamos cómo podemos hacer el menú de un programa.

          with Text_IO;
          procedure Ejemplo_Menu is
             Opcion : Character;
          begin
             loop
	     
                Text_IO.Put_Line ("Menu");
                Text_IO.Put_Line ("1. Entrar datos");
                Text_IO.Put_Line ("2. Mostrar datos");
                Text_IO.Put_Line ("3. Calcular");

                loop
                   Text_IO.Get (Opcion);
                   exit when Opcion in '1'..'3';
                   Text_IO.Put_Line ("Opcion incorrecta");
                end loop;

                case Opcion is
                   when '1' =>
                        ...
                        ...
                   when '2' =>
                        ...
                   when '3' =>
                        ...
                        ...
                   when others =>
                        null;
                end case;

             end loop;
          end Ejemplo_Menu;


next up previous contents
Siguiente: while Subir: Estructuras repetitivas Anterior: Estructuras repetitivas   Índice General
Javier Miranda 2002-10-03