Пусть имеется последовательность положительных действительных чисел a1, a2, ..., an, обозначающая результаты каких-либо измерений (например, высоты вершин гор над уровнем моря, площади государств, средние оценки учеников класса и т.д.). Требуется построить визуализированное представление этой последовательности с целью сравнения полученных результатов. В таких случаях используют диаграммы. 1. Круговые диаграммы В круговой диаграмме каждому элементу последовательности соответствует сектор, градусная мера которого пропорциональна величине элемента. Для построения круговой диаграммы необходимо просуммировать все элементы последовательности, после чего найти отношения каждого из элементов к полученной сумме (так будет вычислено, какую часть круга нужно поставить в соответствие данной величине, — т.е. рассчитываются доли круга, приходящиеся на данную величину, если весь круг принять равным 1). Все эти расчеты можно представить формулами . Затем эти относительные величины переводятся в градусы:, после чего можно приступать к построению диаграммы. Алгоритм в этом случае будет следующим: вычислить сумму элементов последовательности; найти величину сектора, соответствующего каждой величине; построить все секторы в графическом режиме (в результате должен получиться полный круг). Желательно каждый сектор строить своим цветом, или использовать разную штриховку, если секторы одноцветные. Программа построения круговой диаграммы по этому алгоритму представлена ниже: {Круговая диаграмма (с) А.П. Шестаков, 2001} program Kr_D; Uses Graph; Var a, S : Real; I : Byte; G, M : Integer; Xc, Yc, R : Integer; {координаты центра круга и его радиус} F : Text; {файл содержит данные для построения диаграммы} Alpha : Integer; {угол, соответствующий очередной величине} SAngle : Integer; Stroka : String; Begin Assign(F, '1.dat'); Reset(F); S := 0; {сумма элементов последовательности} While Not Eof(F) Do begin Readln(F, a); S := S + a end; reset(f); G := detect; M := 0; initgraph(G, M, ''); Xc := GetMaxX Div 2; Yc := GetMaxY Div 2; R := 100; SAngle := 0; i := 1; While Not Eof(f) Do begin Readln(F, a); Alpha := round(A / S * 360); {вычислениеугла} setcolor(i mod 16 + 1); setfillstyle(1, i mod 16 + 1); {построение сектора, соответствующего величине} sector(Xc, Yc, SAngle, SAngle + Alpha, R, R); SAngle := SAngle + Alpha; i:= i + 1; {укажем, какому цвету какая величина соответствует} bar(Xc+200, Yc-250+(i-1)*20, Xc+220, Yc-250+(i-1)*20+15); str(a:8:2, stroka); outtextxy(Xc + 230, Yc — 250 + 5 + (i — 1) * 20, stroka) end; readln; close(F); closegraph End. Результат работы программы для указанного на рисунке набора чисел: 2. Столбчатые диаграммы Для построения диаграммы выделим на экране прямоугольную область с координатами соответственно верхнего левого угла (Xlv, Ylv) и правого нижнего (Xpn, Ypn). Высота столбца диаграммы, соответствующего максимальному элементу последовательности, будет совпадать с высотой прямоугольника. Ширина столбца будет зависеть от количества элементов последовательности: чем больше компонент, тем меньшей будет ширина. Таким образом, для построения диаграммы нужно определить количество компонентов последовательности и максимальный элемент последовательности. Высота vi очередного столбца диаграммы на экране будет определяться формулой где xmax — максимальный элемент последовательности, xi — очередной элемент последовательности. Алгоритм построения диаграммы следующий: определить количество элементов последовательности и её максимальный элемент; согласно указанной формуле построить столбцы диаграммы. Их ширина на экране может быть рассчитана по формуле где n — количество элементов последовательности. Программа построения столбчатой диаграммы по этому алгоритму представлена ниже: {Столбчатая диаграмма (с) А.П. Шестаков, 2001} program Stol_D; Uses Graph; Var a, xmax : Real; I, n : Byte; G, M : Integer; F : Text; {файл содержит данные для построения диаграммы} Stroka : String; Xlv, Ylv, Xpn, Ypn : Integer; {координаты окна вывода диаграммы} Begin Assign(F, '1.dat'); Reset(F); if not eof(f) then begin readln(f, xmax); n:= 1 end else n := 0; While Not Eof(F) Do begin Readln(F, a); if a > xmax then xmax := a; n := n + 1 end; reset(f); G := detect; M := 0; initgraph(G, M, ''); Xlv := 50; Ylv := 50; Xpn:= GetMaxX-100; Ypn:= GetMaxY-50; i:= 0; {номер столбца} While Not Eof(f) Do begin Readln(F, a); setcolor(i mod 16 + 1); setfillstyle(1, i mod 16 + 1); {очереднойстолбец} bar(round(Xlv+i*(Xpn-Xlv)/n), Ypn, round(Xlv+(i+1)*(Xpn-Xlv)/n), round(Ypn-(Ypn-Ylv)/xmax*a)); i:= i + 1; {укажем, какому цвету какая величина соответствует} bar(getMaxx-70, 50+(i-1)*20, getMaxx-50, 50+(i-1)*20+15); str(a:8:2, stroka); outtextxy(getMaxx-40, 50+(i-1)*20+8, stroka); end; readln; close(F); closegraph End. Результат работы программы для указанного на рисунке набора чисел: Для лучшего восприятия диаграммы было бы целесообразно построить вертикальную ось с разметкой по ней, что в данной программе отсутствует.
Рефераты по информатикеПусть имеется последовательность положительных действительных чисел a1, a2, ..., an, обозначающая результаты каких-либо измерений (например, высоты
Оценок: 322 (Средняя 5 из 5)
Специалисты RetsCorp работают в digital-сфере более 7 лет. За это время мы разработали более 500+ успешных проектов. Основываясь на своем опыте и знании рынка, мы с уверенностью можем сказать, что будет работать, а что — нет. Заказывая создание лендинга для бизнеса в нашей студии, вы получаете работающие решения, необходимые именно вашему бизнесу.
Сотрудничая с нами, вы будете не клиентом, а нашим партнером. Благодаря этому мы будем развивать ваш бизнес как собственный. Мы так же как и вы заинтересованы в успехе проекта, поскольку ваша успешность будет нашей рекламой.