Не могу вызвать функцию определителя от переменной. Помогите.Посмотрите в чем ошибка. Очень надо!
Сообщение отредактировано: Ilius -
Опредеитель матрицы, найдите ошибку |
Опредеитель матрицы, найдите ошибку |
Ilius |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
Не могу вызвать функцию определителя от переменной. Помогите.Посмотрите в чем ошибка. Очень надо!
Сообщение отредактировано: Ilius - Прикрепленные файлы matr.rar ( 48.87 килобайт ) Кол-во скачиваний: 319 |
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Скажи конкретнее: где возникает ошибка, при каких твоих действиях, какая именно ошибка (номер и т.п.)
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Ilius |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
Когда пытаюсь вызвать функцию определителя при нажатии на кнопку:(Ошибка такая:[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 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
Короче сделал сам. И еще посмотрите почему пишет при компиляции этой процедуры(что то не то с индексами 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 - |
volvo |
Сообщение
#5
|
Гость |
Цитата Короче сделал сам. Что ты говоришь? RuSA тут совсем ни при чем? Ну, коли сделал сам, то значит и с этим вопросом справишься... |
Ilius |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
о какой умный можно было и не предиратсья к словам если все знаешь а просто помочь!
Сообщение отредактировано: Ilius - |
Ilius |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 27 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
Почему эта процедура(транспонирование матрицы) работает токо когда в результате получается квадратная матрица:
Код 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; |
Текстовая версия | 22.12.2024 9:42 |