Declinação de sobrenomes no acesso. Como fazer declinação de maiúsculas e minúsculas no Excel? Situações em que a função pode não funcionar corretamente

O arquivo contém procedimentos para 7.7 e 8.x. Uma string no formato Sobrenome Nome Patronímico é passada para o procedimento.

UPD 26/11/10: com gratidão - uma nova versão da função. não testei! Perguntas sobre o trabalho desta versão - para ele, por algum motivo, ele não quer divulgá-lo :)

Função CaseName(ValueName,Case=1,InitialsOnly=False, Value pDelimiter=".")
If TypeValue(nome completo)<>Digite("String") Então
Show("String inválida passada para ""Caixa de nome completo!"""); Retorno do nome completo;
Fim se;

// remove vários espaços
Enquanto 1=1 Loop
Nome completo = LP abreviado (StrReplace(Name, " "," "));
If Find(Name," ")=0 Then Abort EndIf;
FimCiclo;

If TypeValue(Case)=Type("String") Então
pad = AbbrLP(NReg(Lev(Caso,1)));
If Find("irdwtp",pad)=0 Então

Fim se;
ElseIf TypeValue(Case)=Type("Número") Then
Se (caso<1) или (Падеж>6) Então
Report("Caso incorreto passado para ""caso do nome completo""!"); Retorno do nome completo;
Fim se;
caso=caso-1;
Fim se;

Nome completo=AblP(ÍReg(nome completo)); // isso é mais confortável

// próprio analisador de composição
Sobrenome="";
Para d=1 Por StrLength(Name) Cycle
chars=Average(nome completo, th, 1);

Sobrenome=Sobrenome+caractere;
FimCiclo;
s=d+1; // atravessou um espaço
Nome="";

chars=Average(nome completo, th, 1);
If chars=" " Então abortar EndIf;
Nome=Nome+caractere;
FimCiclo;
s=d+1; // cruza o segundo espaço
Nome do meio="";
Para y=s Por StrLength(nome completo) Ciclo
chars=Average(nome completo, th, 1);
If chars=" " Então abortar EndIf;
Nome do meio = nome do meio + símbolo;
FimCiclo;

// agora temos o Sobrenome, Nome e Patronímico separadamente.
// o conteúdo real e o bloco de análise de caso começa

// retorna se ele próprio for nominativo. Se ReturnOnlyInitials estiver definido, converta para iniciais
Se (Left(Case,1)="And") ou (Case=1) Then
If NOT Initials Only ou Find(Name, ".") Então
Retorno do nome completo; // string já convertida ou não precisa ser convertida
Fim se;
NovoNome = TReg(Sobrenome) + " " + Vreg(Lev(Nome,1)) + pSeparator + Vreg(Lev(Nome do meio,1)) + pSeparator;
Retornar SokrLP (Novo nome completo); // caso o separador seja um espaço. Último corte
Fim se;

// analisa o gênero M/F
If Right(Patronymic,1)="a" Then Gender="F" Else Gender="M" EndIf;

