Разбиение Слов на Слоги. - VB

Узнай цену своей работы

Формулировка задачи:

Всем здраствуйте. Задание следущее: написать программу на VB которая будет разбивать слово на слоги. Принцип таков: в слоге может быть только 1 гласная буква. так что, сколько гласных в слове, столько и слогов. С согласными сложнее: 1. Согласная и последующая гласная относятся к одному и тому же слогу; 2. Все согласные буквы, находящиеся перед первой гласной принадлежат одному слогу; 3. Все согласные буквы, расположенные после последней гласной принадлежат одному и тому же слогу; 4. Из нескольких согласных, расположенных в середине слова, первая относится к текущему слогу, остальные – к следующему (исключения составляют буквы «ъ» и «ь», которые «привязываются» к предыдущей согласной). Я всё это представляю, но знаний VB явно не хватает. Только расквитался с Паскалем и тут новая напасть. Буду очень благодарен за любой код, который я смогу доделать самостоятельно. Просьба писать максимсально доступно, оставляя комментарии, т.к. хочется разобраться а не содрать. Если кому-то здесь понадобится помощь с Паскалем, u'r welcome.

Решение задачи: «Разбиение Слов на Слоги.»

textual
Листинг программы
Option Explicit
Private Sub Комманда1_Click()
Dim I, J, K, M, Pg, Ns, Ks, re
Dim text As String ' текст
Dim MasT() As String ' массив предложений
Dim MasS() As String ' массив слов
Dim SL '  текущее слово
Dim G As String ' вспомогательная строка
Dim GL() ' массив порядковых номеров гласных в слове
Dim SLOG As String ' текущий слог
               Список1.Clear ' очищаем список
 
text = Текст1.text ' считываем тект в переменную
G = "`1234567890-=[]\';/.,~!@#$%^&*()_+{}|?><-;:«»" ' перечень символов от которых избавляемся
For I = 1 To 45 ' цикл  по количеству символов. меняем на пробелы. если просто удалять два слова в одно могут
text = Replace(text, Mid(G, I, 1), " ")
text = Replace(text, "  ", " ") ' заодно меняем два пробела на один
Next I
G = "ауоыиэяюёе" ' список гласных. Можно добавить заглавные
MasT = Split(text, vbNewLine) ' разбиваем весь тект на предложения
For I = 0 To UBound(MasT) ' до конца массива предложний
MasS = Split(MasT(I), " ") ' разбиваем каждое предложение на слова
        For J = 0 To UBound(MasS) ' до конца массива слов в каждом предложении
        Erase GL 'очищаем массив гласных
  SLOG = "" 'очищаем текущий слог
  ReDim GL(0) ' изменяем размерность массива
                        For K = 1 To Len(MasS(J)) ' цыкл с позиции начала поиска ищем гласную из списка G
                                    If InStr(1, G, Mid(MasS(J), K, 1)) > 0 Then ' если нашли гласную
                                    ReDim Preserve GL(UBound(GL) + 1) ' увеличиваем размер массива позиций гласных в слове
                                                GL(UBound(GL)) = K ' назначаем позицию
                                   End If '
                        Next K ' следующая буква
                        Ns = 1 'Певый слог начинается с первой буквы
                                    If UBound(GL) > 0 Then ' если в слове есть гласная
                               For M = 1 To UBound(GL) - 1 ' цыкл по всем позициям гласных
                               ' и назначение конца слога
                                                        Select Case (GL(M + 1) - GL(M)) ' выбрать разницу позиций гласных в слове
                                                        Case 1 ' если гласные стоят рядом
                                                    Ks = Ns + 1 '
                                                        Case 2 'если между гласными одна буква
                                                          Ks = GL(M)
                                                        Case 3, 4, 5 'если между гласными 3, 4, ,5  букв
                                                        'проверяем на наличие после согласной знаков разной мягкости
                                                                  Ks = IIf((Mid(MasS(J), GL(M) + 2, 1) = "ь" Or Mid(MasS(J), GL(M) + 2, 1) = "ъ"), GL(M) + 2, GL(M) + 1) '
                                                               End Select '
                                                          SLOG = Mid(MasS(J), Ns, Ks - Ns + 1) ' выбираем слог из слова по его началу и концу
                                                             Список1.AddItem SLOG 'заносим в список
'                                                          Debug.Print M, GL(M), SLOG ' или печатаем в отладчике
 
                                                        Ns = Ks + 1 'назначеам начало следующего слова
                            Next M '
                                 SLOG = Mid(MasS(J), Ns, Len(MasS(J)) - Ns + 1) ' записывае последний слог слова
                                 Список1.AddItem SLOG
'                                  Debug.Print M, GL(M), SLOG
                                    End If '
        Next J ' следующее слово
Next I ' следующее предложение
End Sub '

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы