|
Вопрос # 1 338/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите, как решить следующую задачку: "Определите, какая из заданых букв встречается в тексте чаще остальных".
Букв - неопределенное число, задается пользователем.
Необходимо также использовать MEMO для вводимого текста.
Программа должна считать все заданные буквы во введенном тексте а затем определять, какая буква встречается чаще остальных.
По-возможности - внешний вид программы;
Язык - Delphi 7 Object pascal.
 |
Вопрос задал: Upgr3id (статус: Посетитель)
Вопрос отправлен: 13 февраля 2008, 19:16
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: min@y™
Вот, написал тебе пример. подсчёт статистики вхождения букв КИРИЛЛИЦЫ в тексте без учёта регистра символов.
Примечание: буквы "ё" и "Ё" игнорируются.
После подсчёта выдаётся сообщение о букве, которая встречается чаще всех.
З.Ы. В прицепе - весь проект. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
Приложение: Переключить в обычный режим- procedure TMainForm.StartButtonClick(Sender: TObject);
- var
-
- Index, Len, p, op: Integer;
- cIndex, MaxIndex: Char;
- begin
- Len:= Length(Memo.Text);
- op:= 0;
- FillChar(Letters, SizeOf(Letters), 0);
-
- for Index:= 1 to Len do
- begin
-
-
-
- then Inc(Letters[Memo.Text[Index]]);
-
-
-
- then Inc(Letters[Char(Integer(Memo.Text[Index]) + $20)]);
-
-
- p:= Round(100 * Index / Len);
- if (p <> op)
- then begin
- Gauge.Progress:= p;
- op:= p;
- Application.ProcessMessages;
- end;
- end;
-
-
-
- ListBox.Clear;
- MaxIndex:= #0;
- Index:= 0;
-
- for cIndex:= Low(Letters) to High(Letters) do
- begin
- p:= Round(100 * Letters[cIndex] / Len);
-
- if (Index < Letters[cIndex])
- then begin
- Index:= Letters[cIndex];
- MaxIndex:= cIndex;
- end;
- end;
-
- if (MaxIndex <> #0)
-
-
- IntToStr(Round(100 * Letters[MaxIndex] / Len)) + '%)'),
-
- MB_OK + MB_ICONINFORMATION);
-
- 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) + '%)');
чтобы не показывать отсутсутвующие в тексте буквы.
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 25 февраля 2008, 21:27; участников в обсуждении: 2.
|
Dron (статус: Студент), 13 февраля 2008, 20:07 [#1]:
И в чём проблема? Вы хотите, чтобы эксперты полностью написали программу за вас?
Скажите, на каком именно этапе у вас возникают трудности.
С уважением.
|
|
Upgr3id (статус: Посетитель), 25 февраля 2008, 21:27 [#2]:
Не подскажете, как будет выглядеть блок-схема к этой программе?
|
31 января 2011, 19:30: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|