如何在Ada中的if语句中使用多个条件
问题描述:
如何在if语句中使用多个条件?如何在Ada中的if语句中使用多个条件
例如,用户被询问的一组由节目问题:
1)输入的高度介于0和1000
(在用户数据类型)
2.)在0和500之间
输入速度(在用户数据类型)
3.)输入温度介于0和200
(在用户数据类型)
个那么程序打印背面
- 高度=用户值
- 速度=用户值
- 温度=用户值//忽略那些列表编号
我在已经设置我( .ads)文件中,每个范围都有一个批处理值。
我想创建一个具有多个条件的if语句。 在伪:如果速度=临界速度&温度=临界温度&高度=临界高度 然后打印(“一些信息”) 别的什么也不做
答
if_statement ::=
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
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
and then
如果由于某种原因,你不应该检查其余条件如果第一部分已经是False
。这称为短路评估,它的不是 Ada中的默认值(它在C中)。
if X /= 0 and Y/X > 2 then
评估Y/X
即使X为0。
答
在阿达您将使用和,或和不布尔运算符:
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;
+0
也有异或。 – darkestkhan
谢谢西蒙!一个非常迭代的细分,非常有帮助:) – DaveSwans
这里是一个链接到另一个问题,我不能问在评论中,因为它太长的评论。如果你可以请摆脱一些光,这将非常感激。 http://stackoverflow.com/questions/36957726/shortened-method-to-reduce-statements-in-an-ada-procedure – DaveSwans