You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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参数对应的接收变量。

修复方案

  1. 删除Calculate_Angles入参列表里Hc后的冗余逗号,补全主程序末尾Put_Line的分号。
  2. 在Angle_Program中新增Vb、Vc两个Float类型变量,用于接收过程的输出结果。
  3. 调用Calculate_Angles时,先把Integer类型的Hc、Sa转换为Float类型作为入参传入,同时传入三个out参数。
  4. 对三角函数返回的弧度值做单位转换:弧度值 * 180.0 / Ada.Numerics.Pi得到角度值。
  5. 调用过程完成后,分别打印三个角度变量的值。

修复后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:24:04