Автор: and75 18.03.2008 18:44
Помогите пожалуйста! Задача следующая:
Найти в предложенном тексте наиболее часто используемое трехбуквенное сочетание. Выписать все слова с этим набором букв в отдельный файл.
Заранее благодарен!
Автор: andriano 19.03.2008 1:56
Я, кажется, подозреваю, какие именно трехбуквенные сочетания испольуются чаще всего. ;)
PS. Пока нет своего варианта решения - обсуждать нечего.
Автор: PavelM 19.03.2008 1:59
поищи по форуму, примерно такое задание было только там искали корень (однокоренное слово).
Автор: and75 19.03.2008 22:06
Вот наваял что-то похожее...
Может кому пригодится...
Код
Program Task1;
Type
SetLow = set of 'а'..'я';
SetUp = set of 'А'..'Я';
RecThree = record
Str : String[3];
Kol : Word;
end;
Var
f, f1 : Text;
Name : String;
Stroka : String;
RussLow : SetLow;
RussUp : SetUp;
ThreeLet : String[3];
NumThree : Word;
ArrThree : array [1..10000] of RecThree;
i : Integer;
MaxElem : Word;
PosMax : Integer;
Procedure SearchThree;
Var
j : Integer;
isExist : Boolean;
Begin
isExist:=False;
for j:=1 to NumThree do
if ThreeLet = ArrThree[j].Str then
begin
Inc(ArrThree[j].Kol);
isExist:=True;
Break;
end;
if not isExist then
begin
Inc(NumThree);
ArrThree[NumThree].Str:=ThreeLet;
ArrThree[NumThree].Kol:=1;
end;
End;
Begin
Writeln ('Введите имя исходного файла (имя.txt): ');
Read(name);
Assign(f, name);
Assign(f1,'result.txt');
Reset(f);
Rewrite(f1);
ThreeLet:='';
NumThree:=0;
PosMax:=0;
RussLow := ['а'..'я'];
RussUp := ['А'..'Я'];
While Not EOF(f) do
begin
Readln(f,Stroka);
for i:=1 to Length(Stroka) do
begin
if Length(ThreeLet)=3 then Delete(ThreeLet,1,1);
if Stroka[i]=' ' then ThreeLet:='';
if (Stroka[i] in RussUp) or (Stroka[i] in RussLow) then
ThreeLet:=ThreeLet+Stroka[i];
if Length(ThreeLet)= 3 then
SearchThree;
end;
if Stroka[Length(Stroka)] <> '-' then ThreeLet:='';
end;
MaxElem:=0;
PosMax:=0;
for i:=1 to NumThree do
if ArrThree[i].Kol>MaxElem then
begin
MaxElem := ArrThree[i].Kol;
PosMax := i;
end;
Writeln('Наиболее часто встречаемое трехбуквенное сочетание: ',
ArrThree[PosMax].Str);
Writeln('Количество: ',
ArrThree[PosMax].Kol);
{Закрываем текстовые файлы}
Close(f1);
Close(f);
End.
Здесь только поиск ОДНОГО трехбуквенного сочетания
Автор: klem4 19.03.2008 23:17
Цитата
RussLow := ['а'..'я'];
RussUp := ['А'..'Я'];
С таким описание множеств работать правильно программа просто не будет, в эти интервалы попадает еще куча лишних символов, помимо кириллицы.
поменяй на
['a'..'п', 'р'..'я]
Добавлено через 11 мин. Кстати насчет задания, на каждой строке файла на сколько я понимаю записано некое словосочетание, а не одно слово ? И скажем в слове
qwerty 3-х буквенные сочетания:
-qwe
-wer
-ert
-rty
?
Автор: and75 20.03.2008 14:30
Цитата(klem4 @ 19.03.2008 18:17)
С таким описание множеств работать правильно программа просто не будет, в эти интервалы попадает еще куча лишних символов, помимо кириллицы.
поменяй на
['a'..'п', 'р'..'я]
Добавлено через 11 мин.
Кстати насчет задания, на каждой строке файла на сколько я понимаю записано некое словосочетание, а не одно слово ? И скажем в слове qwerty 3-х буквенные сочетания:
-qwe
-wer
-ert
-rty
?
Спасибо за поправку, но по условию задачи там нет никаких псевдосимволов.
Дан некоторый текстовый файл, имя которого следует запросить у пользователя, содержит небольшой, форматированный (2-3 книжных страницы шириной ровно 60 знаков) фрагмент текста на русском языке.
Да все правильна для слова qwerty именно такие сочетания!
Вроде бы все работает правильно...
Добавлено через 2 мин. Пардон! не "псевдосимволы", а символы псевдографики