Чтобы продемонстрировать некоторые из графических возможностей языка Паскаль, напишем программу, рисующую график функции cos2x на отрезке [0,6p].
USES Graph;
CONST ScreenColor = DarkGray; {цвет экрана}
LineColor = Yellow; {цвет кривой}
TextColor = White; {цвет подписей}
AxisColor = LightCyan; {цвет координатных осей}
CONST n = 200; {количество отрезков в графике}
LeftBlank = 100; {отступ слева}
RightBlank = 100; {отступ справа}
TopBlank = 100; {отступ сверху}
BottomBlank = 60 ; {отступ снизу}
TicSize = 5; {размер делений на осях}
PowerSize = 3; {размер цифры 2 (показатель степени)}
TicsNumY = 10; {количество делений на оси Y}
TicsNumX = 6; {количество делений на оси Y}
CONST x1=6*Pi;
FUNCTION f(x:REAL):Real; BEGIN f:=Sqr(Cos(x)); END;
VAR GrDriver,GrMode,Lx,Ly,Px,Py : Integer;
i : Word;
s : STRING;
Mx,My,x : Real;
BEGIN {инициализируем графический режим}
GrDriver:=DETECT; InitGraph(GrDriver,GrMode,'');
{закрасим экран фоновым цветом}
SetFillStyle(1,ScreenColor); Bar(0,0,GetMaxX,GetMaxY);
{вычислим длины осей и положение начала координат}
Lx:=GetMaxX+1-LeftBlank-RightBlank;
Ly:=GetMaxY+1-TopBlank-BottomBlank;
Px:=LeftBlank; Py:=GetMaxY-BottomBlank;
{нарисуем оси}
SetColor(AxisColor);
MoveTo(LeftBlank,TopBlank-1); LineRel(0,Ly); LineRel(Lx,0);
{оцифруем ось X}
SetTextJustify(CenterText,TopText);
FOR i:=1 TO TicsNumX DO BEGIN
MoveTo(LeftBlank+i*Lx DIV TicsNumX,Py); LineRel(0,TicSize);
IF i=1 THEN s:='' ELSE Str(i,s); MoveRel(0,2); OutText(s+'Pi');
END;
{оцифруем ось Y}
SetTextJustify(RightText,CenterText);
FOR i:=1 TO TicsNumY DO BEGIN
MoveTo(Px,Py-i*Ly DIV TicsNumY); LineRel(-TicSize,0);
Str(i/10:3:1,s); MoveRel(-2,0); OutText(s);
END;
{выведем пояснительный текст}
SetTextJustify(CenterText,CenterText); SetColor(TextColor);
MoveTo(LeftBlank+Lx DIV 2,TopBlank DIV 2);
OutText('график функции Cos(x)');
{выведем показатель степени}
MoveRel(TextWidth('график функции Cos(x)') DIV 2-TextWidth('(x)'),TextHeight('s'));
SetTextStyle(SmallFont,0,PowerSize); OutText('2');
{вычислим масштабы по X и Y}
Mx:=Lx/x1; My:=Ly;
{нарисуем график}
SetLineStyle(0,0,3); SetColor(LineColor); MoveTo(Px,Py-Ly);
FOR i:=1 TO n DO BEGIN
x:=i*x1/n; LineTo(Px+Round(Mx*x),Py-Round(My*f(x)));
END;
{сделаем задержку}
READLN;
{перейдем в текстовый режим}
CloseGraph;
END.
Это неплохая программа, но автор хотел бы предостеречь от ее бездумного использования как эталона во всех случаях. Она использует априорную информацию о виде изображаемой функции: минимальное значение функции = 0, максимальное значение функции = 1, начало координат находится в точке пересечения осей и т.п. В ваших программах все может быть не так.