7.2-мысал. 12-ден көп емес мəндер бойынша дөңгелек диа-грамма салатын программа жазыңыз. Əр мəн дөңгелектің бір сек-торын алып тұрады.
Дөңгелек диаграмма боялған дөңгелек секторларының жиын-тығы ретінде салынады. Сектор бұрышы жалпы мəндер қосын-дысының ішіндегі сəйкес мəннің үлесіне пропорционал. Жазу сектор бұрышының биссектрисының қарсысына жазылу керек. Төменде программа мəтіні келтірілген.
Program diagramma;
Uses Graph;
Const
kmax=12; {функцияның максимальді мəндер саны} r=150; {диаграмма радиусы} n=5; {шығару өрісінің ені}
m=2; {санның бөлшек бөлігінің мөлшері} Type
mas=array[1..kmax+1] of integer; mas1=array[1..kmax] of real; Var
f:mas1; {функция мəндерінің жиымы}
alfa:mas; {диаграмма бұрыштары мəнінің жиымы} driver,err, {адаптер типі жəне жұмыс режимі} k, {функцияның нақты мəндерінің саны}
bet, {диаграмма секторының радиусы жəне бис-сектрисасы құраған бұрыштың шамасы}
y,x, {сектор доғасының центрі болатын нүктенің координатасы}
x1,y1, {жазуды шығарудың бастапқы нүктесінің координатасы}
xn,yn, {диаграмма центрінің координатасы } i:integer;
st:string[5]; {алдын ала шығарылатын жазу жолы}
s:real; {функция мəндерінің қосындысы} Begin
WriteLn(‘Нүктелер санын енгізіңіз (1-ден,‘kmax:3-ке дейін’)’);
232
ReadLn(k);
{функция мəндерін шығарып, олардың қосындысын
анықтаймыз}
s:=0;
for i:=1 to k do
begin
WriteLn(‘Функцияның’,i:3,’-ші мəнін
енгізіңіз’);
ReadLn(f[i]); while f[i]<0 do begin
WriteLn(‘Беруге болмайтын мəн, енгізуді
қайталаңыз’);
WriteLn(‘Функцияның’,i:3,’- ші мəнін
енгізіңіз’);
ReadLn{f[i]);
end;
s:=s+f[i];
end;
if s=0 then
begin
WriteLn(‘Барлық мəндер нөлге тең.’); ReadLn; halt(1); {қате бойынша шығу} end;
{графикалық режимді іске қосамыз}
driver:=detect;
InitGraph(driver,err,’’);
Setbkcolor(15); {фон түсі ақ}
SetPalette(1,0);
SetColor(1); {салу түсі қара}
{диаграмма центрінің координатасын есептейміз }
xn:=GetMaxX div 2;
yn:=GetMaxY div 2;
{Диаграмма секторының бұрыштарының мəнін
есептейміз }
alfa[1]:=0;
for i:=2 to k+1 do
16–1618 233
begin
if i<>k+1 then alfa[i]:=alfa[i-1]+round(f[i-1]/s*360)
else alfa[k+1]:=360;
SetFillStyle(i mod 10,i); {секторды бояудың
типі мен түсін орнатамыз}
Pieslice(xn,yn,alfa[i-1],alfa[i],r); {сектор
саламыз}
{Жазу шығарудың бастапқы координаталарын
есептейміз }
bet:=(alfa[i-1]+alfa[i]) div 2;
x:=xn+round(r*cos(bet*pi/180));
y:=yn-round(r*sin(bet*pi/180));
if ((bet>=0) and (bet<=90)) or ((bet>=270) and (bet<=360)) then x1:=x+10 else x1:=x-8*n-10; if (bet>=0) and (bet<=180) the y1:=y-15 else y1:=y+7;
Str(f[i-1]:n:m,st); {мəнді жолға айналдырамыз} OutTextXY(x1,y1,st); {жазу шығарамыз} end;
ReadLn;
CloseGraph;
End.
Программа жұмысының нəтижесі дөңгелек диаграмма болады.