Declinarea numelor de familie în acces. Cum se face declinarea cazurilor în Excel? Situații în care este posibil ca funcția să nu funcționeze corect

Fișierul conține proceduri pentru 7.7 și 8.x. Un șir în formatul Prenume Prenume Patronimic este trecut în procedură.

UPD 26/11/10: cu recunoștință - o nouă versiune a funcției. Nu am testat! Întrebări despre munca acestei versiuni - pentru el, din anumite motive, nu vrea să o răspândească :)

Funcția CaseName(ValueName,Case=1,InitialsOnly=False, Value pDelimiter=".")
If TypeValue (nume complet)<>Tastați ("Șir") Apoi
Show("Șir nevalid trecut la ""Majuscule cu numele complet!"""); Retur numele complet;
EndIf;

// elimină mai multe spații
În timp ce 1=1 buclă
Nume complet = LP abreviat (StrReplace(Nume, " "," "));
If Find(Nume," ")=0 Then Abort EndIf;
EndCycle;

Dacă TypeValue(Case)=Type(„String”), atunci
pad = AbbrLP(NReg(Lev(Case,1)));
Dacă Find("irdwtp",pad)=0, atunci

EndIf;
ElseIf TypeValue(Case)=Type("Number") Then
Dacă (caz<1) или (Падеж>6) Atunci
Raport ("Cazul incorect trecut la ""cazul numelui complet""!"); Retur numele complet;
EndIf;
caz=caz-1;
EndIf;

Nume complet=AblP(НReg(nume complet)); // asta e mai confortabil

// analizor de compoziție propriu
Nume="";
Pentru d=1 Prin StrLength(Name) Cycle
caractere=Medie (nume complet, th, 1);

Prenume=Nume+personaj;
EndCycle;
s=d+1; // a traversat un spațiu
Nume="";

caractere=Medie (nume complet, th, 1);
If chars=" " Atunci Abort EndIf;
Nume=Nume+caracter;
EndCycle;
s=d+1; // traversează al doilea spațiu
Nume de mijloc="";
Pentru y=s Prin StrLength(nume complet) Ciclu
caractere=Medie (nume complet, th, 1);
If chars=" " Atunci Abort EndIf;
Al doilea nume = al doilea nume + simbol;
EndCycle;

// acum avem Numele, Prenumele și Patronimul separat.
// începe blocul de analiză de conținut și caz real

// returnează dacă el însuși este nominativ. Dacă ReturnOnlyInitials este setat, convertiți la inițiale
Dacă (Left(Case,1)="And") sau (Case=1) Atunci
Dacă NU Numai inițiale sau Găsiți(Nume, "."), atunci
Retur numele complet; // fie șir deja convertit, fie nu trebuie convertit
EndIf;
NewName = TReg(Nume) + " " + Vreg(Lev(Nume,1)) + pSeparator + Vreg(Lev(Nume mijloc,1)) + pSeparator;
Returnează SokrLP (nume complet nou); // în cazul în care separatorul este un spațiu. Ultima tăietură
EndIf;

// analizează genul M/F
If Right(Patronymic,1)="a" Then Gender="F" Else Gender="M" EndIf;

