А теперь очень важная поправка.
Я использовал название степеней родства, принятых в Древе Жизни.
Увы, оно там ошибочное.
Разбираем.
Брат, двоюродный брат, троюродный брат, ... сорокоюродный брат.
Сын, племянник, двоюродный племянник, ... тридцативосьмиюродный племянник.
Тут остановимся и поясним. Племянник приходится двоюродным братом сыну. В свою очередь двоюродный племянник приходится двоюродным братом племяннику и троюродным братом сыну.
Всё ништяк.
Внук, внучатый племянник, двоюродный внучатый племянник, ... тридцатисемиюродный внучатый племянник.
Так же, как и в предыдущем пункте, полный ОК.
Поползём к предкам.
Отец, дядя, двоюродный дядя, ... тридцатидевятиюродный дядя.
Здесь логика немного иная. Дядя - это брат отца. Соответственно, дядя двоюродный - двоюродный брат отца.
Теперь внимание! Ошибка в Древе!!!
Дед, двоюродный дед, троюродный дед и так далее.
Двоюродным дедом обзывают родного брата деда!!! Не порядок.
Должно быть:Дед, брат деда, двоюродный дед, ... тридцативосьмиюродный дед.
То есть полный перечень второй в списке степени родства выглядит так: брат деда, брат бабушки, сестра деда, сестра бабушки.
Цикл проверки очень прост. От большего количества
букАв (поколенных переходов) отнимаем меньшее (спереди). Первая буква от начала в более короткой цепочке указывает на то, либо дедушки (если М), либо бабушки (если Ж). Ну а брат, или сестра - определяется по полу анализируемой персоны с более короткой цепочкой.
Очень извиняюсь, если выразился путано. Всё могут несколько раз повторить другими словами и с примерами.
Резюмирую: доработка определения степеней родства для двух произвольных персон в плане программирования состоит из добавления нескольких простых циклов.