program grid;
uses Graph;
var
x0,y0:integer; { координаты начала координатных осей }
dx,dy:integer; { шаг координатной сетки (в пикселях) }
h,w:integer; { высота и ширина области вывода координатной сетки }
x,y:integer;
lx,ly:real; { метки (оцифровка) линий сетки по X Y }
dlx,dly:real; { шаг меток (оцифровки) линий сетки по X и Y }
st:string; { изображение метки линии сетки }
cross:integer; { счетчик неоцифрованных линий сетки }
dcross:integer;{ количество неоцифрованных линий между оцифрованными }
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
begin
grDriver := VGA;
grMode:=VGAHi;
InitGraph(grDriver, grMode,'d:\tp\bgi');
ErrCode := GraphResult;
if ErrCode <> grOk then Halt(1);
x0:=50; y0:=450; { оси начинаются в точке (40,450) }
dx:=40; dy:=40; { шаг координатной сетки 40 пикселей }
dcross:=3; { помечать линии сетки X через две }
dlx:=0.5; { шаг меток оси 0.5, так как dcross = 3,
то будут выведены метки 1.5, 3, 4.5 и т.д. }
dly:=1; { шаг меток оси Y, метками будут: 1, 2, 3 и т.д. }
h:=300;
w:=400;
lx:=0; { начало координат помечается метками 0 }
ly:=0;
cross:=dcross+1;
Line(x0,y0,x0,y0-h); { ось X }
Line(x0,y0,x0+w,y0); { ось Y }
{ засечки, сетка и оцифровка по оси X }
x:=x0;
repeat
line(x,y0-3,x,y0+3); { засечка }
cross:=cross-1;
if cross = 0 { оцифровка }
then
begin
Str(lx:0:1,st);
OutTextXY(x-8,y0+5,st);
cross:=dcross;
end;
lx:=lx+dlx;
SetLineStyle(DottedLn, 0, NormWidth);
Line(x,y0-3,x,y0-h); { линия сетки }
SetLineStyle(SolidLn, 0, NormWidth);
x:=x+dx;
until (x>x0+w);
{ засечки, сетка и оцифровка по оси Y }
y:=y0;
repeat
line(x0-3,y,x0+3,y); { засечка }
Str(ly:0:1,st);
OutTextXY(x0-40,y,st); { оцифровка }
ly:=ly+dly;
SetLineStyle(DottedLn, 0, NormWidth);
Line(x0+3,y,x0+w,y); { линия сетки }
SetLineStyle(SolidLn, 0, NormWidth);
y:=y-dy;
until (y<y0-h);
Readln;
CloseGraph;
end.