Náhodne generovaný bar graf použiteľný v pascale

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: Programy v Pascale

Program: Bar_graph.pas
Súbor exe: Bar_graph.exe

Náhodne generovaný bargraf použiteľný v pascale. V premenej count je počet stĺpcov, v poli value sú jednotlivé hodnoty.
{ BAR_GRAPH.PAS                                                     }
{ Nahodne generovany bargraf urceny pre pouzitie v programe.        }
{ V premenej count je pocet stlpcov, v poli value jednotlive hodnoty}
{                                                                   }
{ Date  : 05.01.2009                           http://www.trsek.com }
 
program bar_graph;
uses crt, graph;
const MAX_COUNT=30;
 
var
    grDriver: Integer;
    grMode: Integer;
 
    value:array[1..MAX_COUNT] of integer;
    count:integer;
    i,x,y:integer;
    height: real;
    stepx: integer;
    stepy: real;
    max: integer;
 
procedure OpenGraph;
var
  ErrCode: Integer;
begin
  grDriver := Detect;
  InitGraph(grDriver, grMode,'');
  ErrCode := GraphResult;
 
  if (ErrCode <> grOk) then begin
    Writeln('Error ', GraphErrorMsg(ErrCode));
    halt(1);
  end;
 
end;
 
 
function MakeAxis(x1,x2:integer; y1,y2:integer):real;
var maxx,maxy: integer;
    step: real;
begin
  maxx:=GetMaxX;
  maxy:=GetMaxY;
 
  line(1, maxy div 2, maxx, maxy div 2);
  line(20, 1, 20, maxy);
 
  step:=((maxy-20)/2)/(y2-y1);
  MakeAxis:=step;
end;
 
 
function ToStr(i:integer):string;
var s:string;
begin
  Str(i,s);
  ToStr:=s;
end;
 
 
begin
  { defautl value }
  write('Count (max=30) = ');
  readln(count);
 
  randomize;
  for i:=1 to count do
    value[i]:=random(100);
 
  { for test
  count:=5;
  value[1]:=81;
  value[2]:=14;
  value[3]:=91;
  value[4]:=38;
  value[5]:=72;
  }
 
  { found maximum }
  max:=value[1];
  for i:=1 to count do
    if( max<value[i] )then
        max:=value[i];
 
 
  OpenGraph;
  stepy:=MakeAxis(0, count, 0, max);
  stepx:=(GetMaxX-40) div count;
  setfillstyle(XHatchFill, Red);
 
  { put bar }
  for i:=1 to count do begin
    bar3d(20+((i-1)*stepx), (GetMaxY div 2),
          20+(    i*stepx), (GetMaxY div 2) - round(stepy*value[i]),
          0, TopOn);
 
    Outtextxy(20+((i-1)*stepx)+(stepx div 2), GetMaxY div 2+20,
              ToStr(value[i]));
  end;
 
  Readln;
  CloseGraph;
end.