Реферат: Построение диаграмм

Пустьимеется последовательность положительных действительных чисел 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 Div2;

    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.

Результатработы программы для указанного на рисунке набора чисел:

/>

Длялучшего восприятия диаграммы было бы целесообразно построить вертикальную ось сразметкой по ней, что в данной программе отсутствует.

3. Линейные диаграммы

Припостроении линейных диаграмм каждой величине соответствует точка, расположеннаяна определённой высоте относительно начала отсчёта (высота рассчитывается также, как и при построении столбчатых диаграмм), все точки соединяются линиями. Врезультате получается ломаная. Такого рода диаграммы чаще всего строя в техслучаях, когда необходимо визуализировать динамику изменения величин.

Программааналогична программе построения столбчатых диаграмм и приведена ниже.

{Линейнаядиаграмма (с) А.П. Шестаков, 2001}

program Stol_D;

Uses Graph;

Var a, xmax: Real; I, n: Byte; G, M: Integer;

    F: Text;{файл содержит данные для построения диаграммы}

   Stroka: String;Yn, Yk: Integer;

    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;

    line(xlv, ylv, xlv, ypn); line(xlv, ypn, xpn, ypn);

    i:= 0;{номер точки}

   readln(f, a);

    Yn := round(Ypn-(Ypn-Ylv)/xmax*a);

        str(a:5:1, stroka);

        outtextxy(round(Xlv+i*(Xpn-Xlv)/n)-20, Ypn+20, stroka);

    While Not Eof(f) Do

    begin

        setcolor(i mod 16 + 1); setfillstyle(1, i mod 16 + 1);

        {укажем,какому цвету какая величина соответствует}

       Readln(F, a);

        Yk := round(Ypn-(Ypn-Ylv)/xmax*a);

        {очередная линия}

   line(round(Xlv+i*(Xpn-Xlv)/n), Yn,

            round(Xlv+(i+1)*(Xpn-Xlv)/n), Yk);

        i:= i + 1;

        str(a:5:1, stroka);

        outtextxy(round(Xlv+i*(Xpn-Xlv)/n)-20, Ypn+20, stroka);

        Yn :=Yk; {запоминаем положение очередной точки}

   end;

    readln; close(F); closegraph

End.

Результатработы программы для указанного на рисунке набора чисел:

/>

Всепредставленные здесь программы могут быть объединены в одну программу с общимменю, где пользователю предоставляется возможность выбрать вид диаграммы.

Список литературы

Дляподготовки данной работы были использованы материалы с сайта www.comp-science.narod.ru/

еще рефераты
Еще работы по информатике, программированию