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



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

我已经把需要发生的事情做了一个演示。这不是任务,只是大任务中一个小部分的粗略想法/伪想法。我马上遇到了在记录中使用无约束数组的问题。

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;

有人对如何实现这一点有什么建议吗?我曾想过在声明块中创建记录,但在将其传递给将输出整个数组的过程之前,它将超出范围。我不知道该怎么办。谢谢你花时间看。

我在声明无界数组类型的变量时遇到了类似的问题,在声明装箱数组的变量时,我希望传递范围实际值。在您的案例中,您声明了Year_array类型的3个变量,但没有在cars_array、trucks_array或Bikes_array 中设置范围

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

如果你知道汽车、卡车和自行车阵列的范围,你应该这样做:enter code hereCars_array:Years_array(1..25);enter code heretrucks_aray:年数组(1..15);---

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

Booch,G.,Bryan,D.(第108页)Ada的软件工程。1994年第3版。本杰明/卡明斯出版社。加利福尼亚州红木城。

最新更新