Exemplo n.º 1
0
T find_x(T s, T e, T t, T r) {
    if(e == s+1)return s;
    T m = (s+e)/2;
    T tmp = m*(2*m+2*r-1);
    if(tmp <= t) return find_x(m, e, t, r);
    return find_x(s, m, t, r);
}
Exemplo n.º 2
0
/*
 * is_x_vt_active
 * --------------
 * This function is the one called from vtlock.c and which tells
 * if the X vt is active or not.
 * If the X vt is active it returns 1 else 0.
 * -1 is returned in case of errno or if cannot stat.
 */
int
is_x_vt_active(int display_nr)
{
    int active_vt = 0;
    char *path = getenv( "PATH" );
    char *envtokenizer =(char *)NULL;
    struct stat stbuf;

    /* The active VT */
    active_vt = get_active_vt();
    if ( xino == (ino_t)-1 )
      if (stat( XPATH, &stbuf ) == -1 ||
          (xino = find_x( XPATH, XNAME, &xdev )) == (ino_t)-1 ) {
          /* No executable at the default location */
          /* Let's try with $PATH */
          if ( !path ) return -1;
          envtokenizer = strtok( path, ":" );
          while ( envtokenizer ) {
              if ( stat( envtokenizer, &stbuf ) != -1 )
                if ( ( xino = find_x( envtokenizer, XNAME, &xdev ) ) != (ino_t)-1 )
                  break;
              envtokenizer = strtok( (char *)NULL, ":" );
          }
          if ( !envtokenizer ) return -1;
      }
    if ((xproc ==(pid_t)-1 ) &&
        (xproc = find_x_proc(display_nr, xdev, xino)) == (pid_t)-1)
      return -1;
    if ((n_ttys == -1) &&
        (n_ttys = find_tty_inodes(ttyinodes))== 0)
      return -1;
    if ( ! xvt && ( xvt = scan_x_fds( ttyinodes, n_ttys, xproc ) ) == 0 ) return -1;
    return(active_vt == xvt);
}
Exemplo n.º 3
0
static void		init(t_param *p)
{
	p->YC = p->YC + 1;
	p->l.xb = find_x(p);
	p->l.yb = find_y(p);
	p->YC = p->YC - 1;
	p->l.xa = find_x(p);
	p->l.ya = find_y(p);
}
Exemplo n.º 4
0
float	find_wall(t_env *env , int **map, float each_x, unsigned int *color)
{
  float	x1;
  float	y1;
  float	k_x;
  float	k_y;
  float	tmp;

  x1 = env->x + 0.5;
  y1 = env->y + each_x;
  tmp = x1;
  x1 = cos(RAD(env->angle)) * (tmp - env->x) - sin(RAD(env->angle))
    * (y1 - env->y);
  y1 = sin(RAD(env->angle)) * (tmp - env->x) + cos(RAD(env->angle))
    * (y1 - env->y);
  k_x = find_x(env, map, x1, y1);
  k_y = find_y(env, map, x1, y1);
  *color = 0;
  (x1 > 0) ? (*color = FIRST_COLOR) : (*color = SECOND_COLOR);
  (k_x > k_y) ? ((y1 > 0) ? (*color = THIRD_COLOR)
		 : (*color = FOURTH_COLOR)) : (0);
  if (k_x > k_y)
    return (k_y);
  return (k_x);
}
Exemplo n.º 5
0
void			create_win(t_mlxtool *mlx_tool, char *name)
{
	int sizex;
	int sizey;

	find_x(mlx_tool);
	find_y(mlx_tool);
	sizex = mlx_tool->minx - mlx_tool->maxx;
	sizey = mlx_tool->miny - mlx_tool->maxy;
	mlx_tool->init = mlx_init();
	mlx_tool->win = mlx_new_window(mlx_tool->init, sizex, sizey, name);
	mlx_loop(mlx_tool->init);
}
Exemplo n.º 6
0
int main(void)
{
    int x, i,a[SIZE];
    printf("%d 個の実数を入力してください:",SIZE);
    for(i = 0; i < SIZE; i++){
        scanf("%d",&a[i]);
    }
    printf("探している整数を入力してください:\n");
    scanf("%d",&x);

    find_x(a, x); 
    
    return 0;
}
Exemplo n.º 7
0
int  main()
{
    int n, kase;
    T r, t, ans, i, tmp, s, e;
    scanf("%d", &n);
    for(kase=1;kase<=n;kase++) {
        scanf("%llu%llu", &r, &t);
        s = 0, e = 1;
        tmp = e*(2*e+2*r-1);
        while(tmp <= t) {
            e *= 2;
            tmp = e*(2*e+2*r-1); 
        }
        ans = find_x(s, e, t, r);
        printf("Case #%d: %llu\n", kase, ans);
    }
    return 0;
}
Exemplo n.º 8
0
double newton_polynom(double *args, double *funcs, int size, double x, int n, int *code){
    
    double **nodes = (double**) malloc(2*sizeof(double*)); //таблица x0,y0; x1,y1;...xn,yn
    for (int k=0; k<2; k++)
        nodes[k] = (double*) malloc((n+1)*sizeof(double));
    
    int pos = find_x(args, size, x); //позиция, относительно которой собирать x0,y0...xn,yn
    
#pragma region получаем массив узлов x0,y0
    int i=0; //в какой элемент узлов записываем
    int j=0; //из какого элемента таблицы
    //проходимся по всем элементам таблицы, в случае чего - разорвем цикл
    for (int k=0; ; k++)
    {
        //для позиции 5 из 7, вначале получим args[5], потом [6], [4], [7], [3], [2],...
        if (k%2==0)
            pos -= j;
        else
            pos += j;
        
        //проверяем на экстраполяцию
        if (pos >= size)
        {
            pos = size-1;
            *code = 1;
            continue;
        }
        else if (pos<0)
        {
            pos = 0;
            *code = 1;
            continue;
        }
        
        //наконец записываем число
        nodes[0][i] = args[pos];
        nodes[1][i] = funcs[pos];
        i++;
        j++;
        if (i == n+1)
            break;
    }
#pragma endregion
    
    //puts("\n[Nodes]:");
    //print_table(nodes,n+1,2);
    //puts("");
    
#pragma region получаем массив разделенных разностей
    /*разности хранятся в треугольном виде, как нормальный массив dd[строка][столбец]
     y01   y12  y23
     y012  y123
     y0123*/
    double **DivDif = (double**) malloc((n)*(n)*sizeof(double));
    for (int k=0; k<n+1; k++)
    {
        DivDif[k] = (double*) malloc((n)*sizeof(double));
        for (int j=0; j<n+1; j++)
            DivDif[k][j] = 0.0;
    }
    
    //инициализируем весь первый ряд yi,i+1
    //y(01) = (y0-y1)/(x0-x1)
    for (int i=0; i<n; i++)
    {
        DivDif[0][i] = (nodes[1][i]-nodes[1][i+1]) / (nodes[0][i]-nodes[0][i+1]);
    }
    //инициализируем остальные ряды через предыдущие
    for (int j=1; j<n; j++) //спускаемся по строкам, 01, 012, 0123
        for (int i=0; i<n-j; i++) //смещаемся по столбцам, 012, 123, 234
            DivDif[j][i] = (DivDif[j-1][i]-DivDif[j-1][i+1]) / (nodes[0][i]-nodes[0][i+j+1]);
#pragma endregion
    //PrintTable(DivDif, n, n);
    
    //наконец-то начинаем интерполировать полиномом лагранжа
    //Pn (x)=y0 + (x-x0)y01 + (x-x0)(x-x1)y012 + (x-x0)(x-x1)(x-x2)y0123
    double result=nodes[1][0]; //=y0
    
    for (int i=0; i<n; i++)
    {
        double mnozh = DivDif[i][0]; // =y012
        for (int j=0; j<=i; j++)
        {
            mnozh *= (x-nodes[0][j]);
        }
        result += mnozh;
    }
    
    return result;
}
Exemplo n.º 9
0
double spline(double *args, double *funcs, int n, double x, int &code){
    
    
	int pos = find_x(args,n,x);
	if (pos < 0 || pos >= n)
	{
		code = 1;
		return 0.0;
	}
	pos += 1;

	//коэффициенты полинома
	double	*Ca = new double[n+2],
			*Cb = new double[n+2],
			*Cc = new double[n+2],
			*Cd = new double[n+2];
    
	double	*h = new double[n+1]; //шаг между соседними х
    
	//параметры трёхдиагональной матрицы; Ai y_(i-1) - Bi yi + Di yi = -Fi
	double	*A = new double[n+2], // Ai = h_(i-1)
			*B = new double[n+2], // Bi = -2(h_(i-1) + hi)
			*D = new double[n+2], // Di = hi
			*F = new double[n+2]; // Fi = -3 * ( (yi-y_(i-1))/hi - (y_(i-1)-y_(i-2))/h_(i-1) )
    
    
	//yi === ci = alpha_(i+1) c_(i+1) + beta_(i+1)
	double *alpha = new double[n+2]; //прогоночный Кси
	double *beta = new double[n+2]; //прогоночный Эта

	//определяем шаги между точками в x#
	for (int i=1; i<=n; i++)
		h[i] = args[i] - args[i-1];

	//инициализируем стартовые значения коэффициентов
	for (int i=1; i<=n; i++)
		Ca[i] = funcs[i-1]; //ai = y_(i-1)
	Cc[1] = Cc[n+1] = 0; //на границах 2 производная ==0
	alpha[2] = beta[2] = 0; //c1=0 => 0 = alpha2 c2 + beta2

	//в прогонке считать мы начнем с третьей альфы
	for (int i=2; i<=n; i++)
	{
		A[i] = h[i-1];
		B[i] = -2* (h[i-1] + h[i]);
		D[i] = h[i];
		F[i] = -3* ((funcs[i]-funcs[i-1])/h[i] - (funcs[i-1]-funcs[i-2])/h[i-1]);
	}

	//прогонка, прямой ход: определяем альфы и беты
	for (int i=2; i<=n; i++)
	{
		alpha[i+1] = D[i] / (B[i] - A[i]*alpha[i]);
		beta[i+1] = (A[i]*beta[i]+F[i]) / (B[i] - A[i]*alpha[i]);
	}
	
	//прогонка, обратный ход: определяем с
	for (int i=n; i>1; i--)
		Cc[i] = alpha[i+1]*Cc[i+1] + beta[i+1]; // c_(n+1)==0 => cn = 0 + beta_(n+1)

	//определяем b и d
	for (int i=1; i<=n; i++)
	{
		Cb[i] = (funcs[i]-funcs[i-1])/h[i] - h[i]/3 * (2*Cc[i] + Cc[i+1]);
		Cd[i] = (Cc[i+1] - Cc[i])/(3*h[i]);
	}
	//F(x) = ai + bi(x-x_(i-1)) + ci(x-x_(i-1))^2 + di(x-x_(i-1))^3
	double res = Ca[pos] + Cb[pos]*(x-args[pos-1]) + Cc[pos]*(x-args[pos-1])*(x-args[pos-1]) + Cd[pos]*(x-args[pos-1])*(x-args[pos-1])*(x-args[pos-1]);
	delete [] Ca, Cb, Cc, Cd, h, A, B, D, F, alpha, beta;
	return res;
}