// cria a estrutura de uma tabela que armazena terminações de palavras
atual=Nova Tabela de Valores;
StringType=NewTypeDescription("String",NewStringQualifiers(3));
NumberType=NewTypeDescription("Number",NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",StringType); // final antigo 2 caracteres
// colunas armazenando novas terminações de palavras
current.Columns.Add("p"); // pai
current.Columns.Add("d"); //dativo
current.Columns.Add("in"); // acusativo
current.Columns.Add("t"); // criativo
current.Columns.Add("p"); // preposicional
// para especificar quantas letras do final da palavra devem ser cortadas,
current.Columns.Add("NumberSlice",NumberType); // número de letras cortadas

Vogais="aeouiyyayu"; // lista de vogais como string

// ======== processa o sobrenome ==========
//preenche a tabela com os dados do sobrenome

Se gênero="M" Então
string=atual.Adicionar(); // Ivanov
string.StarOk="*s";

rows.CountSlice=0;

Linha=atual.Adicionar(); // krasinsky
string.StarOk="*th";
string.r="uau"; string.d="mu"; linha.in="th"; string.t="im"; string.p="ohm";
linhas.CountSlice=2;

Linha=atual.Adicionar(); // todo-poderoso
linha.Starok="sch";
string.r="sua"; string.d="para ele"; string.in="sua"; string.t="im"; string.p="comer";
linhas.CountSlice=2;

Linha=atual.Adicionar(); // Branco
string.StarOk="th";
string.r="uau"; string.d="mu"; linha.in="th"; string.t="th"; string.p="ohm";
linhas.CountSlice=2;

Linha=atual.Adicionar(); // pálido
string.StarOk="*th";

rows.CountSlice=1;

Linha=atual.Adicionar(); // Rabinovitch
string.StarOk="*h";

rows.CountSlice=0;

Linha=atual.Adicionar(); // reparos, zaliznyak
string.StarOk="*k";
string.r="ka"; string.d="ku"; linha.in="ka"; string.t="com"; string.p="ke";
linhas.CountSlice=2;

Linha=atual.Adicionar(); //shinkar
string.StarOk="*b";
string.r="i"; string.d="u"; string.in="i"; string.t="comer"; string.p="e";
rows.CountSlice=1;

Linha=atual.Adicionar(); // perelman, oganesyan
string.StarOk="*n";

rows.CountSlice=0;

Linha=atual.Adicionar(); // Borrego
string.StarOk="in";
string.r="a"; string.d="y"; linha.in="a"; string.t="th"; string.p="e";
rows.CountSlice=0;

ElseIf Gender="F" Then
string=atual.Adicionar(); // Sklodovskaya
linha.StarOk="th";
string.r="oops"; string.d="oops"; linha.in="th"; string.t="oops"; string.p="oops";
linhas.CountSlice=2;

Linha=atual.Adicionar(); // ivanova
string.StarOk="*a";
string.r="oops"; string.d="oops"; linha.in="y"; string.t="oops"; string.p="oops";
rows.CountSlice=1;
Fim se;


Se não EmptyString(Lastname) então
pb=Direita(Sobrenome,3); contagem="StarOk"; // procurá-lo
novoSobrenome=Sobrenome; // se nada mudar, que assim seja
stro=current.Find(pb, contagem);
Se estritamente<>


De outra forma
// estritamente não encontrado pelos últimos três caracteres, estamos procurando dois caracteres apenas pelo último
pb=Direita(Sobrenome,2);
stro=current.Find(pb, contagem);
Se estritamente<>Indefinido então
Stem=Lev(LastName, StrLength(Last Name)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
Caso contrário // se dois não forem encontrados, estamos procurando um
pb="*"+Direita(pb,1);
stro=current.Find(pb, contagem);
Se estritamente<>
Stem=Lev(LastName, StrLength(Last Name)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);


stro=current.Find(pb, contagem);
Se estritamente<>Indefinido Então // encontrado à vista
Stem=Lev(LastName, StrLength(Last Name)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
Fim se;
Fim se;
Fim se;
Fim se;
De outra forma
novoSobrenome="";
Fim se;

// ======== processa o nome ==========
//preenche a tabela com os dados do nome
atual.Limpar();

Se Gênero="M" Então
//trata exceções
Se Nome="leão" Então Nome="leão" EndIf;
If Name="paul" Then Name="paul" EndIf;

Linha=atual.Adicionar(); // Sergei
string.starok="*th";
string.r="i"; string.d="u"; string.in="i"; string.t="comer"; string.p="e";
linha.cutoff=1;

Linha=atual.Adicionar(); // Ivan + Lev + Pavel
string.starok="*s";
string.r="a"; string.d="y"; linha.in="a"; string.t="ohm"; string.p="e";
linha.cutoff=0;

Linha=atual.Adicionar(); // Nikita
string.starok="*a";

linha.cutoff=1;

Linha=atual.Adicionar(); // arco
string.starok="ka";

linha.cutoff=1;

Linha=atual.Adicionar(); // Jeremias
string.starok="ia";

linha.cutoff=1;

Linha=atual.Adicionar(); // Ilya
string.starok="*i";

linha.cutoff=1;

Linha=atual.Adicionar(); // igor
string.starok="*ь";
string.r="i"; string.d="u"; string.in="i"; string.t="comer"; string.p="e";
linha.cutoff=1;

ElseIf Gender="F" Then
//trata exceções
//Se Nome="olga" Then Nome="olga" EndIf;

Linha=atual.Adicionar(); // Irina
string.starok="*a";
string.r="s"; string.d="e"; linha.in="y"; string.t="oops"; string.p="e";
linha.cutoff=1;

Linha=atual.Adicionar(); // Inga, Olga
string.starok="ha";
string.r="e"; string.d="e"; linha.in="y"; string.t="oops"; string.p="e";
linha.cutoff=1;

Linha=atual.Adicionar(); // éter
string.starok="*ь";
string.r="e"; string.d="e"; linha.in="b"; string.t="w"; string.p="e";
linha.cutoff=1;

Linha=atual.Adicionar(); // maria
string.starok="ia";
string.r="e"; string.d="e"; linha.in="u"; string.t="ela"; string.p="e";
linha.cutoff=1;

Linha=atual.Adicionar(); // Sofia
string.starok="*i";
string.r="e"; string.d="e"; linha.in="u"; string.t="ela"; string.p="e";
linha.cutoff=1;
Fim se;

// a tabela está cheia. conte as últimas 2 letras e procure-as
Se Não EmptyString(Name) Então
pb=Direita(Nome,2); contagem="StarOk"; // procurá-lo
novoNome=Nome; // se nada mudar, que assim seja
stro=current.Find(pb, contagem);
Se estritamente<>Indefinido Then // encontrado estrito imediatamente


Caso contrário // não encontrado estritamente, estamos procurando apenas o último
pb="*"+Direita(pb,1);
stro=current.Find(pb, contagem);
Se estritamente<>Indefinido Então // encontrado por último
Base=Lev(Nome, StrLength(Nome)-str. Contar Fatia);
newName=base+abbrlp(stro[pad]);
Caso contrário // a última não foi encontrada, estamos procurando letras por tipo
pb="*"+?(Localizar(Vores,Direita(pb,1))=0,"s","g");
stro=current.Find(pb, contagem);
Se estritamente<>Undefined=1 Then // encontrado por tipo
Base=Lev(Nome, StrLength(Nome)-str. Contar Fatia);
newName=base+abbrlp(stro[pad]);
Fim se;
Fim se;
Fim se;
De outra forma
novoNome="";
Fim se;

// ======== Vamos processar o patronímico, aqui é mais fácil ==========
atual.Limpar();

Se Gênero="M" Então
string=atual.Adicionar();
string.r="a"; string.d="y"; linha.in="a"; string.t="comer"; string.p="e";
linha.cutoff=0;
ElseIf Gender="F" Then
string=atual.Adicionar();
string.r="s"; string.d="e"; linha.in="y"; string.t="oops"; string.p="e";
linha.cutoff=1;
Fim se;
Se não EmptyString (Patronímico) Então
Base \u003d Leo (Patronímico, StrLength (Patronímico) - atual. Número de fatias);
novoNome patronímico = Base + LP abreviado (atual [pad]);
De outra forma
novo patronímico="";
Fim se;

IfOnlyInitials Then
novoNome=Leão(novoNome,1); newPatronymic=Leão(newPatronymic,1);
Fim se;

// configura as primeiras letras para maiúsculas
newLastName=ВReg(Lev(newLastName,1))+Mid(newLastName,2);
newName=ВReg(Lev(newName,1))+Average(newName,2);
newPatronymic=ВReg(Lev(newPatronymic,1))+Mid(newPatronymic,2);

// e agora está tudo junto
If InitialsOnly Then // se o formato das iniciais for especificado
newName=newLastName+" "+newName+pSeparator+newPatronymic+pSeparator;
De outra forma
newName=newSurname+" "+newName+" "+newPatronymic;
Fim se;

If Find(full name, ".") Then // Caso o parâmetro de entrada seja Sobrenome com iniciais. Não toque nas iniciais
newName = newLastname + " " + TReg(First Name) + Treg(Patronymic);
Fim se;

Retornar SokrLP (novo nome completo);
EndFunctions

Aqui você pode obter respostas para perguntas sobre o Microsoft Excel 57638 471543
44519 357828
Principais tópicos em destaque do fórum principal 14 80
Se você é um feliz proprietário de Mac 😉 217 1059

21 de setembro de 2018 06:21:34

Seção para colocação pago perguntas, projetos e tarefas e procurar executores para eles. 2100 13379
Se você baixou ou comprou o suplemento PLEX para Microsoft Excel e tem dúvidas ou solicitações, clique aqui. 310 1587
808 11620
Discussão de funcionalidade, regras, etc. 269 3464

Online agora (convidados: 590, usuários: 12, dos quais ocultos: 3),

Hoje é aniversário de (37), (32), (28), (37), (36), (52)

Total de usuários registrados: 83105

Participou da discussão: 31843

Total de tópicos: 105875

declinação de casos no excel

No capítulo Outras linguagens e tecnologiasà questão de saber se é possível flexionar automaticamente os substantivos no formato Excel, dada pelo autor Zufar a melhor resposta é Dia bom.
Se estamos falando de nome completo, cargos ou departamentos, você pode. Verdade, esta é uma ferramenta mais para o desenvolvedor. No entanto, o usuário também pode descobrir isso. Os exemplos contêm macros prontas para Excel.
Boa sorte!
PS Pesquise no Google a chave "Declinação de sobrenomes, nomes e patronímicos por casos"

22 respostas

Ei! Aqui está uma seleção de tópicos com respostas para sua pergunta: é possível flexionar automaticamente os substantivos no formato Excel

Resposta de rubor
Não, esse recurso não é compatível com o Excel. Mas para um caso particular, você pode usar a função SE para selecionar uma ou outra opção.

Resposta de Proscênio
Você está na categoria "Programação", então ninguém pode proibir você de escrever sua própria função em VBA, que fará esse trabalho de caridade. E apenas a solução do problema neste formato é bastante real.

Resposta de batizar
Ouvi dizer que a reforma do idioma russo havia passado, mas não conseguia nem imaginar a introdução de “substantivos no formato Excel”))))))

