En este tema, aprenderemos sobre las estructuras de control en Ada, que son fundamentales para dirigir el flujo de ejecución de un programa. Las estructuras de control permiten tomar decisiones, repetir acciones y seleccionar entre diferentes caminos de ejecución.
Contenido
Estructuras Condicionales
if - elsif - else
La estructura condicional if permite ejecutar un bloque de código si una condición es verdadera. Se puede extender con elsif y else para manejar múltiples condiciones.
Sintaxis:
if condición_1 then
    -- Bloque de código si condición_1 es verdadera
elsif condición_2 then
    -- Bloque de código si condición_2 es verdadera
else
    -- Bloque de código si ninguna condición anterior es verdadera
end if;Ejemplo:
procedure Ejemplo_If is
    A, B : Integer := 10;
begin
    if A > B then
        Put_Line("A es mayor que B");
    elsif A < B then
        Put_Line("A es menor que B");
    else
        Put_Line("A es igual a B");
    end if;
end Ejemplo_If;case
La estructura case permite seleccionar entre múltiples alternativas basadas en el valor de una expresión.
Sintaxis:
case expresión is
    when valor_1 =>
        -- Bloque de código para valor_1
    when valor_2 =>
        -- Bloque de código para valor_2
    when others =>
        -- Bloque de código para cualquier otro valor
end case;Ejemplo:
procedure Ejemplo_Case is
    Dia : Integer := 3;
begin
    case Dia is
        when 1 =>
            Put_Line("Lunes");
        when 2 =>
            Put_Line("Martes");
        when 3 =>
            Put_Line("Miércoles");
        when others =>
            Put_Line("Otro día");
    end case;
end Ejemplo_Case;Estructuras de Selección
select
La estructura select se utiliza principalmente en programación concurrente para manejar múltiples tareas y eventos.
Sintaxis:
select
    -- Bloque de código para la primera alternativa
or
    -- Bloque de código para la segunda alternativa
else
    -- Bloque de código si ninguna alternativa es seleccionada
end select;Ejemplo:
task type Tarea is
    entry Iniciar;
end Tarea;
task body Tarea is
begin
    select
        accept Iniciar do
            Put_Line("Tarea iniciada");
        end Iniciar;
    or
        delay 5.0;
        Put_Line("Tiempo de espera agotado");
    end select;
end Tarea;Estructuras de Iteración
loop
La estructura loop permite repetir un bloque de código indefinidamente hasta que se encuentre una instrucción de salida (exit).
Sintaxis:
Ejemplo:
procedure Ejemplo_Loop is
    Contador : Integer := 0;
begin
    loop
        Put_Line("Contador: " & Integer'Image(Contador));
        Contador := Contador + 1;
        exit when Contador = 10;
    end loop;
end Ejemplo_Loop;for loop
El bucle for se utiliza para iterar sobre un rango de valores.
Sintaxis:
Ejemplo:
procedure Ejemplo_For_Loop is
begin
    for I in 1 .. 10 loop
        Put_Line("Valor de I: " & Integer'Image(I));
    end loop;
end Ejemplo_For_Loop;while loop
El bucle while repite un bloque de código mientras una condición sea verdadera.
Sintaxis:
Ejemplo:
procedure Ejemplo_While_Loop is
    Contador : Integer := 0;
begin
    while Contador < 10 loop
        Put_Line("Contador: " & Integer'Image(Contador));
        Contador := Contador + 1;
    end loop;
end Ejemplo_While_Loop;Ejercicios Prácticos
Ejercicio 1: Condicionales
Escribe un programa que lea un número entero y determine si es positivo, negativo o cero.
Solución:
with Ada.Text_IO; use Ada.Text_IO;
procedure Determinar_Signo is
    Numero : Integer;
begin
    Put("Introduce un número: ");
    Get(Numero);
    
    if Numero > 0 then
        Put_Line("El número es positivo");
    elsif Numero < 0 then
        Put_Line("El número es negativo");
    else
        Put_Line("El número es cero");
    end if;
end Determinar_Signo;Ejercicio 2: Bucle for
Escribe un programa que imprima los números del 1 al 20.
Solución:
with Ada.Text_IO; use Ada.Text_IO;
procedure Imprimir_Numeros is
begin
    for I in 1 .. 20 loop
        Put_Line(Integer'Image(I));
    end loop;
end Imprimir_Numeros;Ejercicio 3: Bucle while
Escribe un programa que calcule la suma de los números del 1 al 100 usando un bucle while.
Solución:
with Ada.Text_IO; use Ada.Text_IO;
procedure Suma_While is
    Suma, Contador : Integer := 0;
begin
    while Contador <= 100 loop
        Suma := Suma + Contador;
        Contador := Contador + 1;
    end loop;
    Put_Line("La suma de los números del 1 al 100 es: " & Integer'Image(Suma));
end Suma_While;Conclusión
En esta sección, hemos cubierto las estructuras de control en Ada, incluyendo las estructuras condicionales (if, case), las estructuras de selección (select) y las estructuras de iteración (loop, for, while). Estas estructuras son esenciales para controlar el flujo de ejecución de un programa y son fundamentales para cualquier programador.
Asegúrate de practicar los ejercicios proporcionados para reforzar tu comprensión de estos conceptos. En el próximo tema, exploraremos los bucles en Ada con más detalle.
Curso de Programación en Ada
Módulo 1: Introducción a Ada
Módulo 2: Conceptos Básicos
- Variables y Tipos de Datos
 - Operadores y Expresiones
 - Estructuras de Control
 - Bucles en Ada
 - Subprogramas: Procedimientos y Funciones
 
Módulo 3: Tipos de Datos Avanzados
Módulo 4: Programación Modular
Módulo 5: Concurrencia y Programación en Tiempo Real
Módulo 6: Temas Avanzados
Módulo 7: Mejores Prácticas y Optimización
- Estilo de Código y Mejores Prácticas
 - Depuración y Pruebas
 - Optimización del Rendimiento
 - Consideraciones de Seguridad
 
