是否可以在Ada中动态创建2d数组,而无需使用'声明'?

时间:2015-11-11 12:45:30

标签: arrays matrix multidimensional-array ada

我需要创建一些处理任意大小矩阵的函数。我熟悉使用的declare语法here,但这是针对大学任务的,我的教授告诉我,使用'声明'有矫枉过正。我无法在网上找到任何相关信息,有什么帮助吗?

基本上我想通过键盘获取矩阵大小,然后使用生成的矩阵,我被declare困住了 目前我有:

type myMatrix is array (Natural range <>, Natural range <>) of Integer; 
type myVector is array (Natural range <>) of Integer;       

我用它作为:

procedure Lab1 is
 begin
 declare A, B: myVector(1..5):=
 (3, 14, 15, 92, 6);

不允许在运行时指定大小,并且:

  declare 
    int1:Integer:=generate_random_number(50)+2; 
    int3:Integer:=generate_random_number(50)+2; -- +2 so we don't get length/size 0 or 1
    X, Y:myVector(1..int1):=(others=>generate_random_number(20));
    MT:myMatrix(1..int1, 1..int3):=(others =>(others=>generate_random_number(10))); -- 'others' used for all the unmentioned elements, http://rosettacode.org/wiki/Array_Initialization
    MS:myMatrix(1..int3, 1..int1):=(others =>(others=>generate_random_number(10))); 
    F3_result:myMatrix(1..int1, 1..int1);  
  begin 
    F3_result:=F3(X, Y, MT, MS);
  end;

使用declare块。我可能需要稍后使用生成的数组,据我所知,F3是一个局部变量,因此无法重用?

还有其他方法吗?

1 个答案:

答案 0 :(得分:6)

我同意您的老师的意见,在newfilename.txt之后放置一个declare一般会显示begin块是不需要的(我能想到的唯一例外是因为你想要的处理可能作为封闭子程序中变量声明的一部分而出现的异常。)

因此,您可以在子程序开头删除declarebegin,这应该是相同的。