Condiciones en Ada
SOLUCIONARIO
Condiciones en Ada
2025-01-26
Por
Occam's Razor

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

with Ada.Exceptions; use Ada.Exceptions;
procedure Guess is
   N   : constant Integer :=42;
   V   : Integer;
   H   : Integer;
begin  
   
   Put ("Adivina en que número estoy pensando ? ");
   Get (V);
   
   if V = N then
      Put_Line ("Bien hecho!");
   else
      Put_Line ("Sigue Probando!");
      Put_Line ("El número es " & (if V > N then " menor." else " mayor."));
      H := abs (V-N);
      Put ("Pista : ");
      
      if (H < 5) then Put_Line ("TE QUEMAS!");
      elsif (H < 10) then Put_Line ("CALIENTE!");
      elsif (H < 15) then Put_Line ("TEMPLADO");
      else Put_Line ("FRIO");
      end if;      
   end if;
end Guess;

Ada ofrece bloques if-elsif-else en los que cada bloque de instrucciones asociado a la condición debe empezar con la palabra clave then. El fin del bloque condicional if se marca con las palabras clave end if, y un único bloque else está permitido por cada bloque if.

Como sucede con la mayoría de lenguajes fuertemente tipados, es necesario declarar todas nuestras variables antes de utilizarlas. Esto se hace en el bloque definido entre las palabras clave is y begin en la declaración del procedimiento. Este bloque se conoce como regiones declarativas y nos permiten definir variables, constantes, subprograma y otro tipo de entidades.

Ada no ofrece un operador ternario como el de C, pero si permite utilizar bloques if como expresiones. El programa anterior muestra un ejemplo de como hacer esto:

Put_Line ("El número es " & (if V > N then " menor." else " mayor."));

RECUERDA

El operador & nos permite concatenar cadenas en Ada.

Esto se conoce como expresiones if en Ada y hay algunas restricciones sobre c omo se pueden usar:

  • Las expresiones que se devuelven en cada rama del if deben ser todas del mismo tipo.
  • Debe estar rodeado por parentesis
  • La rama else es obligatoria a no ser que then devuelva un valor boleano. En ese caso else es opcional y por defecto de considera else True.

Observa que las expresiones if no utilizamos las palabras reservadas end if para marcar el final.

Ada también ofrece un comando similar al switch del C, pero que se renombra como case. Su sintaxis es la siguiente:

case V is
  when 1 | 2 | 3 =>
    Put_Line ("El valor es 1, 2 o 3");
  when 4..10 =>
    Put_line ("El valor está entre 4 y 10");
  when others =>
    Put_line ("El resto de casos");
end case;

En Ada la variable de case debe ser lo que se llama una variable discreta… En lenguaje plano, debe ser un entero o un enumerado… como en C. Un comando case en Ada debe cubrir todos los casos posibles (lo que normalmente significa que tendremos que utilizar el caso others). Como podemos ver, no es necesaria una clausura break o similar al final de cada bloque, y podemos utilizar tnato rangos como varios valores para indicar los casos.

Al igual que sucede con if Ada soporta las conocidas como expresiones case. Utilizando este tipo de expresiones podemos escribir el código anterior de la siguiente forma:

Put_line 
  (case V is
    when 1|2|3 => "El valor es 1, 2 o 3",
    when 4..10 => "El valor esá entre 3 y 10",
    others => "El resto de casos);

Observad que la expresión case debe ir entre paréntesis, a no ser que ya vaya entre paréntesis debido a la forma en la que se usa, como por ejemplo en el código anterior en el cual, la expresión case está rodeada ya por los paréntesis de la llamada al procedimiento Put_Line. Además, los casos se separan con comas

Ada soporta la definición de constantes utilizando la palabra clave constant.

Ada soporta valores booleanos a través del tipo Boolean que el lenguaje define como el enumerado:

type Boolean is (False, True);

Y por lo tanto puede tomar los valores True o False.

Resumen

  • Soporta if ... then [else if/elseif then] ...[else] ...end if
  • No ofrece forma reducida de if, pero if se puede utilizar como expresión
  • No ofrece operador terciario, pero if se puede utilizar como expresión
  • Soporta booleanos: Boolean
  • Soporta switch con palabras clave case... when
  • Soporta constantes nativamente (CONSTANTE: constant Tipo:= val )

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)