Консультация № 186441
13.07.2012, 10:43
130.75 руб.
0 5 1
Здравствуйте! Прошу помощи в следующем вопросе: Склонение фамилий. В комбобокс грузится список фамилий с инициалами, скажем Иванов П.П. Сидоров А.С. и т.д.. Подскажите как сделать так, если я выбрал в комбобоксе Иванов П.П. то в едит1 будет Иванову П.П., соответсвенно если выбран Сидоров А.С. то Сидорову А.С.. Тут еще может возникнуть ситуация когда фамилия заканчивается на "О", в этом случае ни чего делать не нужно. Заранее благодарю за совет.

Обсуждение

Неизвестный
13.07.2012, 11:03
общий
Адресаты:
Думаю нужно создать список пар <окончание, замена>, например
{"ин", "ину"}{"ина", "иной"}{"ов", "ову"}{"ова","овой"}{"ский", "скому"}{"ская","ской"}{"",""}
Соответственно алгоритм будет такой:
1. Выделить фамилию из исходной строки
2. По очереди сравнить конец фамилии с первой строкой из пары.
3. Когда совпадение найдено, то заменить соответствующее количество символов на вторую строку пары.
4. Вернуть инициалы к изменённой фамилии.
Для неизвестных окончаний сработает последняя пустая пара, и фамилия останется без изменений.
Неизвестный
13.07.2012, 12:23
общий
Для стандартных фамилий достаточно массива с вариантами окончаний - есть достаточно общие правила.
По этой ссылке, например, довольно подробно расписано.
Можно в соответствии с этими правилами создать массив пар для каждого (или только нужного) падежа. Но зависимость от ударных/неударных букв, пола человека останется неучтенной.
Есть фамилии, которые склоняются в соответствии с полом. Например, Сергею Коню и Светлане Конь.
Склоняются фамилии, заканчивающиеся на неударное А, на ударное - не склоняются. Режиссеру Куросаве и художнику Дега.
Поэтому самым правильным вариантом стало бы изначальное (при вводе фамилии в систему) создание списка с нужными формами фамилий. Возможно, список создать автоматически, но дать возможность оператору внести исправления в случае непредусмотренного исключения.
Любой другой вариант будет чреват ошибками, кроме, разве что полного списка исключений.
Неизвестный
13.07.2012, 12:28
общий
это ответ
Здравствуйте, Владимир!
Вот, к примеру: Библиотека склонений фамилий для Delphi.
Работает почти хорошо.
Единственная проблема - не умеет разбирать род и ударение. Использованы исключения.
давно
Профессионал
304622
583
13.07.2012, 20:56
общий
13.07.2012, 20:57
Адресаты:
Это учебная задача, код которой вы должны написать сами?

Или у вас практитческая проблема, для которой можно использовать готовое решение (предложенное Вадимом Викторовичем)?
давно
Посетитель
352040
133
14.07.2012, 13:07
общий
14.07.2012, 13:39
Адресаты:
Добрый день. Это практическая задача (пишу приложение для работы с документами), не учебное задание. Так что в решении проблемы я не ограничен, можно использовать готовое решение. Пишу приложение для работы со справками и прочее.
P.S. На связь смогу выйти только в понедельник вечером 16-го. Командировка.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
Форма ответа