如何在Ada中的if语句中有多个条件

时间:2016-04-28 14:48:33

标签: if-statement conditional ada

我如何在if语句中使用多个条件?

EG。程序会向用户询问一组问题:

1。)输入0到1000之间的高度

(用户输入数据)

2。)输入0到500之间的速度

(用户输入数据)

3.)输入0到200之间的温度

(用户输入数据)

程序然后打印回来

  1. altitude =用户值
  2. velocity =用户值
  3. temperature =用户值//忽略这些列表编号
  4. 我在我的(.ads)文件中设置了每个范围都有一个临界值。

    我想创建一个包含多个条件的if语句。 in pseudo:如果速度=临界速度&温度=临界温度&海拔=临界海拔 然后打印(“一些消息”) 否则什么都不做

2 个答案:

答案 0 :(得分:5)

syntax of an if-statement

if_statement ::= 
    if condition then
      sequence_of_statements
   {elsif condition then
      sequence_of_statements}
   [else
      sequence_of_statements]
    end if;

syntax of “condition”

condition ::= boolean_expression

(即,恰好是布尔值的表达式); syntax of “expression”

expression ::= 
     relation {and relation}  | relation {and then relation}
   | relation {or relation}  | relation {or else relation}
   | relation {xor relation}

所以你的代码看起来像

if velocity = critical_velocity 
   and temperature = critical_temperature 
   and altitude = critical_altitude 
then 
   print ("some message”); 
else
   null;
end if;

你可以省略else条款,如果出于某种原因你不应该检查第一部分的其余条件,你可以说and then而不是普通and已经是False。这称为短路评估,它不是不是 Ada中的默认值(它在C中)。

if X /= 0 and Y / X > 2 then
即使X为0,

也会评估Y / X

答案 1 :(得分:4)

在Ada中,您将使用不是布尔运算符:

if Velocity = Critical_Velocity
  and Temperature = Critical_Temperature
  and Altitude = Critical_Altitude
then
    Ada.Text_IO.Put_Line ("Crash");
else
  ...
end if;

评估订单很重要时,您将使用然后或其他语法(否则编译器可以更改优化顺序)。 表达式将以'然后'/'或其他'顺序进行评估。

if Velocity = Critical_Velocity
  and then Temperature = Critical_Temperature
  and then Altitude = Critical_Altitude
then
    Ada.Text_IO.Put_Line ("Crash");
else
  ...
end if;

使用,您可以写如下:

if Velocity = Critical_Velocity
  or else Temperature = Critical_Temperature
  or else Altitude = Critical_Altitude
then
    Ada.Text_IO.Put_Line ("Crash");
else
  ...
end if;

请注意,您不能将以及混合在一起(因为这会给开发人员带来许多困惑)。 如果你这样做,你必须使用括号括起来。

if (Velocity = Critical_Velocity and Temperature = Critical_Temperature)
  or else Altitude = Critical_Altitude
then
    Ada.Text_IO.Put_Line ("Crash");
else
  ...
end if;