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

 

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