Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2009, 18:01   #1
Reanim
Новичок
Джуниор
 
Регистрация: 26.06.2009
Сообщений: 5
По умолчанию Создаю круговую диаграмму. Подскажите что не так?

Здравствуйте! Не могу понять, что он от меня хочет. Помогите разобраться. Вот код:

Program GraphShabl;
Uses
Graph;
Const
z: array [1..10] of integer = (5,10,15,20,15,10,5,5,10,15);
Var
GraphDriver,
GraphMode,x,y,r,i,a,b: integer;
Begin
GraphDriver:=detect;
InitGraph(GraphDriver, GraphMode,'..\BGI');
x:=200;
y:=200;
r:=100;
circle(x,y,r);
a:=0;
i:=0;
for i:=1 to 10 do
begin
b:=360/(4*z[i]);
PieSlice(x,y,a,b,r);
SetColor(Red);
a:=b;
i:=i+1;
end;
readln;
CloseGraph;
End.
Reanim вне форума Ответить с цитированием
Старый 03.07.2009, 13:33   #2
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Такие действия :
Цитата:
i:=i+1
; в цикле
Цитата:
for i:=1 to 10 do
не допустимы, да и бессмыслены
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 03.07.2009 в 13:47.
Anatole вне форума Ответить с цитированием
Старый 03.07.2009, 18:19   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

У тебя в принципе неправильно идут вычисления и построения.
Вот пример для 4х значений, посмотри принцип и сделаешь в цикле для 10.
Код:
uses
  crt,graph;
const
  r=100;
var
  a,b,c,d,e:real;
  ab,bc,cd:integer;
begin
  {вводим значения}
  write('Enter book:');
  readln(a);
  write('Enter magazine:');
  readln(b);
  write('Enter post card:');
  readln(c);
  write('Enter stationery:');
  ReadKey;
  readln(d);
  {суммируем весь оборат}
  e:=a+b+c+d;
  write('press any key...');
  ReadKey;
  ab:=detect;
  {переходим в графику}
  InitGraph(ab,bc,'');
  if GraphResult=0 then
    begin
      {считаем углы}
      ab:=round(360*a/e);
      bc:=round(360*b/e)+ab;
      cd:=round(360*c/e)+bc;
      {выводим диаграмму}
      SetFillStyle(1,1);
      PieSlice(GetMaxX div 2,GetMaxY div 2, 0,ab,r);
      SetFillStyle(1,2);
      PieSlice(GetMaxX div 2,GetMaxY div 2,ab,bc,r);
      SetFillStyle(1,3);
      PieSlice(GetMaxX div 2,GetMaxY div 2,bc,cd,r);
      SetFillStyle(1,4);
      PieSlice(GetMaxX div 2,GetMaxY div 2,cd,360,r);
      {выводим подпись}
      SetColor(1);
      OutTextXY(10,10,'Book');
      SetColor(2);
      OutTextXY(10,20,'Magazine');
      SetColor(3);
      OutTextXY(10,30,'Post card');
      SetColor(4);
      OutTextXY(10,40,'Stationery');
      ReadKey;
      CloseGraph;
    end
    else
    begin
      write('InitGraph error!');
      ReadKey;
    end;
end.
puporev вне форума Ответить с цитированием
Старый 03.07.2009, 18:37   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот твой вариант.
Код:
Program GraphShabl;
Uses Graph;
Const
z: array [1..10] of integer = (5,10,15,20,15,10,5,5,10,15);
Var
GraphDriver,
GraphMode,x,y,r,i,a,b,s: integer;
Begin
GraphDriver:=detect;
InitGraph(GraphDriver, GraphMode,'..\BGI');
s:=0;
for i:=1 to 10 do
s:=s+z[i];
x:=getmaxX div 2;
y:=getmaxY div 2;
r:=150;
b:=round(360*z[1]/s);
Setfillstyle(1,1);
PieSlice(x,y,0,b,r);
for i:=2 to 9 do
 begin
   a:=round(360*z[i]/s)+b;
   Setfillstyle(1,i);
   PieSlice(x,y,a,b,r);
   b:=a;
 end;
Setfillstyle(1,10);
PieSlice(x,y,b,360,r);
readln;
CloseGraph;
End.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, что не так SWAT Паскаль, Turbo Pascal, PascalABC.NET 0 15.06.2009 15:15
Интересует такой вопрос. Как создать круговую диаграмму в Дельфи Grisha248 Компоненты Delphi 6 26.05.2009 18:06
Подскажите что не так... SynonymMixer Работа с сетью в Delphi 10 26.01.2009 23:49
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49