Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 338

Раздел: Delphi » Прочее
/ вопрос решён /

Доброго времени суток, уважаемые эксперты!

Подскажите, как решить следующую задачку: "Определите, какая из заданых букв встречается в тексте чаще остальных".

Букв - неопределенное число, задается пользователем.
Необходимо также использовать MEMO для вводимого текста.
Программа должна считать все заданные буквы во введенном тексте а затем определять, какая буква встречается чаще остальных.
По-возможности - внешний вид программы;
Язык - Delphi 7 Object pascal.

Upgr3id Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Upgr3id (статус: Посетитель)
Вопрос отправлен: 13 февраля 2008, 19:16
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Вот, написал тебе пример. подсчёт статистики вхождения букв КИРИЛЛИЦЫ в тексте без учёта регистра символов.
Примечание: буквы "ё" и "Ё" игнорируются.

После подсчёта выдаётся сообщение о букве, которая встречается чаще всех.

З.Ы. В прицепе - весь проект.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Приложение:
  1. procedure TMainForm.StartButtonClick(Sender: TObject);
  2. var
  3.  
  4. Index, Len, p, op: Integer;
  5. cIndex, MaxIndex: Char;
  6. begin
  7. Len:= Length(Memo.Text);
  8. op:= 0;
  9. FillChar(Letters, SizeOf(Letters), 0);
  10.  
  11. for Index:= 1 to Len do
  12. begin
  13.  
  14.  
  15.  
  16. then Inc(Letters[Memo.Text[Index]]);
  17.  
  18.  
  19.  
  20. then Inc(Letters[Char(Integer(Memo.Text[Index]) + $20)]);
  21.  
  22.  
  23. p:= Round(100 * Index / Len);
  24. if (p <> op)
  25. then begin
  26. Gauge.Progress:= p;
  27. op:= p;
  28. Application.ProcessMessages;
  29. end;
  30. end;
  31.  
  32.  
  33.  
  34. ListBox.Clear;
  35. MaxIndex:= #0;
  36. Index:= 0;
  37.  
  38. for cIndex:= Low(Letters) to High(Letters) do
  39. begin
  40. p:= Round(100 * Letters[cIndex] / Len);
  41.  
  42. if (Index < Letters[cIndex])
  43. then begin
  44. Index:= Letters[cIndex];
  45. MaxIndex:= cIndex;
  46. end;
  47. end;
  48.  
  49. if (MaxIndex <> #0)
  50.  
  51.  
  52. IntToStr(Round(100 * Letters[MaxIndex] / Len)) + '%)'),
  53.  
  54. MB_OK + MB_ICONINFORMATION);
  55.  
  56. end;


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 14 февраля 2008, 09:01
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Помфюк Владимир Степанович

Здравствуйте, Upgr3id!
В предыдущем ответе я бы заменил
Letters: array['а'..'я'] of Integer;
на
Letters: array[char] of Integer;
а то программа не посчитает латиницу и цифры (а кто сказал что их не начо считать?) , убрал проверки
if (Memo.Text[Index] in
(Если надо не учитывать регистр, то можно написать Inc(Letters[ANSIUpperCase(Memo.Text[Index])]); , но опять-таки в условии не сказано ничего о регистре)
и, чтобы не получилось никаких гадостей то вконце
for cIndex:= Low(Letters) to High(Letters) do
заменить на
for cIndex:='0' to High(Letters) do
и таким образом урезать все непечатные символы, а также добавить
if Letters[cIndex]<>0 then
ListBox.Items.Add('"' + cIndex + '": ' + IntToStr(Letters[cIndex]) + ' раз (' + IntToStr(p) + '%)');

чтобы не показывать отсутсутвующие в тексте буквы.

Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 14 февраля 2008, 10:23
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 25 февраля 2008, 21:27; участников в обсуждении: 2.
Dron

Dron (статус: Студент), 13 февраля 2008, 20:07 [#1]:

И в чём проблема? Вы хотите, чтобы эксперты полностью написали программу за вас?
Скажите, на каком именно этапе у вас возникают трудности.
С уважением.
Upgr3id

Upgr3id (статус: Посетитель), 25 февраля 2008, 21:27 [#2]:

Не подскажете, как будет выглядеть блок-схема к этой программе?

31 января 2011, 19:30: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:57
Выполнено за 0.03 сек.