我有一个作业,我不知道从用户那里获得它们之前的条目数。在这个任务中,我将使用无界数组。一旦用户声明了这个最大数量,它将被用作数组的上限,并且将有三个这样的声明。然后,我需要接受该值来填充将保存在记录中的每个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;
有没有人建议如何使这项工作?我想在声明块中创建记录,但是在我将它传递给将输出整个数组的过程之前它将超出范围。我不知道如何继续。感谢您抽出时间来寻找。
答案 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 here
Cars_array :Years_array(1..25);
enter code here
trucks_aray: Years_array (1..15);
---
我不确定您的代码是否可以编译;但在任何情况下,您都必须在无界数组类型的实例中放入实际范围值。
Booch, G.、Bryan, D. (p. 108) 与 Ada 的软件工程。第 3 版1994. 本杰明/卡明斯出版社。加利福尼亚州雷德伍德城。