Код:
ФУНКЦИЯ ТИП_СТРОКА: Склонение ( ПЕРЕМ ТИП_СТРОКА : Фамилия,Имя,Отчество,Пол,Падеж)
Склонение=Фамилия+" "+Имя+" "+Отчество
п=Пол
имя=ЗАГЛ(Имя)
L[1]="Б";
L[2]="В";
L[3]="Г";
L[4]="Д";
L[5]="Ж";
L[6]="З";
L[7]="К";
L[8]="Л";
L[9]="М";
L[10]="Н";
L[11]="П";
L[12]="Р";
L[13]="С";
L[14]="Т";
L[15]="Ф";
L[16]="Х";
L[17]="Ц";
L[18]="Ч";
L[19]="Ш";
L[20]="Щ";
//Гласные
L[21]="А";
L[22]="Е";
L[23]="И";
L[24]="Й";
L[25]="О";
L[26]="У";
L[27]="Ы";
L[28]="Э";
L[29]="Ю";
L[30]="Я";
L[31]="Ь";
L[32]="Ъ";
/////////////
Фамилия=ЗАГЛ(Фамилия)
Последняя=ПОДСТР(Фамилия,ДЛИНА(Фамилия),1)
ДвеПоследних=ПОДСТР(Фамилия,ДЛИНА(Фамилия)-1,2)
ТриПоследних=ПОДСТР(Фамилия,ДЛИНА(Фамилия)-2,3)
Флаг=0;
ЦИКЛ ДЛЯ(и=1,32)
ЕСЛИ L[и]=Последняя ТО
СТОП
КОНЕЦ_ЕСЛИ;
КОНЕЦ_ЦИКЛА
ЕСЛИ и<=20 ТО
ТипБуквы=1;//согласная
ИНАЧЕ
ТипБуквы=2;//гласная
КОНЕЦ_ЕСЛИ
//////////////// Исключения ////////////////////
ЕСЛИ ДЛИНА(Фамилия)<=2 ТО
Родительный=Фамилия;//фамилии типа Ге, Че
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (ДвеПоследних="ИХ") ИЛИ (ДвеПоследних="ЫХ") ТО
Родительный=Фамилия;//сибирские фамилии
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
ЕСЛИ Последняя="О" ИЛИ Последняя="Ц" ТО
Родительный=Фамилия;//украинские фамилии Чубарец
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
ЕСЛИ ДвеПоследних="УА" ТО
Родительный=Фамилия;//фамилии типа Стуруа
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
ЕСЛИ ДвеПоследних="ИА" ТО
Родительный=Фамилия;//фамилии типа Туташхиа
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (ДвеПоследних="ЖА") И (п="Ж") ТО
Родительный=Фамилия;// женские фамилии типа Ганжа
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
ЕСЛИ ТриПоследних="ДЗЕ" ТО
Родительный=Фамилия;//грузинские фамилии типа Гогадзе
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
ЕСЛИ ТриПоследних="ИЛИ" ТО
Родительный=Фамилия;//грузинские фамилии типа Габошвили
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (ДвеПоследних="ОЙ") И (п="М") И (ДЛИНА(Фамилия)=3) ТО
Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Я";//фам. типа Цой
Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Ю";
КОНЕЦ_ЕСЛИ;
ЕСЛИ (ДвеПоследних="ОЙ") И (п="Ж") И (ДЛИНА(Фамилия)=3) ТО
Родительный=Фамилия; //фам. типа Цой
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
///////////////////////////////////////////////////////////////////////
ЕСЛИ (п="М") И (ТипБуквы=1) И (Последняя<>"Ц") ТО //мужскую склоняем Чубарец
Родительный=Фамилия+"А";
Дательный=Фамилия+"У";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="М") И (ДвеПоследних="ДЬ") ТО //В память о красноярском губернаторе
Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Я";//Лебедя
Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Ю";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="Ж") И (ТипБуквы=1) ТО //женскую не склоняем
Родительный=Фамилия;
Дательный=Фамилия;
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="Ж") И (Последняя="А") ТО
Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"У";
Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"ОЙ";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="М") И (Последняя="А") ТО //фам. типа Соткилава
Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"У";
Дательный= ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"Е";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (ДвеПоследних="ОЙ") И (п="М") И (ДЛИНА(Фамилия)>3) ТО
Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"ГО";
Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-1)+"МУ";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (ДвеПоследних="АЯ") И (п="Ж") И (ДЛИНА(Фамилия)>3) ТО
Родительный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-2)+"УЮ";
Дательный=ПОДСТР(Фамилия,1,ДЛИНА(Фамилия)-2)+"ОЙ";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ Флаг=0 ТО //если не сработало ни одно условие
Родительный=Фамилия;
Дательный=Фамилия;
КОНЕЦ_ЕСЛИ;
//////////////
// Склонение имени
Последняя=ПОДСТР(имя,ДЛИНА(имя),1);
ДвеПоследних=ПОДСТР(имя,ДЛИНА(имя)-1,2);
Флаг=0;
ЦИКЛ ДЛЯ(и=1,32)
ЕСЛИ L[и]=Последняя ТО
СТОП
КОНЕЦ_ЕСЛИ;
КОНЕЦ_ЦИКЛА;
ЕСЛИ и<=20 ТО
ТипБуквы=1;//согласная
ИНАЧЕ;
ТипБуквы=2;//гласная
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="М") И (ТипБуквы=1) ТО ///Иван, Петр и т.д.
РодительныйИмя=имя+"А";
ДательныйИмя =имя+"У";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="М") И (Последняя="Й") ТО ///Сергей, Дмитрий и т.д.
РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Я";
ДательныйИмя =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="М") И (Последняя="А") ТО ///Фома
РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"У";
ДательныйИмя =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Е";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="М") И (Последняя="Я") ТО ///Илья
РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
ДательныйИмя =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Е";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="М") И (Последняя="Ь") ТО ///Игорь
РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Я";
ДательныйИмя =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="Ж") И (Последняя="А") ТО ///Татьяна, Людмила и т.д.
РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"У";
ДательныйИмя =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Е";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="Ж") И (Последняя="Я") ТО ///Зоя, Наталья и т.д.
РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
ДательныйИмя =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Е";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="Ж") И (ДвеПоследних="ИЯ") ТО ///Наталия,Виктория и т.д.
РодительныйИмя=ПОДСТР(имя,1,ДЛИНА(имя)-1)+"Ю";
ДательныйИмя =ПОДСТР(имя,1,ДЛИНА(имя)-1)+"И";
Флаг=1;
КОНЕЦ_ЕСЛИ;
ЕСЛИ Флаг=0 ТО
РодительныйИмя=имя;
ДательныйИмя =имя;
КОНЕЦ_ЕСЛИ;
/////////склонение отчества///////
отчество=ЗАГЛ(Отчество)
ЕСЛИ (п="М") ТО
РодительныйОтчество=отчество+"А";
ДательныйОтчество =отчество+"У";
КОНЕЦ_ЕСЛИ;
ЕСЛИ (п="Ж") ТО
РодительныйОтчество=ПОДСТР(отчество,1,ДЛИНА(отчество)-1)+"У";
ДательныйОтчество =ПОДСТР(отчество,1,ДЛИНА(отчество)-1)+"Е";
КОНЕЦ_ЕСЛИ;
ЕСЛИ Падеж="Р" ТО Склонение=Родительный+" "+РодительныйИмя+" "+РодительныйОтчество КОНЕЦ_ЕСЛИ
ЕСЛИ Падеж="Д" ТО Склонение=Дательный+" "+ДательныйИмя+" "+ДательныйОтчество КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