Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Построение диаграммы

Автор: John 1.06.2007 0:53

Привет. можете помочь, мне очень нужно (к завтрашнему дню)
Задание такое:
Разработать программу, выводящую круговую диаграмму(части диаграммы должны быть разных цветов) по любому количеству значений. Значения хранить в связном списке. Чтобы вращалась всегда(пока пользователь не остановит) вокруг центра. И на против или в ней (части диаграммы) должно выводиться значение соответствующее этой части

Вот я тут кое-что написал: (но не крутиться, и значения не выводит)


program diagram;
uses
crt,graph;
type
kol=^chislo;
chislo=record
ch: integer;
color:integer;
next: kol;
end;
var
cd,cg:integer;
s:string[4];
n,sum,x,y,i,j:integer;
mas,beg,t: kol;
begin
cd:=0;
cg:=detect;
initgraph(cd,cg,'d:\bp\bgi');
setbkcolor(lightgray);
settextstyle(2,0,4);
outtextxy(10,y,'Введите количество чисел');
readln(i);
str(i,s);
outtextxy(170,y,s);
y:=8;
sum:=0;
for j:=1 to i do begin
new(mas);
outtextxy(10,y,'Введите число');
str(j,s);
outtextxy(textwidth('Введите число')+20,y, s);
readln(mas^.ch);
str(mas^.ch,s);
outtextxy(textwidth('Введите число')+30, y, '='+s);
sum:=sum+mas^.ch;
mas^.next:=nil;
if beg=nil then beg:=mas
else begin t:=beg;
while t^.next<>nil do
t:=t^.next;
t^.next:=mas;end;
delay(40000);
setfillstyle(1,0);
bar(0,0,200,30);
end;

t:=beg;
while t<>nil do begin {процент от общей суммы значений}
t^.ch:=round(t^.ch*360/sum);
t:=t^.next;
end;



randomize;
t:=beg; x:=0;
while t<>nil do begin {вывод частей диаграммы(с цветом не вышло)}
randomize;
n:=random(15);
setfillstyle(1,n);
pieslice(300,220,t^.ch,x, 200);
x:=t^.ch;
readkey;
t:=t^.next;
end;

readkey;
dispose(mas);
readln;
end.


Автор: volvo 1.06.2007 1:14

Ты знаешь, мне пришла в голову сумасшедшая идея... Вот тут:
http://forum.sources.ru/index.php?showtopic=97412&view=findpost&p=736892 я сделал крутящийся барабан "Поля Чудес"... Если немного поменять программу, то будет отображаться вращающаяся круговая диаграмма...

Попробуй.

Автор: John 1.06.2007 1:58

Еще вопрос. Почему все делают на черном фоне, много видел и все на черном фоне. И еще можно на setvisualpage эти функции для чего они

Автор: volvo 1.06.2007 2:07

Я не предлагал тебе использовать SetVisualPage, с ним будет мерцать... А вообще это - работа с более чем одной видеостраницей (в одной изображение формируется, в это время другая отображается... Потом наоборот, показывается опять первая - формируется вторая...)