Função personalizada para MS Excel

Declinação do nome completo por casos

A função permite exibir o sobrenome, nome e patronímico, dados no caso nominativo, na forma de qualquer outro caso.

Area de aplicação:

A função é conveniente de usar para automatizar a geração de documentos em MS Excel (ou facilitar sua criação manualmente), onde o nome completo deve ser indicado não no caso nominativo: vários tipos de contratos, ordens de caixa, recibos, atos de conciliação, ordens , protocolos, procurações, etc.

A função também é indispensável se as ferramentas de automação implementarem a formação dos documentos acima no aplicativo MS Word com base nos dados das tabelas do MS Excel.

Exemplos de uso:

  • no contrato: “na pessoa do chefe Baranov Petr Vyacheslavovich«
  • em bônus em dinheiro: "emitidos Gnatyuk Pavel Vasilyevich"," Recebido de Gritsenko Irina Sergeevna«
  • na procuração: "Confio a administração do veículo Smirnitsky Vitaly Valerievich«
  • na ordem: "nomear Stepashova Olga Nikolaevna«
  • na ata: “o relatório foi elaborado Dvorzhetsky Nikita Ivanovich«

O que é implementado:

  • sobrenomes com todas as terminações comuns no território dos países da CEI "-ov", "-ev", "-in", "-yan (ts)", "-sky (-tsky)", "-sky (- tsky)" ”, “-th”, “-th”, “-their”, “-ets”, “-nko”, “-uk”, “-yuk”, “-ich”, “-iya”, etc.: Pavlov, Zinoviev, Gagarin, Petrosyan, Vysotsky, Trubetskoy, Tsoi, Zadorozhny, Sadovnichy, Sedykh, Dolgikh, Soskovets, Nesterenko, Goncharuk, Danilyuk, Rabinovich, Danelia, Kvasha, Vrubel, Kozak, Kazachok, etc., também como os sobrenomes femininos correspondentes
  • diferenças na declinação de sobrenomes masculinos e femininos são levadas em consideração: Weaver Viktor e Weaver Svetlana, Kozovets Anton e Kozovets Ekaterina
  • sobrenomes compostos são processados ​​corretamente: por exemplo, Mamin-Sibiryak, Saltykov-Shchedrin, Nemirovich-Danchenko, Lebedev-Kumach
  • sobrenomes estrangeiros não declinam: Galois, Morois, Defoe, Dali, Merengue, Verdi, Garcia, Hemingway, etc.
  • patronímicos com partículas “-ogly”, “-kyzy”, “ibn” são processados ​​com sucesso: Mammadov Polad Murtuza oglu -> Mamedov Polad Murtuza oglu, Gassan Abdurakhman ibn Khattab -> Hassan Abdurakhman ibn Khattab, Abu Ali ibn Sina -> Abu Ali ibn Sinai
  • o gênero (masculino/feminino) é determinado automaticamente pelo patronímico e com base nisso, as regras de declinação apropriadas são selecionadas
  • para situações em que é difícil determinar o sexo automaticamente (o nome do meio é estrangeiro ou ausente), você pode especificar o sexo como um parâmetro de função
  • saída na forma abreviada "sobrenome + iniciais" é possível: Polozov N. A., Vasilyeva A. K., Dvorzhetsky E. E.
  • possibilidade de uso como superestruturas(pode ser usado em todos os arquivos neste local de trabalho), e na forma código embutido no arquivo(a função funcionará neste arquivo em qualquer local de trabalho - é conveniente se, por exemplo, o arquivo for enviado para uma contraparte)
  • código-fonte aberto - se desejar, você pode estudar o algoritmo ou modificá-lo

