如何用Ada编写返回3个浮点值中最大值的子程序?
Ada子程序求三个浮点数最大值的问题修正
原代码中的错误点:
- 主程序未命名:Ada语法要求所有程序单元必须有名称,原代码
procedure is不符合规范,需为主程序指定名称。 - 缺少输入输出包依赖:使用
Put/Get处理浮点数时,必须导入Ada.Text_IO及Ada.Text_IO.Float_IO包,否则无法识别这些输入输出操作。 - 错误的取整逻辑:函数返回
Float'Ceiling(X)会把最大值向上取整,违背了“返回原始最大值”的需求,应直接返回X。 - 程序结构不完整:主程序末尾缺少对应的
end语句,导致代码无法正常编译。 - 转义字符问题:代码中的
<是HTML转义字符,实际编写Ada代码时需替换为原生的<=运算符。
修正后的完整代码:
with Ada.Text_IO; use Ada.Text_IO; with Ada.Text_IO.Float_IO; use Ada.Text_IO.Float_IO; procedure Find_Largest is function Biggest(A, B, C: in Float) return Float is X: Float; -- Greatest value begin X := Float'Max(B, C); if A > X then X := A; end if; return X; end Biggest; A, B, C: Float; begin Put("Mata in tre flyttal: "); Get(A); Get(B); Get(C); Put("Det största av dessa värden är: "); Put(Biggest(A,B,C), Fore=>0, Aft=>2, Exp=>0); -- 保留两位小数示例,可按需调整Aft参数 end Find_Largest;
补充说明:
- 导入
Ada.Text_IO.Float_IO包后,才能正确处理Float类型的Get和Put操作。 - 简化了最大值判断逻辑:当A大于当前最大值X时直接赋值,否则无需操作,去掉冗余的
null分支。 - 输出时调整了
Aft参数为2,用于保留两位小数,若需要整数输出可设为0。
内容的提问来源于stack exchange,提问作者Zeptuz
相关产品推荐
相关产品推荐

