0

我有这个函数通过高斯消去法求解3x4矩阵。但我在运行程序时遇到了这个错误。

[错误]Unit1.pas(79):需要标识符,但找到“ARRAY”

[错误]Unit1.pas(79):未声明的标识符:“TArray”

函数Solve3x4MatrixByGaussianElimination(A:扩展数组的数组):TArray<Extended>;常数行数=3;列=4;无功功率,无功功率i、 j,k:整数;因子:扩展;十: 扩展数组;开始设置长度(X,行);对于i:=0到行-2 do开始对于k:=i+1到行-1 do开始如果Abs(A[i,i])<Abs(A[k,i]开始对于j:=0到Cols-1 do开始系数:=A[i,j];A[i,j]:=A[k,j];A[k,j]:=系数;结束;结束;结束;对于k:=i+1到行-1 do开始系数:=A[k,i]/A[i,i];对于j:=i到列-1 doA[k,j]:=A[k、j]-系数*A[i,j];结束;结束;X[行-1]:=A[行-1,列-1]/A[行-1、行-1];对于i:=行-2到0 do开始X[i]:=A[i,第1列];对于j:=i+1到Rows-1 doX[i]:=X[i]-A[i,j]*X[j];X[i]:=X[i]/A[i,i];结束;结果:=X;结束;

我想知道如何解决这个问题,我一直在寻找一些解决方案,例如我需要使用的用途,但仍然失败了。我正在研究Delphi 7。

1
  • 10
    当你“运行”程序时,你不会得到错误,但当你试图编译它时T阵列<扩展>Delphi 7发布几年后,Delphi 2009中添加了。所以你需要使用扩展的数组而不是。要将此类类型用作函数返回值类型,需要声明type TExtendedArray=扩展数组或类似,详见众多SO Q&A。 评论 6月23日19:21

1答案1

重置为默认值

泛型是在Delphi 2009中引入的,它们在Delphi 7中根本不存在,这就是为什么你在T阵列<扩展>.

如果你真的想返回一个动态数组,你需要一个显式的类型例如:

类型TArrayOfExtended=扩展数组;函数解算3x4MatrixByGaussianElimination(A:…):TArrayOfExtended;...无功功率,无功功率...十: 扩展的数组;开始...结果:=X;结束;

也就是说,当你使用数组。。。直接在参数类型中,它将参数声明为打开数组,不是动态阵列。您不能使用…数组的数组。。。作为参数类型,因为开放数组的开放数组没有意义。

在这种情况下,要传入二维数组,可以使用以下任一方法:

  • 静态数组:

    类型TMatrix=扩展数组[0..3]的数组[0..2];TArrayOfExtended=扩展的数组;函数Solve3x4MatrixByGaussianElimination(var A:TMatrix):TArrayOfExtended;
  • 动态阵列的动态阵列:

    类型TArrayOfExtended=扩展数组;T2DArrayOfExtended=TArrayOf Extended的数组;函数解算3x4MatrixByGaussian消除(A:T2DArrayOfExtended):TArrayOf Extended;
  • 1
    为什么要将参数设置为var参数而不是const参数? 评论 6月24日4:51
  • 1
    因为函数正在修改数组的内容 评论 6月24日14:28
  • 哎哟,对不起,我错过了。 评论 2天前

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.