![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
student___ |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Здравствуйте. Дана задача : Для каждого символа заданного текста указать его относительную частоту появления в тексте. Построить соответствующую диаграмму. Сообщение об одном символе должно печататься не более одного раза. Вот мой черновик. программа читает текст из файла, который может состоять из любого количества символов(английские , русские буквы, всевозможные знаки препинания и все это в несколько строк), выводить нужно только символы-буквы. всё шло прекрасно до того момента как текст состоял из двух-трёх строк, но если читать ,к примеру, полноценное стихотворение, то начинаются ошибки(выводит несколько раз сообщение об одинаковых символах, некоторые буквы не выводит вовсе, неправильно считает) и как мне уже подсказали формула по которой считается относительная частота не верна(.до диаграммы дело не доходит так понимаю, что смысла нет за неё браться пока происходят вот такие косяки.. Прошу посмотреть программу и помочь с выявлением ошибок
|
![]() ![]() |
Федосеев Павел |
![]()
Сообщение
#2
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
Файл закрывается потому, что завершился кусок кода обработки данных. Далее идёт кусок визуализации результатов обработки.
MyABC и условие в if s[i] in ['a'..'z'] - это работа с типом МНОЖЕСТВО - set of char. Я почти не работал с graph, только предполагаю. Визуализация в графическом режиме. 1. Масштабирование по X и по Y 2. Рисование прямоугольников с заполнением. Масштабирование. 1. По X Пусть обрабатывались N=26 символов от 'a' до 'z'. Тогда ширина каждого прямоугольника будет равна dX:=(GetMaxX+1) div N Но лучше рисовать диаграмму немного отступив от края экрана, например 5% слева и 5% справа. Таким образом, остаётся всего лишь 90% ширины и получим dXshift:=( (GetMaxX+1)*5 ) div 100 {отступ от края экрана 5%} dX:=( (GetMaxX+1) - dXshift - dXshift) div N {ширина каждого прямоугольника} 2. По Y Среди значений массива (в нужном диапазоне символов от 'a' до 'z') ищется максимальный - Amax. Аналогично находим высоту максимального прямоугольника dYshift:=( (GetMaxY+1)*5 ) div 100 {отступ от края экрана 5%} dYmax:=(GetMaxX+1) - dYshift - dYshift А высоты каждого рисуемого прямоугольника будут находиться dY:=(a[i]*dYmax) div Amax Рисование прямоугольников (псевдокод) с учётом что X возрастает слева направо, а Y сверху вниз Код for i:=ord('a') to ord('z') do begin dY:=(a[i]*dYmax) div Amax Xstart:=dXshift+dX*( i-ord('a') ) Ystart:=(GetMaxY+1)-dYshift Xstop:=Xstart+dX Ystop:=Ystart-dY прямоугольник(Xstart, Ystart, Xstop, Ystop) {кажется, bar или rectangle} end; Может быть, при вызове bar нужно будет поменять местами Ystart и Ystop, нужно установить цвета, стили заполнения. Я просто не знаю. Нужно пробовать. Наверняка, в интернете вообще и на форуме в частности есть примеры построения диаграмм. P.S. Препод от нас требовал не графическую диаграмму, а горизонтальную в текстовом режиме символами '*'. Код dYmax:=80 for i:=ord('a') to ord('z') do begin dY:=(a[i]*dYmax) div Amax for Y:=1 to dY do write('*'); writeln; end; В понедельник я уезжаю, больше помочь не смогу... Сообщение отредактировано: Федосеев Павел - 14.04.2013 23:41 |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 4:30 |