Created
December 1, 2023 11:40
-
-
Save kuntashov/866a9417d45b18422b0c16815cd82714 to your computer and use it in GitHub Desktop.
Легендарный алгоритм склонения
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://superjur.narod.ru | |
// | |
// Удаление этих строк незнаконно! | |
// Гарантия 91 года и 1 месяц!!! | |
// Послегарантийное обслуживание - бесплатно!!! | |
// Круглосуточная поддержка - все 48 часов в бою! | |
// Ссылка на источник обязательна! | |
// Эти программы защищены законом об авторских правах. Запрещается перепродажа данной программы. | |
// ПРОВЕРЕНО! ВИРУСОВ НЕТ!!! АНТИВИРУСОВ ТОЖЕ!!! | |
// Смотри Милячуша в творительном !! | |
// скупой слепой тупой - пропой!! | |
// !№№! | |
// !56! укратил | |
// !55! ПадежЫ - для оглы и кызы | |
// !54! | |
// !53! Очередное сокращение кода | |
// !51! Прегромадное спасибо Олегу Дубровскому за оказанную моральную, информационную и материальную поддержку сего проекта. | |
// Сергею Толкачёву за напоминание о том, что в русском языке всегда есть место исключениям! | |
// !50! П:Ответственный за электрохозяйство Ф:Ацута Груша | |
// !48! исправлена ошибка при склонении фамилий (спасибо, Mario). | |
// !47! исправлена ошибка при склонении профессий ( спасибо, Павел Ковалев). | |
// !46! оптимизация + четвертый параметр задает, что вернуть - фамилия, имя или отчество или всё сразу в нужном падеже | |
// !42! Осел + Соловей + Воробей + Немец + Кормилец + Силиец | |
// !41! отчества оканчивающиеся на "ы" считаются женскими ? | |
// Функция для склонения одного слова!!! | |
// z1 - само слово | |
// z2 - номер падежа | |
// z3 - пол | |
// z4 - 1-склонять как фамилию, 2-имя, 3-отчество | |
Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт | |
z5=Найти(z1,"-"); | |
z6=?(z5=0,"","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4)); | |
z1=НРег(?(z5=0,z1,Лев(z1,z5-1))); | |
z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1); | |
z5=СтрДлина(z1); | |
za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8); | |
zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1)); | |
zc=Макс(z2,-z2); | |
zd=?(za=4,5,Найти("айяь",z9)); | |
zd=?((zc=1)или(z9=".")или((z4=2)и(Найти("оиеу"+?(z3="ч","","бвгджзклмнпрстфхцчшщъ"),z9)>0))или((z4=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),9,?((zd=4)и(z3="ч"),2,?(z4=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,9,?(z3<>"ч",?(za=1,7,?(z9="а",?(za>18,1,6),9)),?(((Найти("ой ый",z8)>0)и(z5>4)и(Прав(z1,4)<>"опой"))или((zb>10)и(za=16)),8,zd))),zd))); | |
ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7); | |
zf=?((zd=8)и(zc<>5),?((zb>15)или(Найти("жий ний",z7)>0),"е","о"),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z5-3 ,1))=0)и((zb>11)или(zb=0))и(ze<>45),"",?(za=7,"л",?(za=10,"к",?(za=13,"йц",?(ze=0,"",?(ze<12,"ь"+?(ze=1,"ц",""),?(ze<37,"ц",?(ze<49,"йц","р")))))))))); | |
// zf=?((zd=9)или((z4=3)и(z3="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2))); | |
zf=?((zd=9)или((z4=3)и(Прав(z1,1)="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2))); | |
Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6); | |
КонецФункции |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment