|
Вопрос # 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]:
На делфи знаю как осуществить это, а вот с паскалем никогда не работал...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|