如何用if语句在Ada中返回3个浮点值的中位数(转为整数)
修正Ada中位数计算函数的逻辑错误
你的代码逻辑存在分支覆盖不全的问题,导致部分输入场景下会错误返回最大值或最小值,而非中位数。比如输入1.0, 5.0, 3.0时,第一个条件Fl3 >= Fl1成立,后续判断Fl1 >= Fl2不成立,直接返回Fl2(5.0),但实际中位数应为3.0。
修正后的代码
function Median(Fl1, Fl2, Fl3: in Float) return Integer is begin -- 判断Fl1是否是中位数(处于Fl2和Fl3之间) if (Fl1 >= Fl2 and Fl1 <= Fl3) or (Fl1 <= Fl2 and Fl1 >= Fl3) then return Integer(Fl1); -- 判断Fl2是否是中位数(处于Fl1和Fl3之间) elsif (Fl2 >= Fl1 and Fl2 <= Fl3) or (Fl2 <= Fl1 and Fl2 >= Fl3) then return Integer(Fl2); -- 剩下的情况Fl3必然是中位数 else return Integer(Fl3); end if; end Median;
逻辑说明
- 核心思路是验证每个数值是否处于另外两个数值之间(大于等于其中一个,同时小于等于另一个),满足该条件的数值即为中位数。
- 这种写法覆盖了所有可能的数值大小组合,不会出现逻辑遗漏。
内容的提问来源于stack exchange,提问作者Zeptuz
相关产品推荐
相关产品推荐

