Пример #1
0
unsigned int selection_sort(int a[], unsigned int length) {

    for (unsigned int i = 0; i < length; i++) {
        resultado = minpos(a,i,length);
        swap(a,i,resultado.dato);
    }

    return resultado.comp;
}
Пример #2
0
static PyObject *Py_update_path_extents(PyObject *self, PyObject *args, PyObject *kwds)
{
    py::PathIterator path;
    agg::trans_affine trans;
    agg::rect_d rect;
    numpy::array_view<double, 1> minpos;
    int ignore;
    int changed;

    if (!PyArg_ParseTuple(args,
                          "O&O&O&O&i:update_path_extents",
                          &convert_path,
                          &path,
                          &convert_trans_affine,
                          &trans,
                          &convert_rect,
                          &rect,
                          &minpos.converter,
                          &minpos,
                          &ignore)) {
        return NULL;
    }

    if (minpos.dim(0) != 2) {
        PyErr_Format(PyExc_ValueError,
                     "minpos must be of length 2, got %" NPY_INTP_FMT,
                     minpos.dim(0));
        return NULL;
    }

    extent_limits e;

    if (ignore) {
        CALL_CPP("update_path_extents", reset_limits(e));
    } else {
        if (rect.x1 > rect.x2) {
            e.x0 = std::numeric_limits<double>::infinity();
            e.x1 = -std::numeric_limits<double>::infinity();
        } else {
            e.x0 = rect.x1;
            e.x1 = rect.x2;
        }
        if (rect.y1 > rect.y2) {
            e.y0 = std::numeric_limits<double>::infinity();
            e.y1 = -std::numeric_limits<double>::infinity();
        } else {
            e.y0 = rect.y1;
            e.y1 = rect.y2;
        }
        e.xm = minpos(0);
        e.ym = minpos(1);
    }

    CALL_CPP("update_path_extents", (update_path_extents(path, trans, e)));

    changed = (e.x0 != rect.x1 || e.y0 != rect.y1 || e.x1 != rect.x2 || e.y1 != rect.y2 ||
               e.xm != minpos(0) || e.ym != minpos(1));

    npy_intp extentsdims[] = { 2, 2 };
    numpy::array_view<double, 2> outextents(extentsdims);
    outextents(0, 0) = e.x0;
    outextents(0, 1) = e.y0;
    outextents(1, 0) = e.x1;
    outextents(1, 1) = e.y1;

    npy_intp minposdims[] = { 2 };
    numpy::array_view<double, 1> outminpos(minposdims);
    outminpos(0) = e.xm;
    outminpos(1) = e.ym;

    return Py_BuildValue(
        "NNi", outextents.pyobj(), outminpos.pyobj(), changed);
}
Пример #3
0
int main()
{
    int surplus_var,artificial_var,slack_var,var;
    int M=1000;
    int n,d,j,i;

//-----------------------------------------------------------------
//       Read the necessary parameters         
//-----------------------------------------------------------------
    printf("Enter the number of variables\n");
    scanf("%d",&d);
    printf("Enter the number of equal constraints\n");
    scanf("%d",&artificial_var);
    printf("Enter the number of greater than constraints\n");
    scanf("%d",&surplus_var);
    printf("Enter the number of less than constraints\n");
    scanf("%d",&slack_var);
    var=d;

//-----------------------------------------------------------------
//       Read the necessary coefficients          
//-----------------------------------------------------------------
    float mat[artificial_var+surplus_var+slack_var+1][d+surplus_var+1],maineqn[d+1];
    for(i=0;i<artificial_var+surplus_var+slack_var+1;i++)
      for(j=0;j<d+surplus_var+1;j++)
  	     mat[i][j]=0;
    printf("Enter coefficients in the following order\n\t1. Equality\n\t2. Greater than\n\t3. Less than\n");
    for(i=0;i<artificial_var+surplus_var+slack_var;i++)
  	{
  	  for(j=0;j<d;j++)
  	    {
  	      scanf("%f",&mat[i][j]);
  	    }
  	  scanf("%f",&mat[i][d+surplus_var]);
  	}
    printf("Enter coefficients of objective function in order inlcuding the constant. Use -ve sign for minimization problem\n");
    
//-----------------------------------------------------------------
//       Assigning the extra variables         
//-----------------------------------------------------------------
    for(j=0;j<d+1;j++){
    	scanf("%f",&maineqn[j]);
    }
    for(i=0;i<artificial_var;i++)
    {
      for(j=d;j<d+surplus_var;j++)
    	 mat[i][j]=0;
    }
    int c=0,z=0;
    for(i=artificial_var;i<artificial_var+surplus_var;i++)
    {
    	mat[i][d+c]=-1;
    	c++;
    }
    for(j=0;j<d+surplus_var+1;j++){
      for(i=0;i<artificial_var+surplus_var;i++)
        z=z+mat[i][j];
      mat[artificial_var+surplus_var+slack_var][j]=-z;
      z=0;
    }
    printf("\n=========================================================================\n");
    printf("Initial Matrix\n\n");
    for(i=0;i<artificial_var+surplus_var+slack_var+1;i++)
    {
  	  for(j=0;j<d+surplus_var+1;j++)
  	     printf("%f\t",mat[i][j]);
      printf("\n");
    }
    printf("\n=========================================================================\n");
    n=artificial_var+surplus_var+slack_var;
    d=d+surplus_var;
    float temp[d],temp1[n],pivot;
    int nbv[d],bv[n],tp,pivot_pos,most_neg=-1,k,m;
    for(i=0;i<d;i++)
      {
        nbv[i]=i+1;
      }
    for(i=0;i<n;i++)
      {
        bv[i]=i+d+1;
      }
    printf("\nNon basic - \n");
    for(i=0;i<d;i++)
      printf("%d\t",nbv[i]);
    printf("\nBasic - \n");
    for(i=0;i<n;i++)
      printf("%d\t",bv[i]);
    printf("\n");
    while(most_neg==-1)
    {
    for(i=0;i<d;i++)
    {
      temp[i]=mat[n][i];
    }
    most_neg=minpos(temp,d);
    if(mat[n][most_neg]>=0){
      if(mat[n][most_neg]==0){
        for(i=0;i<n;i++){
          if(mat[i][most_neg]>0)
            {
               temp1[i]=mat[i][d]/mat[i][most_neg];
              }
              else
              temp1[i]=9999;
  	    }
       pivot_pos=minpos(temp1,n);
    printf("\n=========================================================================\n");
       if(temp1[pivot_pos]!=9999)
         printf("Infinite solutions exist !!\n");
      }
      break;
    }
    for(i=0;i<n;i++){
      if(mat[i][most_neg]>0)
      {
        temp1[i]=mat[i][d]/mat[i][most_neg];
      }
      else
        temp1[i]=9999;
    }
    pivot_pos=minpos(temp1,n);
    for(i=0;i<n+1;i++)
      {
        if(i!=pivot_pos)
        {
  	for(j=0;j<d+1;j++)
  	{
  	  if(j!=most_neg)
  	    {
  	      mat[i][j]=((mat[i][j]*mat[pivot_pos][most_neg])-(mat[pivot_pos][j]*mat[i][most_neg]))/mat[pivot_pos][most_neg];
  	    }
  	}
        }
        }
    pivot=1/mat[pivot_pos][most_neg];
    tp=nbv[most_neg];
    nbv[most_neg]=bv[pivot_pos];
    bv[pivot_pos]=tp;
    for(i=0;i<n+1;i++)
      {
        if(i!=pivot_pos)
        mat[i][most_neg]=-mat[i][most_neg]/mat[pivot_pos][most_neg];
      }
    for(j=0;j<d+1;j++)
      {
        if(j!=most_neg)
  	mat[pivot_pos][j]=mat[pivot_pos][j]/mat[pivot_pos][most_neg];
      }
    mat[pivot_pos][most_neg]=pivot;
    printf("\n=========================================================================\n");
    printf("Intermediate matrix\n\n");
  for(i=0;i<n+1;i++)
    {
      for(j=0;j<d+1;j++)
        {
  	printf("%f\t",mat[i][j]);
        }
      printf("\n");
      }
   most_neg=-1;
    }

    for(i=0;i<d;i++)
      printf("%d\t",nbv[i]);
    printf("\n");
    for(i=0;i<n;i++)
      printf("%d\t",bv[i]);
    printf("\n");
    printf("\n=========================================================================\n");
 
    if(mat[n][d]!=0)
      printf("Infeasible solution found\n");   //phase2
    else{

      int count=0,k,k1,nbv1[d],flag=0;
      float mat1[n+1][d+1];
      for(k=0;k<d;k++){
        for(j=d+1;j<d+artificial_var+surplus_var+1;j++){
  	if(nbv[k]==j){
  	  flag=1;
  	}
        }
        if(flag!=1){
  	nbv1[count]=nbv[k];
  	count++;
        }
        flag=0;
      }
    int ct=0;
    for(i=0;i<n+1;i++){
      for(j=0;j<d;j++){
        if(nbv[j]==nbv1[ct]){
  	mat1[i][ct]=mat[i][j];
  	ct++;
        }
      }
      k1=ct;
      ct=0;
    }
    for(i=0;i<n+1;i++)
      mat1[i][k1]=mat[i][d];

    for(j=0;j<k1;j++){
      if(nbv1[j]<=var){
        mat1[n][j]=maineqn[nbv1[j]-1];
      }
      else{
        mat1[n][j]=0;
      }
    }
    mat1[n][k1]=maineqn[var];
    float sum=0;
    for(j=0;j<d+1;j++){
      for(i=0;i<n;i++){
        if(bv[i]<=var){
  	sum=sum+maineqn[bv[i]-1]*mat1[i][j];
        }
      }
      mat1[n][j]=mat1[n][j]+sum;
      sum=0;
    }

  for(i=0;i<n+1;i++)
    {
      for(j=0;j<k1+1;j++)
        {
  	printf("%f\t",mat1[i][j]);
        }
      printf("\n");
      }
    d=k1;
    most_neg=-1;
    while(most_neg==-1){
    for(i=0;i<d;i++)
      {
      temp[i]=mat1[n][i];
    }
    most_neg=minpos(temp,d);
    if(mat1[n][most_neg]>=0){
      if(mat1[n][most_neg]==0){
        for(i=0;i<n;i++){
          if(mat1[i][most_neg]>0)
            {
               temp1[i]=mat1[i][d]/mat1[i][most_neg];
              }
              else
              temp1[i]=9999;
  	    }
       pivot_pos=minpos(temp1,n);
       if(temp1[pivot_pos]!=9999)
         printf("There are infinite solution\n");

    printf("\n=========================================================================\n");
      }
      break;
    }
    int flag1=0;
    for(i=0;i<n;i++){
      for(j=var+surplus_var+1;j<var+surplus_var+artificial_var+surplus_var+1;j++){
        if(bv[i]==j){
  	flag1=1;
  	pivot_pos=i;
  	break;
        }
      }
      if(flag1==1)
        break;
    }
    if(flag1!=1){
    for(i=0;i<n;i++){
      if(mat1[i][most_neg]>0)
      {
        temp1[i]=mat1[i][d]/mat1[i][most_neg];
      }
      else
        temp1[i]=9999;
    }
    pivot_pos=minpos(temp1,n);
    }
    for(i=0;i<n+1;i++)
      {
        if(i!=pivot_pos)
        {
  	for(j=0;j<d+1;j++)
  	{
  	  if(j!=most_neg)
  	    {
  	      mat1[i][j]=((mat1[i][j]*mat1[pivot_pos][most_neg])-(mat1[pivot_pos][j]*mat1[i][most_neg]))/mat1[pivot_pos][most_neg];
  	    }
  	}
        }
        }
    pivot=1/mat1[pivot_pos][most_neg];
    tp=nbv1[most_neg];
    nbv1[most_neg]=bv[pivot_pos];
    bv[pivot_pos]=tp;
    for(i=0;i<n+1;i++)
      {
        if(i!=pivot_pos)
        mat1[i][most_neg]=-mat1[i][most_neg]/mat1[pivot_pos][most_neg];
      }
    for(j=0;j<d+1;j++)
      {
        if(j!=most_neg)
  	mat1[pivot_pos][j]=mat1[pivot_pos][j]/mat1[pivot_pos][most_neg];
      }
    mat1[pivot_pos][most_neg]=pivot;

    printf("\n=========================================================================\n");
   printf("Intermediate Matrix\n");
  for(i=0;i<n+1;i++)
    {
      for(j=0;j<d+1;j++)
        {
  	printf("%f\t",mat1[i][j]);
        }
      printf("\n");
      }
   most_neg=-1;
   }

   printf("\n=========================================================================\n");
   printf("Solution is \n");
    for(i=0;i<n;i++)
      printf("x%d=%f\t",bv[i],mat1[i][d]);
    printf("\n\nz=%f\n",mat1[n][d]);
    printf("\n=========================================================================\n");
  for(i=0;i<n+1;i++)
    {
      for(j=0;j<k1+1;j++)
        {
  	printf("%f\t",mat1[i][j]);
        }
      printf("\n");
      }
  }

  printf("\n=========================================================================\n");
  return 0;
 }
