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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Динамические матрицы в процедуре, Есть проблема с динамическими данными...
P-Tigr
сообщение 15.03.2005 22:43
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской

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


Столкнулся с одной проблемой, 2 дня уже бьюсь... что делать - не знаю...
Если коротко, то дело вот в чем.
Я написал процедуру для подсчета определителя матрицы любого порядка (методом Гаусса). И там над матрицей выполняются различные преобразования (складывания строк и т.д.).
Причем - внимание - по условию задания матрица должна быть обязательно динамической!
Процедура работает нормально, определитель находит, НО в то же время изменяет исходную матрицу, а этого нельзя допустить!! Происходит это, как мне кажется, из-за того, что такие матрицы - ссылки на память, поэтому передать ее в процедуру строго по значению нельзя...

Замучился я с этими динамическими структурами... blink.gif
Please, умные люди, help me!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 16.03.2005 1:14
Сообщение #2


Гость






Значит, предложение такое: при входе в функцию вычисления определителя ты не присваиваешь адрес массива A в AC (как это происходит сейчас, а копируешь массив A в AC полностью и работаешь с его копией). Копирование производишь так:
    setlength(ac, length(a));
   for i := 0 to pred(length(a)) do
     begin
       setlength(ac[i], length(a[i]));
       for j := 0 to pred(length(a[i])) do
         ac[i, j] := a[i, j]
     end;
И не забудь убрать строки
 AC:=A;
A:=nil;
иначе все копирование будет лишено смысла smile.gif
я только что прогнал этот вариант - исходный массив не меняется (правда я не использовал процедуру Work_Matr, а проверил только вычисление определителя...)
 К началу страницы 
+ Ответить 

Сообщений в этой теме
P-Tigr   Динамические матрицы в процедуре   15.03.2005 22:43
volvo   P-Tigr, давайте так: вы можете показать код процед...   15.03.2005 22:55
P-Tigr   Вот выдержки из кода: type TDMas = array of rea...   15.03.2005 23:08
P-Tigr   Причем кроме вышеописанной проблемы, при данных до...   15.03.2005 23:10
volvo   Компилятор какой? Delphi или FPC? Турбо-Паскаль от...   15.03.2005 23:11
P-Tigr   Естессно, Delphi ver 6   15.03.2005 23:12
volvo   Естественно, что я переношу тему в раздел Дельфи :...   15.03.2005 23:14
P-Tigr   :D Just OK. I'm sorry, первый раз на форуме...   15.03.2005 23:16
P-Tigr   Thanks, Volvo!   15.03.2005 23:20
volvo   Значит, предложение такое: при входе в функцию выч...   16.03.2005 1:14
P-Tigr   Извините пожалуйста, еще 1 вопрос, помогите разобр...   16.03.2005 6:23
volvo   Это не связано с вводимыми данными... Только с тем...   16.03.2005 9:16
volvo   P-Tigr, небольшая поправочка: Выход за пределы мас...   16.03.2005 11:42
P-Tigr   ОК, ошибка "Floating divizion by zero" у...   16.03.2005 18:40
volvo   Вам надо еще раз поставить 2 за "внимательнос...   16.03.2005 19:16
P-Tigr   Блин... Спасибо за помощь! :) Буду учиться :)   16.03.2005 20:02
$ad!st   вопрос не в тему... а что такое матрица??? вобщем ...   16.03.2005 23:24
klem4   http://forum.pascalnet.ru/index.php?showtopic=2694...   16.03.2005 23:26


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

 



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