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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2009, 17:13   #21
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Ты надеюсь с преподавателем обсуждала ( чтоб совсем не пролететь )
п.3 - почти как ты начинала то есть в отдельном модуле
Код:
interface

type
  TIntMatrix = array of array of Integer;

function MatrixSumm(const matrix1, matrix2: TIntMatrix): TIntMatrix;
//....
а в форме гриды в матрицы и обратно

замена ( в цикле )
Код:
s := LeftMatrixGrid.Cells[0, i];
LeftMatrixGrid.Cells[0, i] := LeftMatrixGrid.Cells[2, i];
LeftMatrixGrid.Cells[2, i] := s;
s.Creator вне форума Ответить с цитированием
Старый 21.12.2009, 18:11   #22
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Если матрица квадратная - то определитель матрицы удобно вычислять из верхнетреугольной матрицы (прямой ход Гаусса)...
Программа должна быть рассчитана на "неквадратные" матрицы?
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 21.12.2009, 19:52   #23
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Если матрица квадратная - то определитель матрицы удобно вычислять из верхнетреугольной матрицы (прямой ход Гаусса)...
Программа должна быть рассчитана на "неквадратные" матрицы?
Тут достаточно на квадратные ( тем более что даже википедия говорит про квадратные Определитель матрицы является многочленом от элементов квадратной матрицы ).

Про Гауса что-то знакомое, но думаю, что подойдет обычная рекурсия - только основная функция будет интересная по созданию ( Дополнительный минор
s.Creator вне форума Ответить с цитированием
Старый 21.12.2009, 20:50   #24
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Код:
procedure TForm1.LeftMatrixGridKeyPress(Sender: TObject; var Key: Char);
begin
 if not(Key in ['0'..'9',#8,DecimalSeparator]) then Key:=#0
end;
Только заметил.
А в матрицах только целые числа или с запятой ?
если целые то DecimalSeparator ненужен, если с запятой то не StrToInt а StrToFloat надо применять.
s.Creator вне форума Ответить с цитированием
Старый 21.12.2009, 21:10   #25
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Кто протестирует функцию вычисления определителя квадратной матрицы ?
function DetMx(const matrix: TIntMatrix): Integer;
Код:
unit Unit1;

interface

type
  TIntMatrix = array of array of Integer;

// определитель матрицы
function DetMx(const matrix: TIntMatrix): Integer;

function Min(A, B: Integer): Integer;

implementation

uses SysUtils;

function MinorMx(const matrix: TIntMatrix; col: Integer): TIntMatrix;
var
  len, c, r: Integer;
begin
  len := Length(matrix) - 1;
  SetLength(Result, len, len);
  for r := 1 to len do
    for c := 0 to len do
      if c < col then
        Result[r, c] := matrix[r, c]
      else if c > col then
        Result[r, c - 1] := matrix[r, c];
end;

function znak(i: Integer): Integer;
begin
  if (i mod 2) = 0 then
    Result := 1
  else
    Result := -1;
end;

function DetMx(const matrix: TIntMatrix): Integer;
var
  c, len: Integer;

begin
  len := Length(matrix);
  if (len < 1) or ( len <> Length(matrix[0])) then
    raise Exception.Create('Матрица не квадратная');

  if len = 1 then
  begin
    Result := matrix[0, 0];
    Exit;
  end;

  Result := 0;
  for c := 0 to len - 1 do
  begin
    Result := Result + matrix[0, c]*(DetMx(MinorMx(matrix, c))*znak(c));
  end;


end;

function Min(A, B: Integer): Integer;
begin
  if A < B then Min := A else Min := B;
end;

end.

Последний раз редактировалось s.Creator; 21.12.2009 в 21:34. Причина: исправил одну ошибку
s.Creator вне форума Ответить с цитированием
Старый 21.12.2009, 21:47   #26
Manik
Пользователь
 
Аватар для Manik
 
Регистрация: 08.12.2009
Сообщений: 24
По умолчанию

я протестирую)
с пунктом 3 препод весьма популярно объяснил)
вернее не только с ним, но всякое использование опций StringGrid было обругано и запрещено(замечу, что препод даже не видел мою прогу)), только частично первую версию.

Код:
procedure TForm1.LeftMatrixGridKeyPress(Sender: TObject; var Key: Char);
begin
 if not(Key in ['0'..'9',#8,DecimalSeparator]) then Key:=#0
end;
честно спёрт у одногруппника и совсем не осознан.
не ест отрицательные значения,что нехорошо..

постараюсь за сегодня сложить и написать новый вариант)

спасибо вам огромное, что не бросаете)
честное слово,не ожидала)
я вырасту большим и умным)
Manik вне форума Ответить с цитированием
Старый 21.12.2009, 21:55   #27
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

поясни
Цитата:
но всякое использование опций StringGrid было обругано и запрещено
Вообще без Гридов или сперва из грида в матрицу а затем действие потом обратно
или как? ( типа в мемо чтоли )

Если только целые пойдет
Код:
procedure TForm1.LeftMatrixGridKeyPress(Sender: TObject; var Key: Char);
begin
 if not(Key in ['0'..'9',#8,'-']) then Key:=#0
end;
s.Creator вне форума Ответить с цитированием
Старый 21.12.2009, 22:16   #28
Manik
Пользователь
 
Аватар для Manik
 
Регистрация: 08.12.2009
Сообщений: 24
По умолчанию

из грида в матрицу,действие, из матрицы-в грид.
*в примере,показанном на паре матрицы вообще вводились в StringGrid через Edit.(через пробел), но при всём желании такого изврата я принять не могу...

странно, а у меня этот код выдавался с ошибкой...
наверное скобки перепутала)
я вырасту большим и умным)
Manik вне форума Ответить с цитированием
Старый 21.12.2009, 22:16   #29
Manik
Пользователь
 
Аватар для Manik
 
Регистрация: 08.12.2009
Сообщений: 24
По умолчанию

из грида в матрицу,действие, из матрицы-в грид.
*в примере,показанном на паре матрицы вообще вводились в StringGrid через Edit.(через пробел), но при всём желании такого изврата я принять не могу...

странно, а у меня этот код выдавался с ошибкой...
наверное скобки перепутала)
я вырасту большим и умным)
Manik вне форума Ответить с цитированием
Старый 21.12.2009, 22:22   #30
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Убрал.Что то сбилось при отсылке
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 21.12.2009 в 22:37. Причина: Дублированое сообщение
DeKot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение матриц Alyonka_v Помощь студентам 2 18.08.2009 21:51
Ввод векторов и матриц, умножение матрицы на вектор и вычисление скалярного призведения двух векторов zverushka Помощь студентам 18 20.02.2009 15:25