#include
#include
#include
#include 
#include 
#include 
#include 
#include 

#define XMIN 10
#define XMAX 380
#define YMIN 10
#define YMAX 320

void graph (float *,float *,int ,int *,int *,int *,float *,);
void mashtab (float * ,float *,float * ,int * , int *);
minless(float);
float ratg (float, float);
float ratl (float, float);
float alg (float);
void myfont(int ,int ,float ,unsigned char * ,int ,int );
void fnt(int ,int ,int );
unsigned char v_m();

void graph (xx,yy,nlines,npoints,col,coordgr,bound,title,names)
	float bound[4];
	int nlines,* npoints,* col,coordgr[4];
	float *xx, *yy;
	unsigned char title[2][20],* names;
{
/*
 xx,yy -массивы коодинат
 nlines -количество линий
 npoints - массив с количеством точек по линиям
 col - массив цветов
 coordgr - массив кооpдинат поля
 title[2][20] - наименование осей
 names - названия кpивых
 */
 int xm,ym;
 struct xycoord view;
float xmax,ymax,xmin,ymin,gstepx,gstepy,l,ll,kx,ky;
int nx,ny,j,i,ii,npmax=0,npx,npxx,npyy,npp,nppn;
char point[4][2][9]={
-2,-1, 0, 1, 2, 0, 0, 0, 0,      0, 0, 2, 0, 0,-2,-1, 1, 0,
-2,-1, 2, 1, 2,-2,-1, 1, 0,     -2,-1,-2, 1, 2, 2, 1,-1, 0,
-2,-1, 0, 1, 2, 1, 0,-1, 0,      0,-1,-2,-1, 0, 1, 2, 1, 0,
-1, 0, 1, 1, 1, 0,-1,-1, 0,     -1,-1,-1, 0, 1, 1, 1, 0, 0    };

/* так как из фортрана получаем строки без \0*/
// попробуем определить, в каком режиме мы находимся
  v_m(&xm,&ym);
//  xm=640;
//  ym=480;
  if (strlen(title[0])>20)
  {
   for (i=18;title[0][i]==' ';i--);
   title[0][i+1]='\0';
  }
  if (strlen(title[1])>20)
  {
   for (i=18;title[1][i]==' ';i--);
   title[1][i+1]='\0';
  }
  for (i=0;inpmax) npmax=npoints[i];

      if (bound[1]<=bound[0] | bound[2]>=bound[3])
	 {
	  xmax=xx[0];
	  xmin=xx[0];
	  ymax=yy[0];
	  ymin=yy[0];
	  for(j=0;j=xx[npx+i])
			xmin=xx[npx+i];
	      if (ymax<=yy[npx+i])
			ymax=yy[npx+i];
	      else
		 if (ymin>=yy[npx+i])
			ymin=yy[npx+i];
	    }
          }
	 }
      else
	 {
	  xmin=bound[0];
	  xmax=bound[1];
	  ymin=bound[2];
	  ymax=bound[3];
	 }

/* определение масштаба по обоим осям*/
     if(xmax==xmin) exit(1);
     mashtab(&xmax, &xmin, &gstepx, &nx, &npxx);
     mashtab(&ymax, &ymin, &gstepy, &ny, &npyy);

     _setcolor(3);
/*    вертикальная сетка*/

	l=(xmax-xmin)/nx;
	ll=(coordgr[2]-coordgr[0]-30.)/nx;
	_setviewport(0,0,xm-1,ym-1);
	_setlinestyle(0xF0F0);
	myfont( coordgr[2]-9,coordgr[3]-7,xmax,"",col[0],npxx);
	for(i=0;i5 && npoints[j]<10) npp=npoints[j]/2;
    else   if ( npoints[j]<30) npp=npoints[j]/5;
    else   if ( npoints[j]<100) npp=npoints[j]/10;
    else   if ( npoints[j]<150) npp=npoints[j]/15;
	   _moveto_w (xx[npx],yy[npx]);
	   _setcolor(col[j]);
	   for(i =nppn=1;inpp)
	     {
	      view = _getcurrentposition();
	      nppn=0;
	      for (ii=0;ii<9;ii++)
	      _setpixel_w(xx[npx+i]+kx*point[j][0][ii],yy[npx+i]+ky*point[j][1][ii]);
	     }
  */
	   }
// А теперь сбоку что есть что
//    _moveto(coordgr[2]-coordgr[0]-60,coordgr[3]-coordgr[1]-30-(coordgr[3]-coordgr[1]-15)/20*j);
//    _lineto(coordgr[2]-coordgr[0]-50,coordgr[3]-coordgr[1]-30-(coordgr[3]-coordgr[1]-15)/20*j);
//  for (ii=0;ii<9;ii++)
//    _setpixel(coordgr[2]-coordgr[0]-50+point[j][0][ii],coordgr[3]-coordgr[1]-30-(coordgr[3]-coordgr[1]-15)/20*j+point[j][1][ii]);
//          _lineto(coordgr[2]-coordgr[0]-40,coordgr[3]-coordgr[1]-30-(coordgr[3]-coordgr[1]-15)/20*j);
//    fnt(j,coordgr[2]-coordgr[0]-39,coordgr[3]-coordgr[1]-33-(coordgr[3]-coordgr[1]-15)/20*j);
 }
	_setviewport(0,0,xm-1,xm-1);
}

float ratg (float x, float n)
{
 return ( (int)(x / n + .9999999) * n);
}

float ratl (float x, float n)
{
 return (minless(x/n) * n);
}

float alg (float x)
{
	     if (x==0)
		return 0;
	     else
		return(log10(x));
}

void mashtab (xmax, xmin, gstep, n, n_d)
/*        'допустимые значения шагов*/
float * xmax,* xmin, * gstep;
int * n, *n_d;
{
 float h[4],delta,delta1;
 int k,i,numb,n_l[4];
	h[0] = 1;      n_l[0]=1;
	h[1] = .5;     n_l[1]=2;
	h[2] = .25;    n_l[2]=3;
	h[3] = .2;     n_l[3]=2;
	delta = * xmax - * xmin;
	k = minless(alg(delta));
//printf("\nmashtab\nxmin=%f, xmax=%f",*xmin,*xmax);
//printf("delta=%f,pow(10,k)=%f",delta,pow(10,k));
//printf("\ndelta/pow(10,k)=%f",delta/pow(10,k));
	delta1 = delta /pow(10, k) + 1.;
//printf("\ndelta1=%.20f",delta1);
	delta1=(int)delta1;
	if (delta1>=5)
	{
	 * gstep = 1;
	 * n_d=2;
	}
	else
	   for (i = 1;i< 4;i++)
	   {
	     numb = (int)(delta1 / h[i] + .999999);
	     if (numb>11) goto m1;
	     if (numb>5)
	     {
		*gstep = h[i];
		*n_d = n_l[i]+1;
		goto m1;
	     }
	   }
m1:
/*        'xmin = ближайшему меньшему кратному шагу*/
	 * gstep = * gstep * pow(10,k);

	 * xmin = ratl(*xmin, *gstep);
	 * xmax = ratg(*xmax, *gstep);
	 * n = (int)( (* xmax - * xmin) / * gstep+.5);
//printf("\nxmin=%f, xmax=%f, gstep=%f, n=%d, n_p=%d",*xmin,*xmax,*gstep,*n,*n_d);
}

minless(float x)
{
	if ( x<=0 & (int)x!=x )
		return(int)(x-1.);
	else
		return(int)(x);
}
void myfont( int xc,int yc,float n,unsigned char * text,int col,int np)
{
    unsigned int i,j;
    unsigned char numbuf[20];
    float a;
    char c[10];
    if (np<20)
    {
     gcvt( n,np, numbuf );/* это число */
     np=(np>strlen(numbuf))? strlen(numbuf): np;
     for (i=0;i14 ) return;
     _moveto(x+fntx[n][1],y+fnty[n][0]);
     for(i=1;i 0 )
    {
     strcpy( list, "t'Courier'h10w8b" );
     if( _setfont( list ) > 0 )
     {
      int x=XMAX+20,y;
	    //_setgtextvector( 1, 0 );
	    _moveto( x, 10 );
      _outgtext("REGIONS:"  );

	    _moveto( x, 25 );
	    _outgtext("1 - critical,"  );

	    _moveto( x, 50 );
      _outgtext("2 - U-type beta distribution,"  );

      _moveto( x, 75 );
      _outgtext("3 - J-type beta distribution,"  );

      _moveto( x, 100 );
      _outgtext("4 - beta distribution,"  );

      _moveto( x, 125 );
      _outgtext("DISTRIBUTIONS:"  );

      _moveto( x, 150 );
      _outgtext("5 - even distribution,"  );

      _moveto( x, 175 );
      _outgtext("6 - normal distribution,"  );

      _moveto( x, 200 );
      _outgtext("7 - exponential distribution"  );

      _moveto( x, 225 );
      _outgtext("8 - gamma distribution,"  );

      _moveto( x, 250 );
      _outgtext("9 - logarithm normal distribution,"  );

      _moveto( x, 275 );
      _outgtext("10 - STUDENT distribution"  );

     }
    }

 _setcolor(7);
 _moveto(322,85);
 _outgtext("1");
 _moveto(219,109);
 _outgtext("2");
 _moveto(321,192);
 _outgtext("3");
 _moveto(137,132);
 _outgtext("4");
 _moveto(40,63);
 _lineto(70,25);
 _outgtext("5");
  _moveto(40,98);
 _lineto(52,133);
 _outgtext("6");
 _moveto(380,276);
 _lineto(326,282);
 _outgtext("7");
  _moveto(169,166);
 _lineto(134,194);
 _outgtext("8");
 _moveto(265,255);
 _lineto(225,254);
 _outgtext("9");
  _moveto(50,190);
 _outgtext("10");

getch();

   _setvideomode(_DEFAULTMODE);
}
Hosted by uCoz