- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
// 
//********************************* ПАДЕЖИ *************************************** 
// 
// (c) Jurer Production Begin ( Start ) 
// SuperJur.Narod.Ru 
// __________________________________________________________________ 
// Удаление этих строк незнаконно! 
// Гарантия 91 года и 1 месяц!!! 
// Послегарантийное обслуживание - бесплатно!!! 
// Круглосуточная поддержка - все 48 часов в бою! 
// Ссылка на источник обязательна! 
// Эти программы защищены законом об авторских правах. Запрещается перепродажа данной программы. 
// ПРОВЕРЕНО! ВИРУСОВ НЕТ!!! АНТИВИРУСОВ ТОЖЕ!!! 
// Смотри Милячуша в творительном !! 
// скупой слепой тупой - пропой!! 
// !№№! 
// !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))); 
 Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6); 
КонецФункции 
 
//_____________________________________________________________________________ 
// z1 - фамилия имя отчество например Железняков Юрий Юрьевич 
// z2 - Падеж ( по умолчанию = 2 - родительный) 
// 2 - родительный ( нет кого? ) Железнякова Юрия Юрьевича 
...........
// 
// (c) Jurer Production End ( Finish )