Como conectar?

O programa é um único arquivo chamado bdgFIOPropisyu.bas. Para usá-la em um arquivo específico, a função deve ser importada para este arquivo. Para isso você precisa:

  1. abra o arquivo MS Excel onde você deseja usar a função
  2. entre no editor VBA pressionando a tecla de atalho "Alt + F11" ou através do menu:
  3. no menu principal do editor VBA, selecione o item "Arquivo" -> "Importar arquivo ...":
  4. na janela de seleção de arquivo que aparece, selecione o arquivo bdgFIOPropisyu.bas e clique no botão "Abrir":

Tudo, o código do programa é importado e pode ser usado.

Como usar?

Seguem mais alguns exemplos de seu uso:

Situações em que uma função pode funcionar incorreta:

Apesar do fato de que existem algumas situações em que a operação da função pode ser insatisfatória, a probabilidade de encontrar esse nome completo no trabalho prático é bastante pequena, porque em 99,9% dos casos, os sobrenomes encontrados no território da Rússia são recusados ​​de acordo com as regras gerais.
Além disso, deve-se notar que outros algoritmos e programas também não podem garantir a exatidão do resultado em 100% dos casos - o idioma russo é muito grande e poderoso para ser descrito por um conjunto de regras lógicas (veja abaixo sobre a influência de a posição do acento na palavra, a origem do sobrenome, sobre a dependência da escrita da forma feminina do sobrenome da escrita da forma masculina, etc.).

  • De acordo com as regras da língua russa, a declinação de homens e mulheres lingua estrangeira Os sobrenomes terminados em "-a" e "-ya" dependem do lugar do acento na palavra e da origem do sobrenome.
    Todos os sobrenomes terminados em não estressado“-a” após consoantes, eles declinam: Seneca -> Seneca, Petrarca -> Petrarca, Smetana -> Smetana, Kurosawa -> Kurosawa, Glinka -> Glinka, Okudzhava -> Okudzhava, etc. Declinação de sobrenomes com choque“-a” no final depende de sua origem: sobrenomes de origem francesa não são inclinados: Dumá, Degá, Fermá, Petipá, etc., sobrenomes de outras origens (de línguas eslavas e orientais) são inclinados: Mitta -> Mitty, Kvasha -> Kvashi, Frigideira -> Frigideiras, Poker -> Pokers, Hamza -> Hamza, etc.
    Da mesma forma, os sobrenomes de origem francesa com um “-ya” acentuado no final são indeclináveis: Zola, Troyat. Todos os outros sobrenomes em "-ya" são recusados: Golovnya -> Golovny, Danelia -> Danilia, Beria -> Beria, Goya -> Goya.
    Como é impossível determinar programaticamente as posições de estresse e a origem do sobrenome, o algoritmo do programa assume que todos esses sobrenomes são recusados ​​de acordo com as regras gerais. Portanto, os sobrenomes franceses com acento no final são processados ​​incorretamente pelo programa: Dumas -> Dumas, Zola -> Zoli, Petipa -> Petipa.
  • Sobrenomes masculinos terminados em "-y", "-y", "-oy" são declinados como adjetivos Gorky -> Gorky, Blessed -> Blessed, Armored -> Armored. As exceções são os casos em que um sobrenome com tal terminação é um substantivo comum (Kozodoy, Vodopoy, Genii, Scenario) ou é de origem estrangeira (Tsoi, Tskhoi, Choi). Como não é possível determinar programaticamente se um sobrenome é uma exceção, aceita-se condicionalmente que todos os sobrenomes com as terminações "-y", "-y", "-y" sejam recusados ​​como adjetivos. Na grande maioria dos casos, isso é verdade, no entanto, em casos excepcionais com sobrenomes-substantivos, o resultado da função será errôneo: Kozodoy Yakov -> Goat Yakov, Genius Stefan -> Genego Stefan.
    No entanto, como exceção, o algoritmo leva em consideração a declinação de sobrenomes com essas terminações e com menos de 5 letras de comprimento (principalmente de origem coreana): Tsoi Viktor -> Tsoi Viktor.
  • Em alguns casos, a declinação correta de um sobrenome feminino terminado em “-ina”, “-ova” só é possível se a declinação do sobrenome masculino correspondente for conhecida: Zhemchuzhina Lyudmila, Malina Svetlana pode ser recusada como na forma usual: Zhemchuzhina Lyudmila -> Zhemchuzhina Lyudmila, Malina Svetlana -> Malina Svetlana (se os sobrenomes masculinos correspondentes forem, por exemplo, Zhemchuzhin Boris e Malin Oleg), e na forma de um substantivo: Zhemchuzhina Lyudmila -> Zhemchuzhina Lyudmila, Malina Svetlana -> Malina Svetlana (se as formas masculinas do sobrenome, por exemplo, Zhemchuzhina Boris e Malina Oleg).
    É impossível levar em conta tais nuances no algoritmo, então todos os sobrenomes femininos são processados ​​pela função de acordo com as mesmas regras (como adjetivos), o que em alguns casos pode levar a resultados incorretos.
  • Uma situação semelhante é com sobrenomes masculinos e femininos terminados em “-ov (a)”, “-ev (a)”, “-in (a)”, que são homônimos a um substantivo comum: Borov, Lev, Filin, Barin , Korov, Coruja, Pintura, Pena, Antiguidade, etc.). Não há como estabelecer programaticamente a identidade de um sobrenome e um substantivo por quaisquer sinais formais, portanto, a declinação de tais sobrenomes de acordo com regras gerais uniformes leva a resultados incorretos da forma: Lev Pavel -> Levy Pavel, Filin Sergey -> Filin Sergey, Korov Ksenia -> Korovaya Kseniya, Coruja Olga -> Coruja Olga, Pintura de Alla -> Pintura de Alla.
  • Sobrenomes masculinos que terminam em um sinal suave tendem a: Vrubel Mikhail -> Vrubel Mikhail, Gogol Nikolai -> Gogol Nikolai, etc. No entanto, ao declinar, as terminações de tais sobrenomes dependem de que tipo de substantivos - masculino, feminino ou médio - eles são.
    Não é possível determinar o gênero de um substantivo de forma algorítmica, portanto, nos casos em que um sobrenome masculino é um substantivo de gênero feminino ou neutro, a função não funcionará corretamente: Stal Ivan -> Stal Ivan, Wormwood Victor -> Wormwood Vencedor.
  • A formação do caso instrumental de sobrenomes terminados em "-zha", "-tsa", "-cha", "-sha", "-sha" depende da ênfase na palavra: se essa terminação for átona, quando declinação muda para "-ey": Kapitsa Peter -> Kapitsa Peter, Cloud Fedor -> Cloud Fedor; se o final for acentuado, é substituído por “-oy”: Kvasha Igor -> Kvasha Igor, Candle Ivan -> Candle Ivan. A situação é semelhante com sobrenomes que terminam em "-ets": sem estresse, a terminação muda para "-em": Palets Viktor -> Finger Viktor; sob estresse - no "-th": Soskovets Oleg -> Soskovets Oleg.
    Como mencionado acima, é impossível determinar programaticamente as posições de acento em uma palavra, portanto, o algoritmo do programa assume que em palavras terminadas em “-zha”, “-tsa”, “-cha”, “-sha”, “ -sha” , a desinência é átona (há mais palavras assim), ou seja, o caso instrumental é sempre formado pela desinência “-ey”. Ao contrário, em palavras terminadas em “ets”, assume-se que a desinência está sob acento, ou seja, a declinação será com a desinência “-om”. Assim, em outros casos, serão observados erros do formulário: Igor Kvasha, Ivan Svechey, Viktor Finger.
  • De acordo com as regras da língua russa, a primeira parte de um sobrenome russo duplo é recusada se puder ser usada como um sobrenome em si: a obra de Mamin-Sibiryak, a história de Saltykov-Shchedrin, a ópera de Rimsky-Korsakov etc. . Caso contrário, não muda: a pintura de Van Dyck, as aventuras de Don Juan, o escudeiro de Dom Quixote, etc. Assim, por exemplo, no sobrenome Semenov-Tyan-Shansky, a primeira parte é inclinada, mas não a segundo: as obras de Semenov-Tyan-Shansky.
    Novamente, não é algoritmicamente possível determinar se a parte componente do sobrenome é independente, portanto, para o trabalho, assume-se que todas as partes do sobrenome composto devem ser recusadas (na maioria dos casos, esse é o caso), o que em um número de situações leva a erros: Van Dyck, Dona - Quixote, Semyonov-Tyan-Shansky.
  • Sobrenomes estrangeiros que terminam em "-ov" e "-in" no instrumental mudam o final para "-om": Benjamin Franklin, Charles Darwin, Charlie Chaplin, Alexander Green. Sobrenomes "russos" com terminações semelhantes terminam em "-y": Ivanov, Gagarin, Fonvizin, etc. Apesar de os sobrenomes listados acima (Franklin, Darwin, Chaplin, Green) serem considerados no algoritmo como exceções, há uma pequena chance de que qualquer outro sobrenome estrangeiro semelhante ocorra - neste caso, o resultado da função estará incorreto.

As regras para declinação de sobrenomes e nomes são usadas de acordo com as seções 13.1 e 13.2 do trabalho de N. A. Eskova Dificuldades na flexão de substantivos. Materiais didáticos e metodológicos para exercícios práticos no curso "Linguagem da Impressão Moderna"(Comitê de Imprensa do Estado da URSS. All-Union Institute for Advanced Training of Print Workers. M., 1990).

Preço: 1500 rublos