| 
| 
 | Вопрос # 2 193/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Мне попалась задачка. Нужно составить гистограмму для заданного текста. В общем она должна показывать сколько раз в тексте встречаются символы. Помогите решить.
 Заранее спасибо.
 
|  |   Вопрос задал: 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 (статус: Посетитель), 14 декабря 2008, 09:56 [#2]:вывести результат с помощшью гистограммы. Напишите пожалуйста, как это будет выглядеть. |  
|   | Ученый (статус: 8-ой класс), 14 декабря 2008, 09:57 [#3]:Вам надо показать сколько встречаются все символы или сколько раз встречаются определенные символы? |  
|   | DENVER (статус: Посетитель), 14 декабря 2008, 10:32 [#4]:Все символы. |  
|   | Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 14 декабря 2008, 10:36 [#5]:Ну раз все подсчитано, то, упорядочив результаты по алфавиту (так нагляднее, по-моему), по оси X - символ, по Y - сколько раз. |  
|   | DENVER (статус: Посетитель), 14 декабря 2008, 11:06 [#6]:Я тоже так думал. Но у меня проблема с кодом. Если не трудно, напишите примерный текст программы. |  
|   | Ученый (статус: 8-ой класс), 14 декабря 2008, 12:46 [#7]:На делфи знаю как осуществить это, а вот с паскалем никогда не работал... |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |