#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

//const a=-0.1,b=0.4;
const a=0,b=25;
const double eps=0.001;

double getnum(int x,int y)
{
char Str[20],*s,ch;
int l = 0;
Str[0]=0;
do{
  ch=getch();
  setcolor(0);
  outtextxy(x,y,Str);
  if(ch!=8){Str[l]=ch;l++;}else{l--;Str[l]=0;}
  Str[l+1]=0;
  setcolor(15);
  outtextxy(x,y,Str);
}while (ch != 13);
return(atof(Str));
}

double Y(double X)
{return 5*pow((X-10),2);}


double Gold(void)
{
double L,W1,W2,G,XR,XL;
XR=b;XL=a;L=b-a;
G=eps/L;
int N=1;
double T=0.618034;
do{
//L=XR-XL;
W1=XR-L*pow(T,N);
W2=XL+L*pow(T,N);
if(Y(W1)<Y(W2)){XR=W2;}
else
if(Y(W1)>Y(W2)){XL=W1;}
N=N+1;
}
while(fabs(XR-XL)>G);
N=N-1;
return (XR+XL)/2;
}


int main(void)
{
	int gdriver = DETECT, gmode, errorcode;
	int midx, midy, maxx, maxy;

	initgraph(&gdriver, &gmode, "");

	errorcode = graphresult();
	if (errorcode != grOk)
	{
		printf("Graphics error: %s\n", grapherrormsg(errorcode));
		printf("Press any key to halt:");
		getch();
		exit(1);
	}

	midx = getmaxx() / 2;maxx = getmaxx();
	midy = getmaxy() / 2;maxy = getmaxy();

	settextjustify(0, 1);
	settextstyle(0, 0, 1);


  line(0,midy,maxx,midy);
  line(maxx-19,midy+2,maxx,midy);
  line(maxx-19,midy-2,maxx,midy);
  line(1,midy*1.2,1,midy*0.1);
  line(1-2,midy*0.1+12,1,midy*0.1);
  line(1+2,midy*0.1+12,1,midy*0.1);
  outtextxy(12,midy*0.12,"Y");
  outtextxy(maxx*0.98,maxy*0.45,"X");

	double x,y;
	for(x=0;x<maxx;x++)
	{y=midy-Y(x/midx*20)/10;
	 if(y>0)
	 if(x/midx*20<=25)putpixel(x,y,9);
	 else putpixel(x,y,1);}
	 line(midx*3/2,midy+1,midx*3/2,midy-1);
	 line(midx/2,midy+1,midx/2,midy-1);
	 line(0,midy-20,2,midy-20);
	char *s;
	sprintf(s,"Результат метода: %g",Gold());
	outtextxy(midx*0.2,midy*1.36,s);

	getch();
	closegraph();
	return 0;
}

