我正在创建一个使用if语句执行决策的过程。
我有四个变量:Altitude
,Velocity
,Angle
和Temperature
。
程序如下:
procedure Test3 is
begin
if (Integer(Status_System.Altitude_Measured)) >= Critical_Altitude
and (Integer(Status_System.Velocity_Measured)) >= Critical_Velocity
and (Integer(Status_System.Angle_Measured)) >= Critical_Angle
and (Integer(Status_System.Temperature_Measured)) >= Critical_Temperature
then
DT_Put ("message 1");
else
null;
end if;
end Test3;
这个程序很小便,认为如果每个变量都满足变量的所有关键值,那么它将打印一条消息。
我希望能够有更短的方式来削减陈述,以便我可以做到以下几点:
如果我有4个变量:海拔高度,速度,角度和温度 我希望有一个声明说,如果这些变量中至少有3个(无论哪三个都超过了它们的临界值) 然后显示一条消息。
甚至可以这样做吗?
我不愿意认为我必须为if语句编写每个可能的组合。
简而言之,我想要一个if语句,表明至少有3个变量显示在它们的标题值,所以打印一条消息。
对于这些变量中的至少2个也是如此。
答案 0 :(得分:4)
首先,您应该尝试使用特定类型的高度,速度,角度和温度。通过使用不同类型,您可以利用Ada提供的强类型,避免混淆或比较高度和温度等错误。您的示例表明它们都是Integer。一个可能的定义可能是(还有许多其他定义):
type Temperature is digits 5 range -273.15 .. 300.0;
type Angle is digits 5 range -180.0 .. 180.0;
这种定义的优点是你可以定义值的范围和精度(捕获器都具有有限的精度)。
计算错误数量是一种方法。 在Ada 2012中,你可以写:
修改强>
Errors : Natural := 0;
...
Errors := Errors + (if Altitude_Measured > Critical_Altitude then 1 else 0);
Errors := Errors + (if Velocity_Measured > Critical_Velocity then 1 else 0);
Errors := Errors + (if Angle_Measured > Critical_Angle then 1 else 0);
Errors := Errors + (if Temperature_Measured > Critical_Temperature then 1 else 0);
if Errors >= 2 then
...
end if;
答案 1 :(得分:1)
Boolean
是一个值为(False, True)
的枚举类型。与任何枚举类型一样,'Pos
属性可用于获取枚举文字列表中值的位置。因此,Boolean'Pos(B)
如果B
为假,则B
等于0,如果True_Count := Boolean'Pos(Integer(Status_System.Altitude_Measured) >= Critical_Altitude)
+ Boolean'Pos(Integer(Status_System.Velocity_Measured) >= Critical_Velocity)
+ Boolean'Pos(Integer(Status_System.Angle_Measured) >= Critical_Angle)
+ Boolean'Pos(Integer(Status_System.Temperature_Measured)) >= Critical_Temperature);
为真,则等于1。
因此你可以说
-XX:+UseParallelGC