![]() |
![]() ![]() |
![]() |
Ilius |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Не могу вызвать функцию определителя от переменной.
![]() Сообщение отредактировано: Ilius - 17.12.2007 23:49 Прикрепленные файлы ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Скажи конкретнее: где возникает ошибка, при каких твоих действиях, какая именно ошибка (номер и т.п.)
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Ilius |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 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; |
Ilius |
![]() ![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Короче сделал сам. И еще посмотрите почему пишет при компиляции этой процедуры(что то не то с индексами i и j?):
Код procedure TForm1.umnnachClick(Sender: TObject); var A, X : TMatrix; i, j : integer;y:real; begin y:=StrtoFloat(Edit1.Text); A:= TMatrix.Create( StringGrid1.RowCount, StringGrid1.ColCount); try // finally for i:=0 to StringGrid1.ColCount-1 do for j:=0 to StringGrid1.RowCount-1 do A[j, i]:= StrToFloat(StringGrid1.Cells[i,j]); X :=A.MultNum(y); for i:=0 to form2.StringGrid1.RowCount-1 do for j:=0 to form2.StringGrid1.ColCount-1 do form2.StringGrid1.Cells[i,j]:= floatTostr(X[i,j]); form2.Show; form1.Hide; finally A.Free; end; end; пишет: [Warning] kalkulyator_matric.pas(426): FOR-Loop variable 'i' may be undefined after loop [Warning] kalkulyator_matric.pas(423): FOR-Loop variable 'j' may be undefined after loop [Warning] kalkulyator_matric.pas(426): Variable 'j' might not have been initialized Сообщение отредактировано: Ilius - 19.12.2007 21:17 |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата Короче сделал сам. ![]() |
Ilius |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
о какой умный можно было и не предиратсья к словам если все знаешь а просто помочь!
Сообщение отредактировано: Ilius - 19.12.2007 23:47 |
Ilius |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Почему эта процедура(транспонирование матрицы) работает токо когда в результате получается квадратная матрица:
Код procedure TForm1.TransClick(Sender: TObject); var A, X : TMatrix; i, j : integer; begin form2.StringGrid1.ColCount:=StringGrid1.ColCount; form2.StringGrid1.RowCount:=StringGrid1.RowCount; A:= TMatrix.Create( StringGrid1.RowCount, StringGrid1.ColCount); for i:=0 to StringGrid1.ColCount-1 do for j:=0 to StringGrid1.RowCount-1 do A[j, i]:= StrToFloat(StringGrid1.Cells[i,j]); X := A.Transposing; for i:=0 to form2.StringGrid1.RowCount-1 do for j:=0 to form2.StringGrid1.ColCount-1 do form2.StringGrid1.Cells[i,j]:= floatTostr(X[j,i]); form2.Show; form1.Hide; end; |
![]() ![]() |
![]() |
Текстовая версия | 17.06.2025 15:16 |