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, являющимся одним из наиболее часто применяемых языков программирования современных персональных и промышленных ЭВМ, входящих в состав АСУТП.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.