В круговой диаграмме каждому элементу последовательности соответствует сектор, градусная мера которого пропорциональна величине элемента. Для построения круговой диаграммы необходимо просуммировать все элементы последовательности, после чего найти отношения каждого из элементов к полученной сумме (так будет вычислено, какую часть круга нужно поставить в соответствие данной величине,—т.е. рассчитываются доли круга, приходящиеся на данную величину, если весь круг принять равным
1) Все эти расчеты можно представить формулами ; . Затем эти относительные величины переводятся в градусы:
Алгоритм в этом случае будет следующим: 1)вычислить сумму элементов последовательности; 2)найти величину сектора, соответствующего каждой величине; 3)построить все секторы в графическом режиме (в результате должен получиться полный круг). Желательно каждый сектор строить своим цветом, или использовать разную штриховку, если секторы одноцветные.
Program Kr_D;
Uses Graph;
Var a,S:Real;I:Byte;G,M:Integer;
Xc,Yc,R:Integer; {координаты центра круга и его радиус}
F:Text; {файл содержит данные для построения диаграммы}
Alpha : Integer; {угол, соответствующий очередной величине}
SAngle : Integer; Stroka : String;
Begin
Assign(F, '1.dat'); Reset(F);
S:=0; {сумма элементов последовательности}
While Not Eof(F) Do
begin Readln(F, a); S := S + a end;
reset(f); G := detect; M := 0;
initgraph(G, M, '');
Xc := GetMaxX Div 2; Yc := GetMaxY Div 2;
R := 100; SAngle := 0; i := 1;
While Not Eof(f) Do begin
Readln(F, a);
Alpha := round(A / S * 360); {вычисление угла}
setcolor(i mod 16+1); setfillstyle(1,i mod 16+1);
{построение сектора, соответствующего величине}
sector(Xc, Yc, SAngle, SAngle+Alpha,R, R);
SAngle := SAngle + Alpha; i:= i + 1;
{укажем, какому цвету какая величина соответствует}