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:

loop
    -- Bloque de código a repetir
    exit when condición;
end loop;

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:

for variable in rango loop
    -- Bloque de código a repetir
end loop;

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:

while condición loop
    -- Bloque de código a repetir
end loop;

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.

© Copyright 2024. Todos los derechos reservados