// creează structura unui tabel care stochează terminațiile de cuvinte
curent=New ValueTable;
StringType=NewTypeDescription(„String”,NewStringQualifiers(3));
NumberType=NewTypeDescription(„Număr”,NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",StringType); // sfârșitul vechi 2 caractere
// coloane care stochează noi terminații de cuvinte
current.Columns.Add("p"); // părinte
current.Columns.Add("d"); // dativ
current.Columns.Add("in"); // acuzativ
current.Columns.Add("t"); // creativ
current.Columns.Add("p"); // prepoziţional
// pentru a specifica câte litere de la sfârșitul cuvântului trebuie tăiate,
current.Columns.Add("NumberSlice",NumberType); // numărul de litere tăiate

Vocale="aeeouiyyayu"; // listă de vocale sub formă de șir

// ======== procesează numele de familie ==========
// umple tabelul cu date pentru numele de familie

Dacă gen="M" Atunci
șir=curent.Add(); // Ivanov
string.StarOk="*s";

rows.CountSlice=0;

Rând=curent.Add(); // krasinsky
string.StarOk="*th";
string.r="wow"; string.d="mu"; line.in="th"; string.t="im"; string.p="ohm";
rows.CountSlice=2;

Rând=curent.Add(); // atotputernic
line.Starok="sch";
string.r="al lui"; string.d="la el"; string.in="al lui"; string.t="im"; string.p="eat";
rows.CountSlice=2;

Rând=curent.Add(); // Alb
string.StarOk="th";
string.r="wow"; string.d="mu"; line.in="th"; string.t="th"; string.p="ohm";
rows.CountSlice=2;

Rând=curent.Add(); // palid
string.StarOk="*th";

rows.CountSlice=1;

Rând=curent.Add(); // rabinovici
string.StarOk="*h";

rows.CountSlice=0;

Rând=curent.Add(); // reparații, zaliznyak
string.StarOk="*k";
string.r="ka"; string.d="ku"; line.in="ka"; string.t="com"; string.p="ke";
rows.CountSlice=2;

Rând=curent.Add(); // shinkar
string.StarOk="*b";
string.r="i"; string.d="u"; string.in="i"; string.t="eat"; string.p="e";
rows.CountSlice=1;

Rând=curent.Add(); // perelman, oganesyan
string.StarOk="*n";

rows.CountSlice=0;

Rând=curent.Add(); // miel
string.StarOk="în";
string.r="a"; string.d="y"; line.in="a"; string.t="th"; string.p="e";
rows.CountSlice=0;

ElseIf Gender="F" Atunci
șir=curent.Add(); // Sklodovskaya
line.StarOk="th";
string.r="hopa"; string.d="oops"; line.in="th"; string.t="oops"; string.p="oops";
rows.CountSlice=2;

Rând=curent.Add(); // ivanova
string.StarOk="*a";
string.r="hopa"; string.d="oops"; line.in="y"; string.t="oops"; string.p="oops";
rows.CountSlice=1;
EndIf;


Dacă nu este EmptyString (Nume) atunci
pb=Dreapta(Nume,3); count="StarOk"; // caută-l
newLastName=Nume; // dacă nimic nu se schimbă, așa să fie
stro=curent.Find(pb, count);
Dacă strict<>


In caz contrar
// strict negăsit de ultimele trei caractere, căutăm două caractere doar de ultimul
pb=Dreapta(Nume,2);
stro=curent.Find(pb, count);
Dacă strict<>Nedefinit Atunci
Stem=Lev(LastName, StrLength(Last Name)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
Altfel // dacă nu se găsesc două, căutăm unul
pb="*"+Dreapta(pb,1);
stro=curent.Find(pb, count);
Dacă strict<>
Stem=Lev(LastName, StrLength(Last Name)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);


stro=curent.Find(pb, count);
Dacă strict<>Nedefinit Apoi // găsit la vedere
Stem=Lev(LastName, StrLength(Last Name)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
EndIf;
EndIf;
EndIf;
EndIf;
In caz contrar
newLastname="";
EndIf;

// ======== procesează numele ==========
// umple tabelul cu date pentru nume
curent.Clear();

Dacă Gen = "M" Atunci
// gestionează excepțiile
If Name="lion" Then Name="lion" EndIf;
If Name="paul" Then Name="paul" EndIf;

Rând=curent.Add(); // Serghei
string.starok="*th";
string.r="i"; string.d="u"; string.in="i"; string.t="eat"; string.p="e";
row.cutoff=1;

Rând=curent.Add(); // Ivan + Lev + Pavel
string.starok="*s";
string.r="a"; string.d="y"; line.in="a"; string.t="ohm"; string.p="e";
row.cutoff=0;

Rând=curent.Add(); // nikita
string.starok="*a";

row.cutoff=1;

Rând=curent.Add(); // plecă
string.starok="ka";

row.cutoff=1;

Rând=curent.Add(); // Ieremia
string.starok="ia";

row.cutoff=1;

Rând=curent.Add(); // ilya
string.starok="*i";

row.cutoff=1;

Rând=curent.Add(); // igor
string.starok="*ь";
string.r="i"; string.d="u"; string.in="i"; string.t="eat"; string.p="e";
row.cutoff=1;

ElseIf Gender="F" Atunci
// gestionează excepțiile
//If Name="olga" Then Name="olga" EndIf;

Rând=curent.Add(); // Irina
string.starok="*a";
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;

Rând=curent.Add(); // Inga, Olga
string.starok="ha";
string.r="și"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;

Rând=curent.Add(); // ester
string.starok="*ь";
string.r="și"; string.d="și"; line.in="b"; string.t="w"; string.p="și";
row.cutoff=1;

Rând=curent.Add(); // maria
string.starok="ia";
string.r="și"; string.d="și"; line.in="u"; string.t="ea"; string.p="și";
row.cutoff=1;

Rând=curent.Add(); // sophia
string.starok="*i";
string.r="și"; string.d="e"; line.in="u"; string.t="ea"; string.p="e";
row.cutoff=1;
EndIf;

// masa este plină. numără ultimele 2 litere și caută-le
Dacă nu este EmptyString(Nume), atunci
pb=Dreapta(Nume,2); count="StarOk"; // caută-l
newName=Nume; // dacă nimic nu se schimbă, așa să fie
stro=curent.Find(pb, count);
Dacă strict<>Nedefinit Apoi // găsit strict imediat


Altfel // nu se găsește strict, îl căutăm doar pe ultimul
pb="*"+Dreapta(pb,1);
stro=curent.Find(pb, count);
Dacă strict<>Nedefinit Apoi // găsit de ultimul
Base=Lev(Nume, StrLength(Nume)-str. Count Slice);
newName=base+abbrlp(stro[pad]);
În caz contrar // ultimul nu a fost găsit, căutăm litere după tip
pb="*"+?(Găsiți(Vowers,Dreapta(pb,1))=0,"s","g");
stro=curent.Find(pb, count);
Dacă strict<>Nedefinit=1 Apoi // găsit după tip
Base=Lev(Nume, StrLength(Nume)-str. Count Slice);
newName=base+abbrlp(stro[pad]);
EndIf;
EndIf;
EndIf;
In caz contrar
newName="";
EndIf;

// ======== Hai sa procesam patronimul, aici e mai usor ===========
curent.Clear();

Dacă Gen = "M" Atunci
șir=curent.Add();
string.r="a"; string.d="y"; line.in="a"; string.t="eat"; string.p="e";
row.cutoff=0;
ElseIf Gender="F" Atunci
șir=curent.Add();
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;
EndIf;
Dacă nu este EmptyString (patronimic) atunci
Baza \u003d Leu (Patronimic, StrLength (Patronimic) - curent. Număr de felii);
nouNume patronimic = Baza + LP abreviat (actual [pad]);
In caz contrar
nou patronimic="";
EndIf;

IfOnlyInitials Atunci
newName=Leu(newNume,1); nouPatronimic=Leu(nouPatronimic,1);
EndIf;

// setează primele litere la majuscule
newLastName=ВReg(Lev(newLastName,1))+Mid(newLastName,2);
newName=ВReg(Lev(newName,1))+Average(newName,2);
nouPatronimic=ВReg(Lev(nouPatronimic,1))+Mid(nouPatronimic,2);

// și acum totul este împreună
If InitialsOnly Then // dacă este specificat formatul inițialelor
newName=newLastName+" "+newName+pSeparator+newPatronymic+pSeparator;
In caz contrar
newName=newNume+" "+newName+" "+newPatronimic;
EndIf;

If Find(full name, ".") Then // În cazul în care parametrul de intrare este Nume cu inițiale. Nu atingeți inițialele
newName = newLastname + " " + TReg(Prenumele) + Treg(Patronimic);
EndIf;

Returnează SokrLP (nume complet nou);
EndFunctions

Aici puteți obține răspunsuri la întrebări despre Microsoft Excel 57638 471543
44519 357828
Top subiecte prezentate de pe forumul principal 14 80
Dacă ești un proprietar fericit de Mac 😉 217 1059

21 septembrie 2018 06:21:34

Secțiune pentru plasare plătitîntrebări, proiecte și sarcini și căutați executori pentru acestea. 2100 13379
Dacă ați descărcat sau achiziționat suplimentul PLEX pentru Microsoft Excel și aveți întrebări sau solicitări, vă rugăm să faceți clic aici. 310 1587
808 11620
Discuții despre funcționalitate, reguli etc. 269 3464

Online acum (oaspeți: 590, utilizatori: 12, dintre care ascunși: 3) ,

Astăzi este ziua de naștere a lui (37), (32), (28), (37), (36), (52)

Total utilizatori înregistrați: 83105

A luat parte la discuție: 31843

Total subiecte: 105875

declinarea cazului în excel

În capitolul Alte limbi și tehnologii la întrebarea dacă este posibilă flexia automată a substantivelor în format Excel, dată de autor Zufar cel mai bun răspuns este O zi buna.
Dacă vorbim despre nume complet, titluri de post sau departamente, atunci poți. Adevărat, acesta este un instrument mai mult pentru dezvoltator. Cu toate acestea, utilizatorul își poate da seama. Exemplele conțin macrocomenzi gata făcute pentru Excel.
Noroc!
PS Căutați pe Google cheia „Declinarea numelor de familie, a numelor și a patronimicelor în funcție de cazuri”

22 de răspunsuri

Hei! Iată o selecție de subiecte cu răspunsuri la întrebarea dvs.: este posibil să flexionați automat substantivele în format Excel

Raspuns de la culoare
Nu, această caracteristică nu este acceptată în Excel. Dar pentru un anumit caz, puteți utiliza funcția IF pentru a selecta una sau alta opțiune.

Raspuns de la Avanscenă
Sunteți în categoria „Programare”, așa că nimeni nu vă poate interzice să vă scrieți propria funcție în VBA, care va face această lucrare caritabilă. Și doar soluția problemei în acest format este destul de reală.

Raspuns de la a boteza
Am auzit că reforma limbii ruse a trecut, dar nici nu-mi puteam imagina introducerea „substantivelor în format Excel”))))))

Funcție personalizată pentru MS Excel

Declinarea numelui complet după cazuri

Funcția vă permite să afișați numele de familie, prenumele și patronimul, date la caz nominativ, sub forma oricărui alt caz.

Zona de aplicare:

Funcția este convenabilă de utilizat pentru a automatiza generarea documentelor în MS Excel (sau a facilita crearea acestora manual), unde trebuie indicat numele complet nu în cazul nominativ: diverse tipuri de contracte, comenzi de numerar, chitanțe, acte de reconciliere, comenzi. , protocoale, împuterniciri etc.

Funcția este de asemenea indispensabilă dacă instrumentele de automatizare implementează formarea documentelor de mai sus în aplicația MS Word pe baza datelor din tabelele MS Excel.

Exemple de utilizare:

  • în contract: „în persoana şefului Baranov Petr Viaceslavovici«
  • în bonuri de numerar: „emis Gnatyuk Pavel Vasilevici"," primit de la Gritsenko Irina Sergheevna«
  • în împuternicire: „Încredințez conducerea vehiculului Smirnițki Vitali Valerievici«
  • în ordinea: „desemnează Stepashova Olga Nikolaevna«
  • în procesul-verbal: „a fost întocmit raportul Dvorzhetsky Nikita Ivanovici«

Ce este implementat:

  • numele de familie cu toate terminațiile comune „-ov”, „-ev”, „-in”, „-yan (ts)”, „-sky (-tsky)”, „-sky (-tsky)” sunt refuzate corect ”, „-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, Rabinovici, Danelia, Kvasha, Vrubel, Kozak, Kazachok etc., precum și supranumele feminin corespunzător.
  • sunt luate în considerare diferențele în declinarea numelor de familie masculine și feminine: Weaver Viktor și Weaver Svetlana, Kozovets Anton și Kozovets Ekaterina
  • numele de familie compuse sunt procesate corect: de exemplu, Mamin-Sibiryak, Saltykov-Shchedrin, Nemirovich-Danchenko, Lebedev-Kumach
  • nume de familie străine nu declin: Galois, Morois, Defoe, Dali, Meringue, Verdi, Garcia, Hemingway etc.
  • patronimele cu particule „-ogly”, „-kyzy”, „ibn” sunt procesate cu succes: Mammadov Polad Murtuza oglu -> Mamedov Polad Murtuza oglu, Gassan Abdurakhman ibn Khattab -> Hassan Abdurakhman ibn Khattab, Abu Ali ibn Sina -> Abu Ali ibn Sinai
  • genul (masculin/feminin) este determinat automat de patronim și pe baza acestuia se selectează regulile de declinare adecvate
  • pentru situațiile în care este dificil să se determine automat sexul (numele de mijloc este străin sau absent), puteți specifica sexul ca parametru al funcției
  • este posibilă ieșirea în formă prescurtată „nume + inițiale”: Polozov N. A., Vasilyeva A. K., Dvorzhetsky E. E.
  • posibilitatea de utilizare ca suprastructuri(poate fi folosit în toate fișierele de la acest loc de muncă) și în formular cod încorporat în fișier(funcția va funcționa în acest fișier la orice loc de muncă - este convenabil dacă, de exemplu, fișierul este trimis unei contrapartide)
  • cod sursă deschis - dacă doriți, puteți studia algoritmul sau îl puteți modifica

Cum să te conectezi?

Programul este un singur fișier numit bdgFIOPropisyu.bas. Pentru a o utiliza într-un anumit fișier, funcția trebuie importată în acest fișier. Pentru asta ai nevoie de:

  1. deschideți fișierul MS Excel unde doriți să utilizați funcția
  2. intrați în editorul VBA apăsând tasta rapidă „Alt + F11” sau prin meniu:
  3. în meniul principal al editorului VBA, selectați elementul „Fișier” -> „Importați fișierul...”:
  4. în fereastra de selecție a fișierelor care apare, selectați fișierul bdgFIOPropisyu.basși faceți clic pe butonul „Deschidere”:

Totul, codul programului este importat și poate fi folosit.

Cum se utilizează?

Iată mai multe exemple de utilizare a acestuia:

Situații în care o funcție ar putea funcționa incorect:

În ciuda faptului că există destul de multe situații în care funcționarea funcției poate fi nesatisfăcătoare, probabilitatea de a întâlni un astfel de nume complet în munca practică este destul de mică, deoarece în 99,9% din cazuri, numele de familie găsite pe teritoriul Rusiei sunt refuzate conform regulilor generale.
În plus, trebuie remarcat faptul că, de asemenea, alți algoritmi și programe nu pot garanta corectitudinea rezultatului în 100% din cazuri - limba rusă este prea mare și puternică pentru a fi descrisă printr-un set de reguli logice (vezi mai jos despre influența poziția accentului în cuvânt, originea numelui de familie, despre dependența scrierea formei feminine a numelui de familie de la scrierea formei masculine etc.).

  • Conform regulilor limbii ruse, declinarea masculină și feminină limbă străină Numele care se termină în „-a” și „-ya” depind de locul accentului din cuvânt și de originea numelui de familie.
    Toate numele de familie care se termină în neaccentuat„-a” după consoane se declină: Seneca -> Seneca, Petrarh -> Petrarh, Smetana -> Smetana, Kurosawa -> Kurosawa, Glinka -> Glinka, Okudzhava -> Okudzhava etc. Declinarea numelor de familie cu şoc„-a” la sfârșit depinde de originea sa: numele de familie de origine franceză nu sunt înclinate: Dumá, Degá, Fermá, Petipá etc., sunt înclinate nume de familie de altă origine (din limbile slave și orientale): Mitta -> Mitty, Kvasha -> Kvashi, Tigaie -> Tigaie, Poker -> Pokers, Hamza -> Hamza etc.
    În mod similar, numele de familie de origine franceză cu un „-ya” accentuat la sfârșit sunt indeclinabile: Zola, Troyat. Toate celelalte nume de familie de pe „-ya” sunt declinate: Golovnya -> Golovny, Danelia -> Danilia, Beria -> Beria, Goya -> Goya.
    Deoarece este imposibil să se determine în mod programatic pozițiile de stres și originea numelui de familie, algoritmul programului presupune că toate aceste nume de familie sunt refuzate conform regulilor generale. Prin urmare, numele de familie franceze cu accent pe final sunt procesate incorect de program: Dumas -> Dumas, Zola -> Zoli, Petipa -> Petipa.
  • Numele de familie masculine care se termină în „-y”, „-y”, „-oy” sunt declinate ca adjective Gorki -> Gorki, Binecuvântat -> Binecuvântat, Blindate -> Blindate. Excepție fac cazurile în care un nume de familie cu o astfel de terminație este un substantiv comun (Kozodoy, Vodopoy, Genii, Scenario) sau este de origine străină (Tsoi, Tskhoi, Choi). Deoarece nu este posibil să se determine în mod programatic dacă un nume de familie este o astfel de excepție, este convențional acceptat că toate numele de familie cu terminațiile „-y”, „-y”, „-y” sunt refuzate ca adjective. În marea majoritate a cazurilor, acest lucru este adevărat, însă, în cazuri excepționale cu nume-substantive, rezultatul funcției va fi eronat: Kozodoy Yakov -> Goat Yakov, Genius Stefan -> Genego Stefan.
    Totuși, ca excepție, algoritmul ține cont de declinarea numelor de familie cu aceste terminații și mai puțin de 5 litere în lungime (în principal de origine coreeană): Tsoi Viktor -> Tsoi Viktor.
  • În unele cazuri, declinarea corectă a numelui de familie feminin care se termină în „-ina”, „-ova” este posibilă numai dacă este cunoscută declinarea numelui de familie masculin corespunzător: Zhemchuzhina Lyudmila, Malina Svetlana poate fi refuzată ca în forma obișnuită: Zhemchuzhina Lyudmila -> Zhemchuzhina Lyudmila, Malina Svetlana -> Malina Svetlana (dacă numele de familie masculine corespunzătoare sunt, de exemplu, Zhemchuzhin Boris și Malin Oleg), și sub forma unui substantiv: Zhemchuzhina Lyudmila -> Zhemchuzhina Lyudmila -> Malina Svetlana Malina Svetlana (dacă formele masculine ale numelui de familie, de exemplu, Zhemchuzhina Boris și Malina Oleg).
    Este imposibil să se ia în considerare astfel de nuanțe în algoritm, astfel încât toate numele de familie ale femeilor sunt procesate de funcție conform acelorași reguli (ca adjective), ceea ce în unele cazuri poate duce la rezultate incorecte.
  • O situație similară este în cazul numelor de familie masculine și feminine care se termină în „-ov (a)”, „-ev (a)”, „-in (a)”, care sunt omonime cu un substantiv comun: Borov, Lev, Filin, Barin , Korov, Bufniță, Pictură, Pană, Antichitate etc.). Nu există nicio modalitate de a stabili în mod programatic identitatea unui nume de familie și a unui substantiv prin orice semne formale, prin urmare declinarea unor astfel de nume de familie conform regulilor generale uniforme duce la rezultate incorecte ale formei: Lev Pavel -> Levy Pavel, Filin Sergey -> Filin Sergey, Korov Ksenia -> Korovaya Kseniya, Owl Olga -> Owl Olga, Pictură de Alla -> Pictură de Alla.
  • Numele de familie masculine care se termină într-un semn moale tind să fie: Vrubel Mikhail -> Vrubel Mikhail, Gogol Nikolai -> Gogol Nikolai etc. Cu toate acestea, atunci când sunt în declin, terminațiile unor astfel de nume de familie depind de ce fel de substantive - masculin, feminin sau mijlociu - sunt.
    Nu este posibil să se determine algoritmic genul unui substantiv, prin urmare, în cazurile în care un nume de familie masculin este un substantiv de gen feminin sau neutru, funcția nu va funcționa corect: Stal Ivan -> Stal Ivan, Wormwood Victor -> Wormwood Victor.
  • Formarea cazului instrumental al numelor de familie care se termină în „-zha”, „-tsa”, „-cha”, „-sha”, „-sha” depinde de accentul din cuvânt: dacă această terminație este neaccentuată, atunci când declinarea se schimbă în „-ey”: Kapitsa Peter -> Kapitsa Peter, Cloud Fedor -> Cloud Fedor; dacă finalul este accentuat, se înlocuiește cu „-oy”: Kvasha Igor -> Kvasha Igor, Candle Ivan -> Candle Ivan. Situația este similară cu numele de familie care se termină în „-ets”: fără stres, finalul se schimbă în „-em”: Palets Viktor -> Finger Viktor; sub stres - pe "-a": Soskovets Oleg -> Soskovets Oleg.
    După cum sa menționat mai sus, este imposibil să se determine în mod programatic pozițiile stresului într-un cuvânt, prin urmare, algoritmul programului presupune că în cuvintele care se termină în „-zha”, „-tsa”, „-cha”, „-sha”, „ -sha” , finalul este neaccentuat (există mai multe astfel de cuvinte), adică cazul instrumental este întotdeauna format din terminația „-ey”. Dimpotrivă, în cuvintele care se termină în „ets”, se presupune că finalul este sub stres, adică declinarea va fi cu terminația „-om”. În consecință, în alte cazuri, se vor observa erori de formă: Igor Kvasha, Ivan Svechey, Viktor Finger.
  • Conform regulilor limbii ruse, prima parte a unui nume de familie dublu rus este refuzată dacă poate fi folosit ca nume de familie în sine: opera lui Mamin-Sibiryak, povestea lui Saltykov-Șcedrin, opera lui Rimski-Korsakov etc. . Altfel, nu se schimbă: tabloul lui Van Dyck, aventurile lui Don Juan, scutierul lui Don Quijote etc. Deci, de exemplu, în numele de familie Semenov-Tyan-Shansky, prima parte este înclinată, dar nu al doilea: lucrările lui Semenov-Tyan-Shansky.
    Din nou, nu este posibil din punct de vedere algoritmic să se determine dacă partea componentă a numelui de familie este independentă, prin urmare, pentru lucrare se presupune că toate părțile numelui de familie compus ar trebui refuzate (în majoritatea cazurilor acesta este cazul), ceea ce într-un numărul de situații duce la erori: Van Dyck, Dona - Quijote, Semyonov-Tyan-Shansky.
  • Numele de familie străine care se termină în „-ov” și „-in” în cazul instrumental schimbă finalul în „-th”: Benjamin Franklin, Charles Darwin, Charlie Chaplin, Alexander Green. Numele de familie „rusești” cu terminații similare se termină în „-y”: Ivanov, Gagarin, Fonvizin etc. În ciuda faptului că numele de familie enumerate mai sus (Franklin, Darwin, Chaplin, Green) sunt luate în considerare în algoritm ca excepții, există o mică șansă ca orice alt nume străin similar să apară - în acest caz, rezultatul funcției va fi incorectă.

Regulile de declinare a numelor de familie și a numelor sunt utilizate în conformitate cu secțiunile 13.1 și 13.2 din lucrarea lui N. A. Eskova Dificultăți în flexia substantivelor. Materiale educaționale și metodologice pentru exerciții practice la cursul „Limba tiparului modern”(Comitetul de presă de stat al URSS. Institutul integral sindical pentru pregătirea avansată a muncitorilor tipografiei. M., 1990).

Preț: 1500 de ruble