Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2007, 16:10   #11
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Цитата:
И последний вопрос есть ли такие процедуры(без дополнит. процедур и функций) для нахождения определителя и ранга матриц любого размера?
Повторюсь, но:
Цитата:
Сообщение от AlDelta Посмотреть сообщение
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 15.12.2007, 15:13   #12
Ilius
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 20
Вопрос

вот в этом модуле, который ты говоришь, есть функция определителя:
Код:
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;

function TMatrix.Get(RowIndex, ColIndex: Integer): Extended;
begin
  if (RowIndex - Origin + 1 > RowCount) or (RowIndex < Origin) then
    Error(SRowIndexError, RowIndex);
  if (ColIndex - Origin + 1 > ColCount) or (ColIndex < Origin) then
    Error(SColIndexError, ColIndex);
  Result := FData[RowIndex - Origin, ColIndex - Origin];
end;
и у меня есть матрица которую я ввожу в StringGrid1 (mat1:tmatrix). КАК мне вызвать определитель от этой матрице: det(mat1[i,j]) или как, не выходит не чего все время жалуется на эту запись: det(mat1[i,j]).
Напишите пожалуста как правильно вызвать функцию от этой матрице.

Последний раз редактировалось Ilius; 15.12.2007 в 15:23.
Ilius вне форума Ответить с цитированием
Старый 16.12.2007, 19:06   #13
Ilius
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 20
По умолчанию

Может мне кто-нибудь подсказать как правилно вызывать функции???
Ilius вне форума Ответить с цитированием
Старый 18.12.2007, 19:27   #14
Ilius
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 20
По умолчанию

Вот программа посмотрите что не так я делаю при вызове функции.
Вложения
Тип файла: rar matr.rar (48.9 Кб, 8 просмотров)
Ilius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами в паскале Andris Помощь студентам 7 29.05.2009 21:56
Задачка с матрицами на С urgu_st Помощь студентам 4 02.11.2007 17:44
help!!! работа с матрицами Zagran Паскаль, Turbo Pascal, PascalABC.NET 4 08.01.2007 15:54
Поблема совместимости с вистой GN_ Общие вопросы Delphi 4 23.12.2006 21:43