Перенос слова, перенести слова, используя 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 |
Дан текст, состоящий из нескольких строк. Преобразовать текст таким образом, чтобы длина строк не превышала заданного значения, используя при этом перенос слов. Как найти ближайший к концу строки пробел, если при заданном значении слово "как бы разбивается"? Как осуществить на Паскале приведенный выше перенос??? Первый и главный вопрос к тебе: знаки препинания не нужно учитывать? Это ведь тоже непростой вопрос. Например, обычно их нельзя переносить (отрывать от слова). А тире, скажем, отделяется от слова пробелом, но переносить его при этом тоже не стОит. Есть многосимвольные знаки препинания (... , ?.. , !.. , ..). И нужно ли сохранять пробелы в конце строки (впрочем, это, наверное, нет). Еще, есть такой особый знак препинания, как "красная строка", например.. Короче, ответь. Второй вопрос.. Не совсем понятен пункт 1. Правильно я понимаю, что в соответствии с ним слова "параноик", "наитие", "кондуит" нельзя перенести так: парано-ик, на-итие, конду-ит? Если пока забыть про знаки препинания и остальные проблемы, то начать можно примерно так.. От начала текста отмеряем максимальную длину строки (Lx) и смотрим, попадает ли разрыв в тело слова. Признаком этого можно считать наличие букв (а не пробелов, знаков препинания..) по обе стороны от разрыва. Вот я тут набросал примерный текст программки, которая берет в отдельную строку s слово, попавшее на разрыв. Дальше можно с ним развлекаться и смотреть, как его можно делить. Моя программа делает это пока только по урезанному первому правилу для, так сказать, демонстрации . Если прояснятся вышеупомянутые вопросы, могу поучаствовать и в дальнейшем развитии проги. Задачка интересная . Интересно, где такие задают? { Hyphenation } Забыл сказать: я использую пока английские буквы, иначе говоря латиницу, во избежание сложностей. Потом можно будет перейти на настоящий русский. Соответствие букв в основном понятно, надеюсь. Кроме обычных еще есть Q как Я и W как Ю. Текст пока в массиве, потом, видимо, нужно будет читать из файла.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Ой, неужели кто-то мне помог!!! Спасибо Iapp огромное, преогромное!!!
Насчет пункта №1: извиняюсь, не так немножко, там буква й при этом рассматривается вместе с предшествующей ей гласной как единое целое (я полагаю, что если перед й стоит гласная, то они рассматриваются как единое целое). А вот, про знаки препинания не знаю, так как в задаче ничего не сказано. Задают такие задачи в Ивановском Государственном Энергетическом Университете на 1 курсе, факультета ИВТФ. Помогите доделать, пожалуйста. Сообщение отредактировано: Gold_Fish - |
Lapp |
Сообщение
#4
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Помогите доделать, пожалуйста. Помочь - не проблема . Но ты сначала разберись в том, что есть, и покажи, что разобралась. Твой ход. Значит, в Энергетическом.. Хм, забавно. Я все же думал, что что-то более близкое к гуманитарной области. Но все равно приятно такое видеть - особенно на фоне повального "удаффа" и не только. А уж про перенос стали забывать даже в книгопечатаньи.. и - Lapp я.. Лопарь. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Я знаю, что Lapp, я даже сначала так написала, а потом посмотрела внимательнее на ник, ведь там же Iapp написано, вот и исправила
Ну так вот, ввожу я уже свой текст: Program May; А как же мне сделать, чтобы остальные слова и часть перенесенного слова печатались на новой строке??? |
Lapp |
Сообщение
#6
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Ну так вот, ввожу я уже свой текст: Хорошо, что вводишь. Но только.. 1. Почему в программе исчезло все форматирование? Я имею в виду сдвиги. У меня все было аккуратно. Учти, это очень важно. И еще учти, что я не хочу тратить вреям на восстановление форматирования вручную каждый раз! Будь добра, сохраняй его, а также сама старайся писать правильно.. 2. Когда постишь прогу, используй теги Паскаля (выбери в выпадающем меню со словом CODE над окном ввода). Опять же, я постоянно исправлять не намерен (это я уже как админ тебе говорю). А как же мне сделать, чтобы остальные слова и часть перенесенного слова печатались на новой строке??? Не спеши.. Все будет.. Как я уже говорил, та программа была нацелена не на решение поставленной задачи, а на демонстрацию методов. Теперь, когда все более-менее прояснилось, можно начать систематически решать проблему.. Для этого начнем все заново. Ты готова? Шаг за шагом разберемся во всем и подойдем к решению. По пути задавай вопросы, если что непонятно. Если сразу все ясно - пиши свой вариант Согласна с таким подходом? Пока считаю, что Да, согласна (но ты все же ответь), и начинаю продолжать . Сначала разберемся с вводом текста. Думаю, ввод надо осуществлять из файла. Причем, поскольку в нормальном обычном тексте длина строки может быть больше 255 символов (макимальный размер переменной String) - в последнее время принято, что строка равна абзацу -, то использование строк во входном потоке отпадает. Я написал кусок кода, который пока читает входной файл и просто режет его на куски длины Lx (сейчас задано 30). При этом оригинальные концы строк (то есть концы абзацев) сохраняются. Посмотри, как он устроен, разберись и тогда пойдем дальше. Обрати внимание, как обрабатываются концы строк (абзацев) при чтении (в файле строки разделяются последовательностью двух символов: #13,#10). Дальше, теперь переходим на настоящий русский - никаких латиниц. Это влечет за собой несколько трудностей. Русских кодировок не одна, а несколько. Как минимум три: windows-1251, DOS-866 и KOI8-R (есть и еще). В настоящее время самой распространенной является первая, сокращенно Win. Но TP и BP используют кодировку DOS. Поскольку для нас существенно расположение гласных, а оно определенно зависит от кодировки, то игнорировать этот вопрос нельзя. Выходов как минимум три: - выбрать одну кодировку и ей ограничиться; - при вводе файла запрашивать от пользователя ввод кодировки; - распознавать кодировку автоматически. Мне больше всего нравится 3-й способ, но он не 100% надежен, кроме того может быть труден для начинающего (сорри, -щей..), так что предлагаю выбрать второй вариант. В моем куске кода есть наборы гласных для Win и DOS кодировок, хотя я не уверен, что тебе удастся из правильно скопировать. Для копирования файлов и текстов очень рекомендую использовать программку Far. Знакома ты с ней? Ответь, пожалуйста. Ладно, пока хватит. Вот код. Постарайся, чтоб при копировании русские буквы не превратились в белиберду. Обязательно скажи, удалось ли тебе это. { Hyphenation посмотрела внимательнее на ник, ведь там же Iapp написано, вот и исправила нет, там было маленькое L (l). Сейчас я исправил на большое.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Спасибки, Lapp
Почти все дошло, кроме: почему пишет что begin не хватает в: Цитата Vowels_Win:set of char= ['А','а','Е','е','Ё','ё','И','и','О','о','У','у','Ы','ы','Э','э','Ю','ю','Я','я']; Vowels_DOS:set of char= ['_',' ',':','_','р','с','_','Ё','_','R','"','г','>','л','_','н','_','о','_','п']; и почему то на русский алфавит мой Паскаль не переходит, хотя у него и справка русская. Да, и если поставить Begin, то выдает потом ошибку №3. Еще не оч поняла смысл этой аброкадабры, вернее её перевод: Цитата Write(''ў_¤Ёв_ Ё┐п д c< ¤<п дRа┐ вЁаRў -Ёп: '); И в [#$0D,#$0A] выдает тоже ошибку, почему? и что такое EoF? tst-ou-w.txt - это я так понимаю имя файла, а мне его заранее создать придется? Цитата Для копирования файлов и текстов очень рекомендую использовать программку Far. Знакома ты с ней? Ответь, пожалуйста. Нет Цитата Постарайся, чтоб при копировании русские буквы не превратились в белиберду. Обязательно скажи, удалось ли тебе это. Никак у меня с русскими не получается, он не хочет почему-то переключаться на русский текст... А так суть остального и предназначения я поняла Ой сколько я много вопросов накатала, извиняюсь, но так вышло Ответьте пожалуйста, заранее спасибо Сообщение отредактировано: Gold_Fish - |
Lapp |
Сообщение
#8
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Gold_Fish, извини, я неправильно (не в той кодировке запостил прогу, каюсь.. Впредь буду внимательнее.
> почему пишет что begin не хватает в: ... > И в [#$0D,#$0A] выдает тоже ошибку, почему? Вот это я не знаю.. пробовал смоделировать разными способами - не вышло. Будем надеяться, что оно пройдет в правильной кодировке, либо вернемся к этому потом еще раз. > и что такое EoF? Это признак конца файла (End of File). Это функция, которая возвращает false покак конец не достигнут, а потом true. В данном случае чтение из файла продолжается до обнаружения его конца. > tst-ou-w.txt - это я так понимаю имя файла, а мне его заранее создать придется? Заранее не надо, это выходной файл, он сам создается заново. Имя можно изменить, как тебе нравится, или вообще запрашивать юзера имя выходного файла, как запрашиваем имя входного. > Никак у меня с русскими не получается, он не хочет почему-то > переключаться на русский текст... В Паскале, если это TP или BP, переключаться на русский сложно.. Если у тебя есть возможность, советую переключиться на FPC (FreePascal). Его можно скачать с сайта freepascal.org . Он совершенно бесплатный, но весит 28 мегов, поэтому на диалапе его качать замучишься.. Но в нем не только переключаться можно будет на русский, но и много другого хорошего (это как бы дальнейшее развитие ТР). Но он тоже работает в кодировке DOS. И чтобы правильно копировать файлы, я настоятельно рекомендую тебе установить Far. Я тебя спрашивал о нем раньше, но ты деликатно промолчала. Ответь сейчас - можешь его поставить? Ты работаешь на своей машине или где-то еще? Весит он чуть больше 1 мега, взять можно на rarlab.com , при этом он тоже бесплатный. Когда ты его установишь, пойди в директорию C:\Program Files\Far\Addons\Tables\Cyrillic\ и запусти скрипты KOI8-R.reg и Windows-1251.reg, нажми там все Ок, а потом перезапусти Фар. Дальше объясню, когда подтвердишь установку.. > А так суть остального и предназначения я поняла Вот и славненько.. > Ой сколько я много вопросов накатала, извиняюсь, но так вышло Задавай сколько хочешь. Главное - чтоб поняла Ниже помещаю текст программы в правильной кодировке. Но если ты его будешь копировать из браузера через notepad, то русского все равно не будет. Нужен Far. Ясно? Ну, давай, успехов тебе.. { Hyphenation -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Pola |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 38 Пол: Женский Репутация: 0 |
|
Gold_Fish |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Из браузера я не копирую, а сама перепечатываю в Паскаль, мне так разобраться легче
Цитата Ну, давай, успехов тебе.. Спасибки, сейчас буду разбираться Ах, да, я на своем компе работаю И ещё: Цитата И чтобы правильно копировать файлы, я настоятельно рекомендую тебе установить Far. Я тебя спрашивал о нем раньше, но ты деликатно промолчала. Я писала, что не знакома с этой прогой Я вспомнила у меня папа всегда ей пользуется, но она у него какая-то древняя , поэтому я её не открываю Может const не скопировала? Не, я писала const Сообщение отредактировано: Gold_Fish - |
Lapp |
Сообщение
#11
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Из браузера я не копирую, а сама перепечатываю в Паскаль, мне так разобраться легче ... Я вспомнила у меня папа всегда ей пользуется, Сама перепечатываешь - это хорошо, но внимание удвой, как минимум.. Одна точка вместо запятой - и все в тартарары.. Отлично! вот папа будет рад, что ты у него будешь консультироваться.. ) Она выглядит как старый добрый Нортон, потому и кажется древней. Но она внутри молодая! )))) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Я установила новый, т к в старом Windows-1251.reg не было, надеюсь мне папа ничего не сделает )) , а что дальше?
Насчет внимательности, это да, стараюсь внимательно делать |
Gold_Fish |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Страничка freepascal.org не хочет открываться
|
Lapp |
Сообщение
#14
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Я установила новый, т к в старом Windows-1251.reg не было, надеюсь мне папа ничего не сделает )) , а что дальше? Насчет внимательности, это да, стараюсь внимательно делать Cool! Дальше так.. Навигация там простая - две независимых панели, переключение между ними клавишей Tab, работать можешь на любой. Полоска, выбирающая активный файл, двигается стрелками (рекомендую оставить мышь отдыхать). F9 выводит в некое меню, где, например, можно настроить вид панелей (рекомендую Full). Запомнить настройки - Shift-F9. Все основные команды (копировать, двигать, удалять..) на F-клавишах, рекомендую запомнить основные (внизу есть подсказка для них, реагирующая на нажатие Shif и Alt). Копирование файлов обычно происходит между панелями, но можно указать любой путь вручную. Запуск на выполнение - Enter, также и вход в поддиректории. Две точки на верхней строчке (есть во всех директориях, кроме корневых на дисках) - это выход наверх (стандартное обозначение в DOS и UNIX). Просмотр внутренностей любого файла - F3. Что нам сейчас важно, это его встроенный редактор. Сделаем одно полезное Упражнение: Скопировать программный текст из окна браузера (то бишь, отсюда) в файл так, чтоб не испортить русский текст (строковые константы и комментарии). Выполняем: 1. Забрать нужный текст в браузере в буфер (закрасить курсором, нажать Ctrl-C). 2. В Фаре зайти в нужную директорию (или создать новую - F7 - и зайти в нее). 3. Нажать Shift-F4 (открытие нового файла для редактирования). На запрос имени ввести желаемое имя (оно должно иметь расширение pas, если это паскалевская прога - например, hyphen.pas). 4. Убедись, что текущая кодировка - DOS. Она обозначена сверху, примерно в серединке. Если там написано Win или еще что-то, нажми клавишу F8 - при этом эта кодировка должна меняться между DOS и Win (другие установленные кодировки можно выбрать по Shif-F8). Примечание: этот пункт зависит от того, установила ли ты таблицы, как я просил тя в предыдущем мессадже. 5. Если ты уверена, что кодировка есть DOS, делай paste (как обычно, Ctrl-V). Скопированный из браузера текст при этом должен вставиться. Чтобы деселектить блок, можешь нажать Ctrl-U, но это не важно. 6. Записать файл на диск (F2, смотри подсказку на нижней строчке). 7. Выйти (Esc). Созданный таким образом файл можно теперь загрузить в редактор TP (или FPC, если скачаешь). Проверь, сохранились ли русские буквы и рапортуй Страничка freepascal.org не хочет открываться Это жесть.. А ты правда готова качать 28 мег?.. Какой у тя коннекшн? На диалапе при всех самых благоприятных обстоятельствах (что бывает редко) это займет не меньше полутора часов.. Но оно того стОит! Вот прямой линк на файл на русском зеркале: ftp://ftp.chg.ru/pub/lang/pascal/fpc/dist....i386-win32.exe - надеюсь, он сработает.. Ну, давай.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#15
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
А ты правда готова качать 28 мег?.. Какой у тя коннекшн? На диалапе при всех самых благоприятных обстоятельствах (что бывает редко) это займет не меньше полутора часов.. Но оно того стОит! Вот прямой линк на файл на русском зеркале: ftp://ftp.chg.ru/pub/lang/pascal/fpc/dist....i386-win32.exe - надеюсь, он сработает.. Ну, давай.. Вот, если чесно мне уже все равно как долго его качать, лишь бы сделать задачу быстрее, сдавать надо, а у меня не сделано |
Gold_Fish |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Премногоуважаемый Lapp! ))
Я создала обычный вордовский файл, там написала текст, и все )) И все равно не так, что делать? |
Lapp |
Сообщение
#17
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Премногоуважаемый Lapp! )) Я создала обычный вордовский файл, там написала текст, и все )) И все равно не так, что делать? Милейшая исполнительница желаний безумных старух, Вы создали, извиняюсь-с - doc-файл?.. Дружок, пойди в неказистый синенький Фар, создай там в рабочей твоей директории новый файл - назови, скажем, d.txt. Убедись, однако, что кодировка состоит DOS и сокопируй туда вот этот самовый бред.. сорри, вот эти мои заумные мысли - да, да, прямо отсюда. Да и сохрани его, да и закрой степенно.. Затем, нимало не отдыхаша, открой на редактирование еще один новый файл - и нареки имя ему w.txt. Закокококо.. кхм-кхм.. закопируй туда то же самое, но только в этот раз да вразумит тебя святой Пингвин, покровитель всех программеров, соблюсти кодировку при значении Win (рубильник F8 на твоем распределительном щитке) - да установи оное значение ДО копирования, противу сказать опосля.. И етути двое фалОв да будут отныне для тя тестовыми, ако в транслейшне - попробовательными.. А о сатнинском Word'е - и думать забудь, и трогать его не смей, и выброси его в геенну огненную, и - самое главное - НИКОГДА НЕ смотри в нутро поганое файла того, что создала ты в нем (переключатель F3 (просмотр файла в Фаре) и не трогай даже! ну, если тронешь - ну, сходи руки помой ) O'kay???.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#18
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Здраствуйте, друг мой Lapp! )) (Снова Вас тревожит исполнительница желаний безумных старух) ))
Все я сделала как Вы указали, будьте так любезны, скажите, что дальше нужно делать? |
Lapp |
Сообщение
#19
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Вот вариант, читающий файл и выдающий отдельно строки (s) и слова (t), попавшие на разрыв (то есть те, которые нужно переносить). Вывод в файл я пока убрал (закомментировал) - вставим потом, а пока вывод идет на экран. Длину строки (Lx) можешь поварьировать. Разберись с этим, как следует, и попробуй продвинуться. На вопросы по программе отвечу..
{ Hyphenation -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Gold_Fish |
Сообщение
#20
|
Новичок Группа: Пользователи Сообщений: 28 Пол: Женский Реальное имя: Марина Репутация: 0 |
Более или менее все понятно, а вот куда впихнуть буквы "й, ь, ъ" для них просто массив создать в начале, да?
P. S. Дальше не могу продвинуться, никак не составлю условие для переноса Програмка прикольно работает, так интересно переносит твои, как ты выразился Цитата вот эти мои заумные мысли Сообщение отредактировано: Gold_Fish - |
Текстовая версия | 21.12.2024 21:32 |