Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/74: Рейтинг темы: голосов - 74, средняя оценка - 4.76
156 / 0 / 1
Регистрация: 05.05.2012
Сообщений: 12

Склонение фамилий в программе, способы реализации

18.05.2012, 13:19. Показов 13863. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Visual Basic
1
2
3
4
5
6
7
8
9
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
58
59
60
61
62
63
64
65
Function DativeCase(sSurname$, Optional sName$, Optional sPatronymic$) As String
 
    Application.Volatile True
    On Error Resume Next
    If sName$ = "" And sPatronymic$ = "" Then
        arr = Split(Application.Trim(sSurname$))
        sSurname$ = arr(0): sName$ = arr(1): sPatronymic$ = arr(2)
    End If
 
    Dim bMaleSex As Boolean: bMaleSex = (Right(sPatronymic, 1) = "ч")
 
    If Len(sSurname) > 0 Then    
        If bMaleSex Then
            Select Case Right(sSurname, 1)
                Case "о", "и", "я", "а": DativeCase = sSurname
                Case "й": DativeCase = Mid(sSurname, 1, Len(sSurname) - 2) + "ому"
                Case Else: DativeCase = sSurname + "у"
                 If bMaleSex Then
                    Select Case (sSurname)
                        Case "паршивлюк", "хомяк": DativeCase = sSurname
                    End Select
                End If
            End Select
        Else
            Select Case Right(sSurname, 1)
                Case "о", "и", "б", "в", "г", "д", "ж", "з", "к", "л", "м", "н", "п", _
                     "р", "с", "т", "ф", "х", "ц", "ч", "ш", "щ", "ь": DativeCase = sSurname
                Case "я": DativeCase = Mid(sSurname, 1, Len(sSurname) - 2) & "ой"
                Case Else: DativeCase = Mid(sSurname, 1, Len(sSurname) - 1) & "ой"
            End Select
        End If
        DativeCase = DativeCase & " "
    End If
 
    If Len(sName) > 0 Then    
        If bMaleSex Then
            Select Case Right(sName, 1)
                Case "й", "ь": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "ю"
                Case "л": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 2) & "лу"
                Case "я": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "е"
                Case Else: DativeCase = DativeCase & sName & "у"
            End Select
        Else
            Select Case Right(sName, 1)
                Case "а", "я"
                    If Mid(sName, Len(sName) - 1, 1) = "и" Then
                        DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "и"
                    Else
                        DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "е"
                    End If
                Case "ь": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "и"
                Case Else: DativeCase = DativeCase & sName
            End Select
        End If
        DativeCase = DativeCase & " "
    End If
 
    If Len(sPatronymic) > 0 Then    
        If bMaleSex Then
            DativeCase = DativeCase & sPatronymic & "у"
        Else
            DativeCase = DativeCase & Mid(sPatronymic, 1, Len(sPatronymic) - 1) & "е"
        End If
    End If
End Function
у меня возникла проблема, где склоняется фамилия, а именно тут
Visual Basic
1
2
3
4
5
                 If bMaleSex Then
                    Select Case (sSurname)
                        Case "паршивлюк", "хомяк": DativeCase = sSurname
                    End Select
                 End If
нужно сделать не по одной фамилии вписывать, а сделать ссылку на документ .txt например и уже что бы он от туда брал фамилии. как это сделать не подскажите?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2012, 13:19
Ответы с готовыми решениями:

Склонение Фамилий
Еще раз всем привет. Возникла еще одна проблема. Знаю есть много макросов, функций по изменению падежей Фамилий, имен и отчеств, но в моем...

Склонение фамилий по падежам
Вводят вопросы вида (кто, кого, кому, кем, на ком) и фамилию, например "Иванов". Ответ выдавать в виде , "Иванову",...

Склонение фамилий по падежам
11. Вводят вопросы вида (кто, кого, кому, кем, на ком) и фамилию, например "Петренко". Ответ выдавать в виде "Петренко",...

37
 Аватар для PAnT0P
1492 / 587 / 106
Регистрация: 26.03.2012
Сообщений: 1,039
18.05.2012, 14:14

Не по теме:

