IPB
ЛогинПароль:

> Опредеитель матрицы, найдите ошибку
Ilius
сообщение 17.12.2007 23:48
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Не могу вызвать функцию определителя от переменной. blink.gif Помогите.Посмотрите в чем ошибка. Очень надо!

Сообщение отредактировано: Ilius - 17.12.2007 23:49


Прикрепленные файлы
Прикрепленный файл  matr.rar ( 48.87 килобайт ) Кол-во скачиваний: 221
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Ilius
сообщение 18.12.2007 19:17
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 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;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 18:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"