Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2010, 19:12   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
Лампочка

Цитата:
Пятерка?))
не-а.. Четвёрка. За ошибку! Вот за это: "триграммы: ... "су" .... "
но общий смысл, того, как Вы понимаете разбиение текста на двусимвольные и трёхсимвольные сочетания я понял.
Исключительно в честь хорошего настроения, вот готовая программа:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s, sLetters : string;
   i, j, k, CharCount : integer;
   TS : TstringList;
begin
  try
    CharCount := StrToInt(edCharCount.text);
  except
    Application.MessageBox('Неверно задано число символов для анализа!',
          'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;
  if (CharCount<1) then begin
    Application.MessageBox('Число символов должно быть больше нуля!',
          'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;

  s := '';
  for i:=0 to mSource.Lines.Count-1 do
     s := s+ mSource.Lines[i];
  i := 1;

  TS := TstringList.Create;

  { "добьём" в конец текста пробелов,
      чтобы длина текста была кратной CharCount}
  while (Length(s) mod CharCount)<>0 do
     s := s + ' ';

  while i<Length(s) do begin
    {  в цикле, берём в sLetters очередной набор символов заданной длины}
   sLetters := Copy(s, i, CharCount);
   i := i + CharCount;

   k := TS.IndexOf(sLetters);
   if k<0 then  {впервые встретили такое сочетание}
   begin
      TS.AddObject(sLetters, Tobject(1));
   end
   else {уже было такое сочетание, увеличим счётчик на единичку}
      TS.Objects[k] := TObject( Integer(TS.Objects[k]) + 1 );
  end;

  mResult.Lines.Clear;
  for i:=0 to TS.Count-1 do begin
    mResult.Lines.Append(TS.Strings[i]+' втретилось '+IntToStr(Integer(TS.Objects[i])));
  end;
  FreeAndNil(TS);

end;
p.s. Только не надо задавать дополнительных вопросов - всё равно не отвечу) я и так слишком много сказал (Особенно, если учесть то, что эта тема для фриланса - т.е., раз Вы сами ничего не хотите делать/изучать, значит должны обращаться к тем, кто это готов сделать это за Вас за небольшое вознаграждение)!

p.s. Могу отсортировать результаты по убыванию частоты появления. Надо?
Вложения
Тип файла: rar CharAnalizator.rar (134.0 Кб, 33 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2010, 19:29   #12
denis_dneprovski
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 11
По умолчанию

большое спасибо. Было бы просто здорово, только если вас не затруднит. (P.S. вся проблема в том, что у меня в процессе обучения никогда не было программирования, а теперь руководителем моей научной работы сделали преподавателя - программиста, поэтому мне нужно с нулевым опытом сразу начать что-то создавать.)
ЕЩЕ РАЗ ОГРОМНОЕ СПАСИБО!!

Последний раз редактировалось denis_dneprovski; 10.10.2010 в 20:15.
denis_dneprovski вне форума Ответить с цитированием
Старый 10.10.2010, 20:41   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Было бы просто здорово, только если вас не затруднит.
да нет, это несложно. Мы же можем продолжать использовать уже заложенный в TSTringList функционал.

добавьте перед процедурой Button1Click вот такую функцию:
Код:
function CustomSortByUsedCount_Descending(List: TStringList; Index1, Index2: Integer): Integer;
begin
  if Int64(List.Objects[Index1])<Int64(List.Objects[Index2])
    then CustomSortByUsedCount_Descending := 1
  else begin
     if Int64(List.Objects[Index1])=Int64(List.Objects[Index2]) then
       CustomSortByUsedCount_Descending := 0
     else
       CustomSortByUsedCount_Descending := -1
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
....
вызывать так (перед выводом результатов):
Код:
 {отсортировать по частоте}
  TS.CustomSort( CustomSortByUsedCount_Descending );


  mResult.Lines.Clear;
  for i:=0 to TS.Count-1 do begin
    mResult.Lines.Append(TS.Strings[i]+' втретилось '+IntToStr(Integer(TS.Objects[i])));
  end;
примечание. Серым цветом отмечен код, который уже есть, его добавлять не надо, это просто для ориентации в пространстве привожу здесь..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2010, 20:50   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Оффтоп:
А можно для особо заиндивевших двоичников пояснить что такое биграммы, и что такое триграммы, ато Вики в Китай посылает
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2010, 20:56   #15
denis_dneprovski
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 11
По умолчанию

спасибо, теперь будет удобней вести статистику)
denis_dneprovski вне форума Ответить с цитированием
Старый 10.10.2010, 21:06   #16
denis_dneprovski
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 11
По умолчанию

биграмма - сочетание 2символов, триграмма - сочетание трех символов
denis_dneprovski вне форума Ответить с цитированием
Старый 10.10.2010, 21:35   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

тоесть "я заааикаюсь" - здесь "ааа" - триграмма?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.10.2010, 06:15   #18
denis_dneprovski
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 11
По умолчанию

в "я заааикаюсь". триграммы: "я з", "ааа", "ика", "юсь".
Это сочетание любых, а не только идентичных символов.
denis_dneprovski вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как подсчитать сколько раз встречается символ в строке? zver777 Общие вопросы Delphi 10 10.01.2010 00:57
Анализ текста программы на Delphi. Сколько раз встречается оператор. alex67 Помощь студентам 5 09.12.2009 16:24
Сколько раз в тексте встречается каждое слово. 08ekhiv1 Помощь студентам 2 11.03.2009 10:56
Определить сколько раз встречается в тексте самое короткое слово - Delphi 7 Леди Уинтер Помощь студентам 3 08.01.2008 17:56
Сколько раз встречается данное слово n1k1c4 Помощь студентам 4 13.12.2007 20:33