| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Delphi] Операция над матрицей |
| Автор: Digo 6.1.2007, 21:33 | ||
| Доброго времени суток! Есть функция(подключаю из модуля) по работе с матрицами(например транспонирование)
и stringgrid1.Cells[i,j] где задается матрица с которой будем делать разные операции вопрос возможно очень дуратский.... как обработать грид с помощью этой функции(т.е. передать данные из таблицы в функцию) и вывести результат например в другой stringgrid... |
| Автор: Digo 7.1.2007, 13:21 |
| Помоему будет проще просто перекидывать данные из stringgrid в функцию(т.е. создавать матрицу и запихивать в нее данные из грида) далее расчитываем получаем уже транспонированную матрицу, проблема в том что не пойму как перенести содержимое гирда в функцию для расчета... |
| Автор: Sunvas 7.1.2007, 13:25 | ||
| Digo, недоконца ты привел исходны код. Вот тебе пример:
Поможет? |
| Автор: VICTAR 7.1.2007, 13:36 | ||
| а что такое a[i,j]? этот массив тоже ж надо объявить? и
|
| Автор: Digo 7.1.2007, 15:41 |
| Собственно модуль довольно извесный весь его код тут(я привел только 1 функцию чтобы не загромождать все То что вы описали это понятно - перевод в масив из гирда... мне интересно как это все запихать в функцию вызываемую из того модуля что я привел, ну например matirx.TransponeMatrix(????); нужно соответствие типов, там вообще все через record сделано... |
| Автор: Sunvas 7.1.2007, 15:44 |
Ну тогда записывай и грида в рекорд. В чем проблеммы? |
| Автор: Digo 7.1.2007, 16:12 |
| проблема как раз в том что плохо себе представляю как это сделать |
| Автор: VICTAR 7.1.2007, 16:27 | ||
|
| Автор: Guedda 7.1.2007, 17:44 |
| Я считаю, что просто необходимо переделать структуру record, и переписать функцию под StringGrid. |
| Автор: VICTAR 7.1.2007, 17:49 |
| Да вроде и так все удобно... ИМХО хороший модуль |
| Автор: Digo 7.1.2007, 19:35 |
| Спасибо VICTAR, за пример, работает все! А модуль действительно хороший, почти все операции стандартные с матрицами есть... |
| Автор: Digo 8.1.2007, 18:22 |
| Сейчас копнул глубже столкнулся с проблемой: функция обращения матрицы не желает работать ReverseMatrix(MPtr : MatrixPtr) : MatrixPtr; в приведенном выше коде ошибка выскакивает на 12 строке (StringGrid2.RowCount:=mtr2.MatrixRow;) то же самое и с умножением матрицы на матрицу... Пишет Access Volation at address... хотя умножение на число и транспонирование работают |
| Автор: VICTAR 8.1.2007, 20:40 |
| Да, ты прав. Похоже проблема в самом модуле. Поэтому надо его как следует поизучать. ЗЫ я нашел еще один похожий модуль, но я его пока еще не смотрел http://matrix.kladovka.net.ru/ |
| Автор: Digo 9.1.2007, 11:42 |
| Там все куда более наворочено(в приведенном новом модуле), а ошибка выскакивает уже в новой матрице которя расчитывается, кстати заметил определитель тоже не считает всегда 0... |
| Автор: VICTAR 9.1.2007, 17:38 |
| По ходу, я погорячился, сказав, что модуль хороший... Определитель считается только тогда, когда матрица является квадратной. Плюс, я нашел еще несколько ошибок. Короче говоря, придется или конкретно исправлять этот модуль, или писать свой, или использовать Matrix32. |
| Автор: Digo 9.1.2007, 18:22 |
| Ясно, чувствую придется так и делать, но matrix32 для моих задач довольно мудренный... Кстати как вариант http://sources.codenet.ru/download/1157/TMatrix.html как потестю его отпишусь |
| Автор: Digo 9.1.2007, 23:19 |
| Пока могу сказать следущее: по функциональности модуль ничем не уступает matrix помоему даже нагляднее и удобнее организован ввод и другие моменты... Особено понравилась возможность constructor Create(AArray: TMatrixData); overload; // Создаёт матрицу из массива я только не разобрался как помещать данные из Stringgrid... приходится юзать mtr.Items[i,j] Протестировал опять те же функции транспонирование работает, обращение нет, пишет якобы детерменант =0 поэтому не считает... похоже проблема в этом, прям тенденция какая то, очень станно не может же быть что все глючит... |
| Автор: VICTAR 9.1.2007, 23:35 |
| Не работает все по той же причине, что дет-нант вычисляется только у квадратной матрицы. mtr.Items[i,j] - правильный ход |
| Автор: Digo 10.1.2007, 00:03 |
| у меня даже NxN не считает... возможно ввожу не так что-то а так думаю и квадратная сгодилась бы наверно алгоритм для неквадратных сложен... от того и не делают его нигде... |
| Автор: VICTAR 10.1.2007, 00:18 | ||||
Только не могу понять это:
Они работаю явно не так как должны. Создаются пустые матрицы и при любом обращении к ее элементам возникает ошибка. |
| Автор: VICTAR 10.1.2007, 01:18 |
| Все, я нашел ошибку и в этом модуле |
| Автор: VICTAR 10.1.2007, 15:49 |
| Ок. Теперь все работает. Косяк был в том, что при созданиии TMatrix.Create(const ARows, ACols: Word); Origin был равен 0, а не 1, как должен быть по-умолчанию. Выкладываю http://victar.megann.net/Downloads/MatrixPrj.rar с основными действиями |
| Автор: Digo 11.1.2007, 11:43 |
| VICTAR, Спасибо большое за пример, теперь проверю точность операций этого модуля, тогда отпишусь об результате... |
| Автор: Digo 20.1.2007, 17:54 |
| вообщем можно юзать вроде неплохо считает |