У меня есть эта функция для решения матрицы 3x4 методом исключения Гаусса. Но я получил эту ошибку при запуске программы.
[Ошибка] Unit1.pas(79): ожидался идентификатор, но найден «МАССИВ».
[Ошибка] Unit1.pas(79): Необъявленный идентификатор: «TArray».
function Solve3x4MatrixByGaussianElimination(A: array of array of Extended): TArray<Extended>;
const
Rows = 3;
Cols = 4;
var
i, j, k: Integer;
factor: Extended;
X: array of Extended;
begin
SetLength(X, Rows);
for i := 0 to Rows - 2 do
begin
for k := i + 1 to Rows - 1 do
begin
if Abs(A[i, i]) < Abs(A[k, i]) then
begin
for j := 0 to Cols - 1 do
begin
factor := A[i, j];
A[i, j] := A[k, j];
A[k, j] := factor;
end;
end;
end;
for k := i + 1 to Rows - 1 do
begin
factor := A[k, i] / A[i, i];
for j := i to Cols - 1 do
A[k, j] := A[k, j] - factor * A[i, j];
end;
end;
X[Rows - 1] := A[Rows - 1, Cols - 1] / A[Rows - 1, Rows - 1];
for i := Rows - 2 downto 0 do
begin
X[i] := A[i, Cols - 1];
for j := i + 1 to Rows - 1 do
X[i] := X[i] - A[i, j] * X[j];
X[i] := X[i] / A[i, i];
end;
Result := X;
end;
Интересно, как это решить. Я искал какое-то решение, например, «Использование», которое мне нужно использовать, но все равно не удалось. Я работаю на Delphi 7.





Дженерики были представлены в Delphi 2009, их просто еще не существовало в Delphi 7, поэтому вы получаете сообщение об ошибке TArray<Extended>.
Если вы действительно хотите вернуть динамический массив, вам понадобится явный type, например:
type
TArrayOfExtended = array of Extended;
function Solve3x4MatrixByGaussianElimination(A: ...): TArrayOfExtended;
...
var
...
X: TArrayOfExtended;
begin
...
Result := X;
end;
При этом, когда вы используете array of ... непосредственно в типе параметра, он объявляет параметр как открытый массив, а не как динамический массив. Вы не можете использовать array of array of ... в качестве типа параметра, потому что Open Array или Open Array не имеет смысла.
В этой ситуации для передачи 2D-массива вы можете использовать либо:
статический массив:
type
TMatrix = array[0..2] of array[0..3] of Extended;
TArrayOfExtended = array of Extended;
function Solve3x4MatrixByGaussianElimination(var A: TMatrix): TArrayOfExtended;
Динамический массив динамического массива:
type
TArrayOfExtended = array of Extended;
T2DArrayOfExtended = array of TArrayOfExtended;
function Solve3x4MatrixByGaussianElimination(A: T2DArrayOfExtended): TArrayOfExtended;
Зачем делать параметр параметром var, а не const?
Поскольку функция изменяет содержимое массива
Ой, извини, я это пропустил.
Вы получаете ошибку не при «запуске» программы, а при попытке ее скомпилировать. В любом случае: дженерики вроде
TArray<Extended>были добавлены в Delphi 2009, через несколько лет после выпуска Delphi 7. Поэтому вместо этого вам нужно использоватьarray of Extended. Чтобы использовать такой тип в качестве типа возвращаемого значения функции, вам необходимо объявитьtype TExtendedArray = array of Extendedили аналогичный, как подробно описано в многочисленных вопросах и ответах по SO.