void main()
{
	int i,j,k,num,a[max];
	fp1=fopen("BIGFILE","w");
	for(i=0;i<64*max;i++)
	{
		num=rand() % 1000;
		fprintf(fp1,"%d\n",num);
	}
	fclose(fp1);
	fp1=fopen("BIGFILE","r");
	rewind(fp1);
	for(i=1;i<=64;i++)
	{
		name[4]=i+48;
		fp2=fopen(name,"w");
		for(j=0;j<max;j++)
		{
			fscanf(fp1,"%d",&num);
			fprintf(fp2,"%d\n",num);
		}
		fclose(fp2);
	}
	fclose(fp1); 
	for(i=1;i<=64;i++)
	{
		name[4]=i+48;
		fp2=fopen(name,"r");
		for(j=0;j<max;j++)
		{
			fscanf(fp2,"%d",&a[j]);
		}
		fclose(fp2);
		quicksort(a,0,max-1);
		fp2=fopen(name,"w");
		for(j=0;j<max;j++)
		{
			fprintf(fp2,"%d\n",a[j]);
		}
		fclose(fp2);
	}
	

	i=1;
	for(k=0;k<8;k++)  //8 way merge 
	{
	name2[5]=k+48+1;
	FILE *f1,*f2,*f3,*f4,*f5,*f6,*f7,*f8,*f88;
	int a1,a2,a3,a4,a5,a6,a7,a8,arr[8],pos,min,z;
	name[4]=i+48;
	f1=fopen(name,"r");
	rewind(f1);
	fscanf(f1,"%d",&a1);
	arr[0]=a1;
	i++;
	name[4]=i+48;
	f2=fopen(name,"r");
	rewind(f2);
	fscanf(f2,"%d",&a2);
	arr[1]=a2;
	i++;
	name[4]=i+48;
	f3=fopen(name,"r");
	rewind(f3);
	fscanf(f3,"%d",&a3);
	arr[2]=a3;
	i++;
	name[4]=i+48;
	f4=fopen(name,"r");
	rewind(f4);
	fscanf(f4,"%d",&a4);
	arr[3]=a4;
	i++;
	name[4]=i+48;
	f5=fopen(name,"r");
	rewind(f5);
	fscanf(f5,"%d",&a5);
	arr[4]=a5;
	i++;
	name[4]=i+48;
	f6=fopen(name,"r");
	rewind(f6);
	fscanf(f6,"%d",&a6);
	arr[5]=a6;
	i++;
	name[4]=i+48;
	f7=fopen(name,"r");
	rewind(f7);
	fscanf(f7,"%d",&a7);
	arr[6]=a7;
	i++;
	name[4]=i+48;
	f8=fopen(name,"r");
	rewind(f8);
	fscanf(f8,"%d",&a8);
	arr[7]=a8;
	i++;
	f88=fopen(name2,"w");
	for(z=0;z<8*max;z++)
	{
	pos=minpos(arr,8);
	min=minele(arr,8);
	printf("%d--%d ",pos,min);
	fprintf(f88,"%d\n",min);
	if(pos==0)
		fscanf(f1,"%d",&arr[0]);
	else if(pos==1)
		fscanf(f2,"%d",&arr[1]);
	else if(pos==2)
		fscanf(f3,"%d",&arr[2]);
	else if(pos==3)
		fscanf(f4,"%d",&arr[3]);
	else if(pos==4)
		fscanf(f5,"%d",&arr[4]);
	else if(pos==5)
		fscanf(f6,"%d",&arr[5]);
	else if(pos==6)
		fscanf(f7,"%d",&arr[6]);
	else if(pos==7)
		fscanf(f8,"%d",&arr[7]);
	}
	fclose(f88);
	}
	
	i=1;
	for(k=0;k<4;k++)  //4 way merge 
	{
	name3[5]=k+48+1;
	FILE *f1,*f2,*f3,*f4,*f44;
	int a1,a2,a3,a4,arr[4],pos,min,z;
	name2[5]=i+48;
	f1=fopen(name2,"r");
	rewind(f1);
	fscanf(f1,"%d",&a1);
	arr[0]=a1;
	i++;
	name2[5]=i+48;
	f2=fopen(name2,"r");
	rewind(f2);
	fscanf(f2,"%d",&a2);
	arr[1]=a2;
	i++;
	name2[5]=i+48;
	f3=fopen(name2,"r");
	fscanf(f3,"%d",&a3);
	rewind(f3);
	arr[2]=a3;
	i++;
	name2[5]=i+48;
	f4=fopen(name2,"r");
	rewind(f4);
	fscanf(f4,"%d",&a4);
	arr[3]=a4;
	i++;
	f44=fopen(name3,"w");
	for(z=0;z<4*max;z++)
	{
	pos=minpos(arr,4);
	min=minele(arr,4);
	printf("%d--%d ",pos,min);
	fprintf(f44,"%d\n",min);
	if(pos==0)
		fscanf(f1,"%d",&arr[0]);
	else if(pos==1)
		fscanf(f2,"%d",&arr[1]);
	else if(pos==2)
		fscanf(f3,"%d",&arr[2]);
	else if(pos==3)
		fscanf(f4,"%d",&arr[3]);
	}
	fclose(f44);
	i=1;
	}

	i=1;
	for(k=0;k<1;k++)  //2 way merge 
	{
	name4[5]=k+48+1;
	FILE *f1,*f2,*f22;
	int a1,a2,arr[2],pos,min,z;
	name3[5]=i+48;
	f1=fopen(name3,"r");
	rewind(f1);
	fscanf(f1,"%d",&a1);
	arr[0]=a1;
	i++;
	name3[5]=i+48;
	f2=fopen(name3,"r");
	rewind(f2);
	fscanf(f2,"%d",&a2);
	arr[1]=a2;
	i++;
	f22=fopen(name4,"w");
	for(z=0;z<2*max;z++)
	{
	pos=minpos(arr,2);
	min=minele(arr,2);
	printf("%d--%d ",pos,min);
	fprintf(f22,"%d\n",min);
	if(pos==0)
		fscanf(f1,"%d",&arr[0]);
	else if(pos==1)
		fscanf(f2,"%d",&arr[1]);
	}
	fclose(f22);
	}

}