Программа


USES Crt,Graph;                   { Подключение модулей }
CONST PathToDriver='';            { Путь к графическому драйверу }
TYPE Func=Function(X:real):real;  { Тип функция}
VAR Exit:boolean;                 { Флаг выхода из программы }
    GraphDriver:Integer;          { Графический драйвер }
    GraphMode:Integer;            { Графический режим }
    ScaleY:real;                  { Масштаб по Y }
FUNCTION F(X:real):real;far;          { Отображаемая функция }
  Begin
    F:=Sqrt(4.5-1.5*X)
  End;
FUNCTION F2(X:real):real;far;          { Отображаемая функция }
  Begin
    F2:=-F(X)
  End;
FUNCTION F3(X:real):real;far;          { Отображаемая функция }
  Begin
    F3:=X*X-1.2*X-1
  End;
PROCEDURE OutGraph (Left,Right:real;F:Func;var ScaleY:real); { Процедура вывода графика }
  Var ScaleX:real; { Масштаб X }
      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, то переопределение масштаба }
    if ScaleY=0 then
      begin
{ Поиск максимального и минимального значений функции на выводимом промежутке: }
        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 }
      end;
    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;
BEGIN
  Exit:=FALSE;          { Сброс флага выхода }
  GraphDriver:=Detect;  { Автоматическое оперделение драйвера }
  GraphMode:=0;         { Задание графического режима }
  InitGraph(GraphDriver,GraphMode,PathToDriver); { Инициалиэация графики }
  ScaleY:=0.1;
  OutGraph(-5,2,F,ScaleY);
  OutGraph(-5,2,F2,ScaleY);
  OutGraph(-5,2,F3,ScaleY);
  ReadKey;
  CloseGraph           { Закрытие графического режима }
END.

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