void roots ( int n, dcmplx p[n], double eps, int maxit, dcmplx z[n-1] ) { dcmplx pp[n],dz,dp; double mpz,mdz,maxpz,maxdz; int i,k; for(i=0; i<n-1; i++) { z[i] = random_dcmplx1(); pp[i] = div_dcmplx(p[i],p[n-1]); } pp[n-1] = create1(1.0); for(k=0; k<maxit; k++) { maxpz = 0.0; maxdz = 0.0; for(i=0; i<n-1; i++) { dz = horner(n,pp,z[i]); /* printf("residual at z[%d] : ", i); writeln_dcmplx(dz); */ mpz = modulus(dz); if (mpz > maxpz) maxpz = mpz; dp = difference_product(n-1,i,z); dz = div_dcmplx(dz,dp); mdz = modulus(dz); if (mdz > maxdz) maxdz = mdz; /* printf(" update to z[%d] : ", i); writeln_dcmplx(dz); */ z[i] = sub_dcmplx(z[i],dz); } if ((maxpz <= eps) || (maxdz <= eps)) break; } }
int degree ( dcmplx *a, int d ) { int i; for ( i=d; i>0; i-- ) if ( !equal_dcmplx( a[i], create1(0), tol )) break; return i; }
int iszero ( int n, dcmplx a[] ) { int i; for ( i=0; i<=n; i++ ) if (! equal_dcmplx(a[i], create1(0), tol) ) return 0; return 1; }
dcmplx* div_poly2 ( int n, dcmplx a[], int m, dcmplx b[], int* dq ) { int i, j, k, dtemp, d; dcmplx *temp_a, *temp_b; dcmplx ** result=(dcmplx**) calloc(2, sizeof(dcmplx *)); if ( iszero (m, b) ) { printf("The divisor can not be 0!\n"); return; } if ( m>n ) { *dq=0; result[0] = (dcmplx*) calloc(*dq+1, sizeof(dcmplx)); result[0][0]=create1(0.0); /* *dr=n; result[1] = (dcmplx*) calloc(*dr+1, sizeof(dcmplx)); for ( i=0; i<=*dr; i++) result[1][i]=a[i]; */ } else { dtemp=n; temp_a = (dcmplx*) calloc(dtemp+1, sizeof(dcmplx)); for ( i=0; i<=n; i++ ) temp_a[i]=a[i]; *dq=n-m; result[0] = (dcmplx*) calloc(*dq+1, sizeof(dcmplx)); while ( dtemp>=m && (!iszero( dtemp,temp_a ))) { d=dtemp-m; result[0][d]=div_dcmplx(temp_a[dtemp], b[m]); temp_b = (dcmplx*) calloc(dtemp+1, sizeof(dcmplx)); for ( j=0; j<=m; j++ ) temp_b[d+j]=mul_dcmplx(result[0][d], b[j]); for ( k=0; k<=dtemp; k++ ) temp_a[k]=sub_dcmplx(temp_a[k],temp_b[k]); dtemp= degree ( temp_a, dtemp ); free(temp_b); } /* *dr=dtemp; result[1] = (dcmplx*) calloc(dtemp+1, sizeof(dcmplx)); for ( i=0; i<=dtemp; i++ ) result[1][i]=temp_a[i]; */ free(temp_a); } return result[0]; }
dcmplx difference_product ( int n, int i, dcmplx z[n] ) { dcmplx res = create1(1.0); int j; for(j=0; j<n; j++) if (j != i) res = mul_dcmplx(res,sub_dcmplx(z[i],z[j])); return res; }
void derivative ( int n, dcmplx p[n], dcmplx dp[n-1] ) { int i; double df_power; dcmplx dc_power; for(i=1; i<n; i++) { df_power = (double) i; dc_power = create1(df_power); dp[i-1] = mul_dcmplx(p[i],dc_power); } }
int main( ) /*主函数*/ { init( ); create1( ); create2( ); combine( ); getchar( ); }
int main() { int no1,no2; node *fn,*fs,*sc; printf("enter no. of elements in 1st list.. \n"); scanf("%d",&no1); fs=create1(no1); printf("enter no. of elements in 2nd list... \n"); scanf("%d",&no2); sc=create2(no2); fn=join(fs,sc); delete_duplicate(fn); return 0; }
void test_cycle_one() { create1(); triggerConversions(); TEST_ASSERT_EQUAL(1, analog1started); TEST_ASSERT_EQUAL(0, analog2started); TEST_ASSERT_EQUAL(analog1value, analogInputValue(analog1)); TEST_ASSERT_EQUAL(0, analogInputValue(analog2)); // Another round analog1value = 1000; triggerConversions(); TEST_ASSERT_EQUAL(2, analog1started); TEST_ASSERT_EQUAL(0, analog2started); TEST_ASSERT_EQUAL(analog1value, analogInputValue(analog1)); TEST_ASSERT_EQUAL(0, analogInputValue(analog2)); }
int main() { srand(time(0)); //int *p_num = create(7); int *p_num = NULL; create1(7, &p_num); int num = 0; if (p_num) { for (num = 0;num <= 6;num++) { printf("%d ", *(p_num + num)); } printf("\n"); free(p_num); p_num = NULL; } return 0; }
void random_test ( int n ) { dcmplx p[n+1], x[n+1], f[n+1]; int i, m[i+1]; srand(time(NULL)); /* printf(" The original polinomial is: \n");*/ for(i=0; i<n; i++) { p[i] = random_dcmplx1(); /* writeln_dcmplx(p[i]); */ } p[n]=create1(1.0); /*writeln_dcmplx(p[n]); */ for(i=0; i<=n; i++) { x[i] = random_dcmplx1(); m[i] = 1; f[i] = horner(n+1, p, x[i]); } divided_difference ( n+1, x, f, m ); /* printf(" The polynomial after interpolation is: \n"); for(i=0; i<=n; i++) { writeln_dcmplx(f[i]); } */ for(i=0; i<=n; i++) { if( !equal(p[i], f[i]) ) { printf("i=%d\n", i); printf("The original polynomial item is:"); writeln_dcmplx(p[i]); printf("The polynomial after interpolation is:"); writeln_dcmplx(f[i]); printf(" BUG!!\n "); exit(0); } } printf(" OK!\n "); }
void run_assign_and_copy_constructor_test(const char *test_name) { REMARK("Testing assignment and copy construction for %s\n", test_name); // test initializer with exemplar T initializer0; test_helper<T>::init(initializer0); T initializer7; test_helper<T>::set(initializer7,7); tbb::enumerable_thread_specific<T> create1(initializer7); (void) create1.local(); // create an initialized value ASSERT(7 == test_helper<T>::get(create1.local()), NULL); // test copy construction with exemplar initializer create1.clear(); tbb::enumerable_thread_specific<T> copy1(create1); (void) copy1.local(); ASSERT(7 == test_helper<T>::get(copy1.local()), NULL); // test copy assignment with exemplar initializer create1.clear(); tbb::enumerable_thread_specific<T> assign1(initializer0); assign1 = create1; (void) assign1.local(); ASSERT(7 == test_helper<T>::get(assign1.local()), NULL); // test creation with finit function FunctorFinit<T,7> my_finit7(SecretTag); tbb::enumerable_thread_specific<T> create2(my_finit7); (void) create2.local(); ASSERT(7 == test_helper<T>::get(create2.local()), NULL); // test copy construction with function initializer create2.clear(); tbb::enumerable_thread_specific<T> copy2(create2); (void) copy2.local(); ASSERT(7 == test_helper<T>::get(copy2.local()), NULL); // test copy assignment with function initializer create2.clear(); FunctorFinit<T,0> my_finit(SecretTag); tbb::enumerable_thread_specific<T> assign2(my_finit); assign2 = create2; (void) assign2.local(); ASSERT(7 == test_helper<T>::get(assign2.local()), NULL); }
void Call_Hermite ( int n, int m ) { POLY a[n][m], a1[n][m]; POLY p[n][n], t[n][m]; dcmplx deter, dcmplx_p[n][n], x; int k; printf("1 random matrix.\n"); printf("2 input your own matrix.\n"); printf("Please choose the test matrix:"); scanf("%d", &k ); printf("%d\n\n", k ); if(k==1) random_matrix ( n, m, a); if(k==2) read_matrix( n, m, a ); printf("the original matrix generated :\n"); print(n,m,a); zero_matrix ( n, m, a1); I_matrix ( n, p); copy ( n, m, a, t); /* Eliminate_Col(n,m,a,p,0,0); */ /* Eliminate_Row(n,m,a,q,0,0); */ Hermite(n, m, a, p); printf("The hermite form of matrix a is :\n"); print(n,m,a); /* now begin to test the result */ Multiply ( n, n, m, p, t, a1 ); printf("The calculated hermite form with p*a is:\n"); print(n, m, a1); printf(" p is:\n"); print(n, n, p); x=create1(1.1); evaluate_matrix(n, n, p, dcmplx_p, x); deter=determinant(n, dcmplx_p); printf("The determinant of the p is: "); writeln_dcmplx(deter); }
dcmplx* mul_poly ( int n, dcmplx a[], int m, dcmplx b[], int *k ) { int i, j; dcmplx *c; if (iszero( n,a ) || iszero ( m, b ) ) { *k=0; c = (dcmplx*) calloc(1, sizeof(dcmplx)); c[0]=create1(0.0); return c; } *k=n+m; c = (dcmplx*) calloc(*k+1, sizeof(dcmplx)); for ( i=0; i<=n; i++) for ( j=0; j<=m; j++) { c[i+j]=add_dcmplx(c[i+j],mul_dcmplx(a[i],b[j])); } *k=degree( c, *k ); return c; }
void test_cycle_after_destroy() { create1(); triggerConversions(); TEST_ASSERT_EQUAL(1, analog1started); TEST_ASSERT_EQUAL(0, analog2started); create2(); triggerConversions(); TEST_ASSERT_EQUAL(2, analog1started); TEST_ASSERT_EQUAL(1, analog2started); analog1 = destroyAnalogInput(analog1); triggerConversions(); TEST_ASSERT_EQUAL(2, analog1started); TEST_ASSERT_EQUAL(2, analog2started); analog2 = destroyAnalogInput(analog2); triggerConversions(); triggerConversions(); triggerConversions(); TEST_ASSERT_EQUAL(2, analog1started); TEST_ASSERT_EQUAL(2, analog2started); }
int main(void) { dcmplx one,imu,z1,z2; int ans; one = create1(1.0); printf("One as complex number : "); writeln_dcmplx(one); imu = create2(0.0,1.0); printf("The imaginary unit : "); writeln_dcmplx(imu); srand(time(NULL)); for(;;) { printf("\nChoose one of the following :\n"); printf(" 0. exit this program; or\n"); printf(" 1. perform tests on user-given numbers; or\n"); printf(" 2. test operations on random numbers.\n"); printf("Type 0, 1, or 2 to choose : "); scanf("%d", &ans); switch(ans) { case 0: return 0; case 1: interactive_test(); break; case 2: random_test(); break; default: printf("Invalid choice. Please try again...\n"); } } return 0; }
void manual_test ( int n, int m, int l ) { double eps = 1.0e-12; double tol = 1.0e-8; double mul_tol = 1.0e-3; dcmplx aa[n+1], bb[m+1], c[l+1], a[n+l+1], *dcmplx_a, b[m+l+1], *dcmplx_b, ra[n+l], rb[m+l], rc[l]; int i, j, c_num, bug, dk, dl, dgcd, k1, k2, dc_gcd; dcmplx **gcd_coeff; dcmplx *t1, *t2, *c_gcd; int dbd, dad, mult[l]; printf("please input the polynomial aa\n"); for(i=0; i<=n; i++) read_dcmplx( &(aa[i])); printf("please input the polynomial bb\n"); for(i=0; i<=m; i++) read_dcmplx(&(bb[i])); printf("please input the polynomial c, (the leading coefficient must be one!)\n"); for(i=0; i<=l; i++) read_dcmplx(&(c[i])); for(i=0; i<=n+l; i++) a[i]=create1(0.0); for(i=0; i<=n; i++) for(j=0; j<=l; j++) a[i+j]=add_dcmplx(a[i+j], mul_dcmplx(aa[i], c[j])); for(i=0; i<=m+l; i++) b[i]=create1(0.0); for(i=0; i<=m; i++) for(j=0; j<=l; j++) b[i+j]=add_dcmplx(b[i+j], mul_dcmplx(bb[i], c[j])); gcd( n+l+1, a, m+l+1, b, &c_num, ra, rb ); printf("the roots number of the given common diviser is: %d \n", l); multiple_roots(l+1, c, eps, 10*l, rc, mul_tol, mult); printf("the root of the gcd is:\n"); for(i=0; i<l; i++) writeln_dcmplx(rc[i]); printf("the roots number of the calculated common diviser is: %d \n", c_num); if(l!= c_num) { printf("Bug!!\n"); exit(1); } for(i=0; i<l; i++) { bug=1; for(j=0; j<l; j++) { if(equal_dcmplx(rc[i], ra[j], tol)) bug=0; } if( bug==1 ) { printf(" Bug!!\n"); exit(1); } } printf("the gcd is correct !\n"); /* now begin to test extended gcd method */ gcd_coeff=ExtPolyGcd( n+l+1, a, m+l+1, b, &dgcd, &dk, &dl, &dbd, &dad); Print_Poly(dl, gcd_coeff[1]); printf("a is:\n"); Print_Poly(n+l, a); dcmplx_a=(dcmplx*) calloc(n+l+1, sizeof(dcmplx)); /* for(i=0; i<=n+l; i++) dcmplx_a[i]=a[i]; */ t1=mul_poly( dk, gcd_coeff[0], n+l, a, &k1 ); t2=mul_poly( dl, gcd_coeff[1], m+l, b, &k2 ); /* printf("t1 is:\n"); for(i=0; i<=k1; i++) writeln_dcmplx(t1[i]); printf("t2 is:\n"); printf("dl=%d\n", dl); printf("m+l=%d\n", m+l); for(i=0; i<=k2; i++) writeln_dcmplx(t2[i]); */ printf("\n"); printf("k is:\n"); for(i=0; i<=dk; i++) writeln_dcmplx(gcd_coeff[0][i]); printf("l is:\n"); for(i=0; i<=dl; i++) writeln_dcmplx(gcd_coeff[1][i]); printf("\n"); c_gcd=add_poly( k1, t1, k2, t2, &dc_gcd); printf("the given polynomial a is:\n"); for(i=0; i<=n+l; i++) writeln_dcmplx(a[i]); printf("a's roots are:\n"); for(i=0; i<n+l; i++) writeln_dcmplx(ra[i]); printf("\n"); printf("the given polynomial b is:\n"); for(i=0; i<=m+l; i++) writeln_dcmplx(b[i]); printf("b's roots are:\n"); for(i=0; i<m+l; i++) writeln_dcmplx(rb[i]); printf("\n"); printf("the given gcd polynomial is:\n"); for(i=0; i<=l; i++) writeln_dcmplx(c[i]); printf("\n"); if(l!= dc_gcd) { printf("Bug!! the given gcd is different with the gcd method result.(0 is special case).\n"); } printf("the calculated gcd polynomial is:\n"); for(i=0; i<=dc_gcd; i++) writeln_dcmplx(c_gcd[i]); printf("\n"); printf("the gcd from common roots method is:\n"); for(i=0; i<=dgcd; i++) writeln_dcmplx(gcd_coeff[2][i]); printf("\n"); free(t1); free(t2); free(c_gcd); free(gcd_coeff[0]); free(gcd_coeff[1]); free(gcd_coeff[2]); free(gcd_coeff[3]); free(gcd_coeff[4]); free(gcd_coeff); }
void random_test ( int n, int m, int l ) { double eps = 1.0e-12; double tol = 1.0e-8; double mul_tol = 1.0e-3; dcmplx aa[n+1], bb[m+1], c[l+1], a[n+l+1], b[m+l+1], ra[n+l], rb[m+l], rc[l]; int i, j, c_num, bug, dk, dl, dgcd, k1, k2, dc_gcd; dcmplx **gcd_coeff; dcmplx *t1, *t2, *c_gcd; dcmplx near; double error=1.0; int dbd, dad, mult[l]; srand(time(NULL)); for(i=0; i<=n; i++) aa[i] = random_dcmplx1(); for(i=0; i<=m; i++) bb[i] = random_dcmplx1(); c[l]=create1(1.0); for(i=0; i<l; i++) c[i] = random_dcmplx1(); for(i=0; i<=n+l; i++) a[i]=create1(0.0); for(i=0; i<=n; i++) for(j=0; j<=l; j++) a[i+j]=add_dcmplx(a[i+j], mul_dcmplx(aa[i], c[j])); for(i=0; i<=m+l; i++) b[i]=create1(0.0); for(i=0; i<=m; i++) for(j=0; j<=l; j++) b[i+j]=add_dcmplx(b[i+j], mul_dcmplx(bb[i], c[j])); gcd( n+l+1, a, m+l+1, b, &c_num, ra, rb ); printf("the roots number of the given common diviser is: %d \n", l); multiple_roots(l+1, c, eps, 10*l, rc, mul_tol, mult); /* printf(" the root of the gcd is:\n"); for(i=0; i<l; i++) writeln_dcmplx(rc[i]); printf("\n"); */ printf("the roots number of the calculated common diviser is: %d \n", c_num); if(l!= c_num) { printf("Bug!!\n"); printf("a is:\n"); for(i=0; i<=n+l; i++) writeln_dcmplx(a[i]); printf("b is:\n"); for(i=0; i<=m+l; i++) writeln_dcmplx(b[i]); printf("a's roots are:\n"); for(i=0; i<n+l; i++) writeln_dcmplx(ra[i]); printf("b's roots are:\n"); for(i=0; i<m+l; i++) writeln_dcmplx(rb[i]); printf("fail reason: gcd roots number is not correct.\n"); exit(1); } for(i=0; i<l; i++) { bug=1; for(j=0; j<l; j++) { if(equal_dcmplx(rc[i], ra[j], tol)) bug=0; if(dcabs(sub_dcmplx(rc[i], ra[j]))<error) { error=dcabs(sub_dcmplx(rc[i], ra[j])); near=ra[j]; } } if( bug==1 ) { printf("a is:\n"); for(i=0; i<=n+l; i++) writeln_dcmplx(a[i]); printf("b is:\n"); for(i=0; i<=m+l; i++) writeln_dcmplx(b[i]); printf("a's roots are:\n"); for(i=0; i<n+l; i++) writeln_dcmplx(ra[i]); printf("b's roots are:\n"); for(i=0; i<m+l; i++) writeln_dcmplx(rb[i]); printf("the given common root is:"); writeln_dcmplx(rc[i]); printf("the nearest one to the given common roots is:"); writeln_dcmplx(near); printf("the difference is:%lf\n", error); printf("fail reason: the common root is not the given gcd root\n"); printf(" Bug!!\n"); exit(1); } } printf("the result is correct !\n"); /* now begin to test extended gcd method */ gcd_coeff=ExtPolyGcd( n+l+1, a, m+l+1, b, &dgcd, &dk, &dl, &dbd, &dad); t1=mul_poly( dk, gcd_coeff[0], n+l, a, &k1 ); t2=mul_poly( dl, gcd_coeff[1], m+l, b, &k2 ); c_gcd=add_poly( k1, t1, k2, t2, &dc_gcd); /* printf("the given polynomial a is:\n"); for(i=0; i<=n+l; i++) writeln_dcmplx(a[i]); printf("\n"); printf("the given polynomial b is:\n"); for(i=0; i<=m+l; i++) writeln_dcmplx(b[i]); printf("\n"); */ printf("the given gcd polynomial is:\n"); for(i=0; i<=l; i++) writeln_dcmplx(c[i]); printf("\n"); printf("the calculated gcd polynomial is:\n"); for(i=0; i<=dc_gcd; i++) writeln_dcmplx(c_gcd[i]); printf("\n"); printf("the gcd got from common roots is:\n"); for(i=0; i<=dgcd; i++) writeln_dcmplx(gcd_coeff[2][i]); printf("\n"); if(l!= dc_gcd) { printf("Bug!!\n"); printf("a is:\n"); for(i=0; i<=n+l; i++) writeln_dcmplx(a[i]); printf("b is:\n"); for(i=0; i<=m+l; i++) writeln_dcmplx(b[i]); printf("a's roots are:\n"); for(i=0; i<n+l; i++) writeln_dcmplx(ra[i]); printf("b's roots are:\n"); for(i=0; i<m+l; i++) writeln_dcmplx(rb[i]); exit(1); } if(l!=dgcd) { printf("Bug!! (get_poly)\n"); exit(1); } for(i=0; i<=l; i++) { bug=1; for(j=0; j<=l; j++) { if(equal_dcmplx(c[i], c_gcd[j], tol)) bug=0; } if( bug==1 ) { printf(" Bug!!\n"); exit(1); } } for(i=0; i<=l; i++) { bug=1; for(j=0; j<=l; j++) { if(equal_dcmplx(c[i], gcd_coeff[2][j], tol)) bug=0; } if( bug==1 ) { printf(" Bug!!(get_poly)\n"); exit(1); } } printf(" the extended gcd result is correct !\n"); free(t1); free(t2); free(c_gcd); free(gcd_coeff[0]); free(gcd_coeff[1]); free(gcd_coeff[2]); free(gcd_coeff); }
int main_logic(char elements[100],int l) { int flag=0,flag1=0,flag2=0,pos=0,i=0,j=0,flag3=0,k=0,loop=0,len=0; struct node1 *head1,*pointer; char a,b,q[27]; head1=malloc(sizeof(struct node1)); pointer=malloc(sizeof(struct node1)); head1=NULL; for(k=0;k<l;k=k+2) { a=elements[k]; b=elements[k+1]; if(head1==NULL) { if(a==b) { loop=2; return loop; } struct node1 *newnode=create1(a); struct node1 *newnode1=create1(b); head1=newnode; newnode->next1=newnode1; for(i=0;newnode->child_arr1[i]!='\0';i++); newnode->child_arr1[i]=b; for(i=0;newnode1->parent_arr1[i]!='\0';i++); newnode1->parent_arr1[i]=a; //printf("\nInsert done\n"); } else { if(a==b) { loop=2; return loop; } pointer=head1; flag=0; flag1=0; flag2=0; flag3=0; len=0; pointer=head1; while(pointer!=NULL) { if(pointer->value1==a) { flag=1; } if(pointer->value1==b) { flag1=1; } pointer=pointer->next1; } if(flag==1 && flag1==0) { flag2=0; pointer=head1; while(pointer!=NULL) { for(i=0;pointer->child_arr1[i]!='\0';i++) { if(pointer->child_arr1[i]==a) { if(pointer->value1!=b) { q[len++]=pointer->value1; for(j=i;pointer->child_arr1[j]!='\0';j++); pointer->child_arr1[j]=b; //printf("\ninsert done flag=1,flag1=0\n"); } else { //printf("\nloop detected...insert failed\n"); flag2=1; loop=1; } break; } } if(flag2==1) { break; } pointer=pointer->next1; } if(flag2!=1) { pointer=head1; while(pointer->value1!=a) { pointer=pointer->next1; } for(i=0;pointer->child_arr1[i]!='\0';i++); pointer->child_arr1[i]=b; pointer=head1; while(pointer->next1!=NULL) { pointer=pointer->next1; } struct node1 *newnode; newnode=create1(b); pointer->next1=newnode; for(i=0;newnode->parent_arr1[i]!='\0';i++); newnode->parent_arr1[i]=a; for(i=0;i<len;i++) newnode->parent_arr1[i+1]=q[i]; //printf("\ninsert done flag=1,flag1=0\n"); } } else if(flag==0 && flag1==0) { pointer=head1; struct node1 *newnode; struct node1 *newnode1; newnode=create1(a); newnode1=create1(b); while(pointer->next1!=NULL) { pointer=pointer->next1; } pointer->next1=newnode; newnode->next1=newnode1; for(i=0;newnode->child_arr1[i]!='\0';i++); newnode->child_arr1[i]=b; for(i=0;newnode1->parent_arr1[i]!='\0';i++); newnode1->parent_arr1[i]=a; //printf("\ninsert done flag=0,flag1=0\n"); } else if(flag==0 && flag1==1) { pointer=head1; while(pointer!=NULL) { for(i=0;pointer->parent_arr1[i]!='\0';i++) { if(pointer->parent_arr1[i]==b) { if(pointer->value1!=a) { q[len++]=pointer->value1; for(j=i;pointer->parent_arr1[j]!='\0';j++); pointer->parent_arr1[j]=a; //printf("\ninsert done flag=0,flag1=1\n"); } else { //printf("\nloop detected...insert failed\n"); flag2=1; loop=1; } break; } } if(flag2==1) { break; } pointer=pointer->next1; } if(flag2!=1) { pointer=head1; while(pointer->value1!=b) { pointer=pointer->next1; } for(i=0;pointer->parent_arr1[i]!='\0';i++); pointer->parent_arr1[i]=a; pointer=head1; while(pointer->next1!=NULL) { pointer=pointer->next1; } struct node1 *newnode; newnode=create1(a); pointer->next1=newnode; for(i=0;newnode->child_arr1[i]!='\0';i++); newnode->child_arr1[i]=b; for(i=0;i<len;i++) newnode->child_arr1[i+1]=q[i]; //printf("\ninsert done flag=0,flag1=1\n"); } } else { pointer=head1; while(pointer!=NULL) { if(pointer->value1==a) { for(i=0;pointer->parent_arr1[i]!='\0';i++) { if(pointer->parent_arr1[i]==b) { loop=1; break; } } for(i=0;pointer->child_arr1[i]!='\0';i++) { if(pointer->child_arr1[i]==a) { flag2=1; break; } } } if(loop==1 || flag2==1) { break; } pointer=pointer->next1; } pointer=head1; if(loop!=1 && flag2!=1) { while(pointer!=NULL) { if(pointer->value1==a) { for(i=0;pointer->child_arr1[i]!='\0';i++); pointer->child_arr1[i]=b; } if(pointer->value1==b) { for(i=0;pointer->parent_arr1[i]!='\0';i++); pointer->parent_arr1[i]=a; } pointer=pointer->next1; } } } } } return loop; }
void test_create2() { create1(); create2(); }
int main(int argc, char *argv[]) { int pid, i; if(argc != 3){ fprintf(stderr, "Usage: test-lab-2-a dir1 dir2\n"); exit(1); } sprintf(d1, "%s/d%d", argv[1], getpid()); if(mkdir(d1, 0777) != 0){ fprintf(stderr, "test-lab-2-a: failed: mkdir(%s): %s\n", d1, strerror(errno)); exit(1); } sprintf(d2, "%s/d%d", argv[2], getpid()); if(access(d2, 0) != 0){ fprintf(stderr, "test-lab-2-a: failed: access(%s) after mkdir %s: %s\n", d2, d1, strerror(errno)); exit(1); } setbuf(stdout, 0); for(i = 0; i < sizeof(big)-1; i++) big[i] = 'x'; for(i = 0; i < sizeof(huge)-1; i++) huge[i] = '0'; //addddddddddddd printf("Concurrent creates: "); pid = fork(); if(pid < 0){ perror("test-lab-2-a: fork"); exit(1); } if(pid == 0){ createn(d2, "xx", 20, false); exit(0); } createn(d1, "yy", 20, false); sleep(10); reap(pid); dircheck(d1, 40); checkn(d1, "xx", 20); checkn(d2, "yy", 20); unlinkn(d1, "xx", 20); unlinkn(d1, "yy", 20); printf("OK\n"); printf("Concurrent create/delete: "); createn(d1, "x1", 20, false); createn(d2, "x2", 20, false); pid = fork(); if(pid < 0){ perror("test-lab-2-a: fork"); exit(1); } if(pid == 0){ unlinkn(d2, "x1", 20); createn(d1, "x3", 20, false); exit(0); } createn(d1, "x4", 20, false); reap(pid); unlinkn(d2, "x2", 20); unlinkn(d2, "x4", 20); unlinkn(d2, "x3", 20); dircheck(d1, 0); printf("OK\n"); //additional printf("Create then read: "); create1(d1, "f1", "aaa"); check1(d2, "f1", "aaa"); check1(d1, "f1", "aaa"); printf("OK\n"); printf("Unlink: "); unlink1(d2, "f1"); create1(d1, "fx1", "fxx"); /* checknot f1 fails w/o these */ unlink1(d1, "fx1"); checknot(d1, "f1"); checknot(d2, "f1"); create1(d1, "f2", "222"); unlink1(d2, "f2"); checknot(d1, "f2"); checknot(d2, "f2"); create1(d1, "f3", "333"); check1(d2, "f3", "333"); check1(d1, "f3", "333"); unlink1(d1, "f3"); create1(d2, "fx2", "22"); /* checknot f3 fails w/o these */ unlink1(d2, "fx2"); checknot(d2, "f3"); checknot(d1, "f3"); printf("OK\n"); printf("Append: "); create1(d2, "f1", "aaa"); append1(d1, "f1", "bbb"); append1(d2, "f1", "ccc"); check1(d1, "f1", "aaabbbccc"); check1(d2, "f1", "aaabbbccc"); printf("OK\n"); printf("Readdir: "); dircheck(d1, 1); dircheck(d2, 1); unlink1(d1, "f1"); dircheck(d1, 0); dircheck(d2, 0); create1(d2, "f2", "aaa"); create1(d1, "f3", "aaa"); dircheck(d1, 2); dircheck(d2, 2); unlink1(d2, "f2"); dircheck(d2, 1); dircheck(d1, 1); unlink1(d2, "f3"); dircheck(d1, 0); dircheck(d2, 0); printf("OK\n"); printf("Many sequential creates: "); createn(d1, "aa", 10, false); createn(d2, "bb", 10, false); dircheck(d2, 20); checkn(d2, "bb", 10); checkn(d2, "aa", 10); checkn(d1, "aa", 10); checkn(d1, "bb", 10); unlinkn(d1, "aa", 10); unlinkn(d2, "bb", 10); printf("OK\n"); printf("Write 20000 bytes: "); create1(d1, "bf", big); check1(d1, "bf", big); check1(d2, "bf", big); unlink1(d1, "bf"); printf("OK\n"); printf("Concurrent creates: "); pid = fork(); if(pid < 0){ perror("test-lab-2-a: fork"); exit(1); } if(pid == 0){ createn(d2, "xx", 20, false); exit(0); } createn(d1, "yy", 20, false); sleep(10); reap(pid); dircheck(d1, 40); checkn(d1, "xx", 20); checkn(d2, "yy", 20); unlinkn(d1, "xx", 20); unlinkn(d1, "yy", 20); printf("OK\n"); printf("Concurrent creates of the same file: "); pid = fork(); if(pid < 0){ perror("test-lab-2-a: fork"); exit(1); } if(pid == 0){ createn(d2, "zz", 20, true); exit(0); } createn(d1, "zz", 20, true); sleep(4); dircheck(d1, 20); reap(pid); checkn(d1, "zz", 20); checkn(d2, "zz", 20); unlinkn(d1, "zz", 20); printf("OK\n"); printf("Concurrent create/delete: "); createn(d1, "x1", 20, false); createn(d2, "x2", 20, false); pid = fork(); if(pid < 0){ perror("test-lab-2-a: fork"); exit(1); } if(pid == 0){ unlinkn(d2, "x1", 20); createn(d1, "x3", 20, false); exit(0); } createn(d1, "x4", 20, false); reap(pid); unlinkn(d2, "x2", 20); unlinkn(d2, "x4", 20); unlinkn(d2, "x3", 20); dircheck(d1, 0); printf("OK\n"); printf("Concurrent creates, same file, same server: "); pid = fork(); if(pid < 0){ perror("test-lab-2-a: fork"); exit(1); } if(pid == 0){ createn(d1, "zz", 20, true); exit(0); } createn(d1, "zz", 20, true); sleep(2); dircheck(d1, 20); reap(pid); checkn(d1, "zz", 20); unlinkn(d1, "zz", 20); printf("OK\n"); printf("Concurrent writes to different parts of same file: "); create1(d1, "www", huge); pid = fork(); if(pid < 0){ perror("test-lab-2-a: fork"); exit(1); } if(pid == 0){ write1(d2, "www", 65536, 64, '2'); exit(0); } write1(d1, "www", 0, 64, '1'); reap(pid); checkread(d1, "www", 0, 64, '1'); checkread(d2, "www", 0, 64, '1'); checkread(d1, "www", 65536, 64, '2'); checkread(d2, "www", 65536, 64, '2'); printf("OK\n"); printf("test-lab-2-a: Passed all tests.\n"); exit(0); return(0); }
void feedback(int n, int m, int p, int q, int nb, int output_level, int nn, int input, char *ifn, char *ofn) { dcmplx A[n][n], B[n][m], C[p][n]; dcmplx s[nn], Is[n][n], Is_A[n][n], tmp[p][n], M[p][m]; double a[nn*2], b[nn*p*m*2], *points, *planes, r; int i, j, k, start, nbsols; FILE *ifp, *ofp; timer t_phc; ofp=fopen(ofn, "w"); /*open for writing*/ fprintf(ofp, "n=%d\n", n); fprintf(ofp, "m=%d\n", m); fprintf(ofp, "p=%d\n", p); fprintf(ofp, "q=%d\n", q); if(input == 0) { ifp=fopen(ifn, "r"); /*open for reading*/ skip(ifp); read_dcmatrix0(n, n, A, ifp); printf( "The given matrix A(%d*%d) is:\n", n, n); print_dcmatrix(n, n, A); read_dcmatrix0(n, m, B, ifp); printf("The given matrix B(%d*%d) is:\n", n, m); print_dcmatrix(n, m, B); read_dcmatrix0(p, n, C, ifp); printf("The given matrix C(%d*%d) is:\n", p, n); print_dcmatrix(p, n, C); for(i=0; i<n+q; i++) read_dcmplx0(&s[i], ifp); for(i=n+q; i<nn; i++) /*generate more poles as interpolation points */ { s[i] = create1(cos(rand())); if(s[i].re>0) s[i] = min_dcmplx(s[i]); } fclose(ifp); } if(input == 1) { ifp=fopen(ifn, "r"); /*open for reading*/ skip(ifp); read_dcmatrix2(n, n, A, ifp); printf( "The given matrix A(%d*%d) is:\n", n, n); print_dcmatrix(n, n, A); read_dcmatrix2(n, m, B, ifp); printf("The given matrix B(%d*%d) is:\n", n, m); print_dcmatrix(n, m, B); read_dcmatrix2(p, n, C, ifp); printf("The given matrix C(%d*%d) is:\n", p, n); print_dcmatrix(p, n, C); for(i=0; i<n+q; i++) read_dcmplx1(&s[i], ifp); for(i=n+q; i<nn; i++) /*generate more poles as interpolation points */ { s[i] = create1(cos(rand())); if(s[i].re>0) s[i] = min_dcmplx(s[i]); } fclose(ifp); } if(input==2) { random_dcmatrix ( n, n, A); printf("\nThe random generated matrix A is:\n"); print_dcmatrix(n, n, A); random_dcmatrix ( n, m, B); printf("\nThe random generated matrix B is:\n"); print_dcmatrix(n, m, B); random_dcmatrix ( p, n, C); printf("\nThe random generated matrix C is:\n"); print_dcmatrix(p, n, C); s[0] = create2(-0.23423423423, 0); /* fix one pole for testing realization */ for(i=1; i<nn; i++) { r = rand(); s[i] = create2(cos(r), sin(r)); if(s[i].re>0) s[i] = min_dcmplx(s[i]); s[++i] = conjugate(s[i]); if(i==(nn-2)) { if((nn%2)==0) s[++i] = create1(-1.0); } } printf("\nThe random generated poles are:\n"); for(i=0; i<nn; i++) writeln_dcmplx(s[i]); } if(input==3) { random_dcmatrix0 ( n, n, A); printf("\nThe random generated matrix A is:\n"); print_dcmatrix(n, n, A); random_dcmatrix0 ( n, m, B); printf("\nThe random generated matrix B is:\n"); print_dcmatrix(n, m, B); random_dcmatrix0 ( p, n, C); printf("\nThe random generated matrix C is:\n"); print_dcmatrix(p, n, C); s[0] = create2(-0.23423423423, 0); /* fix one pole for test */ for(i=1; i<nn; i++) { r = rand(); s[i] = create2(cos(r), sin(r)); if(s[i].re>0) s[i] = min_dcmplx(s[i]); s[++i] = conjugate(s[i]); if(i==(nn-2)) { if((nn%2)==0) s[++i] = create1(-1.0); } } printf("\nThe random generated poles are:\n"); for(i=0; i<nn; i++) writeln_dcmplx(s[i]); } if(input == 4) { ifp=fopen(ifn, "r"); /*open for reading*/ skip(ifp); read_dcmatrix0(n, n, A, ifp); printf( "The given matrix A(%d*%d) is:\n", n, n); print_dcmatrix(n, n, A); read_dcmatrix0(n, m, B, ifp); printf("The given matrix B(%d*%d) is:\n", n, m); print_dcmatrix(n, m, B); read_dcmatrix0(p, n, C, ifp); printf("The given matrix C(%d*%d) is:\n", p, n); print_dcmatrix(p, n, C); for(i=0; i<n+q; i++) read_dcmplx1(&s[i], ifp); for(i=n+q; i<nn; i++) /*generate more poles as interpolation points */ { s[i] = create1(cos(rand())); if(s[i].re>0) s[i] = min_dcmplx(s[i]); } fclose(ifp); } /* print the input matrices in matlab format for further study */ fprintf(ofp,"A=[\n"); print_dcmatrix1(n, n, A, ofp); fprintf(ofp,"]\n"); fprintf(ofp,"B=[\n"); print_dcmatrix1(n, m, B, ofp); fprintf(ofp,"]\n"); fprintf(ofp,"C=[\n"); print_dcmatrix1(p, n, C, ofp); fprintf(ofp,"]\n"); fprintf(ofp, "\nPoles=["); for(i=0; i<nn; i++) { write_dcmplx1(s[i], ofp); if(i!=(nn-1)) fprintf(ofp, ","); } fprintf(ofp, "]\n"); /* end of input */ j = 0; for(i=0; i<nn; i++) { a[j++] = s[i].re; a[j++] = s[i].im; } start = 0; for(k=0; k<n+q; k++) { for(i=0; i<n; i++) for(j=0; j<n; j++) { if(i==j) Is[i][j] = s[k]; else Is[i][j] = zero; } sub_dcmatrix(n, n, Is, A, Is_A); dcinverse(n, Is_A); multiply_dcmatrix(p, n, n, C, Is_A, tmp); multiply_dcmatrix(p, n, m, tmp, B, M); c2ada_dc_matrix( p, m, M, nn*p*m*2, b, start); start = start + p*m*2; } /* generate some random planes */ for( i=start ; i<nn*p*m*2; i++ ) { b[i++] = cos(rand()); b[i] = 0.0; } fflush(stdout); fflush(ofp); printf("\nComputing the feedback law with PHC ...\n"); tstart(&t_phc); adainit(); nbsols = _ada_pieri_solver(m, p, q, nb, output_level, a, b, ofn); adafinal(); tstop(&t_phc); /* This subroutine spends almost all the time */ tprint(t_phc); printf("\nSee %s for the realization of the output feedbacks.\n", ofn); fclose(ofp); }