0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 27

Попытка сделать задачу "деление слова на слоги"

21.12.2015, 01:40. Показов 5702. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте. Меня очень заинтересовала задача из топика ниже- деление слова на слоги и я попытался решить ее. Но, к сожалению, я не имею ИДЕ с пошаговой отладкой кода и наблюдением за значениеями переменных. ЯваСкриптом я заинтересовался после игры в КодКомбат и не почти не имею практики программирования страниц браузера. Для отладки кода я пользовался интернет сервисами, но один из них не поддерживает document.write(), а второй зависает, приходилось переписывать код и так далее. Я думаю, что алгоритм решения этой задачи все-же правильный, но, может написана она тяжеловесно и имеются ошибки в коде. Поэтому я бы очень попросил помочь мне, а так-же топик-стартеру в топике ниже. Спасибо вам большое заранее.

JavaScript
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 delenieNaSlogi (world){
    var glasnie= "уеыаоэяию";
    var soglasnie="йцкнгшщзхфвпрлджчсмтб";
    var tverdZn= 'ъ';
    var miagZn='ь';
    var pervDveBukvi=true;
    var dveSoglasnihPodrad= [];
    var worldLength= world.length;
    var glLength= glasnie.length;
    var sogLength= soglasnie.length;
    var proveriaemieBukvi=[];
    var glasnaia=false;
    var slogi=[];
    // проверяем каждую букву слова и помещаем их в массив проверяемые буквы
    for (i=1;i<=worldLength;i++){
        proveriaemieBukvi[proveriaemieBukvi.length]= world[i];
        // чтобы не делить две первых буквы, отмечаем их
        if(i>2){
            pervDveBukvi=false;
        }
        // проверяем на мягкий и твердый знаки
        else if (world[i]===miagZn){
            var slogi[slogi.length-1]= proveriaemieBukvi;
            continue;
        }
        
        if(world[i]===tverdZn){
            var slogi[slogi.length-1]= proveriaemieBukvi;
            continue;
        }
        
        // проверяем на гласные
        
        for(gl=1;gl<=glLength;gl++){
            
            if(world[i]=glasnie[gl]){
                glasnaia=true;
                slogi[slogi.length-1]=proveriaemieBukvi;
                proveriaemieBukvi=[];
                glasnaia=false;
                
            }
        }
        
        // проверяем на согласные
        for(a=1;a<=sogLength;a++){
            // если согласная- помещаем в массив, чтобы следить, сколько согласных идет подряд
            if(world[i]===soglasnie[a]){
                dveSoglasnihPodrad[dveSoglasnihPodrad.length-1]=world[i];
                
                // если две согласных подряд и не первые две буквы- то помещаем его слоговый массив, слог получен
                if(dveSoglasnihPodrad.length>1 && pervDveBukvi===false){
                    slogi[slogi.length-1]= proveriaemieBukvi;
                    proveriaemieBukvi=[];
                    
                }
                
            }
        }
        
    }
    return slogi;
}
document.write(delenieNaSlogi("индустриализация"));
Оригинальный вопрос с задачей: Задачи по JavaScript

И можете еще посоветовать ИДЕ с пошаговой отладкой и отображением значения переменных. И за этот совет тоже заранее спасибо. )
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2015, 01:40
Ответы с готовыми решениями:

Деление слов на слоги (С++)
Нужно написать программу деления слов на слоги на С++. Пожалуйста, помогите!)

Деление слов на слоги
Прога делит английские слова на слоги, но здесь не все правила слогоделения (слово name, например, выдает как двухсложное). Помогите,...

Деление слов на слоги в php
Здравствуйте. Помогите составить скрипт деления слов на слоги. В одном форуме нашел следующие функции: Слова из массива строк s по...

4
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
21.12.2015, 03:01
Лучший ответ Сообщение было отмечено Alex2000 cf как решение

Решение

Alex2000 cf, существует два набора правил:
1. набор правил деления слов на слоги, в котором главное правило -- В слове столько слогов, сколько гласных звуков.
2. набор правил переноса слов, в котором главное правило -- нельзя переносить одну букву и нельзя переносить даже две, если они обе -- гласные

эти наборы правил существенно различаются - почитайте, к примеру, это

например, слово нация по слогам однозначно делится на 3 слога -- на-ци-я
а вот для переноса это слово можно разделить единственным способом, но только на 2 части -- на-ция

так что вам следует сначала определиться -- какое именно деление вы будете реализовывать ("на слоги" или "для переноса")
а затем надо будет попробовать учесть все существующие для выбранного вами вида деления правила, рекомендации и исключения

это сложно и очень объёмно
ну как, к примеру, вы реализуете "правило переноса" -- При переносе слов с приставками нельзя оставлять в конце строки при приставке начальную часть корня, не составляющую слога, кроме как тупым предварительным вводом в свой код всех-всех-всех возможных в русском языке приставок?
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
21.12.2015, 03:43
Лучший ответ Сообщение было отмечено Alex2000 cf как решение

Решение

Alex2000 cf, вот нашел один вариантик. Может быть пригодится. Ничего не правил и выкладываю "как есть":
HTML+JS
HTML5
1
2
3
4
5
6
<form>
    <input type="text" size="30" name="fromString" value="">
    <input type="button" value="Go!" onClick="document.forms[0].elements[2].value = getSeparatedString (document.forms[0].elements[0].value);">
    <br>
    <input type="text" size="30" name="toString" value="">
 </form>
