--- capa/capa51/pProj/capaCommon.c 2005/12/01 20:05:22 1.25 +++ capa/capa51/pProj/capaCommon.c 2006/07/28 06:38:13 1.28 @@ -2934,11 +2934,11 @@ capa_check_ans(ai,ans, error) AnswerInfo char *us; /* ans_unit_str */ Unit_t *u_p; /* ans_unit */ int input_len, all_alphabet = 1, idx, ii, type; - int outcome, result = INCORRECT; + int outcome=-1, result = INCORRECT; int sig, corr_len; - int choice[ANSWER_STRING_LENG]; + int choice[MAX_ASCII]; char num_str[ANSWER_STRING_LENG], unit_str[ANSWER_STRING_LENG]; - char fmted[ANSWER_STRING_LENG], correctans[ANSWER_STRING_LENG], answer[ANSWER_STRING_LENG]; + char fmted[ANSWER_STRING_LENG], correctans[MAX_ASCII], answer[ANSWER_STRING_LENG]; double n_part; double given, target, ratio, fmted_target, target_u, target_l, scale=1.0; double delta; @@ -3040,17 +3040,17 @@ capa_check_ans(ai,ans, error) AnswerInfo { corr_len = strlen(s); input_len = strlen(ans); if( corr_len == input_len ) { - for(idx=0;idx tol ) { + outcome = INCORRECT; + } + } + return outcome; +} + /* -------------------------------------------------------------------------- */ /* assumming the formula is *fml_str and the student input is *input_str */ /* according to the type of tolerance, we form the final formula as */ @@ -3262,7 +3281,7 @@ char *fml_str;char *input_str;char *var_ char *check_fml_str; int f_len, i_len, outcome, error_code; PointsList_t *pt, *next; - double formula_val, diff; + double formula_val; f_len = strlen(fml_str); i_len = strlen(input_str); @@ -3274,21 +3293,20 @@ char *fml_str;char *input_str;char *var_ sprintf(check_fml_str,"(%s) / (%s)",input_str,fml_str); } outcome = APPROX_ANS; + if( pts_list==NULL ) { + error_code = f_eval_formula(&formula_val,check_fml_str, var_list, NULL); + if( ! error_code ) { + outcome = check_tol(formula_val,tol_type,tol); + } else { + outcome = BAD_FORMULA; + } + } + for(pt= pts_list; pt!=NULL ; pt=next) { next=pt->pts_next; error_code = f_eval_formula(&formula_val,check_fml_str, var_list, pt->pts_str); if( ! error_code ) { - if( tol_type == TOL_ABSOLUTE ) { - diff = tol - formula_val; - if( diff < 0.0 ) { - outcome = INCORRECT; - } - } else { - diff = abs(1.0 - formula_val) * 100.0 ; - if( diff > tol ) { - outcome = INCORRECT; - } - } + outcome = check_tol(formula_val,tol_type,tol); } else { outcome = BAD_FORMULA; break;