Перенос слова, перенести слова, используя 3 правила |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Перенос слова, перенести слова, используя 3 правила |
Gold_Fish |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Помогите, пожалуйста, очень прошу, хотя бы частично:
Перенос слова. Перенос русского слова с одной строки на другую с большей вероятностью выполняется правильно, если пользоваться следующими правилами: 1)две идущие подряд гласные можно разделить, если перед первой из них стоит согласная, а за второй идет хотя бы одна буква (буква й при этом рассматривается вместе с предшествующей ей гласной как единое целое); 2) две идущие подряд согласные можно разделить, если первой из них стоит гласная, а в той части слова, которая идет за второй согласной, имеется хотя бы одна гласная (буквы ь, ъ вместе с предшествующей согласной рассматриваются как единое целое); 3) если не удается применить первые два правила, то слово разбивают так, чтобы первая часть содержала более чем одну букву и оканчивалась на гласную, а вторая содержала хотя бы одну гласную. Дан текст, состоящий из нескольких строк. Преобразовать текст таким образом, чтобы длина строк не превышала заданного значения, используя при этом перенос слов. Как найти ближайший к концу строки пробел, если при заданном значении слово "как бы разбивается"? Как осуществить на Паскале приведенный выше перенос??? Сообщение отредактировано: Gold_Fish - |
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 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 -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 27.04.2024 6:51 |