JavaScript
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
var vowel = new String('аеёиоуыэюя'); // Гласные буквы
var voiced = new String('бвгджзлмнрхцчшщ'); // Звонкие и шипящие согласные
var deaf = new String('кпстф'); // Глухие согласные
var brief = new String('й'); // Й
var other = new String('ьъ'); // Другие
var cons = new String('бвгджзйклмнпрстфхцчшщ'); // Все согласные
// Валидация правильности введенной строки
function validateString(s) {
  // Поленился делать :)
  return s;
} // function validateString (s)
// Есть ли в строке гласные?
function isNotLastSep(remainStr) {
  var is = false;
  for (var i = 0; i < remainStr.length; i++) {
    if (vowel.indexOf(remainStr.substr(i, 1)) != -1) {
      is = true;
      break;
    }
  } // for (var i = 0; i < remainStr - 1; i++)
  return is;
} // function isLastSep (remainStr)
// Собственно функция разбиения слова на слоги
function getSeparatedString(s) {
  // Добавляем слог в массив и начинаем новый слог
  function addSep() {
    sepArr.push(tmpS);
    tmpS = '';
  } // function addSep ()
  s = validateString(s);
  var tmpL = new String(); // Текущий символ
  var tmpS = new String(); // Текущий слог
  var sepArr = new Array(); // Массив слогов
  for (var i = 0; i < s.length; i++) {
    tmpL = s.substr(i, 1);
    tmpS += tmpL;
    // Проверка на признаки конца слогов
    // если буква равна 'й' и она не первая и не последняя и это не последний слог
    if (
      (i != 0) &&
      (i != s.length - 1) &&
      (brief.indexOf(tmpL) != -1) &&
      (isNotLastSep(s.substr(i + 1, s.length - i + 1)))
    ) {
      addSep();
      continue;
    }
    // если текущая гласная и следующая тоже гласная
    if (
      (i < s.length - 1) &&
      (vowel.indexOf(tmpL) != -1) &&
      (vowel.indexOf(s.substr(i + 1, 1)) != -1)
    ) {
      addSep();
      continue;
    }
    // если текущая гласная, следующая согласная, а после неё гласная
    if (
      (i < s.length - 2) &&
      (vowel.indexOf(tmpL) != -1) &&
      (cons.indexOf(s.substr(i + 1, 1)) != -1) &&
      (vowel.indexOf(s.substr(i + 2, 1)) != -1)
    ) {
      addSep();
      continue;
    }
    // если текущая гласная, следующая глухая согласная, а после согласная и это не последний слог
    if (
      (i < s.length - 2) &&
      (vowel.indexOf(tmpL) != -1) &&
      (deaf.indexOf(s.substr(i + 1, 1)) != -1) &&
      (cons.indexOf(s.substr(i + 2, 1)) != -1) &&
      (isNotLastSep(s.substr(i + 1, s.length - i + 1)))
    ) {
      addSep();
      continue;
    }
    // если текущая звонкая или шипящая согласная, перед ней гласная, следующая не гласная и не другая, и это не последний слог
    if (
      (i > 0) &&
      (i < s.length - 1) &&
      (voiced.indexOf(tmpL) != -1) &&
      (vowel.indexOf(s.substr(i - 1, 1)) != -1) &&
      (vowel.indexOf(s.substr(i + 1, 1)) == -1) &&
      (other.indexOf(s.substr(i + 1, 1)) == -1) &&
      (isNotLastSep(s.substr(i + 1, s.length - i + 1)))
    ) {
      addSep();
      continue;
    }
    // если текущая другая, а следующая не гласная если это первый слог
    if (
      (i < s.length - 1) &&
      (other.indexOf(tmpL) != -1) &&
      ((vowel.indexOf(s.substr(i + 1, 1)) == -1) ||
        (isNotLastSep(s.substr(0, i))))
    ) {
      addSep();
      continue;
    }
  } // for (var i = 0; i < s.length; i++)
  sepArr.push(tmpS);
  return sepArr.join('-');
} // function getSeparatedString (s)
1
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 27
21.12.2015, 12:18  [ТС]
Lazy_Den, Спасибо большое!
0
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 277
03.08.2022, 03:03
Lazy_Den,

А как его реализовать в не форме а в обычном блоке
??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2022, 03:03
Помогаю со студенческими работами здесь

Деление на слоги (не Лян-Кнут)
Всем здравствуйте. Есть задача, разделить выделенный текст в Word на слоги, не используя алгоритм Ляна-Кнута. Думаю организовать так:...

Как реализовать деление на слоги полученное слово?
У меня есть программа объектно ориентированная в которой есть TextBox в который введен текст при нажатию на кнопку находится первое слово в...

Разбить слова на слоги.
Помогите составить процедуру, которая:разбивает введенные слова на слоги

Разбиение слова на слоги
Напишите процедуру «Слог», разбивающую слово на слоги. Предложите свой алгоритм. За основу возьмите следующие правила: - две подряд...

Разбиение слова на слоги
Здравствуйте.С первого курса не обращался к данному ресурсу и спокойно делал лабы...но вот я столкнулся с проблеммои.Ох уж этот...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru