IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> График, дырки в круговой диаграмме
-Андрей-
сообщение 24.12.2005 23:44
Сообщение #1


Гость






вот процедура.
Но тут одна проблема, что при удеалении элемента отображения диаграммы, получается "дырка", подскажите решение!!!

 procedure ShowTable(tabl : table);
var i : Integer;
begin {вывод таблицы}
writeln('Данные');
for i :=1 to MAX do
if tabl[i].busy then
writeln('ФИО = ',tabl[i].fio,' Соток = ',tabl[i].sot,' Годовой взнос = ',tabl[i].year,
' Итого = ',tabl[i].sot*tabl[i].year);
end; {вывод таблицы}

procedure CreateDia(tabl : table);
var i,dr,md : Integer;
x,y : Integer;
angle : Integer;
sum : Integer;
proc : array[1..MAX] of LongInt; {для расчета углов диаграммы}
last : Integer;
have : Integer;
A : real;
xn,yn : Integer;
prs : string;
begin {вывод диаграммы}
dr := DETECT; {инициализация графики}
md := 0;
InitGraph(dr,md,'');
if GraphResult <> grOk then
begin
writeln('Не найден файл EGAVGA.BGI');
end else
begin {рисовать график}
SetColor(GREEN);
Rectangle(0,0,GetMaxX,GetMaxY);
SetFillSTyle(SOLIDFILL,LIGHTGRAY);
FloodFill(1,1,GREEN);

SetColor(BLUE);
OutTextXY(10,10,'Диаграмма');

sum := 0;
last := 1;
for i:=1 to MAX do
if tabl[i].busy then
sum := sum + tabl[i].sot;
have := 0;
for i:=1 to MAX do
if tabl[i].busy then
begin
proc[last] := tabl[i].sot;
proc[last] := proc[i]*360;
proc[last] := proc[i] div sum;
have := have + proc[last];
last := last + 1;
end;

have := 360-have;

proc[last-1] := proc[last-1]+have;
x := GetMaxX div 2;
y := GetMaxY div 2;
Angle := 0;

for i:=1 to MAX do
begin
if tabl[i].busy then
begin
if(i<>LIGHTGRAY)then
SetFillStyle(SOLIDFILL,i)
else SetFillStyle(SOLIDFILL,BLACK);
PieSlice(x,y,angle,angle+proc[i],100);

A:=(angle+angle+proc[i])/2;
XN:=x+Round(110*Cos(A*Pi/180));
YN:=y-Round(110*Sin(A*Pi/180));
if (A>90) and (A<270) then
Settextjustify(Righttext,0)
else
Settextjustify(lefttext,0);
SetColor(WHITE);
str(tabl[i].sot,prs);
Outtextxy(XN,YN,prs);
angle := angle + proc[i];
end;
end;
ReadKey;
end; {рисовать график}
CloseGraph;
end; {вывод диаграммы}


Сообщение отредактировано: volvo - 6.11.2006 21:18
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 15:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"