Задача этого алгоритма состоит в следующем. Пользователю предлагается полный список людей рассматриваемого им дерева. Из этого списка пользователь выбирает того человека, потомков которого он хочет увидеть. Потомки и линии, связывающие их с выбранным человеком, выделяются более ярким цветом.
Pис.1.3.3.3 Схема алгоритма рекурсивной процедуры Potomok (Id, pos).
Данный алгоритм показан на рис. 1.3.3.3 и осуществляется модулем программы SelFam.pas и процедурой DrawBranch, находящейся в модуле Pr1.pas. В общем алгоритме программы переход к рассматриваемому алгоритму происходит после просмотра генеалогического дерева.
Суть работы алгоритма:
Выбираем из предложенного списка нужного человека и запоминаем его идентификационный номер Id. Присваиваем идентификатору Idbranch значение true. Этот идентификатор будет показывать, что надо рисовать выделенную ветвь при отображении дерева. Процедура Potomok (Id, pos) вызывается рекурсивно, ее цель сформировать массив Mas, в котором будут находиться только те, кто является потомком выбранного человека. На первое место массива Mas заносится тот самый выбранный человек. В качестве входных параметров в процедуре Potomok (Id, pos) номер Id — тот, чьих потомков ищем, Pos — индекс в массиве Mas — место, куда записывается очередной найденный потомок.
Если у человека нет детей и сестер/братьев, то выходим из алгоритма.
Если есть сестры/братья, то проверяем одни ли у них родители. Родители одни — записываем найденного человека в массив Mas. После этого вызываем рекурсивно процедуру Potomok (Id, pos) уже для найденного человека. Так будет продолжаться, пока у найденных сестер/братьев будут находиться дети или их сестры /братья. Если таковых нет, то в массив заносится ребенок выбранного нами человека и вызывается процедура уже для него. Таким образом, в массиве Mas окажутся все потомки выбранного пользователем человека. Можно рисовать. Но в рисовании есть тоже некоторые особенности, которые выполняет процедура DrawBranch.
Процедура DrawBranch вызывается при рисовании дерева, если идентификатор Idbranch равен true. В этой процедуре почти так же, как и в DrawTree учитываются все особенности линий-связей. Все элементы массива Mas рисуются цветом, отличным от цвета всего дерева.
Так как в рассмотренном алгоритме основную функцию выполняет рекурсивно вызываемая процедура Potomok (Id, pos), то на рисунке 3.9 приведена схема алгоритма этой процедуры.