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; }
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); }
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); } }