Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Yuri Pravotorov                      2:455/15       10 Jun 2003  15:17:44
 To : Andrey Malov
 Subject : Построение гистограмм
 -------------------------------------------------------------------------------- 
 
 now: 15:17 +0300, 10-Jun-2003
 
  = In a msg of <14:06, 10-Jun-2003>, Andrey Malov
  = writes to All about "Построение гистограмм"
 
 [...]
 
 AM> Помогите, пожалуйста, найти алгоритм построения гистограммы.
 
 >== Cut bard.pas ==<
 
 Program BarDiagram;  { (c) yvp, 1997 }
   Uses
     Graph;
   Const
     GrDriver: integer = Detect;
   Type
     Mass = array [0..255] of real;
   Var
     GrMode: integer;
     X: Mass;
 
   Procedure GetRNDMass(N: byte; Var Z: Mass);
     Var
       i: byte;
     Begin { GetRNDMass }
       Z[0] := N;
         for i := 1 to N do
           Z[i] := sqrt(2*ln(1/Random))*cos(2*pi*Random);
     End;  { GetRNDMass }
 
   Procedure DrawBarDiagram(u,v, l,h: word; X: Mass);
     Var
       A, B: real;
       g, s, t, y0: word;
       i, j, k, m, n: byte;
       P, R: Mass;
     Begin { DrawBarDiagram }
       n := round(X[0]);
       k := 3;
         case n of
           5..10:    k := 4;
           11..21:   k := 5;
           22..45:   k := 6;
           46..92:   k := 7;
           93..186:  k := 8;
           187..255: k := 9;
         end;
         for i := 1 to n-1 do
           begin
             A := X[i];
             m := i;
               for j := i+1 to n do
                 if A > X[j] then
                   begin
                     A := X[j];
                     m := j;
                   end;
             X[m] := X[i];
             X[i] := A;
           end;
       A := (X[n]-X[1])/(k+1);
       R[0] := X[1];
       i := 1;     B := 0;
         for j := 1 to k do
           begin
             P[j] := 0;
             R[j] := R[j-1]+A;
               if i < n then
                 while X[i] <= R[j] do
                   begin
                     P[j] := P[j]+1;
                     i := i+1;
                   end;
             P[j] := P[j]/(n+1);
               if B < P[j] then B := P[j];
           end;
       SetColor(Cyan);          Rectangle(u,v, u+l,v+h);
       s := round(0.95*l/k);    g := u+round(0.025*l+0.125*s);
       t := round(0.95*h/B);    y0 := v+round(0.975*h);
         for j := 1 to k do
           begin
             SetFillStyle(InterleaveFill{=9}, 6+j);
             Bar(g,y0, g+round(0.75*s), y0-round(P[j]*t));
             g := g+s;
           end;
     End;  { DrawBarDiagram }
 
   Begin { BarDiagram }
     Randomize;
     GetRNDMass(255,X);
 
     InitGraph(GrDriver, GrMode, '');
     DrawBarDiagram(0,0,GetMaxX,GetMaxY, X);
     Readln;
     CloseGraph;
   End.  { BarDiagram }
 
 >== Cut bard.pas ==<
 
 писано оч-чень давно в обучающих целях
 WBR, Yuri
 e-mail: yvp[@]newmail.ru
 --- GoldED+/W32 1.1.5-030227 WinNT 5.1.2600 i686
  * Origin: Sonic Lab ]i[ (2:455/15)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Построение гистограмм   Andrey Malov   10 Jun 2003 14:06:38 
 Построение гистограмм   Yuri Pravotorov   10 Jun 2003 15:17:44 
 Re: Построение гистограмм   Andrey Malov   10 Jun 2003 18:34:00 
 Re: Построение гистограмм   Evgenij Masherov   10 Jun 2003 21:21:03 
 Построение гистограмм   Yuri Pravotorov   11 Jun 2003 13:10:07 
Архивное /ru.algorithms/102253ee5cdad.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional