Помощь - Поиск - Пользователи - Календарь
Полная версия: Строим столбцовые диаграммы!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
P.O.L.L.Y
Здравствуйте!
Снова пишу вам в надежде на помощь))

Задача такова(простите, формулировала сама):
есть 5 значений
например
A 200
B 140
C 150
D 210
F 205
Цифры взяты с бошки, но на доске было написано таким образом.
Сумму этих чисел мы принимаем за 100%
Нужно изобразить столбцовые диаграммы относительно этой суммы!


На уроке я начала что-то делать. По мере непонимая информатик помогал, но чем больше он объяснял
и че-то дописывал, тем меньше я понимала, что происходит! Он вводил новые переменные, давал им значения, что отмерял и отсчитывал, отсчитывал и отмерял...в общем...я запуталась! mega_chok.gif
Хотя результат появился...доооа...информатик дал четкую установку "дороботать до конца и красиво!!!"
Я сохранила у себя эту работу. Сейчас пытаюсь с ней разобраться.
Проблема еще в том, что еще на уроке диаграммы "наезжали" друг на друга...это тоже нужно устранить...
ах да...еще косяк: то, что было сделано на уроке, не работает на моем компе! Возникает ошибка 106!!!
Вот мой код

Цитата
uses graph;
var
a:array[1..5] of real;
text: array[1..5] of string;
gd,gm: integer;
n, i:word;
s: real;
x,dx,y:integer;
begin
readln(n);

s:=0;
for i:=1 to n do begin
readln(text[i]);
readln(a[i]);
s:= s+a[i];
end;
gd:=9;
gm:=1;
Initgraph(gd,gm,'..\bgi');
{ploskost'}
Line(50,20,50,320);
Line(50,320,620,320);
{diagramma}
for i:=1 to n do begin
for i:=1 to n do begin
x:=30;
dx:=10;
y:=round(100*a[i]/s);

Rectangle(50+x*i,320-y,50+x*i+dx,320);


end;
readln;
closegraph;
end.


Братцы! Умоляю! ПОМОГИТЕ!!!

volvo
Ну, смотри... На форуме были примеры построения подобных диаграмм (искать по слову "гистогр*")...

Что касается твоей программы: у тебя лишний цикл (зачем 2 вложенных цикла For по одной переменной - я не понимаю) - скорее всего - опечатка, но из-за нее программа не компилируется. А по поводу ошибки #106 - это ты имеешь в виду после запуска? Значит, неправильно ввела значения (например, ввела текст там, где требовалось число) - неверный формат числа это и есть ошибка 106.
P.O.L.L.Y
Если честно, изучив все темы результата, я еще больше запуталась... blink.gif
Моя задача, я думаю, намного легче. Тем более у меня уже есть основа решения.

Пожалуйста! Помогите мне ее доделать до конца!!!
Просто скажите, в какой последовательности нужно вводить текст и числа,
как нужно подписать диаграммы(снизу название, сверху - проценты) и как
нужно их закрасить? Самое важное, можно ли каждую диаграмму закрасить
по-разному, приминяя только один код прямоугольника??
volvo
Если тебе просто сказать, как это все сделать - то получится как раз тот код, который я выкладывал, потому как он именно и реализует простейшую гистограмму...

Если подождешь - набросаю именно то, что тебе нужно, с комментариями, но это будет чуть позже.

Цитата
можно ли каждую диаграмму закрасить по-разному, приминяя только один код прямоугольника
Меняя цвет заливки через setfillstyle...
volvo
P.O.L.L.Y
Вот, посмотри, что получилось:

<deleted>
P.O.L.L.Y
volvo
Спасибо большое! Стало уже понятнее))
Правда есть несколько вопросов...
программа не запускается, выдает ошибку 3

что-то ей не нравится в
gr_driver := detect;
initgraph(gr_driver, gr_mode, '');


в ковычки я поставила '..\bgi' - как и всегда...
все равно ошибка.

поменяла
gr_driver := detect; на gd:=9; gm:=1; - так тоже всегда делала
в скобках initgraph(gr_driver, gr_mode, ''); соответственно на initgraph(gd, gm, '..\bgi');

и все равно ошибка! Где я могла ошибиться? blink.gif
volvo
Ну, может ты просто не поменяла в разделе описания переменных с gr_driver на gd? Хотя зачем - я не понимаю... Я дал более общую программу. И если вдруг ты не увидишь той картинки, которую увидит тот, кто запустит мою программу (без исправлений) - то извини, виновата в этом будешь только ты... У меня устанавливается режим 640*480, ты зачем-то занижаешь до 640*350... Смысл в этом какой? Сделать хуже, чем можно?

Опять же, gd это надо еще догадаться, что такое. С gr_driver проблем никаких быть не может - толкование однозначное. Опять делаем хуже, чем можно?
P.O.L.L.Y
Эхх...дело ведь не в ухудшении программы, а в том, что я ищу любые способы предотвращения ошибки...
Странно получается...вроде я все правильно указала mellow.gif
volvo
Цитата
я ищу любые способы предотвращения ошибки
Каким образом? Уменьшением разрешения экрана? Или заданием менее "говорящего" имени переменной? Странный способ отлова ошибок...

Цитата
вроде я все правильно указала
Чтоб не заниматься гаданием на кофейной гуще - присоедини файлом то, что ты наисправляла.
P.O.L.L.Y
Цитата
Каким образом? Уменьшением разрешения экрана? Или заданием менее "говорящего" имени переменной? Странный способ отлова ошибок...

На нынешнем уровне знания Паскаля я могу только заменить к-либо функцию другой, близкой по значению.
Я расчитывала, что комп опознает ее и не укажет на ошибку...не получилось...друго варианта я не знаю...

Сначала я ничего не исправляла!
Пришлось ч-либо менять, когда вышла ошибка...

Ну да ладно...скажите пожалуйста, как файл присоединить? простите, что надоедаю...
volvo
Цитата
Сначала я ничего не исправляла!
Пришлось ч-либо менять, когда вышла ошибка...
Правда? А ничего, что сначала программа у меня отработала? Без ошибок, кстати? dry.gif

Вот и помогай после этого людям. А они еще и говорят, что в отлаженных программах ошибки какие-то. Доделывай свою тогда... Я снимаю свой вариант с обсуждения.
P.O.L.L.Y
ээй! ты чего?? я не хотела тебя обидеть!
вообще-то я искала проблему в своем компе - он часто глючит!
и то, что я делала на уроке приходится подгонять под мою программу(хотя она точно такая же, ну не в этом суть)...вот думала, что и в этом случаи также! и хотела спросить, где вообще ошибка может находится...

Кстати ошибку я нашла)) и конечно же она была МОЕЙ(ни на минуту в этом не сомневалась smile.gif )
исправила - увидела результат! Оооочень красиво, между прочим!

Поэтому извини, если я чем-то тя обидела! Это могло произойти только случайно в порыве отчаянья)))))
И СПАСИБО тебе БОЛЬШОЕ!!! Ты мне чень помог!!! good.gif good.gif good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.