|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/102253ee5cdad.html, оценка из 5, голосов 10
|