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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2010, 00:43   #11
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Компонента незнаю. Но организацию данных могу подсказать. В базе два поля создаёте. Одно допустим уникальный ключ, другое ФИО. И так суть такая:
Начало первое поколение 1, 2:
1) 14ds3 ключ + человек 1. сумма 14ds3-1
2) 14ds3 ключ + человек 2. сумма 14ds3-2
Второе поколение:
1) общий код родителей 14ds3, уникальный ключ самого человека 23fd4-4, сумма такая 14ds3-23fd4-4
2) код родителей 14ds3, уникальный ключ самого человека 23fd4-5, сумма такая 14ds3-23fd4-5. Это одна семья. Разделитель у вас есть (это тире, можно любой), анализируя такой ключ вы можете находить общее между семьями, т.е. общее на каком то уровне. Так что вы по этому ключу можете спокойно проследить до начала.

И так можно продолжать. А по поводу вашего рисования, рисуете по поколениям. А перед этим анализируете кол-во человек в поколении и уже от этого распологаете.

p.s.: ключ канешно может быть меньше это я так для примера. Главное это исключить повторения.
dr.Chas вне форума Ответить с цитированием
Старый 11.01.2010, 14:07   #12
NSV
Форумчанин
 
Аватар для NSV
 
Регистрация: 27.05.2009
Сообщений: 127
По умолчанию

Цитата:
«Стоял позитив, а с ним негатив в обществе двух альтернатив. Пришли решительные примитивы, и с ними ушли альтернативы»
Сразу ничего не понял. После последующих прочтений всё стало ясно.

Это мне чем-то напомнило генетический код. Идея интересная. При помощи этих ключей можно будет управлять не только определенными личностями, но и целыми ветвями. Попробую на этом как-то что-то сделать, объединив со своими идеями и силами.

Не согласен только в том, что стоит создать два поля в базе (ФИО и ключ). Я бы несколько изменил эти понятия:
Первое поле: личные данные.
1) ФИО
2) Даты
3) Путь к доп. инф
4) и т.д.
Второе поле: данные для связи в этом дереве.
1) Ваш ключ
2) Или как у меня идентификационный номер
3) Родители
4) Дети
5) Супруги

Как я понимаю, последние несколько пунктов можно частично или полностью заменить этим ключом.

Но это только организация данных. Необходимый фундамент. Мне кажется, что с этим всё понятно. Хотя главная проблема так и осталась.
NSV вне форума Ответить с цитированием
Старый 11.01.2010, 14:42   #13
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от NSV Посмотреть сообщение
Не согласен только в том, что стоит создать два поля в базе (ФИО и ключ).
Ну это было как пример, а сколько создавать это зависит только от ваших пожеланий

Цитата:
Сообщение от NSV Посмотреть сообщение
Хотя главная проблема так и осталась.
Ну главная проблема с расположением я так понял?
Ну а например так:
1) анализируете сколько человек в поколении
2) на основе про аналированного создаёте
1 (семья)
1-1 (вторая семья) 1-2 (третья семья) и уже в зависимости от кол-ва расставлять на растояние какое то. Плюс когда они у вас не будут помещаться добавлять скрол бар. Но это канешно я подразумевал что вы сами будете рисовать. Можно ко всему этому анализировать последующее поколение и на основе этого задавать расстояние.
dr.Chas вне форума Ответить с цитированием
Старый 11.01.2010, 15:23   #14
NSV
Форумчанин
 
Аватар для NSV
 
Регистрация: 27.05.2009
Сообщений: 127
По умолчанию

Цитата:
Сообщение от dr.Chas Посмотреть сообщение
Ну это было как пример
Я так и подумал

Я уже набросал за последние дни что-то вроде хода этого алгоритма. Только пока на бумаге.
Пока особо не спешу. Слушаю мнения других
Кое-что меняю.

Как Вы думаете, с какого поколения лучше начинать сортировку (рисование)? С самого младшего, самого старшего, того в котором больше всего человек, того где находится идентификационный номер "1" или с другого поколения?
---------------------
Если немножко отвлечься и пофилософствовать, то вот к чему меня приводят мысли. Так как технологический прогресс сейчас шагает семимильными шагами, то наиболее ценным в наше время я считаю саму информацию, а не способы её визуального представления. Поэтому, на мой взгляд, такой способ хранения генеалогических деревьев лучше, нежели начерченная в какой-то программе и сохраненная в JPEG (к примеру). Захотелось мне например, чтобы все рамочки были листочками. А изменить трудно. Т.е. создание древа из базы дает более широкий спектр гибких возможностей. Если подумать шире, то можно в будущем из подобной базы создать трехмерную родословную. Чтобы всё находилось не в одной плоскости, а в нескольких. Всё уже зависит от воображения и от возможностей техники будущего. И если устареет сама база, то её всегда можно спокойно перегнать в другой современный (для того времени) формат. Главное, что останется сама информация.

P.S. "Спасибо" долетело? А то "репы" кажется не прибавилась.
NSV вне форума Ответить с цитированием
Старый 11.01.2010, 22:59   #15
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от NSV Посмотреть сообщение
Как Вы думаете, с какого поколения лучше начинать сортировку (рисование)? С самого младшего, самого старшего, того в котором больше всего человек, того где находится идентификационный номер "1" или с другого поколения?
Тут на мой взгляд роли особой не играет. Это уже должны выбрать вы сами, мне лично нравится когда начало идёт сверху, а не снизу.
dr.Chas вне форума Ответить с цитированием
Старый 11.01.2010, 23:32   #16
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

позвольте ка переверну вашу лодочу
1 - вы ввели слово "поколение" и оно вас потопит. Едва ли у вашего пра-рпа-рпа-рпа-прадеда все пра-пра-пра-правнуки жили в среднем одинаково. Едва ли у вас нету пятиюродного человека старше вас по поколению но младше по возрасту. И нормы морали и законности едва ли помешают ему жениться на вашей сестре. Вычеркните из лексикона слово "поколение". Это слово для людей не применимо.
2 - как отреагирует ваша связь "супруги" на попытку вашего дяди развестись с тётей и жениться на другой тёте? .. и родить вам сводную двоюродную сестру...
3 - как ни крути чем дальше в предки , тем шырше ветки. Вывести их всех не получится. Делай так :

"Фикснутым" считай какую-либо перса из этого дерева. При этом выводи его ближайших родственников на три-четыре ветки вниз и вверх.. чтоб на экран влазило.
И потом следи за курсором мыши:
Еси он находится над персом - этот перс становится фикснутым
Еси курсор находится на "стрелочке", символизирующей родственную связь, то определи между кем и кем она находится. Плавно продвинь их на экране вместе с курсором к центру экрана.

Короче говоря вывести на экран - забудь. Лучше сообрази как сделать красивую навигацию. ДиректИкс тебе поможет.
_bAd_ вне форума Ответить с цитированием
Старый 11.01.2010, 23:44   #17
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

и так:
1
2 3 //мы их не группируем по каким то временым рамкам.
4 5 6 7 8 //правда ведь не важно?
9 10 11 12 13 14 15 //и тут оно вроде особой роли не играет?
16 17 18 19 20

Ваша навигация очень интересна. Но главное дерево в любом случае в такой программе должно быть.
dr.Chas вне форума Ответить с цитированием
Старый 11.01.2010, 23:58   #18
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

Нее. Ваш вопрос - вот что по истине интересно. В самом деле. Очень сложная задача.

РПерсонаж = ^ТПерсонаж
ТПерсонаж = рекорд
Имя : Стринг;
ВремяЖизни : ТТаймПериод;
сожители : эррэй оф РПерсонаж;
даты_сожительства: эррей оф ТТаймПериод; (соответствует сожительствам)
родной_отец : РПерсонаж;
родная_мать : РПерсонаж;
энд;

Как ни странно - боюсь это единственное решение. Введёте сюда детей - и всё рухнет. Детей каждый раз придётся искать перебором по признаку родителя.

Хотя не, есть еще один не менее единственный вариант:

РПерсонаж = ^ТПерсонаж;

ТРодственнаяСвязь = рекорд
СКем : РПерсонаж;
Период :ТТаймПериод;
ТипРодства : ТТипРодства (перечисляемый тип: родитель, дитё, сожитель)
Блаад : Буулеан:
енд;

Для родства муж-жена - это период сожительства
Для ТипРодства родитель-ребёнок Период начинается в момент принятия опекунства (решением суда там или по праву кровного отцовства/материнства), и заканчивается прекращением опекунства (решением суда для несовершеннолетних) либо смертью ребёнка (но не смертью родителя, поскольку после неё ребёнок родителя остаётся ребёнком родителя... и так далее)
Таким образом понятно, что у ребёнка могут быть несколько отцов и матерей, хронологически разнесённых по его жизни. Приёмных. Но тут уточнение - отцом будет считаться родитель мужского пола. Матерью - родитель женского. В наше время увы это не всегда так... Кровность же родительской связи указывается булеановоым Бладом.
И кроме того ни о каких братьях - сватьях - деверях (чо эт ваще такое) речи быть не может. Все подобные связи обнаруживаются дальнейшим анализом. В дерево не вносятся.

.. ну и массивчик вот такого типа:

ТПерсонаж = рекорд
Нейм : Стринг;
ЛайфТайм : ТТаймпериод;
СвязиРодства : эррэй оф ТРодственнаяСвязь;
енд;

Вот. И плюс красивая такая нифиговая навигация. Точка ))

Последний раз редактировалось _bAd_; 12.01.2010 в 07:19.
_bAd_ вне форума Ответить с цитированием
Старый 12.01.2010, 14:47   #19
NSV
Форумчанин
 
Аватар для NSV
 
Регистрация: 27.05.2009
Сообщений: 127
По умолчанию

Цитата:
Сообщение от _bAd_ Посмотреть сообщение
позвольте-ка переверну вашу лодочку
Спасибо. Искупался, мозги охладил.

Как-то я действительно не подумал, что к примеру дочь кого-то может выйти замуж за пятиюродного брата кого-то (кого-то и кого-то - это один и тот же человек). Хотя я создавал большое древо, у меня такого (к счастью) не было.

Как я теперь понимаю, придется располагать не по поколениям, а по возрасту. Хотя это всё значительно усложняет (а может и упрощает. это я ещё не понял) создание этой проги.

Насчет периода сожительства - на мой взгляд перебор. Хотя идея правильная. Только придется не на каждого персонажа применять. Так как слишком мало данных. Я иногда не знаю девичью фамилию или отчество пра-пра-пра-прабабушки, не то что период сожительства.

Постараюсь учесть все замечания. Не согласен только с этим:
Цитата:
Сообщение от _bAd_ Посмотреть сообщение
вывести на экран - забудь
Хоть убейте, но не соглашусь. Иначе грош цена всей моей идеологии (Той цели, которую я преследую).

И последнее: что Вы подразумеваете под этим?
Цитата:
Сообщение от _bAd_ Посмотреть сообщение
красивая такая нифиговая навигация
Хотелось бы поподробнее.

Спасибо. Свежие мысли мне всегда приятны.
NSV вне форума Ответить с цитированием
Старый 12.01.2010, 18:31   #20
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

Благодарю за мнение
Под красиво навигацией я подразумевал единственный способ вывести дерево на экран. Где-то выше звучал верно поставленный вопрос- с какой точки начинать? Немного развив эту мысль станет ясно, что внешний вид дерева будет кардинально меняться в зависимости от того, на какого персонажа смотрите. А значит по середине экрана какой-то один перс, а остальные (сколько влезет) пляшут от него в верх, вниз и в бок родства. Тёти и дяди встанут в линию если смотреть на их племянника. А если смотреть на тётину бабушу, то между тётей и дядей три поколения оболтусов обнаружатся. Вот о чем я.
_bAd_ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм создания дерева Delphi VadEr Помощь студентам 5 03.11.2009 08:45
Создания интерфейса...си dampirik Помощь студентам 1 06.07.2009 14:40
C# Создания ярлыка MAcK Общие вопросы .NET 6 16.08.2008 12:22
создания бота kobras Работа с сетью в Delphi 1 01.12.2007 14:41
Создания Класса Mickle Общие вопросы Delphi 1 30.04.2007 00:44