IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Перенос слова, перенести слова, используя 3 правила
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Женский
Реальное имя: Марина

Репутация: -  0  +


Помогите, пожалуйста, очень прошу, хотя бы частично:
Перенос слова. Перенос русского слова с одной строки на другую с большей вероятностью выполняется правильно, если пользоваться следующими правилами:
1)две идущие подряд гласные можно разделить, если перед первой из них стоит согласная, а за второй идет хотя бы одна буква (буква й при этом рассматривается вместе с предшествующей ей гласной как единое целое);
2) две идущие подряд согласные можно разделить, если первой из них стоит гласная, а в той части слова, которая идет за второй согласной, имеется хотя бы одна гласная (буквы ь, ъ вместе с предшествующей согласной рассматриваются как единое целое);
3) если не удается применить первые два правила, то слово разбивают так, чтобы первая часть содержала более чем одну букву и оканчивалась на гласную, а вторая содержала хотя бы одну гласную.
Дан текст, состоящий из нескольких строк. Преобразовать текст таким образом, чтобы длина строк не превышала заданного значения, используя при этом перенос слов. blink.gif

Как найти ближайший к концу строки пробел, если при заданном значении слово "как бы разбивается"? Как осуществить на Паскале приведенный выше перенос???

Сообщение отредактировано: Gold_Fish -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Женский
Реальное имя: Марина

Репутация: -  0  +


Я знаю, что Lapp, я даже сначала так написала, а потом посмотрела внимательнее на ник, ведь там же Iapp написано, вот и исправила smile.gif
Ну так вот, ввожу я уже свой текст:
Program May;
const
Vowels:set of char=['a','A','e','E','i','I','o','O','q','Q','u','U','y','Y'];
Letters:set of char=['A'..'Z','a'..'z'];
var
l,p,t,tl,Lx:integer;
s:string;
c:char;
Txt:array[0..100] of char;
begin
writeLn('vvedite text');
readln(Txt);
writeLn('vvedite chislo');
readLn(Lx);
begin
t:=0; {tekuchaq pozisiq}
tl:=t+Lx; {sleduwchi razriv}
if (Txt[tl-1] in Letters)and(Txt[tl] in Letters) then
begin
p:=tl;
while Txt[p-1] in Letters do Dec(p);
l:=tl-p;
s:='';
while Txt[p] in Letters do begin
s:=s+Txt[p];
Inc(p)
end
end;
if Length(s)>0 then begin
WriteLn('Slovo ',s,' obrybaetsq. Vlezaet ne bolee ',l,' bukv');
if l<2 then Writeln('Perenesti neljsq')
else begin
c:=s[l+1];
repeat
if (c in Vowels)and(s[l] in Vowels) then begin
Insert('-',s,l+1);
WriteLn('Perenos: '',s,''');
break
end;
c:=s[l];
Dec(l)
until l=0;
if l=0 then WriteLn('Perenesti neljscq')
end
end
else WriteLn('Razryv ne na slove');
ReadLn;
end;
end.


А как же мне сделать, чтобы остальные слова и часть перенесенного слова печатались на новой строке??? nea.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Gold_Fish @ 6.12.2006 18:07) *

Ну так вот, ввожу я уже свой текст:

Хорошо, что вводишь. Но только..
1. Почему в программе исчезло все форматирование? Я имею в виду сдвиги. У меня все было аккуратно. Учти, это очень важно. И еще учти, что я не хочу тратить вреям на восстановление форматирования вручную каждый раз! Будь добра, сохраняй его, а также сама старайся писать правильно..
2. Когда постишь прогу, используй теги Паскаля (выбери в выпадающем меню со словом CODE над окном ввода). Опять же, я постоянно исправлять не намерен (это я уже как админ тебе говорю).
Цитата(Gold_Fish @ 6.12.2006 18:07) *

А как же мне сделать, чтобы остальные слова и часть перенесенного слова печатались на новой строке??? nea.gif

Не спеши.. Все будет..
Как я уже говорил, та программа была нацелена не на решение поставленной задачи, а на демонстрацию методов. Теперь, когда все более-менее прояснилось, можно начать систематически решать проблему.. Для этого начнем все заново. Ты готова? Шаг за шагом разберемся во всем и подойдем к решению. По пути задавай вопросы, если что непонятно. Если сразу все ясно - пиши свой вариант smile.gif
Согласна с таким подходом? Пока считаю, что Да, согласна (но ты все же ответь), и начинаю продолжать smile.gif.

