Ada语言计算三角形角度代码报错问题排查求助
Ada代码错误定位与修复方案
错误原因
- 语法错误1:
Calculate_Angles过程的入参列表存在冗余逗号:(Sa, Hc, : in Float)中Hc后面多了逗号,不符合Ada语法规范。 - 语法错误2:主程序末尾的
Put_Line("Welcome to the calculator!")后缺少分号。 - 类型不匹配错误:
Calculate_Angles要求入参是Float类型,但Angle_Program里定义的Hc、Sa是Integer类型,直接传参会触发类型不匹配报错。 - 过程调用逻辑错误:
Calculate_Angles是过程(Procedure)不是函数(Function),没有返回值,不能直接放在Put参数中调用;且调用时没有按要求传入2个入参+3个出参,仅传了1个Va,参数数量、顺序完全不符合定义。 - 单位逻辑错误:
Ada.Numerics.Elementary_Functions里的Arcsin/Arccos返回值为弧度,直接输出不符合角度计算需求,需要做单位转换。 - 变量缺失错误:
Angle_Program里仅定义了Va一个变量,缺少Vb、Vc两个out参数对应的接收变量。
修复方案
- 删除
Calculate_Angles入参列表里Hc后的冗余逗号,补全主程序末尾Put_Line的分号。 - 在
Angle_Program中新增Vb、Vc两个Float类型变量,用于接收过程的输出结果。 - 调用
Calculate_Angles时,先把Integer类型的Hc、Sa转换为Float类型作为入参传入,同时传入三个out参数。 - 对三角函数返回的弧度值做单位转换:
弧度值 * 180.0 / Ada.Numerics.Pi得到角度值。 - 调用过程完成后,分别打印三个角度变量的值。
修复后的完整代码
with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; with Ada.Float_Text_IO; use Ada.Float_Text_IO; with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions; with Ada.Numerics; use Ada.Numerics; procedure AdaO11 is -- 修复入参列表冗余逗号 procedure Calculate_Angles (Sa, Hc : in Float; Va, Vb, Vc : out Float) is begin -- 新增弧度转角度逻辑 Va := Arcsin(Sa / Hc) * 180.0 / Pi; Vb := Arccos(Sa / Hc) * 180.0 / Pi; Vc := 90.0; end Calculate_Angles; procedure Angle_Program is Hc, Sa : Integer; Va, Vb, Vc : Float; -- 补全三个输出接收变量 begin Put("Type in the length of the hypotenuse: "); Get(Hc); Put("Type in the opposite catheus: "); Get(Sa); New_Line; -- 按参数要求调用过程,入参做Float类型转换 Calculate_Angles(Float(Sa), Float(Hc), Va, Vb, Vc); Put("Va: "); Put(Va, 1, 2, 0); -- 输出保留2位小数 Put_Line("°"); Put("Vb: "); Put(Vb, 1, 2, 0); Put_Line("°"); Put("Vc: "); Put(Vc, 1, 2, 0); Put_Line("°"); end Angle_Program; Selection : Integer; begin Put_Line("Welcome to the calculator!"); -- 补全分号 Angle_Program; -- 调用角度计算逻辑 end AdaO11;
内容的提问来源于stack exchange,提问作者leun
相关产品推荐
相关产品推荐

