在ada记录中使用无约束数组

时间:2015-04-22 16:13:53

标签: ada

我有一个作业,我不知道从用户那里获得它们之前的条目数。在这个任务中,我将使用无界数组。一旦用户声明了这个最大数量,它将被用作数组的上限,并且将有三个这样的声明。然后,我需要接受该值来填充将保存在记录中的每个tose数组,该记录将保存在另一个数组中。然后,一旦填充,数组需要传递到另一个过程然后输出到屏幕。

我已经汇总了需要发生什么的演示。这不是任务,而只是一个粗略的想法/伪大的任务的一个小spart。我马上就遇到了在记录中使用无约束数组的问题。

WITH Ada.Text_IO; USE Ada.Text_IO;
WITH Ada.Integer_Text_Io; USE Ada.Integer_Text_Io;

    PROCEDURE Vehicles IS
       TYPE Year_Array IS ARRAY (Positive RANGE <>) OF Integer;
       TYPE Vehicle_Record IS
          RECORD
             Name: String (1 .. 40);
             Cars_Array : Year_Array;
             Trucks_Array: Year_Array;
             Bikes_Array : Year_Array;
          END RECORD;
       TYPE O_Array IS ARRAY (1 .. 4) OF Vehicle_Record;

       PROCEDURE Get_No_Vehicles (Cars, Trucks, Bikes :    OUT Positive) IS
       BEGIN
          Put("Total number of cars:");
          Get(Cars);
          Put("Total number of trucks:");
          Get(Trucks);
          Put("Total number of bikes:");
          Get(Bikes);
       END Get_No_Vehicles;

       Owner   : O_Array;
       Cars, Trucks, Bikes : Positive;
    BEGIN
       Get_No_Vehicles(Cars, Trucks, Bikes);
    -- Call a procedure that will get the the owner name and the year of each vehicle for all 4 owners.
    -- Call a procedure that will pull the records from the owner array and output to screen.
    END Vehicles;

有没有人建议如何使这项工作?我想在声明块中创建记录,但是在我将它传递给将输出整个数组的过程之前它将超出范围。我不知道如何继续。感谢您抽出时间来寻找。

1 个答案:

答案 0 :(得分:0)

在声明无界数组类型的变量时,我有一个类似的问题,我想在声明盒装数组的变量时传递范围实际值。在您的情况下,您声明了 3 个类型为 Year_array [无界] 的变量,但您没有在 cars_array、trucks_array 或 Bikes_array 中设置范围

Cars_Array : Year_Array; Trucks_Array:Year_Array; `Bikes_Array:Year_Array;

如果您知道 Cars、Trucks 和 Bikes 数组的范围,您应该这样做: enter code hereCars_array :Years_array(1..25); enter code heretrucks_aray: Years_array (1..15); ---

我不确定您的代码是否可以编译;但在任何情况下,您都必须在无界数组类型的实例中放入实际范围值。

Booch, G.、Bryan, D. (p. 108) 与 Ada 的软件工程。第 3 版1994. 本杰明/卡明斯出版社。加利福尼亚州雷德伍德城。