Успехов тебе, в борьбе с великим и могучим! ;)


Подолью маленько масло в огонь, вот тебе пару реальных людей:
Мария Сычь
Володя Сушко
Протестируй свой алгоритм.
0
156 / 0 / 1
Регистрация: 05.05.2012
Сообщений: 12
18.05.2012, 15:59  [ТС]
в проге задано все по порядку, сначала фамилия потом имя и потом отчество. так что все норм.
Сычь Марии
Сушко Володе
ну так что, если идеи как реализовать чтение фамилий которые не склоняются (не из-за правил) из файла?
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,283
18.05.2012, 18:24
Цитата Сообщение от Yeaahhhh Посмотреть сообщение
сделать ссылку на документ .txt например и уже что бы он от туда брал фамилии
а зачем? лучше указать все правила в коде, на крайний случай в Variables (если это Ворд) чтобы файл за собой не таскать
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
18.05.2012, 19:34
Yeaahhhh, одного моего знакомого зовут Никотин Спиртович Бухайло.
Его тоже ни одна программа не склоняет.

Это я к тому, что не заморачивайтесь с такими сочетаниями, всех все равно не перечислишь
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,283
18.05.2012, 19:47
Цитата Сообщение от Памирыч Посмотреть сообщение
Никотин Спиртович Бухайло
несколько\множество этапов проверки - разложит на фамилия имя отчество и заорёт, что отчество Бухайло не допустимо
0
156 / 0 / 1
Регистрация: 05.05.2012
Сообщений: 12
18.05.2012, 22:01  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Да я не парюсь) меня особо не волнует какие там фамилии не склоняются) просто надо так сделать и все) Но я уже разобрался, если кому интересно:


Visual Basic
1
2
3
4
5
6
7
8
9
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Function DativeCase(sSurname$, Optional sName$, Optional sPatronymic$) As String
 
     Application.Volatile True
    On Error Resume Next
     If sName$ = "" And sPatronymic$ = "" Then
         arr = Split(Application.Trim(sSurname$))
         sSurname$ = arr(0): sName$ = arr(1): sPatronymic$ = arr(2)
     End If
 
     Dim bMaleSex As Boolean: bMaleSex = (Right(sPatronymic, 1) = "ч")
  Dim Numb As Integer
  Dim sPyt As String
        sPyt = "C:\file.txt"
        Numb = FreeFile
        Open sPyt For Input As Numb
     If Len(sSurname) > 0 Then    '   Фамилия
         If bMaleSex Then
             Select Case Right(sSurname, 1)
                 Case "о", "и", "я", "а": DativeCase = sSurname
                 Case "й": DativeCase = Mid(sSurname, 1, Len(sSurname) - 2) + "ому"
                 Case Else: DativeCase = sSurname + "у"
                 
                    If bMaleSex Then
        Do While Not EOF(Numb)
        Line Input #Numb, sText
                        Select Case (sSurname)
                            Case sText: DativeCase = sSurname
                        End Select
        Loop
        Close #Numb
                    End If
                    
             End Select
         Else
             Select Case Right(sSurname, 1)
                 Case "о", "и", "б", "в", "г", "д", "ж", "з", "к", "л", "м", "н", "п", _
                      "р", "с", "т", "ф", "х", "ц", "ч", "ш", "щ", "ь": DativeCase = sSurname
                 Case "я": DativeCase = Mid(sSurname, 1, Len(sSurname) - 2) & "ой"
                 Case Else: DativeCase = Mid(sSurname, 1, Len(sSurname) - 1) & "ой"
                 
                   If (bMaleSex = False) Then
        Do While Not EOF(Numb)
        Line Input #Numb, sText
                     Select Case (sSurname)
                         Case sText: DativeCase = sSurname
                     End Select
        Loop
        Close #Numb
                   End If
                  
             End Select
         End If
         DativeCase = DativeCase & " "
     End If
 
     If Len(sName) > 0 Then    '   Имя
         If bMaleSex Then
             Select Case Right(sName, 1)
                 Case "й", "ь": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "ю"
                 Case "л": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 2) & "лу"
                 Case "я": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "е"
                 Case Else: DativeCase = DativeCase & sName & "у"
             End Select
         Else
             Select Case Right(sName, 1)
                 Case "а", "я"
                     If Mid(sName, Len(sName) - 1, 1) = "и" Then
                         DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "и"
                     Else
                         DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "е"
                     End If
                 Case "ь": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "и"
                 Case Else: DativeCase = DativeCase & sName
             End Select
         End If
         DativeCase = DativeCase & " "
     End If
 
     If Len(sPatronymic) > 0 Then    '   Отчество
         If bMaleSex Then
             DativeCase = DativeCase & sPatronymic & "у"
         Else
             DativeCase = DativeCase & Mid(sPatronymic, 1, Len(sPatronymic) - 1) & "е"
         End If
     End If
 End Function
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,283
18.05.2012, 22:11
как у Вас не вникал, вот мой отрезок программы на эту тему:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Select Case Последняя_буква_фамилии
    Case "о", "е", "и", "у", "ы", "э", "ю": GoTo Несклоняемая_фамилия_М_Ж
    End Select
 
    Select Case Две_последние_буквы_фамилии
    Case "ок", "ак", "як", "их", "ых", "ия", "уа", "иа": GoTo Несклоняемая_фамилия_М_Ж
    End Select
 
    Select Case Три_последние_буквы_фамилии
    Case "ава": GoTo Несклоняемая_фамилия_М_Ж
    End Select
 
    Select Case Четыре_последние_буквы_фамилии
    Case "идис", "адис": GoTo Несклоняемая_фамилия_М_Ж
    End Select
 
    'Женские
    Select Case Последняя_буква_фамилии
        Case "б", "в", "г", "д", "ж", "з", "й", "к", "л", "м", "н", "п", "р", "с", "т", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ь": GoTo Несклоняемая_фамилия_Ж
        End Select
    End If
0
156 / 0 / 1
Регистрация: 05.05.2012
Сообщений: 12
01.06.2012, 11:16  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Function DativeCase(sSurname$, Optional sName$, Optional sPatronymic$) As String
 
     Application.Volatile True
    On Error Resume Next
     If sName$ = "" And sPatronymic$ = "" Then
         arr = Split(Application.Trim(sSurname$))
         sSurname$ = arr(0): sName$ = arr(1): sPatronymic$ = arr(2)
     End If
 
     Dim bMaleSex As Boolean: bMaleSex = (Right(sPatronymic, 1) = "÷")
  Dim Numb As Integer
  Dim sPyt As String
        sPyt = "C:\file.txt"
        Numb = FreeFile
        Open sPyt For Input As Numb
     If Len(sSurname) > 0 Then    '   Ôàìèëèÿ
         If bMaleSex Then
             Select Case Right(sSurname, 1)
                 Case "î", "è", "ÿ", "à": DativeCase = sSurname
                 Case "é": DativeCase = Mid(sSurname, 1, Len(sSurname) - 2) + "îìó"
                 Case Else: DativeCase = sSurname + "ó"
                 
                    If bMaleSex Then
        Do While Not EOF(Numb)
        Line Input #Numb, sText
                        Select Case (sSurname)
                            Case sText: DativeCase = sSurname
                        End Select
        Loop
        Close #Numb
                    End If
                    
             End Select
         Else
             Select Case Right(sSurname, 1)
                 Case "î", "è", "á", "â", "ã", "ä", "æ", "ç", "ê", "ë", "ì", "í", "ï", _
                      "ð", "ñ", "ò", "ô", "õ", "ö", "÷", "ø", "ù", "ü": DativeCase = sSurname
                 Case "ÿ": DativeCase = Mid(sSurname, 1, Len(sSurname) - 2) & "îé"
                 Case Else: DativeCase = Mid(sSurname, 1, Len(sSurname) - 1) & "îé"
                 
                   If (bMaleSex = False) Then
        Do While Not EOF(Numb)
        Line Input #Numb, sText
                     Select Case (sSurname)
                         Case sText: DativeCase = sSurname
                     End Select
        Loop
        Close #Numb
                   End If
                  
             End Select
         End If
         DativeCase = DativeCase & " "
     End If
 
     If Len(sName) > 0 Then    '   Èìÿ
         If bMaleSex Then
             Select Case Right(sName, 1)
                 Case "é", "ü": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "þ"
                 Case "ë": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 2) & "ëó"
                 Case "ÿ": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "å"
                 Case Else: DativeCase = DativeCase & sName & "ó"
             End Select
         Else
             Select Case Right(sName, 1)
                 Case "à", "ÿ"
                     If Mid(sName, Len(sName) - 1, 1) = "è" Then
                         DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "è"
                     Else
                         DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "å"
                     End If
                 Case "ü": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "è"
                 Case Else: DativeCase = DativeCase & sName
             End Select
         End If
         DativeCase = DativeCase & " "
     End If
 
     If Len(sPatronymic) > 0 Then    '   Îò÷åñòâî
         If bMaleSex Then
             DativeCase = DativeCase & sPatronymic & "ó"
         Else
             DativeCase = DativeCase & Mid(sPatronymic, 1, Len(sPatronymic) - 1) & "å"
         End If
     End If
 End Function
вот я сделал все, что бы не склоняемые фамилии брались из файла.
у меня теперь просьба, народ помогите сделать диалог с пользователем, что бы прога предварительно спрашивала фамилия склоняется или нет. Если да то по всем правилам, а если нет то писалась такая какая есть. Это нужно ппц как. выручайте плиз)

Добавлено через 18 часов 57 минут
ап. Все еще нужна ваша помощь)
0
8 / 8 / 0
Регистрация: 23.11.2011
Сообщений: 116
05.08.2013, 17:31
Целый день блуждаю по инету в поисках рабочего кода VBA или модуля для Access для склонения ФИО.
Подскажите пожалуйста. Вот в этом обсуждении выдается ошибка, видимо ссылка на какую то библиотеку
Application.Volatile True - это что?
Кстати по Exell много материала. Можно ли его подогнать под Access.
В склонении ФИО интересует родительный (кого), дательный (кому) и творительный (кем) падежи.
Наши законодатели так напридумывали форм документов...
Не претендую на всеобщее полное исследование и склонение "изысканных" и "редких" фамилий. Для этого можно предусмотреть ручное исправление. Ну хотя бы на 90% чтоб работала...
P.S. Если кто не верит, посмотрите весь форум, ничего конкретного не найти! Все "посылают" куда-то, кто в делфи, кто в дебри... Помогите, люди добрые!
0
2039 / 471 / 131
Регистрация: 13.11.2008
Сообщений: 901
05.08.2013, 18:35
Application.Volatile True
Это только для Excel. Если планируете в другой программе использовать - удалите эту строку. Она отвечает за пересчет функции при любом изменении на листе.
А в остальном - выше есть функция, которая вроде бы рабочая. Правда, переделывать её на склонения по трем падежам дело явно не быстрое. Когда-то где-то видел DLL, которая умеет склонять большую часть ФИО. Или DLL не вариант?
1
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
05.08.2013, 23:14
Лучший ответ Сообщение было отмечено как решение

Решение

АлИв, могу предложить готовый вариант "склонялки" для дательного падежа.
Он достаточно тщательно выверен по справочнику Д.Э. Розенталя, хотя, конечно, 100% точности не даёт.
Вложения
Тип файла: zip declin.zip (14.4 Кб, 97 просмотров)
3
8 / 8 / 0
Регистрация: 23.11.2011
Сообщений: 116
06.08.2013, 06:40
Спасибо всем.
Из кода то есть надо удалить:
Visual Basic
1
2
3
4
5
6
Application.Volatile True
    On Error Resume Next
    If sName$ = "" And sPatronymic$ = "" Then
        arr = Split(Application.Trim(sSurname$))
        sSurname$ = arr(0): sName$ = arr(1): sPatronymic$ = arr(2)
    End If
Правильно?

