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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2009, 14:39   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Смещение элементов массива при изменении его длины.

Записи (в упрощенном виде):
Код:
TJunction = record
   ...
   Occupied:Boolean;
   OccupiedBy:Integer;
   ...
End;
TDetail = record
   ...
   ID:Integer;
   JCount:Integer;
   Junction:Array of TJunction;
   ...
End;
TRobot = record
   ...
   DCount:Integer;
   Detail:Array of TDetail;
   ...
End;
Разработал процедуры соединения деталей и добавления детали к роботу. Никак не могу придумать, как осуществить удаление детали. Ведь тут задача сводится не только к тому, чтобы просто сделать
Код:
SetLength(Robot.Detail,Robot.DCount-1);
Dec(Robot.DCount);
Вся сложность в том, что раз детали между собой соединены, то потребуется удаление тех деталей, которые связаны с удаляемой (в сторону увеличения ID, чтобы не удалить все детали в роботе.)
Вот схема:

Как определить соединение деталей? Детали соединяются узлами (тот самый junction), у которого есть свойство Occupied - занят ли узел и свойство OccupiedBy - ID той детали, которая занимает узел.

Ну и наконец сам вопрос: как написать процедуру удаления детали. Хотя б натолкните на мысль.
------------------
Появилась такая мысль: запретить удаление той детали, которая имеет больше одного соединения. Т.е. не находится на краю цепочки.
Тогда встает вопрос: как просто сместить элементы, если удаляется элемент в центре массива.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 23.10.2009 в 14:59.
Alex Cones вне форума Ответить с цитированием
Старый 23.10.2009, 15:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В таких случаях делают так:
Есть класс деталь, в котором определен массив или список типа Деталь, дабы сделать эту деталь сборкой.
При удалении этой детали в деструкторе вызывается очистка списка поддеталей. Тут удобно применять TObjectList, в который набивается список входящих в эту сборку деталей. А при освобождении этого компонента он сам освобождает входящие в него детали, и соответственно каскадом освобождаются входящие в его детали поддетали.

Ясен смысл или я путанно пояснил?

Ну лично я так делаю...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2009, 15:19   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Ясен смысл или я путанно пояснил?
О_о А можно самый простой пример? Можно даже не по теме, но чтоб там такая штука была.

P.S. И еще забыл упомянуть, что придется еще менять ID всех деталей, которые подвергались перемещения, чтоб их ID соответствовал номеру, который они занимают в массиве. Эта замена также должна затрагивать ссылки в узлах. (OccupiedBy)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 23.10.2009 в 15:22.
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
Динамические массивы, определение/задание его длины Paul Hindenburg Общие вопросы C/C++ 1 31.05.2009 12:21
Смещение изображений при изминении разрешения Utyfe HTML и CSS 13 23.03.2009 12:41
Вычисление количества элементов массива, которые при округлении дают 6 Катюшенька Помощь студентам 4 22.12.2008 23:44
. Среди всех нецелых элементов этого массива найти наименьший и определить его номер в массиве Паскалька^^ Паскаль, Turbo Pascal, PascalABC.NET 3 19.12.2008 14:18