Сначала разберемся с вводом текста. Думаю, ввод надо осуществлять из файла. Причем, поскольку в нормальном обычном тексте длина строки может быть больше 255 символов (макимальный размер переменной String) - в последнее время принято, что строка равна абзацу -, то использование строк во входном потоке отпадает. Я написал кусок кода, который пока читает входной файл и просто режет его на куски длины Lx (сейчас задано 30). При этом оригинальные концы строк (то есть концы абзацев) сохраняются. Посмотри, как он устроен, разберись и тогда пойдем дальше. Обрати внимание, как обрабатываются концы строк (абзацев) при чтении (в файле строки разделяются последовательностью двух символов: #13,#10).

Дальше, теперь переходим на настоящий русский - никаких латиниц. Это влечет за собой несколько трудностей.
Русских кодировок не одна, а несколько. Как минимум три: windows-1251, DOS-866 и KOI8-R (есть и еще). В настоящее время самой распространенной является первая, сокращенно Win. Но TP и BP используют кодировку DOS. Поскольку для нас существенно расположение гласных, а оно определенно зависит от кодировки, то игнорировать этот вопрос нельзя. Выходов как минимум три:
- выбрать одну кодировку и ей ограничиться;
- при вводе файла запрашивать от пользователя ввод кодировки;
- распознавать кодировку автоматически.
Мне больше всего нравится 3-й способ, но он не 100% надежен, кроме того может быть труден для начинающего (сорри, -щей..), так что предлагаю выбрать второй вариант. В моем куске кода есть наборы гласных для Win и DOS кодировок, хотя я не уверен, что тебе удастся из правильно скопировать.
Для копирования файлов и текстов очень рекомендую использовать программку Far. Знакома ты с ней? Ответь, пожалуйста.

Ладно, пока хватит. Вот код. Постарайся, чтоб при копировании русские буквы не превратились в белиберду. Обязательно скажи, удалось ли тебе это.
{ Hyphenation
Version 0.2
for Gold_Fish by Lapp }

const
Lx=30;
Vowels_Win:set of char=
['А','а','Е','е','Ё','ё','И','и','О','о','У','у','Ы','ы','Э','э','Ю','ю','Я','я'];
Vowels_DOS:set of char=
['_',' ',':','_','р','с','_','Ё','_','R','"','г','>','л','_','н','_','о','_','п'];


var
fIn:file of char;
fOu:text;
fName,s:string;
c,d:char;
i,l,ws:integer;
Vow:set of char;
Gap,Start:boolean;

begin
Write(''ў_¤Ёв_ Ё┐п д c< ¤<п дRа┐ вЁаRў -Ёп: ');
ReadLn(fName);
Assign(fIn,fName);
ReSet(fIn);
Assign(fOu,'tst-ou-w.txt');
ReWrite(fOu);
repeat
l:=0;
s:='';
d:=#0;
repeat
d:=c;
Read(fIn,c);
if not (c in [#$0D,#$0A]) then s:=s+c;
Inc(l)
until (l=Lx)or((d=#$D)and(c=#$A))or(EoF(fIn));
WriteLn(fOu,s)
until EoF(fIn);
Close(fIn);
Close(fOu);
;ReadLn
end.

Цитата(Gold_Fish @ 6.12.2006 18:07) *

посмотрела внимательнее на ник, ведь там же Iapp написано, вот и исправила smile.gif

нет, там было маленькое L (l). Сейчас я исправил на большое.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Gold_Fish   Перенос слова   6.12.2006 0:54
lapp   Дан текст, состоящий из нескольких строк. Преобра…   6.12.2006 11:13
Gold_Fish   :blink: Ой, неужели кто-то мне помог!!…   6.12.2006 18:48
lapp   Помогите доделать, пожалуйста. :unsure: Помочь -…   6.12.2006 19:12
Gold_Fish   Я знаю, что Lapp, я даже сначала так написала, а п…   6.12.2006 21:07
Lapp   Ну так вот, ввожу я уже свой текст: Хорошо, что…   7.12.2006 11:30
Gold_Fish   Спасибки, Lapp :) Почти все дошло, кроме: почему п…   8.12.2006 1:49
Lapp   Gold_Fish, извини, я неправильно (не в той кодиров…   8.12.2006 8:28
Pola   Спасибки, Lapp :) Почти все дошло, кроме: почему …   8.12.2006 15:16
Gold_Fish   Из браузера я не копирую, а сама перепечатываю в П…   8.12.2006 19:45
Lapp   Из браузера я не копирую, а сама перепечатываю в …   8.12.2006 19:55
Gold_Fish   Я установила новый, т к в старом Windows-1251.reg …   8.12.2006 20:18
Gold_Fish   Страничка freepascal.org не хочет открываться :bl…   8.12.2006 20:34
Lapp   Я установила новый, т к в старом Windows-1251.reg…   9.12.2006 9:18
Gold_Fish   А ты правда готова качать 28 мег?.. Какой у тя к…   9.12.2006 16:22
Gold_Fish   Премногоуважаемый Lapp! :))) Я создала обычный…   9.12.2006 16:52
Lapp   Премногоуважаемый Lapp! :))) Я создала обычны…   9.12.2006 17:20
Gold_Fish   Здраствуйте, друг мой Lapp! :))) (Снова Вас тр…   9.12.2006 17:50
Lapp   Вот вариант, читающий файл и выдающий отдельно стр…   9.12.2006 19:18
Gold_Fish   :) Более или менее все понятно, а вот куда впихнут…   10.12.2006 14:22
Lapp   Вот, есть первый ощутимый результат :). Я реализов…   10.12.2006 21:31
Gold_Fish   Сейчас разберусь в проге и попробую развеять :)))…   10.12.2006 23:41
Gold_Fish   Что-то не очень понимаю вот это место: И почему-т…   11.12.2006 0:50
Lapp   > И почему-то перед ошибка №121 :unsure: TP…   11.12.2006 5:52
Gold_Fish   Барахтаюсь :lol: В FPC я тоже пробовала эту прог…   11.12.2006 12:37
Lapp   > В FPC я тоже пробовала эту прогу, да он пропу…   11.12.2006 15:06
Gold_Fish   В общем-то ничего и не выдает :))) ( может быть я …   11.12.2006 17:49
Lapp   > В общем-то ничего и не выдает :))) > ... …   11.12.2006 18:01
Gold_Fish   Теперь вообще FPC другую штуку пишет (типа ошибки,…   11.12.2006 18:04
Lapp   Ну я вводила d.txt точно :))) Против сверхъестес…   11.12.2006 18:13
Gold_Fish   Против сверхъестественных явлений я пас.. Ошибка…   11.12.2006 18:15
Lapp   Теперь уже TP работает :) , а FPC прежнюю штучку…   11.12.2006 18:26
Gold_Fish   Что ТР работает - это хорошо, но хотелось бы узна…   11.12.2006 18:37
Lapp   > Штучку прежнюю, где > exited with > exi…   11.12.2006 18:55
Gold_Fish   Заметил еще одну квазиошибку в том своем тексте..…   11.12.2006 19:01
Lapp   Что сделать? :unsure: Заключить в фигурные ско…   11.12.2006 19:05
Gold_Fish   Заключить в фигурные скобки :))))))))) Ну не над…   11.12.2006 19:10
Алена   sTRing попробуй набрать, вместо того, что сейчас…   11.12.2006 18:06
Lapp   sTRing попробуй набрать, вместо того, что сейчас …   11.12.2006 18:10
Gold_Fish   УРА!!! Заработало :lol: Там просто в…   11.12.2006 18:10
Lapp   2) две идущие подряд согласные можно разделить, е…   11.12.2006 19:53
Michael_Rybak   Наверное "две идущие подряд согласные можно р…   11.12.2006 19:56
Gold_Fish   Вот это как понимать?.. :blink: Да, не знаю, так…   11.12.2006 19:57
Lapp   Пишу пояснения к реализации Правила №1 (см. пост №…   12.12.2006 20:08
Gold_Fish   Ура!!! Заработало, у меня перенеслось …   12.12.2006 22:04
Gold_Fish   Подскажите пожалуйста, как задать момент, когда вт…   12.12.2006 23:59
Lapp   > Ура!!! Заработало, Правда приятн…   13.12.2006 19:36
Gold_Fish   Спасибки :give_rose: Еще как пыталась :) , я и…   13.12.2006 21:22
Lapp   Вот тут: Rule №3: if ((w[i] in Vow) and ((w[i-1] i…   14.12.2006 8:29
Gold_Fish   А ты все же потрудись разобраться! Я не по…   16.12.2006 2:27
Lapp   Я не понимаю как переделать, подскажите пожалуйст…   16.12.2006 6:52
Gold_Fish   Я разбиралась, а все равно не поняла, а вторник - …   16.12.2006 20:33
Lapp   Gold_Fish, мне искренне жаль, что это оказалось не…   19.12.2006 11:41
Gold_Fish   Да все уже, сдала я :))) Вторую делаю к зачету уже…   19.12.2006 23:50
Lapp   Да все уже, сдала я Gold_Fish, пожалуйста, уважа…   20.12.2006 7:28


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 18:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name