Разбиение Слов на Слоги. - 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 '
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д