Пример для Exell посмотрю. Его так же можно приспособить к Access?
А вообще непаханное поле... Одна прога пишет ГОЙ-ГОМУ, Другая ГОЙ-ГОЮ, но МОЛОДОЙ-МОЛОДОЮ...
Ну это мелочи поправимые!!!
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
06.08.2013, 07:15
Цитата Сообщение от Dmitrii Посмотреть сообщение
могу предложить готовый вариант "склонялки" для дательного падежа
По аналогии добавил родительный и творительный
Миниатюры
Склонение фамилий в программе, способы реализации  
Вложения
Тип файла: rar Склонение ФИО___________ EXCEL.rar (22.9 Кб, 124 просмотров)
1
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
06.08.2013, 07:59
SoftIce, у Вас вместо родительного падежа получился винительный.
В односложных фамилиях, оканчивающихся на мягкий знак, ударение не должно бы менять своего места, поэтому не должно появляться буквы "ё" в окончании творительного падежа.
Увидел ещё и свою недоделку с именем Пётр.

Добавлено через 10 минут
Цитата Сообщение от АлИв Посмотреть сообщение
А вообще непаханное поле...
В русском языке нет жёстких правил для склонения фамилий (и имён тоже) иностранного происхождения. К тому же, иногда сразу и нельзя определить происхождение фамилии. В ряде случаев способ склонения зависит от слога, на который падает ударение. Есть исключения для фамилий русского происхождения, совпадающих с каким-либо нарицательным существительным (например, Бобёр), которое рекомендует (но не требует) не склонять такие фамилии. Наконец, есть укоренившиеся в традиции носителей той или иной фамилии правила её склонения.
Отсюда и масса разночтений.
2
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
06.08.2013, 09:12
Цитата Сообщение от Dmitrii Посмотреть сообщение
SoftIce, у Вас вместо родительного падежа получился винительный.

Не по теме:

Цитата Сообщение от Dmitrii Посмотреть сообщение
А вообще непаханное поле...
:yes: :good:

1
8 / 8 / 0
Регистрация: 23.11.2011
Сообщений: 116
06.08.2013, 15:48
Спасибо всем. Глядишь, всем миром что то сотворим полезное!
Пойду тренироваться...

Добавлено через 4 часа 17 минут
Цитата Сообщение от Dmitrii Посмотреть сообщение
АлИв, могу предложить готовый вариант "склонялки" для дательного падежа.
Он достаточно тщательно выверен по справочнику Д.Э. Розенталя, хотя, конечно, 100% точности не даёт.
Увы, Ваш вариант подогнать под Acces не получилось. Может кто поможет? Если можно.

А вот функция предыдущая пошла, убрав ненужные строки как советовали.

Вопрос Dmitrii: а только фамилии или имена не склоняются? При пустых строках функция почему то не работает
Можно ли Ваш пример сделать без кнопки? Что бы при заполнении фамилии сразу появлялся результат склонения.
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,283
06.08.2013, 20:43
Цитата Сообщение от АлИв Посмотреть сообщение
При пустых строках функция почему то не работает
мне кажется не работает, потому что по отчеству она выясняет пол, а если пусто, пол узнать не может и отсюда тормоза

Добавлено через 32 минуты
респект, нашёл баги у себя

По моей программе должно быть Бобок Антону Сергеевичу в отличии от Бобку Антону Сергеевичу

По моей программе должно быть Туляковой Евгение Петровне в отличии от Туляковой Евгении Петровне

Какие тут правила русского языка срабатывают?

Добавлено через 1 минуту
Цитата Сообщение от Dmitrii Посмотреть сообщение
Увидел ещё и свою недоделку с именем Пётр
имеется ввиду ё меняется на е?

Добавлено через 5 минут
по поводу фамилии Бобок, не согласен, есть правило
Если Две_последние_буквы_фамилии
Case "ок", "ак", "як", "их", "ых", "ия", "уа", "иа"
Тогда Несклоняемая_фамилия_М_Ж
Мнения??

Добавлено через 43 минуты
ещё где то я читал, что
если Две_последние_буквы_имени
Case "аа", "ая", "яа", "яя", "оа", "оя", "ёа", "ёя", "уа", "уя", "юа", "ыа", "ыя", "иа", "эа", "эя", "еа"
тогда Несклоняемое_имя_М_Ж
тогда это не клеится с именем Зоя, признаёт его как не склоняемое, и какие мнения?
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
06.08.2013, 21:06
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Добавлено через 43 минуты
ещё где то я читал, что
если Две_последние_буквы_имени
Case "аа", "ая", "яа", "яя", "оа", "оя", "ёа", "ёя", "уа", "уя", "юа", "ыа", "ыя", "иа", "эа", "эя", "еа"
тогда Несклоняемое_имя_М_Ж
тогда это не клеится с именем Зоя, признаёт его как не склоняемое, и какие мнения?
Ну последнее-то явно с дырой: так и Рая не будет склоняться (наверняка и ещё можно подобрать)
(хотя это для полных имён, ПАРДОН)

Добавлено через 15 минут
Во, нашёл: Аглая
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
06.08.2013, 23:41
Цитата Сообщение от АлИв Посмотреть сообщение
... а только фамилии или имена не склоняются?..
Отчества тоже могут не склоняться. Например, Тимур-оглы.
Цитата Сообщение от АлИв Посмотреть сообщение
... При пустых строках функция почему то не работает...
Не обрабатываются строки, в которых отсутствует фамилия или одновременно имя и отчество.
Цитата Сообщение от АлИв Посмотреть сообщение
... Можно ли Ваш пример сделать без кнопки?...
Смотрите прикреплённую книгу, второй лист.
Склонение будет выполняться если заполнены все три базовых поля (Ф.И.О.) или в любое из этих полей внесено изменение, если они уже были заполнены ранее.
Действие выполняет процедура Declin(), код которой размещён в модуле 2. Вызывает её процедура Worksheet_Change(), код которой размещён модуле кода листа 2.

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
... Какие тут правила русского языка срабатывают?..
1. Для фамилии Бобок.
Нерусские фамилии, оканчивающиеся на согласную букву или мягкий знак, склоняются в мужском роде и не склоняются в женском. Однако, строго говоря, это не правило, а устоявшаяся на сегодняшний день традиция.
Впрочем, здесь есть ещё одна деталь. Предполагается, что фамилия Бобок имеет восточнославянское (белорусское) происхождение, а ударение в ней падает на последний слог. Поэтому в дательном падеже последняя "о" выпадает. Получается Бобку.
Если ударение перенести на первый слог, то выпадающих гласных не будет. Получится Бобоку.
Если же предположить, что эта фамилия имеет западнославянское (чешское) происхождение, то независимо от того, куда падает ударение, выпадающих гласных не будет.

2. Имя Евгения, как и все женские имена, оканчивающиеся на "ия", относятся ко второму типу склонения. В родительном, дательном и предложном падежах эти имена оканчиваются на "и".
А вот это уже одно из грамматических правил.

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
... есть правило ... ещё где то я читал...
Советую найти подходящие справочники Дитмара Эльяшевича Розенталя. На сегодняшний день это один из наиболее авторитетных как в редакторской, так и в академической среде специалист по грамматике русского языка.

P.S. Пока писал этот комментарий, вспомнил о варианте фамилии, оканчивающейся в именительном падеже на "ёк" (например, Слынёк). Во всех прочих падежах (речь о мужской фамилии, т.к. женская не склоняется) вместо "ё" перед "к" появится "ь".
Внёс в макросы соответствующие дополнения.
Вложения
Тип файла: zip declin2.zip (24.5 Кб, 81 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.08.2013, 23:41
Помогаю со студенческими работами здесь

Склонение имен и фамилий
Помогите с алгоритмом по "склонению" имен и фамилий? Пример: Петя Иванов - Пети Иванову и т.д. Куда копать???

Склонение фамилий в родительный падеж
Всем привет, есть ли готовые макросы для Word которые будут склонять фамилии в род.падеж?

Склонение фамилий, имен и отчеств по падежам
Можно ли програмно заставить VBA склонять по отменкам Фамилию, Имя и Отчество?

Способы реализации БД
Задача: Создать базу данных (с клиентами, конечно), которая свяжет работу отдела. Вводные данные: К базе одновременно могут...

Чат: способы реализации
Всем зига. Кто поможет сделать чат-программу? :3


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru