Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 27

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

21.12.2015, 01:40. Показов 5655. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru