Построение круговой диаграммы и гистограммы - 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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д