![]() |
![]() |
Ilius |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Не могу вызвать функцию определителя от переменной.
![]() Сообщение отредактировано: Ilius - 17.12.2007 23:49 Прикрепленные файлы ![]() |
![]() ![]() |
Ilius |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Когда пытаюсь вызвать функцию определителя при нажатии на кнопку:(Ошибка такая:[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; |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 18:32 |