static bool delete_node(const void *key, bnode_t *bnode, piojo_btree_t *tree) { bool found_p, deleted_p=FALSE; size_t i; bnode_t *next; iter_t iter; while (bnode != NULL){ i = bin_search(key, tree, bnode, &found_p); if (found_p){ /* Key in leaf, shrink the leaf and finish. */ if (bnode->leaf_p){ free_entry(&bnode->kvs[i], tree, &deleted_p); --bnode->ecnt; for (; i < bnode->ecnt; ++i){ copy_bentry(i + 1, bnode, i, bnode, tree); } return TRUE; } /* Key in internal node, move prev/next key up and delete it. */ iter.bnode = bnode; if (bnode->children[i]->ecnt >= tree->cmin){ free_entry(&bnode->kvs[i], tree, &deleted_p); iter.eidx = i; search_max(&iter); copy_bentry(iter.eidx, iter.bnode, i, bnode, tree); key = entry_key(i, bnode, tree); bnode = bnode->children[i]; }else if (bnode->children[i + 1]->ecnt >= tree->cmin){ free_entry(&bnode->kvs[i], tree, &deleted_p); iter.eidx = i + 1; search_min(&iter); copy_bentry(iter.eidx, iter.bnode, i, bnode, tree); key = entry_key(i, bnode, tree); bnode = bnode->children[i + 1]; }else{ /* Both node children are key deficient, merge and try again. */ PIOJO_ASSERT(bnode->children[i]->ecnt == tree->cmin - 1); PIOJO_ASSERT(bnode->children[i + 1]->ecnt == tree->cmin - 1); next = bnode->children[i]; merge_bnodes(tree, i, next, bnode->children[i + 1], bnode); bnode = next; } }else if (! bnode->leaf_p){ /* Key not in internal node, rebalance and try again. */ next = bnode->children[i]; if (next->ecnt < tree->cmin){ PIOJO_ASSERT(next->ecnt == tree->cmin - 1); next = rebalance_bnode(tree, i, next, bnode); } bnode = next; }else{ /* Key not in leaf. */ bnode = NULL; } } return FALSE; }
/** * Reads the previous key (order given by @a keycmp function). * @param[in] key * @param[in] tree * @param[out] data Entry value, can be @b NULL. * @return previous key or @b NULL if @a key is the first one. */ const void* piojo_btree_prev(const void *key, const piojo_btree_t *tree, void **data) { iter_t iter; PIOJO_ASSERT(tree); PIOJO_ASSERT(key); iter = search_node(key, tree); PIOJO_ASSERT(iter.bnode != NULL); if (! iter.bnode->leaf_p && iter.eidx < iter.bnode->ecnt + 1){ iter.bnode = iter.bnode->children[iter.eidx]; iter.eidx = iter.bnode->ecnt; search_max(&iter); }else if (iter.eidx > 0){ --iter.eidx; }else{ while (iter.bnode->parent != NULL){ iter.eidx = iter.bnode->pidx; iter.bnode = iter.bnode->parent; if (iter.eidx > 0){ --iter.eidx; if (data != NULL){ *data = entry_val(iter.eidx, iter.bnode, tree); } return entry_key(iter.eidx, iter.bnode, tree); } } return NULL; } if (data != NULL){ *data = entry_val(iter.eidx, iter.bnode, tree); } return entry_key(iter.eidx, iter.bnode, tree); }
void ch_mode(int mode) { reset(); switch(mode){ case 1: search_max(); break; case 2: sens_save(); break; case 3: sens_load(); break; case 4: maxmin_out(); break; case 5: sens_out(); break; case 6: break; } }
void ch_mode(int mode) { reset(); switch(mode){ case 1: search_max(); break; case 2: trace(); break; case 3: trace2(); break; case 4: line_check(); break; case 5: out_senc_drive_mot(); break; case 6: out_senc(); break; case 7: out_curve(); break; } }
int main()/*begin function main*/ { /*vaiables used in the main function*/ int num; int large; int row; int col; int i; int x; int close; printf("\nEnter the size of the 2D array: ");/*prompt user for the size of the array to be initialized*/ scanf("%d", &num); while (check_error(num) == 0)/*check that a valid size was entered*/ { printf("Invalid input enter the size of the array again: "); scanf("%d", &num); } srand(time(NULL));/*randomize the function reand()*/ initialize_2Darray(num);/*initialize the 2D array*/ print_2Darray(num);/*display the 2D array*/ initialize_1Darray(num);/*initialize the 1D array*/ print_1Darray(num);/*display the 1D array*/ printf("\n\nEnter the row: ");/*prompt the user to enter a row number*/ scanf("%d", &row); printf("Enter the col: ");/*prompt the user to enter a column number*/ scanf("%d", &col); large = search_max(row, col, num);/*find the largest number in the row and column entered by the user*/ printf("\nThe largest number present in the row %d and col %d is %d\n", row, col, large);/*display the largest value found in the coulumn*/ for (i = 0; i < num; i++)/*display the diagonal value and how many times it is present in that row and column*/ { x = count_diagonal(i, num); printf("\nDiagonal element %d is present %d more times in the row %d and col %d", array2D[i][i], x, i, i); } close = closest_row(num);/*assign the number of the closest row to the variable closest*/ printf("\n\nRow closest to the array is row %d\n\n", close);/*display the row of the 2D array cloasest to the 1D array*/ }
/** * Reads the last key in @a tree (order given by @a keycmp function). * @param[in] tree * @param[out] data Entry value, can be @b NULL. * @return last key or @b NULL if @a tree is empty. */ const void* piojo_btree_last(const piojo_btree_t *tree, void **data) { iter_t iter; PIOJO_ASSERT(tree); if (tree->ecount > 0){ iter.tree = tree; iter.eidx = tree->root->ecnt; iter.bnode = tree->root; search_max(&iter); if (data != NULL){ *data = entry_val(iter.eidx, iter.bnode, tree); } return entry_key(iter.eidx, iter.bnode, tree); } return NULL; }
void out_senc_drive_mot() { short i; TIMER_WAIT(2000); search_max(); start0=1; mot_STB(START_A); mot_frag=1; TIMER_WAIT(2000); while(1){ MTU0.TGRA=100; MTU0.TGRC=100; for(i=1; i<11; i++){ dec_out((short)ave_SEN[i], 4); outs(" "); } outs("\n"); } }
int main(void) { //variable declaration// int size,student,row,col; float scores[COL_SIZE][COL_SIZE]; srand(time(NULL)); //size of array input// printf("Enter the size of the array:"); scanf("%d",&size); //error checking// while(check_error(size)==0) { printf("Invalid input enter the size of the array again:"); scanf("%d",&size); } //print array// printf("\nScores:\n"); initialize_2Darray(scores,size); print_2Darray(scores,size); printf("\n"); //average score// average_scores(scores,size); //student number input// printf("Enter student number (1-%d):",size); scanf("%d",&student); //Overal grade for specific student// printf("\nOverall grade for %dth student is %c",student,compute_grade(scores,size,student)); //input row// printf("\nEnter the row (1-%d):",size); scanf("%d",&row); //input column// printf("Enter the col (1-%d):",size); scanf("%d",&col); //the largest number present in specific row and column// printf("The largest number present in row %d or col %d is %.2f\n",row,col,search_max(scores,row,col,size)); printf("Bonus part"); printf("\nArray before sorting\n"); print_2Darray(scores,size); }
int main(){ const int max_mu_size=601; const int zero_pad_size=pow(2,15); FILE *in; in= fopen("mean.chi", "r"); gsl_matrix *e = gsl_matrix_alloc(max_mu_size, 4); gsl_vector * kvar=gsl_vector_alloc(max_mu_size); gsl_vector * muvar=gsl_vector_alloc(max_mu_size); gsl_vector * mu_0pad=gsl_vector_alloc(zero_pad_size); gsl_vector * r_0pad=gsl_vector_alloc(zero_pad_size/2); //half of lenght gsl_vector * kvar_0pad=gsl_vector_alloc(zero_pad_size); gsl_matrix_fscanf(in, e); fclose(in); gsl_matrix_get_col(kvar,e,0); gsl_matrix_get_col(muvar,e,1); gsl_vector_set_zero(mu_0pad); gsl_matrix_free(e); double dk=gsl_vector_get (kvar, 1)-gsl_vector_get (kvar, 0); double dr=M_PI/float(zero_pad_size-1)/dk; for (int i = 0; i < zero_pad_size; i++) { gsl_vector_set (kvar_0pad, i, dk*i); } for (int i = 0; i < zero_pad_size/2; i++) { gsl_vector_set (r_0pad, i, dr*i); } for (int i = 0; i < max_mu_size; i++) { gsl_vector_set (mu_0pad, i, gsl_vector_get (muvar, i)); } gsl_vector *mu_widowed=gsl_vector_alloc(zero_pad_size); gsl_vector_memcpy (mu_widowed, mu_0pad); double kmin=4.0, kmax=17.0, dwk=0.8; hanning(mu_widowed, kvar_0pad, kmin, kmax, dwk); //FFT transform double *data = (double *) malloc(zero_pad_size*sizeof(double)); //new double [zero_pad_size] ; memcpy(data, mu_widowed->data, zero_pad_size*sizeof(double)); gsl_fft_real_radix2_transform(data, 1, zero_pad_size); //Unpack complex vector gsl_vector_complex *fourier_data = gsl_vector_complex_alloc (zero_pad_size); gsl_fft_halfcomplex_radix2_unpack(data, fourier_data->data, 1, zero_pad_size); gsl_vector *fftR_real = gsl_vector_alloc(fourier_data->size/2); gsl_vector *fftR_imag = gsl_vector_alloc(fourier_data->size/2); gsl_vector *fftR_abs = gsl_vector_alloc(fourier_data->size/2); complex_vector_parts(fourier_data, fftR_real, fftR_imag); complex_vector_abs(fftR_abs, fftR_real, fftR_imag); gsl_vector *first_shell=gsl_vector_alloc(fftR_abs->size); gsl_vector_memcpy (first_shell, fftR_abs); double rmin=0.2, rmax=3.0, dwr=0.1; hanning(first_shell, r_0pad, rmin, rmax, dwr); //feff0001.dat const int path_lines=68; e = gsl_matrix_alloc(path_lines, 7); gsl_vector * k_p =gsl_vector_alloc(path_lines); gsl_vector * phc_p=gsl_vector_alloc(path_lines); gsl_vector * mag_p=gsl_vector_alloc(path_lines); gsl_vector * pha_p=gsl_vector_alloc(path_lines); gsl_vector * lam_p=gsl_vector_alloc(path_lines); in= fopen("feff0001.dat", "r"); gsl_matrix_fscanf(in, e); fclose(in); gsl_matrix_get_col(k_p ,e,0); gsl_matrix_get_col(phc_p,e,1); gsl_matrix_get_col(mag_p,e,2); gsl_matrix_get_col(pha_p,e,3); gsl_matrix_get_col(lam_p,e,5); gsl_matrix_free(e); gsl_interp_accel *acc = gsl_interp_accel_alloc (); gsl_spline *k_spline = gsl_spline_alloc (gsl_interp_cspline, path_lines); gsl_spline *phc_spline = gsl_spline_alloc (gsl_interp_cspline, path_lines); gsl_spline *mag_spline = gsl_spline_alloc (gsl_interp_cspline, path_lines); gsl_spline *pha_spline = gsl_spline_alloc (gsl_interp_cspline, path_lines); gsl_spline *lam_spline = gsl_spline_alloc (gsl_interp_cspline, path_lines); gsl_spline_init (k_spline , k_p->data, k_p->data , path_lines); gsl_spline_init (phc_spline, k_p->data, phc_p->data, path_lines); gsl_spline_init (mag_spline, k_p->data, mag_p->data, path_lines); gsl_spline_init (pha_spline, k_p->data, pha_p->data, path_lines); gsl_spline_init (lam_spline, k_p->data, lam_p->data, path_lines); gsl_vector * mu_p =gsl_vector_alloc(path_lines); //struct fit_params { student_params t; double kshift; double S02; double N; inter_path splines; }; //student_params t = {2.45681867, 0.02776907, -21.28920008, 9.44741797, 0.0, 0.0, 0.0}; splines.acc=acc; splines.phc_spline=phc_spline; splines.mag_spline=mag_spline; splines.pha_spline=pha_spline; splines.lam_spline=lam_spline; fit_params fp = { 2.45681867, 0.02776907, -21.28920008, 9.44741797, 1.0, 0.0}; compute_itegral(k_p, &fp, mu_p); //mu_data_fit params = { k_p, mu_p}; mu_data.k = kvar_0pad; mu_data.mu = mu_0pad; mu_data.mu_ft = first_shell; mu_data.r = r_0pad; mu_data.kmin = kmin; mu_data.kmax = kmax; mu_data.rmin = rmin; mu_data.rmax = rmax; mu_data.dwk = dwk; mu_data.dwr = dwr; // initialize the solver size_t Nparams=6; gsl_vector *guess0 = gsl_vector_alloc(Nparams); gsl_vector_set(guess0, 0, 2.4307); gsl_vector_set(guess0, 1, 0.040969); gsl_vector_set(guess0, 2, 0.001314); gsl_vector_set(guess0, 3, 7835); gsl_vector_set(guess0, 4, 1.0); gsl_vector_set(guess0, 5, 0.0); gsl_vector *fit_r = gsl_vector_alloc(r_0pad->size); compute_itegral_r(&mu_data, fp, fit_r); gsl_matrix *plotting = gsl_matrix_calloc(r_0pad->size, 3); gsl_matrix_set_col (plotting, 0, r_0pad); gsl_matrix_set_col (plotting, 1, first_shell); gsl_matrix_set_col (plotting, 2, fit_r); plot_matplotlib(plotting); gsl_matrix_free (plotting); gsl_multifit_function_fdf fit_mu_k; fit_mu_k.f = &resudial_itegral_r; fit_mu_k.n = MAX_FIT_POINTS; fit_mu_k.p = Nparams; fit_mu_k.params = &mu_data; fit_mu_k.df = NULL; fit_mu_k.fdf = NULL; gsl_multifit_fdfsolver *solver = gsl_multifit_fdfsolver_alloc(gsl_multifit_fdfsolver_lmsder, MAX_FIT_POINTS, Nparams); gsl_multifit_fdfsolver_set(solver, &fit_mu_k, guess0); size_t iter=0, status; do{ iter++; //cout << solver->x->data[0] << " " << solver->x->data[1] <<endl; status = gsl_multifit_fdfsolver_iterate (solver); //printf("%12.4f %12.4f %12.4f\n", solver->J->data[0,0], solver->J->data[1,1], solver->J->data[2,2] ); //gsl_multifit_fdfsolver_dif_df (k_p, &fit_mu_k, mu_p, solver->J); //gsl_multifit_fdfsolver_dif_fdf (k_p, &fit_mu_k, mu_p, solver->J); for (int i =0; i< solver->x->size; i++){ printf("%14.5f", gsl_vector_get (solver->x, i)) ; } printf("\n") ; if (status) break; status = gsl_multifit_test_delta (solver->dx, solver->x, 1e-4, 1e-4); }while (status == GSL_CONTINUE && iter < 100); gsl_vector * mu_fit =gsl_vector_alloc(path_lines); fit_params fitp = { solver->x->data[0], solver->x->data[1],\ solver->x->data[2], solver->x->data[3],\ solver->x->data[4], solver->x->data[5]}; compute_itegral(k_p, &fitp, mu_fit); fp.mu=gsl_vector_get (solver->x, 0); fp.sig=gsl_vector_get (solver->x, 1); fp.skew=gsl_vector_get (solver->x, 2); fp.nu=gsl_vector_get (solver->x, 3); fp.S02=gsl_vector_get (solver->x, 4); fp.kshift=gsl_vector_get (solver->x, 5); compute_itegral_r(&mu_data, fp, fit_r); //gsl_matrix *plotting = gsl_matrix_calloc(r_0pad->size, 3); gsl_matrix_set_col (plotting, 0, r_0pad); gsl_matrix_set_col (plotting, 1, first_shell); gsl_matrix_set_col (plotting, 2, fit_r); int min_r=search_max(r_0pad, 0.); int max_r=search_max(r_0pad, 4.); gsl_matrix_view plotting_lim = gsl_matrix_submatrix (plotting, min_r, 0, max_r-min_r, plotting->size2); plot_matplotlib(&plotting_lim.matrix); gsl_matrix_free (plotting); //cout << gsl_spline_eval (k_spline, 1.333, acc) << endl; //cout << gsl_spline_eval (phc_spline, 1.333, acc) << endl; //cout << data[0] << "\t" << data[1] << "\t" << data[2] << "\t" << endl; //cout << fourier_data->data[0] << "\t" << fourier_data->data[1] << "\t" << fourier_data->data[2] << "\t" << endl; //Plotting /* gsl_matrix *plotting = gsl_matrix_calloc(zero_pad_size, 3); gsl_matrix_set_col (plotting, 0, kvar_0pad); gsl_matrix_set_col (plotting, 1, mu_0pad); gsl_matrix_set_col (plotting, 2, mu_widowed); int max_k=search_max(kvar_0pad, 35.); int min_k=search_max(kvar_0pad, 1.0); gsl_matrix_view plotting_lim = gsl_matrix_submatrix (plotting, min_k, 0, max_k-min_k, 3); plot_matplotlib(&plotting_lim.matrix); gsl_matrix_free (plotting); */ /* gsl_matrix *plotting = gsl_matrix_calloc(zero_pad_size, 2); gsl_matrix_set_col (plotting, 0, r_0pad); gsl_matrix_set_col (plotting, 1, mu_0pad); int max_k=search_max(kvar_0pad, 35.); int min_k=search_max(kvar_0pad, 1.0); gsl_matrix_view plotting_lim = gsl_matrix_submatrix (plotting, min_k, 0, max_k-min_k, 3); plot_matplotlib(&plotting_lim.matrix); gsl_matrix_free (plotting); */ /* gsl_matrix *plotting = gsl_matrix_calloc(r_0pad->size, 5); gsl_matrix_set_col (plotting, 0, r_0pad); gsl_matrix_set_col (plotting, 1, fftR_abs); gsl_matrix_set_col (plotting, 2, fftR_real); gsl_matrix_set_col (plotting, 3, fftR_imag); gsl_matrix_set_col (plotting, 4, first_shell); int min_r=search_max(r_0pad, 0.); int max_r=search_max(r_0pad, 5.); gsl_matrix_view plotting_lim = gsl_matrix_submatrix (plotting, min_r, 0, max_r-min_r, plotting->size2); plot_matplotlib(&plotting_lim.matrix); //plot_matplotlib(plotting); gsl_matrix_free (plotting); */ //cout << "Done" << endl; //cout << data[1] <<"\t" << data[2] << endl; //for (int i = 0; i < kvar->size; i++) //{ // cout << gsl_vector_get (kvar, i) <<"\t" << gsl_vector_get (muvar, i) << endl; //} }