Написание программы расчета 512 точек функции в диапазоне [-1.5;2] на языке С++. Построение графика функции, страница 2

     cout <<x<<",  "<<y<<",  "<<i<<'\n';

     if (t==22) {t=0; getch();}

    }

  getch();f.close();

  gr(fn);

}

//Подпрограмма вычисления функции

  double f_y(double x)

  { double y;

    if (x==0) y=400; else

    y=(tanh(x)-0.5)/(0.7*sqrt(fabs(x+sqrt(fabs(x+sqrt(fabs(x)))))))-x+1;

    if (y>2.) y=2.;

    if (y<-10) y=-10;

    return y;

   }

//Подпрограмма вычисления нулей

  double zero (double x1, double x2)

  { double sig(double);

    double f_y(double);

    double x3, y1, y3, eps=0.0000001;

    A:

    x3=(x1+x2)/2.0;

    y1=f_y(x1);

    y3=f_y(x3);

    if (fabs(y3)<eps) return x3;

    else { if (sig(y1)==sig(y3)) x1=x3;

         else x2=x3;

        }

    goto A;

   }

//Подпрограмма определения знака функции

  double sig(double arg)

  { if (arg<0) return 1; else return 0;

   }

Текст программы построений графика (файл gr_lab1.cpp):

//Подпрограмма построения графика

   void gr(char *fn)

 { double zero(double,double);//Подключение подпрограммы нахождения нулей

   int dr = DETECT, mod =1;initgraph (&dr,&mod,"c:\\borlandc\\bgi");

   char zpt;

   fstream f;

   f.open (fn,ios::in);

   double x,y,n=0, max_x=-1e300,min_x=1e300, max_y=-1e300,min_y=1e300;

   while(f.peek() != EOF)

   { f >> x >> zpt >> y; n++;

     if (max_x < x) max_x = x;     if (min_x > x) min_x = x;

     if (max_y < y) max_y = y;     if (min_y > y) min_y = y;

    }

  if (max_y == min_y) {max_y++;min_y--;}

  if (max_x == min_x) {max_x++;min_x--;}

  f.close();

  cout.precision(2);

 //Построение осей

  setcolor(7);

  for (int i=0;i<=10;i++)

  { int s=i*38+20;

    line (50,s,630,s);

    gotoxy(1,i*2.4+2);

    printf("%0.2f",max_y - i*(max_y-min_y)/10);

    line (50+i*58,20,50+i*58,400);

    gotoxy(4+i*7.2,1);printf("%0.2f",min_x+i*(max_x-min_x)/10);

   }

  double k = 380/(max_y - min_y);  double d = 380- max_y * k;

  double kx = 580/(max_x -min_x);  double dx = 630 - max_x * kx;

  setcolor(14);

  if (0 < d && d< 380) { moveto(625,400-(int)d-3);outtext(">");

                   moveto(625,400-(int)d+10);outtext("X");

                   moveto(40,400-(int)d);

                   line(50,400-(int)d,630,400-(int)d);

            if (0 < dx && dx< 580) { moveto((int)dx+2,400-(int)d+2);

                               outtext("0");

                               moveto((int)dx-11,18);

                               outtext("Y^");

                               line((int)dx,20,(int)dx,400);

                              }

                  }

//Построение графика

  setcolor(12);

  f.open (fn,ios::in);

  double t=0;

  while(f.peek() != EOF)

  { f >> x >> zpt >> y;

    int  y1 =(int) 400 - (y*k+d);

    double x=t*580./n;

    int  x1 = (int)x+50;

    if (t == 0) moveto(x1,y1);

    else lineto (x1,y1);

    t++;

   }

  setcolor(11);

  outtextxy(350,200,"Нули функции на диапазоне [-1.5;2]:");

  setcolor(15);

  double xr1=zero(-1.5,0.);

  outtextxy(dx+kx*xr1-3,400-(int)d+7,"X1");

  gotoxy(45,15);printf("X1=%0.7f",xr1);

  circle(dx+kx*xr1,400-(int)d,3);

  double xr2=zero(0.001,1);

  outtextxy(dx+kx*xr2-3,400-(int)d+7,"X2");

  gotoxy(45,16);printf("X2=%0.7f",xr2);

  circle(dx+kx*xr2,400-(int)d,3);

  double xr3=zero(1,2);

  outtextxy(dx+kx*xr3-3,400-(int)d+7,"X3");

  gotoxy(45,17);printf("X3=%0.7f",xr3);

  circle(dx+kx*xr3,400-(int)d,3);

  setcolor(15);

  outtextxy(200,430,"Нажмите любую клавишу для продолжения...");

  getch();f.close();closegraph();

 }


Рисунок 6 – График функции

Вывод:

Результатом данной работы является таблица 512 значений функции y(x) на заданном диапазоне [-1,5;2] записанные в файл my_f.dat; график функции y(x), построенный по точкам, записанным в файл my_f.dat и показанные на графике нули функции y(x). График представлен на рисунке 6.

При проведении данной лабораторной работы получил навыки программирования ПЭВМ на языке С++. В ходе работ научился решать прикладные задачи, изучают особенности  практической реализации известных алгоритмов на языке borland C++ 3.1, являющимся одним из наиболее часто применяемых языков программирования современных персональных и промышленных ЭВМ, входящих в состав АСУТП.