gpt4 book ai didi

ada - 从 Ada 中的函数返回可变大小的矩阵

转载 作者:行者123 更新时间:2023-12-04 03:09:35 28 4
gpt4 key购买 nike

我正在尝试为大学的一门类(class)学习 Ada,但我在围绕其中的一些想法时遇到了很多问题。

我目前的绊脚石:假设我有一个函数,它接受一个矩阵(只是一个二维整数数组),并返回一个新的、更小的矩阵(去掉第一行和第一列)。

我像这样声明矩阵和函数:

type MATRIX is array(INTEGER range <>, INTEGER range <>) of INTEGER;
function RemoveFirstRowCol (InMatrix: in MATRIX) return MATRIX is

然后我决定要返回的矩阵的大小:
     Result_matrix: MATRIX (InMatrix'First(1) .. InMatrix'Length(1) - 1, InMatrix'First(2) .. InMatrix'Length(2) - 1);

然后我进行计算并返回 Result_matrix。

所以这是我的问题:在运行它时,我发现如果我尝试将这个函数的结果返回到任何不是以正确大小声明的 Matrix 中,我会在运行时得到一个异常。

我的问题是,我这样做对吗?在我看来,我不应该提前知道函数在大小方面将返回什么。即使有一个声明的矩阵 更大 比我回来的那个,我仍然得到一个错误。再说一次,Ada 的整个想法是强类型,所以也许这是有道理的(我应该确切地知道返回类型)。

无论如何,我这样做是否正确,如果事先不知道返回矩阵的大小,真的没有办法使用这个函数吗?

谢谢,
伊丹

最佳答案

您不需要提前知道返回矩阵的大小,也不需要使用访问(指针)类型。只需在单元或块的声明部分调用您的函数,边界将自动设置:

procedure Call_The_Matrix_Reduction_Function (Rows, Cols : Integer) is

Source_Matrix : Matrix(1 .. Rows, 1 .. Cols);

begin
-- Populate the source matrix

-- ...

declare
Result : Matrix := RemoveFirstRowCol (Source_Matrix)
-- Result matrix is automatically sized, can also be declared constant
-- if appropriate.
begin
-- Process the result matrix

-- ...

end;
end Call_The_Matrix_Reduction_Function;

警告:由于结果矩阵是在堆栈上分配的,如果行数和列数很大,您可能会遇到问题。

关于ada - 从 Ada 中的函数返回可变大小的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1732027/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com