Построение круговой диаграммы и гистограммы - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста в следующем

Решение задачи: «Построение круговой диаграммы и гистограммы»

textual
Листинг программы
Uses GraphAbc;
Const vv: array[1..4] of integer = (979, 948, 610, 580);
      nz: array[1..4] of string = ('Анхель','Тугела', 'Кукенад', 'Сатерлинд');
      col: array[1..4] of integer = (clYellow,clLime,clBrown,ClRed);
      v:  array [1..6] of string=('Утигард','Монгефоссен','Йосемите',
                                  'Остре Мандола Фосс','Туссестренген','Киле');
      p: array [1..6] of integer=(800,774,739,657,646,561);
Var r,i,n,m,s,x1,x2,h,xi,k1,no,nomax,u,u0,ss,j: integer;
    sar,k:real;
    z:string;
 
 
Begin
setWindowSize(800,650);
r:=loadpicture('1.jpg');
drawpicture(r,0,300,500,350);
s:=0;
h:=Round((600)/6);
for i:=1 to 5 do         {нахождение наибольшего значения и ближайшего к среднему площади}
    s:=s+p[i];
sar:=s/6;
SetPenWidth(3);
line(50,250,750,250);
line(50,10,50,300);     {рассчет ширины прямоугольника для каждого месяца}
no:=1;
For i:=2 to 5 do
    if abs(sar-p[i])<abs(sar-p[no]) then no:=i;
nomax:=1;
For i:=2 to 5 do
    if abs(p[i]-p[no])>abs(p[i]-p[nomax]) then nomax:=i;
k1:=200 div round(abs(p[no]-p[nomax]));  {вычисление коэффициента масштабирования по оси OY}
    xi:= 60;   {Строим  столько прямоугольников, сколько есть }
For i:=-2 to 4 do
begin
    S:=i*50;
    Str(S,z);
    Line(48,(250 div 5)*i,52,(250 div 5)*i);
    TextOut(5,(250 div 5)*(5-i)-10,z);
end;
 
for i:=1 to 6 do
    begin
    If p[i]>p[no] then SetBrushColor(clGreen)
       else SetBrushColor(clRed);     {закраска прямоугольника диаграммы зеленым цветом}
    Rectangle(xi,250-(p[i]-p[no]),xi+h,250);
    SetFontSize(14);          {Указываем размер цифр - 14}
    SetFontStyle(fsBold);       {Устанавливаем стиль шрифта - жирный}
    str(p[i]-p[no],z);
    SetFontColor(clwhite);
    If p[i]>p[no] then TextOut(xi+(h div 10)+20,200,z) else
       If p[i]<p[no] then TextOut(xi+(h div 10)+20,270,z);
    SetBrushColor(clwhite);     {Отменяем цвет закраски области на белый}
    SetFontColor(clRed);      {Устанавливаем цвет шрифта - красный}
    if i mod 2=0 then TextOut(xi+(h div 40),70,v[i])      {Выводим текст под каждым прямоугольником диаграммы}
       else TextOut(xi+(h div 10),40,v[i]);
    xi:=xi+h+10;
    end;
SetFontColor(clblack);
str(round(sar),z);
z:='Средняя высота = '+z;
TextOut(70,270,z);
z:='Наиболее близка к среднему значению высота водопада '+v[no];
TextOut(70,10,z);
 
 
  ss:=0;  u0:=0;
  SetFontSize(16);
  for j:=1 to 4 do ss:=ss+vv[j];            { вычисление суммарной площади }
    for j:=1 to 4 do
   begin
     SetBrushColor(col[j]);
     u:=u0 + round(vv[j]*360/ss)+1;
     Pie(650,500,140,u0,u);         { Рисование сектора }
     u0:=u;
    end;
SetBrushColor(col[1]);
textout(650,400,nz[1]);
textout(650,430,inttostr(vv[1]));
SetBrushColor(col[2]);
textout(550,450,nz[2]);
textout(550,480,inttostr(vv[2]));
SetBrushColor(col[3]);
textout(600,570,nz[3]);
textout(600,600,inttostr(vv[3]));
SetBrushColor(col[4]);
textout(670,510,nz[4]);
textout(690,540,inttostr(vv[4]));
End.

Объяснение кода листинга программы

В данном коде используется библиотека GraphABC для построения круговой диаграммы и гистограммы. Переменные:

  • vv: массив из 4 чисел, представляющих собой сумму площадей секторов диаграммы (строка 2).
  • nz: массив из 4 строк, представляющих названия секторов диаграммы (строка 2).
  • col: массив из 4 чисел, представляющих цвета секторов диаграммы (строка 2).
  • v: массив из 6 чисел, представляющих собой суммы площадей секторов диаграммы (строка 2).
  • p: массив из 6 чисел, представляющих собой значения месяцев (строка 2).
  • r, i, n, m, s, x1, x2, h,xi,k1,no,nomax,u,u0,ss,j: переменные для работы с графиком (строка 2).
  • sar,k: переменные для работы с прямоугольниками диаграммы (строка 2).
  • z: строка для вывода информации о средней высоте и ближайшем к среднему значению высот водопада (строка 2). Код начинается с инициализации оконных параметров и загрузки изображения (строки 3-4). Затем происходит расчет ширины прямоугольников для каждого месяца (строки 5-6). Далее идет цикл, в котором происходит построение круговой диаграммы. Для каждого месяца вычисляется коэффициент масштабирования по оси OY и строятся прямоугольники диаграммы (строки 7-11). Внутри цикла происходит вывод информации о каждом месяце, включая размер суммы площадей секторов и название сектора (строки 12-16). Затем происходит построение гистограммы. Для каждого значения суммы площадей секторов вычисляется цвет закраски прямоугольника и выводится текст с этим значением (строки 17-22). После этого вычисляется средняя высота и выводится информация о ней и ближайшем к среднему значению высот водопаде (строки 23-27). В конце кода выводятся значения суммы площадей секторов для каждого месяца (строки 28-32).

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы