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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 2 193

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Мне попалась задачка. Нужно составить гистограмму для заданного текста. В общем она должна показывать сколько раз в тексте встречаются символы. Помогите решить.
Заранее спасибо.

DENVER Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: DENVER (статус: Посетитель)
Вопрос отправлен: 14 декабря 2008, 07:42
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, DENVER!
Как сосчитать символы, я расскажу, это не сложно. Но это набросок кода, Вам скорее всего прийдётся дорабатывать его под свои нужны.

var c:char;
    count :integer;
    f:Textfile;
    let:array[char] of Integer;
    pers:array[char] of real;
begin
  for c := #0 to #255 do
    begin
      let[c] := 0;
      pers[c] := 0;
    end;
  AssignFile(f, 'C:\rez.txt');
  //Для старных версий паскаля надо писать Assign(f,'имя файла');
  Reset(f);
  while not eof(f) do
    begin
      Read(f,c);
      inc(let[c]);
    end;
  CloseFile(f);
  //Для старных версий паскаля надо писать Close(f,'имя файла');
  //Теперь массив содержит кол-во каждого символа.
  //сосчитаем сколько у нас цифр и букв.
  count := 0;
  for c := '0' to '9' do
    count := count + let[c];
  for c := 'A' to 'Z' do
    count := count + let[c];
  for c := 'a' to 'z' do
    count := count + let[c];
  //Русские буквы я не считал и всякие кавычки, запятые и так дальше.
  //теперь сосчитаем в процентах для каждого символа
  //И покажем на экране
  for c := '0' to '9' do
  begin
    pers[c] := let[c] / count * 100;
    Writeln(c:3, pers[c]:5:2, '%');
  end;
 
  for c := 'A' to 'Z' do
  begin
    pers[c] := let[c] / count * 100;
    Writeln(c:3, pers[c]:5:2, '%');
  end;
 
  for c := 'a' to 'z' do
  begin
    pers[c] := let[c] / count * 100;
    Writeln(c:3, pers[c]:5:2, '%');
  end;
  Readln;
end.
Если хочеться для всех символов сосчитать, то тут проще
for c := #0 to #255 do
    count := count + let[c];
for c := #0 to #255 do
begin
    pers[c] := let[c] / count * 100;
   if c < 32 then
      Writeln('-':3, pers[c]:5:2, '%');
   else
    Writeln(c:3, pers[c]:5:2, '%');
end;
А вот как нарисовать гистограмму... это интересный вопрос. Наиболее простое, что мне представлятся - это в виде звёздочек. Где то так
А *****
Б ***
В *******
....
Вариант два - использовать модуль Graph и нарисовать на экране в виде красивых графиков. Но тут есть несколько проблем - начиная с того, что я не использовал этот модуль уже наверно лет 5, так и то, что его надо уметь настроить и для компьютеров, в которых процессор выше Pentium I (Это практически все современные компьютеры), надо использовать пропатченную библиотеку.
В общем, определитесь, а там и разберёмся с кодом.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 14 декабря 2008, 15:06


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

Всего сообщений: 7; последнее сообщение — 14 декабря 2008, 12:46; участников в обсуждении: 4.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 14 декабря 2008, 08:04 [#1]:

А в чем проблема? Посчитать количество символов или вывести результат в виде гистограммы (это можно сделать с помощью TChart)?
DENVER

DENVER (статус: Посетитель), 14 декабря 2008, 09:56 [#2]:

вывести результат с помощшью гистограммы. Напишите пожалуйста, как это будет выглядеть.
Ученый

Ученый (статус: 8-ой класс), 14 декабря 2008, 09:57 [#3]:

Вам надо показать сколько встречаются все символы или сколько раз встречаются определенные символы?
DENVER

DENVER (статус: Посетитель), 14 декабря 2008, 10:32 [#4]:

Все символы.
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 14 декабря 2008, 10:36 [#5]:

Ну раз все подсчитано, то, упорядочив результаты по алфавиту (так нагляднее, по-моему), по оси X - символ, по Y - сколько раз.
DENVER

DENVER (статус: Посетитель), 14 декабря 2008, 11:06 [#6]:

Я тоже так думал. Но у меня проблема с кодом. Если не трудно, напишите примерный текст программы.
Ученый

Ученый (статус: 8-ой класс), 14 декабря 2008, 12:46 [#7]:

На делфи знаю как осуществить это, а вот с паскалем никогда не работал...

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

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