Помощь - Поиск - Пользователи - Календарь
Полная версия: Трехбуквенное сочетание
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
and75
Помогите пожалуйста! Задача следующая:
Найти в предложенном тексте наиболее часто используемое трехбуквенное сочетание. Выписать все слова с этим набором букв в отдельный файл.
Заранее благодарен!
andriano
Я, кажется, подозреваю, какие именно трехбуквенные сочетания испольуются чаще всего. ;)

PS. Пока нет своего варианта решения - обсуждать нечего.
PavelM
поищи по форуму, примерно такое задание было только там искали корень (однокоренное слово).
and75
Вот наваял что-то похожее...
Может кому пригодится...

Код
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
Цитата
RussLow := ['а'..'я'];
RussUp := ['А'..'Я'];


С таким описание множеств работать правильно программа просто не будет, в эти интервалы попадает еще куча лишних символов, помимо кириллицы.

поменяй на

['a'..'п', 'р'..'я]

Добавлено через 11 мин.
Кстати насчет задания, на каждой строке файла на сколько я понимаю записано некое словосочетание, а не одно слово ? И скажем в слове qwerty 3-х буквенные сочетания:

-qwe
-wer
-ert
-rty

?


and75
Цитата(klem4 @ 19.03.2008 18:17) *

С таким описание множеств работать правильно программа просто не будет, в эти интервалы попадает еще куча лишних символов, помимо кириллицы.

поменяй на

['a'..'п', 'р'..'я]

Добавлено через 11 мин.
Кстати насчет задания, на каждой строке файла на сколько я понимаю записано некое словосочетание, а не одно слово ? И скажем в слове qwerty 3-х буквенные сочетания:

-qwe
-wer
-ert
-rty

?

Спасибо за поправку, но по условию задачи там нет никаких псевдосимволов.
Дан некоторый текстовый файл, имя которого следует запросить у пользователя, содержит небольшой, форматированный (2-3 книжных страницы шириной ровно 60 знаков) фрагмент текста на русском языке.
Да все правильна для слова qwerty именно такие сочетания!
Вроде бы все работает правильно...

Добавлено через 2 мин.
Пардон! не "псевдосимволы", а символы псевдографики
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.