2) две идущие подряд согласные можно разделить, если первой из них стоит гласная, ...
Вот это как понимать?..
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Перенос слова, перенести слова, используя 3 правила |
Lapp |
Сообщение
#41
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
2) две идущие подряд согласные можно разделить, если первой из них стоит гласная, ... Вот это как понимать?.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Michael_Rybak |
Сообщение
#42
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Наверное "две идущие подряд согласные можно разделить, если перед первой из них стоит гласная, ..."
|
Gold_Fish |
Сообщение
#43
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
|
Lapp |
Сообщение
#44
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Пишу пояснения к реализации Правила №1 (см. пост №20)
Итак, к этому моменту у нас есть следующее: - в переменной s лежит текущая строка (без последнего слова); - в переменной t лежит последнее слово, которое нам как раз и надо разделить на части. Во-первых, внимательно прочитав Пр.1, мы приходим к выводу, что в нем участвуют по крайней мере 4 буквы (две гласные, одна согласная перед ними и одна любая после них). Следовательно, для работы по Пр.1 нам нужны слова, которые содержат как минимум 4 буквы. Поэтому мы можем поставить условный оператор if, который будет фильтровать для нас все слова, давая только те, которые содержат не менее 4 букв: if Length(t)>=4 then ... Все дальнейшее, относящееся к этому правилу, мы заключим в операторные скобки begin-end, чтобы программа пропустила все это, если слово имеет менее 4 букв. (Замечание: в приведенном расуждении есть ошибка. Не старайся ее найти, это не так просто. Я все исправлю и объясню потом. Сейчас не хочу сбивать тебя с толку исправлениями на ходу). Это было как бы подготовительное действие, и оно было простым. Сделаем еще одно подготовительное действие, немного более сложное.. Уделим внимание последнему утверждению из Пр.1, к тому же заключенному в скобки. Оно гласит, что буква "й" в определенных ситуациях считается единым целым с предыдущей буквой. Иными словами, комбинацию типа "ай" можно заменить просто буквой "а", то есть выкинуть "й". Проще говоря, буква "й" в некоторых ситуциях лишняя. Выкидываем ее в цикле, отыскивая означенные комбинации. Но выкидывание буквы "й" повредит самому тексту, который станет после этого содержать ошибки! Значит, сначала делаем копию слова (в переменной w), и уже над ней производим описанную операцию:
Если ты сравнишь приведенные два куска с полным кодом (пост №20), то увидишь, что между ними есть строчка, которой я не уделил внимания. Кроме того, во втором фрагменте есть оператор Delete(Map,i,1) непонятного (пока) назначения... Зачем это? А вот, зачем.. Выидывание буквы "й" не только повредит тексту (о чем я упомянул раньше, и от чего мы типа защитились копированием), но еще и изменит нумерацию в слове! То есть, если в слове "койот" буквы "о" и "т" имеют номера 4 и 5 соответственно, то после выкидывания (в соответствии с Пр.1) буквы "й" мы получим слово "коот", в котором упомянутые буквы имеют номера 3 и 4. Это может сыграть с нами злую шутку, когда мы станем делить слово на части (ведь делить надо оригинальное слово, а не его копию, лишенную "й"), так как мы запутаемся в нумерации букв, копируемых в две разные части. Чтобы это не случилось, мы делаем карту нашего слова, нумеруя все буквы по порядку (именно это и делает пропущенная строка). Когда же мы выбрасываем "й", мы выбрасываем и его номер. Например, изначально карта слова "койот" была 12345, а после выбрасывания "й" она стала 1245. Эту информацию мы используем в дальнейшем при разбиении слова.. Следующий цикл - собственно реализация Пр.1. Мы проходим циклом с конца слова (с предпоследней буквы - почему?) до начала (до второй буквы - почему?), пытаясь выявить комбинации, подпадающие под Пр.1. Рассмотри внимательно условие, и ты узришь в нем то самое правило: если вторая буква (с конца) гласная, и третья гласная, а четвертая согласная, а первая (то есть самая правая) есть буква (а не точка, не запятая и т.п.), то слово можно разделить между двумя гласными, то есть между буквой с номером i и буквой с номером i+1. Заметим, что эта нумерация - нумерация в слове с выкинутыми "й", то есть неправильная нумерация для оригинального слова. Вот тут-то мы и вспоминаем про запасенную карту слова.. В результате к имеющейся строке s дописывается кусок орининального слова t длиной, равной номеру i-го символа в оригинальном слове. И точно такая же часть удаляется из t, которое будет содержать остаток слова, который в свою очередь явится началом новой строки.. Мораль: жизнь бесконечно многообразна, что есть, впрочем, флуд . Рыбка, я тебя очень прошу, уважь плод труда моего ночного бдения, прочти все внимательно (желательно не единожды) и постарайся разобраться. Это в твоих силах.. и интересах И после этого, на базе, так сказать, приобретенных знаний , попробуй еще раз воплотить Пр.2. Извини, но первый твой подход к этой штанге был неуспешным.. Думаю, ты это и сама поняла - либо растолкуй мне еще раз. Последнее: в дальнейшем никаких исключений - по вопросам Форума я в личке не отвечаю. И даже не читаю. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#45
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Ура!!! Заработало, у меня перенеслось слово «выб-роси» из тех заумных мыслей мессаджа №17 с помощью второго правила, только там мягких и твердых знаков нету … )) (Но, я когда там мягкий знак приписывала все получалось)
Вот программа, только, наверное, в ней надо что-то поменять, а то повторяется несколько строчек в конце:
)) |
Gold_Fish |
Сообщение
#46
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Подскажите пожалуйста, как задать момент, когда вторая часть слова содержит хотя бы одну гласную???
|
Lapp |
Сообщение
#47
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
> Ура!!! Заработало,
Правда приятно, когда сам что-нить сделаешь и.. работает!! Ни с чем несравнимое чувство.. > у меня перенеслось слово «выб-роси» Да, видел. Congratulations! Но, к сожалению, из этой фразы я делаю вывод, что ты не пыталась менять значение константы Lx. Меняя ее, ты можешь регулировать длину строки и прогонять снова, получая много маленьких радостей.. Или огорчений, если обнаружатся ошибки.. Ошибки есть всегда, увы - это закон. Вот, например: > только там мягких и твердых знаков нету … )) > (Но, я когда там мягкий знак приписывала все получалось) - это странно. В обработке карты Map у меня была ошибка (сейчас исправлено), в результате нее мягкий знак переносился на следующую строчку, что, ессно, неправильно. Но все же, ты молодец. В целом ты произвела правильные действия, хотя и не все.. Во-первых, нужно было взять больший кусок, включая копирование t в w (как же иначе? мы же испортили w, когда обработали его первым правилом). Во-вторых, нужно было организовать выбор из результатов, полученных по Пр.1 и Пр.2. Не применять их сразу очертя голову, а выяснить, какой из двух предлагаемых переносов лучше (если слово допускает оба переноса, и 1, и 2 типа). Я ввел соответствующий механизм, основанный на массиве Cuts размера 3 (по числу правил), который содержит длины первой части слова (оставляемой на старой строке). Короче, ошибки были, но я доволен тем, что ты сделала . Респект! Тепрь дальше по делу. В первую очередь - мой должок. Я говорил о том, что в алгоритме Пр.1 есть ошибка. Исправляю ее. Дело в том, что проверка на минимальную длину слова должна стоять после выбрасывания Й (или мягких и твердых знаков в Пр.2). Иначе после выбрасывания длина слова может сократиться до 3 букв, что приведет к ошибкам. Сейчас это исправлено (посмотри, сравни новый и старый коды). Кроме этого, я нашел и исправил еще пару ошибок (не пугайся, у себя ). О первой я уже сказал в самом начале (посмотри и найди отличия в операторе IF после проверки правила, обоих из них). А вторая ошибка состояла в том, что я не прекращал разбор слова после того, как разрез, подходящий по длине, был уже найден. Это приводило к тому, что при нахождении еще одного разреза перенос получался более короткий. Я исправил это вставлением оператора Break, который прекращает выполнение цикла (найди оба места места, где стоит Break и разбери подробно). Еще одно исправление. Хотя это не ошибка, но все же было некрасиво. Карта Map у меня была раньше строкой, хотя я использовал ее для хранения чисел. Сейчас я сделал ее обычным массивом. Это привело, например, к невозможности использования процедуры Delete с ней, но это особо и не нужно (заменил циклом, посмотри). > Подскажите пожалуйста, как задать момент, когда > вторая часть слова содержит хотя бы одну гласную??? Замечательный вопрос, он показывает, что уровень твоего понимания достаточно высокий . Нет, в самом деле - прогресс налицо! Подсказываю. Я завел некий флаг (булева переменная Flag, найди ее в определении переменных), которой снячала присваиваю значений false (ложь), то есть флаг сброшен. В цикле перебора букв слова я присваиваю ей саму себя ИЛИ результат проверки буквы на гласность. То есть она будет оставаться false до тех пор, пока все буквы согласные (оба параметра ложные), но при первой гласной ей присвоится значение true (правда), и оно уже не сбросится, потому что первый операнд (то есть она сама) операции OR всегда будет с этих пор true. То есть флажок как бы встает при встрече гласной и больше не падает. После этого я использую Flag в логическом выражении для Пр.2. Разбери все это внимательно и убедись, что поняла - или задавай вопросы.. Давай - изучай, разбирайся - и продвигайся дальше! Правило 3 на очереди.. Успеха! PS Мне кажется, удобно было бы устроить запрос длины строки (Lx) от пользователя. Сможешь сделать? { Hyphenation -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#48
|
|||
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Спасибки
Цитата >Но, к сожалению, из этой фразы я делаю вывод, что ты не пыталась менять значение константы Lx Еще как пыталась , я и текст другой пробовала создавать вот в нем и пыталась, только вот там (после переноса) вообще слова не печатались Паскалем Rule №3:
Во как, а скорее всего немного не так Цитата >Мне кажется, удобно было бы устроить запрос длины строки (Lx) от пользователя. Сможешь сделать? Смотри (и не учись, ты же умеешь )) : Итак, для того чтобы пользователь сам задавал желаемую длину строки необходимо написать вот что: Цитата Write(‘Введите желаемую длину строки: Lx=’); Read(Lx); При этом необходимо в начале программы при перечислении переменных задать переменную Lx целого типа (integer), так как длина строки (то есть количество символов в строке) обязательно целая! (Ну я и сказанула … ) ) Кстати я в начале так и думала, что Lx наверное должен пользователь задавать Ну так что же мне писать там в 3 правиле, в том месте где я нинаю |
|||
Lapp |
Сообщение
#49
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Вот тут:
Rule №3: - что ты хотела сказать вот этим: ((w[i-1] in Con) or (w[i-1] in Vow)) ? Что w[i-1] должна быть буквой? Если да, то лучше использовать не два множеста (гласные и согласные), а одно специальное множество Let, которое содержит все буквы (не только гласные и согласные, но и Ъ с Ь, а также Й). Посмотри, как оно заполняется, и все поймешь. > Во как, а скорее всего немного не так Я бы сказал, почти совсем не так. Похоже, для меня настало время небольшого (надеюсь) разочарования.. В предыдущем моем мессадже был подробно объяснен твой нынешний вопрос. Но ты почему-то не только совсем не учитываешь этого, но и вообще строишь свои рассуждения на основе старого кода, от которого мы уже ушли, и тащишь за собой старые ошибки, уже исправленные мной... Подсаживаешь их, как клопиков из старого дивана, любовно собранных в коробочку, в новый диван. Ты совсем-совсем ничего не вынесла из последней моей, гм.. лекции?.. Проболтала всю пару с соседом?.. Ну что ж, теперь я поболтаю.. с соседкой.. А ты все же потрудись разобраться! И не пытайся ссылаться на трудное детство, скользкий подоконник, бому в коляске.. Я-то знаю, на что ты способна.. > Итак, для того чтобы пользователь сам задавал желаемую длину строки > необходимо написать вот что: Да, тут правильно . Хотя, я бы использовал ReadLn, а не Read. Но это вопрос вкуса. Осталалось вставить это вс программу. Ну, я пошел болтать.. Кстати, что у нас на обед?.. О, рыба! Положите мне вот эту.. Да-да, золотую.. Загрызу с удовольствиеммм!! -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#50
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
|
Lapp |
Сообщение
#51
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Я не понимаю как переделать, подскажите пожалуйста Марина, приложи еще несколько усилий. Перечитай внимательно несколько моих постов. Учти, я стараюсь вкладывать смысл практически в каждое слово. Если он от тебя ускользает - значит, надо еще раз перечитать. Про каждый непонятный оператор читай в том пособии, что я прислал. Я выключаюсь из общения примерно до вторника - обстоятельства. Если кто-то еще здесь поможет - хорошо, если есть время ждать - жди, я покажу все во вторник. Но если сделаешь сама - будет как минимум на два порядка лучше Успехов! Если все получится - сделай вывод в файл Если и это получится - займись добавлением другой кодировки (Win). Я знаю, ты можешь -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#52
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Я разбиралась, а все равно не поняла, а вторник - это очень поздно
|
Lapp |
Сообщение
#53
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Gold_Fish, мне искренне жаль, что это оказалось непосильным для тебя. Я судил по твоим мессаджам и полагал, что если ты чего-то не знаешь - ты спросишь. Но ты спрашивала очень мало, из чего я заключил, что тебе все понятно. Хочу тебе сказать на будущее - не обязательно на этом форуме:
1. обязательно задавай конкретные вопросы, что именно не понятно; 2. вникай каак можно глубже во все, что тебе присылают в ответ; 3. если остались неясности - переходи снова к п.1. Если хотя бы одно из этих условий не выполнено, то толку не будет. И это очень обидно.. У меня уже есть сейчас полный рабочий вариант программы, реализующий все три правила. А у тебя есть последняя возможность все-таки разобраться в задаче. Покажи свои попытки продвинуться. Скажи, что именно вызвало затруднения, что неясно. Вместе разберемся.. Давай, жду. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#54
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Да все уже, сдала я ))
Вторую делаю к зачету уже )) Огромное Спасибки за помощь |
Lapp |
Сообщение
#55
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Да все уже, сдала я Gold_Fish, пожалуйста, уважай собеседников - выложи окончательный вариант. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 22.12.2024 8:02 |