Программа


USES Crt,Graph;                   { Подключение модулей }
CONST PathToDriver='';            { Путь к графическому драйверу }
TYPE Func=Function(X:real):real;  { Тип функция}
VAR GraphDriver:Integer;          { Графический драйвер }
    GraphMode:Integer;            { Графический режим }
FUNCTION F(X:real):real;far;          { Отображаемая функция }
  Begin
    F:=5*Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(Sin(X*X
    ))))))))))))))))))))))))))){-X*X/2}
  End;
PROCEDURE OutGraph (Left,Right:real;F:Func); { Процедура вывода графика }
  Var ScaleX,ScaleY:real; { Масштабы по осям X и Y }
      MaxY,MinY:real;     { Максимальное и минимальное значения координаты Y }
      i:integer;          { Счетчик }
      BufY:real;  { Буферная переменная для сохранения значения координаты Y }
      OXy,OYx:real; { Y-координата оси OX, X-соордината оси OY }
  Begin
    SetColor(White);  { Установка белого цвета }
    Rectangle(0,0,GetMaxX,GetMaxY); { Прорисовка рамки }
    ScaleX:=(Right-Left)/(GetMaxX*8)*10; {Вычисление масштаба по оси X }
    if ScaleX=0 then ScaleX:=1;
                { Если масштаб по оси X равен 0, то переопределение масштаба }
{ Поиск максимального и минимального значений функции на выводимом промежутке: }
    MaxY:=F(Left);  { Начальное определение максимума }
    MinY:=MaxY;     { Начальное определение минимума }
    for i:=1 to Round(GetMaxX*8/10) do
      begin   { Цикл просмотра значений функции на выводимом промежутке }
        BufY:=F(Left+i*ScaleX);  { Вычисление функции в текущей точке }
        if BufY>MaxY { Если значение функции перевосходит максимальное }
          then MaxY:=BufY { то переопределение макс. значения функции }
          else if BufY<MinY then { Иначе, если значение функции меньше
          минимального, то переопределение минимального значения функции }
                               MinY:=BufY
      end;
    ScaleY:=(MaxY-MinY)/(GetMaxY*8)*10;  { Вычисление масштаба по  оси Y }
    if ScaleY=0 then ScaleY:=1;
                { Если масштаб по оси Y равен 0, то переопределение масштаба }
    MoveTo(Round(GetMaxX/10),Round(GetMaxY*9/10-(F(Left)-MinY)/ScaleY));
                            { Помещение указателя в первую точку графика }
    PutPixel(Round(GetMaxX/10),Round(GetMaxY*9/10-(F(Left)-MinY)/ScaleY),
             White);                   { Прорисовка первой точки графика }
    for i:=1 to Round(GetMaxX*8/10) do { Цикл прорисовки графика }
      LineTo(Round(i+GetMaxX/10),
             Round(GetMaxY*9/10-(F(Left+i*ScaleX)-MinY)/ScaleY));
                         { Прорисовка линии от предыдущей точки к текущей }
    OXy:=GetMaxY*9/10+MinY/ScaleY;   { Вычисление Y-координаты оси OX }
    { Если Y-координата оси OX выходит за границу вывода, то переопределение
      Y-координаты и определение типа линии: }
    if OXy>GetMaxY*19/20
      then begin
             OXy:=GetMaxY*19/20; { Преопределение Y-координаты }
             SetLineStyle(DashedLn,0,NormWidth)  { Определение типа линии }
           end
      else if OXy<GetMaxY/20
             then begin
                    OXy:=GetMaxY/20; { Преопределение Y-координаты }
                    SetLineStyle(DashedLn,0,NormWidth)
                                                    { Определение типа линии }
                  end
             else SetLineStyle(SolidLn,0,NormWidth);{ Определение типа линии }
    Line(Round(GetMaxX/20),Round(OXy),Round(GetMaxX*19/20),Round(OXy));
                                                   { Прорисовка оси OX }
    { Прорисовка стрелки на оси OX: }
    SetLineStyle(SolidLn,0,NormWidth);  { Определение типа линии }
    Line(Round(GetMaxX*19/20),Round(OXy),
         Round(GetMaxX*18.5/20),Round(OXy+GetMaxY/90));
    Line(Round(GetMaxX*19/20),Round(OXy),
         Round(GetMaxX*18.5/20),Round(OXy-GetMaxY/90));
    OYx:=GetMaxX/10-Left/ScaleX;  { Вычисление X-координаты оси OY }
    { Если X-координата оси OY выходит за границу вывода, то переопределение }
    { X-координаты и определение типа линии: }
    if OYx>GetMaxX*19/20
      then begin
             OYx:=GetMaxX*19/20; { Преопределение Y-координаты }
             SetLineStyle(DashedLn,0,NormWidth) { Определение типа линии }
           end
      else if OYx<GetMaxX/20
             then begin
                    OYx:=GetMaxX/20; { Преопределение Y-координаты }
                    SetLineStyle(DashedLn,0,NormWidth)
                                                    { Определение типа линии }
                  end
        else SetLineStyle(SolidLn,0,NormWidth);{ Определение типа линии }
    Line(Round(OYx),Round(GetMaxY/20),Round(OYx),Round(GetMaxY*19/20));
                                                         { Прорисовка оси OY }
    { Прорисовка стрелки на оси OY: }
    SetLineStyle(SolidLn,0,NormWidth);  { Определение типа линии }
    Line(Round(OYx),Round(GetMaxY/20),
         Round(OYx+GetMaxX/120),Round(GetMaxY/20+GetMaxY*9/160));
    Line(Round(OYx),Round(GetMaxY/20),
         Round(OYx-GetMaxX/120),Round(GetMaxY/20+GetMaxY*9/160))
  End;
Var Ch:char;
BEGIN
  GraphDriver:=Detect;  { Автоматическое оперделение драйвера }
  GraphMode:=0;         { Задание графического режима }
  InitGraph(GraphDriver,GraphMode,PathToDriver); { Инициалиэация графики }
  OutGraph(-5,5,F);
  Ch:=ReadKey;
  CloseGraph           { Закрытие графического режима }
END.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию