Когда пытаюсь вызвать функцию определителя при нажатии на кнопку:(Ошибка такая:[Error] kalkulyator_matric.pas(500): Record, object or class type required)
Код
procedure TForm1.DetermClick(Sender: TObject);
var
A : TMatrixData;
i, j : integer;
X : real;
begin
for i:=0 to StringGrid1.ColCount-1 do
for j:=0 to StringGrid1.RowCount-1 do
begin
A[i,j]:=StrToFloat(StringGrid1.Cells[i,j]);
end;
// вычсиление определителя
X := A.Det; <- тут
form2.rezdet.Text:=floatTostr(x);
form2.Show;
form1.Hide;
end;
из отдельного модуля в котором содержится эта функция:
Код
function TMatrix.Det: Extended;
var
Temp, A: TMatrixData;
Cols, Rows, Count: Word;
i, j, k: Integer;
begin
if not Square then
Error(SNotSquare, 1);
Count := Length(FData);
Result := 1;
SetLength(A, Count, Count);
SetLength(Temp, 1, Count);
for i := 0 to Count - 1 do
for j := 0 to Count - 1 do
A[i, j] := FData[i, j];
for i := 0 to Count - 2 do {Начало преобразования к верхнему треугольному виду}
begin
for j := i to Count - 1 do {* Поиск }
begin {* нулевых }
Rows := 0; {* строк }
Cols := 0; {* и }
for k := i to Count - 1 do {* столбцов }
begin {* в }
Rows := Rows + Ord(A[j, k] = 0); {* матрице }
Cols := Cols + Ord(A[k, j] = 0); {* }
end; {* }
if Rows + Cols = 0 then {* }
Break; {* }
if (Cols = Count - i) or (Rows = Count - i) then {* }
begin {* }
Result := 0; {* }
Exit {* }
end {* }
end; {* }
if A[i, i] = 0 then
for j := i + 1 to Count - 1 do
if A[j, i] <> 0 then
begin
Result := -Result; {* меняем строку }
Temp[0] := A[i]; {* на строку с }
A[i] := A[j]; {* первым }
A[j] := Temp[0]; {* ненулевым }
Break {* элементом }
end;
for j := i + 1 to Count - 1 do
if A[j, i] <> 0 then
begin
for k := i + 1 to Count - 1 do
A[j, k] := A[j, k] - A[i, k] * A[j, i] / A[i, i];
A[j, i] := 0
end
end; {Конец преобразования}
for i := 0 to Count - 1 do { Определитель как произведение }
Result := Result * A[i, i]; { элементов на главной диагонали}
end;