Diff for /capa/capa51/pProj/capaCommon.c between versions 1.25 and 1.30

version 1.25, 2005/12/01 20:05:22 version 1.30, 2024/04/27 16:36:30
Line 150  funlockstream(sp) FILE *sp; Line 150  funlockstream(sp) FILE *sp;
   
 int  int
 inquery_a_lock(sp,cmd,type,offset,whence,len)  inquery_a_lock(sp,cmd,type,offset,whence,len)
 FILE *sp;int cmd;off_t offset;int whence;off_t len;  FILE *sp;int cmd;short int type;off_t offset;int whence;off_t len;
 {  {
   struct flock lock;    struct flock lock;
   int    fd;    int    fd;
Line 2934  capa_check_ans(ai,ans, error) AnswerInfo Line 2934  capa_check_ans(ai,ans, error) AnswerInfo
   char    *us;    /* ans_unit_str */    char    *us;    /* ans_unit_str */
   Unit_t  *u_p;   /* ans_unit     */    Unit_t  *u_p;   /* ans_unit     */
   int      input_len, all_alphabet = 1, idx, ii, type;    int      input_len, all_alphabet = 1, idx, ii, type;
   int      outcome, result = INCORRECT;    int      outcome=-1, result = INCORRECT;
   int      sig, corr_len;    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     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   n_part;
   double   given, target, ratio, fmted_target, target_u, target_l, scale=1.0;    double   given, target, ratio, fmted_target, target_u, target_l, scale=1.0;
   double   delta;    double   delta;
Line 3040  capa_check_ans(ai,ans, error) AnswerInfo Line 3040  capa_check_ans(ai,ans, error) AnswerInfo
           {            {
             corr_len = strlen(s); input_len = strlen(ans);              corr_len = strlen(s); input_len = strlen(ans);
             if( corr_len == input_len ) {              if( corr_len == input_len ) {
               for(idx=0;idx<ANSWER_STRING_LENG;idx++) {                for(idx=0;idx<MAX_ASCII;idx++) {
  choice[idx] = 0;correctans[idx] = 0;   choice[idx] = 0;correctans[idx] = 0;
       }        }
               result = EXACT_ANS;                result = EXACT_ANS;
               for(ii=0;ii<corr_len; ii++) {                for(ii=0;ii<corr_len; ii++) {
                 idx = toupper(s[ii]) - 'A'; choice[idx] =  1;                  idx = toupper(s[ii]); choice[idx] =  1;
               }                }
               for(ii=0;ii<input_len;ii++) {                for(ii=0;ii<input_len;ii++) {
                 idx = toupper(ans[ii]) - 'A'; correctans[idx] = 1;                  idx = toupper(ans[ii]); correctans[idx] = 1;
       }        }
       for(ii=0;ii<ANSWER_STRING_LENG;ii++) {        for(ii=0;ii<MAX_ASCII;ii++) {
  if(choice[ii] != correctans[ii] )  result = INCORRECT;   if(choice[ii] != correctans[ii] )  result = INCORRECT;
               }                }
             } else { result = INCORRECT; }              } else { result = INCORRECT; }
Line 3101  capa_check_answer(p, answer, error) Prob Line 3101  capa_check_answer(p, answer, error) Prob
   int     sig_l;     int     sig_l; 
   int     sig_u;    int     sig_u;
   char   *fmt;    char   *fmt;
   int     choice[ANSWER_STRING_LENG], correctans[ANSWER_STRING_LENG];    int     choice[MAX_ASCII], correctans[MAX_ASCII];
   int     ii, idx, corr_len, input_len;    int     ii, idx, corr_len, input_len;
   int     result = INCORRECT, sig, outcome, all_alphabet;    int     result = INCORRECT, sig, outcome=-1, all_alphabet;
   char    fmted[FORMAT_STRING_LENG];    char    fmted[FORMAT_STRING_LENG];
   double  given, target, ratio, fmted_target, target_u, target_l, scale=1.0;    double  given, target, ratio, fmted_target, target_u, target_l, scale=1.0;
   double  delta;    double  delta;
Line 3209  capa_check_answer(p, answer, error) Prob Line 3209  capa_check_answer(p, answer, error) Prob
           {            {
             corr_len = strlen(correct); input_len = strlen(answer);              corr_len = strlen(correct); input_len = strlen(answer);
             if( corr_len == input_len ) {              if( corr_len == input_len ) {
               for(idx=0;idx<ANSWER_STRING_LENG;idx++) {                for(idx=0;idx<MAX_ASCII;idx++) {
  choice[idx] = 0;correctans[idx] = 0;   choice[idx] = 0;correctans[idx] = 0;
       }        }
               result = EXACT_ANS;                result = EXACT_ANS;
               for(ii=0;ii<corr_len; ii++) {                for(ii=0;ii<corr_len; ii++) {
                 idx = toupper(correct[ii]) - 'A'; choice[idx] =  1;                  idx = toupper(correct[ii]); choice[idx] =  1;
               }                }
               for(ii=0;ii<input_len;ii++) {                for(ii=0;ii<input_len;ii++) {
                 idx = toupper(answer[ii]) - 'A'; correctans[idx] = 1;                  idx = toupper(answer[ii]); correctans[idx] = 1;
       }        }
       for(ii=0;ii<ANSWER_STRING_LENG;ii++) {        for(ii=0;ii<MAX_ASCII;ii++) {
  if(choice[ii] != correctans[ii] )  result = INCORRECT;   if(choice[ii] != correctans[ii] ) result = INCORRECT;
               }                }
             } else { result = INCORRECT; }              } else { result = INCORRECT; }
             break;              break;
Line 3250  capa_check_answer(p, answer, error) Prob Line 3250  capa_check_answer(p, answer, error) Prob
   return (result);    return (result);
 }  }
   
   int check_tol (formula_val,tol_type,tol)
   double formula_val;int tol_type;double tol;
   {
     double diff;
     int outcome=APPROX_ANS;
     if( tol_type == TOL_ABSOLUTE ) {
       diff = tol - formula_val;
       if( diff < 0.0 )  {
         outcome = INCORRECT;
       }
     } else {
       diff = fabs(1.0 - formula_val) * 100.0 ;
       if( diff > tol ) {
         outcome = INCORRECT;
       }
     }
     return outcome;
   }
   
 /* -------------------------------------------------------------------------- */  /* -------------------------------------------------------------------------- */
 /*   assumming the formula is *fml_str and the student input is *input_str             */  /*   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                  */  /*   according to the type of tolerance, we form the final formula as                  */
Line 3262  char *fml_str;char *input_str;char *var_ Line 3281  char *fml_str;char *input_str;char *var_
   char         *check_fml_str;    char         *check_fml_str;
   int           f_len, i_len, outcome, error_code;    int           f_len, i_len, outcome, error_code;
   PointsList_t *pt, *next;    PointsList_t *pt, *next;
   double        formula_val, diff;    double        formula_val;
       
   f_len = strlen(fml_str);    f_len = strlen(fml_str);
   i_len = strlen(input_str);    i_len = strlen(input_str);
Line 3274  char *fml_str;char *input_str;char *var_ Line 3293  char *fml_str;char *input_str;char *var_
     sprintf(check_fml_str,"(%s) / (%s)",input_str,fml_str);      sprintf(check_fml_str,"(%s) / (%s)",input_str,fml_str);
   }    }
   outcome = APPROX_ANS;    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) {    for(pt= pts_list; pt!=NULL ; pt=next) {
     next=pt->pts_next;      next=pt->pts_next;
     error_code = f_eval_formula(&formula_val,check_fml_str, var_list, pt->pts_str);      error_code = f_eval_formula(&formula_val,check_fml_str, var_list, pt->pts_str);
     if( ! error_code ) {      if( ! error_code ) {
       if( tol_type == TOL_ABSOLUTE ) {        outcome = check_tol(formula_val,tol_type,tol);
         diff = tol - formula_val;  
         if( diff < 0.0 )  {  
           outcome = INCORRECT;  
         }  
       } else {  
         diff = abs(1.0 - formula_val) * 100.0 ;  
         if( diff > tol ) {  
           outcome = INCORRECT;  
         }  
       }  
     } else {      } else {
       outcome = BAD_FORMULA;        outcome = BAD_FORMULA;
       break;        break;
     }      }
       if (outcome != APPROX_ANS) {
         break;
       }
   }    }
   capa_mfree((char *)check_fml_str);    capa_mfree((char *)check_fml_str);
       

Removed from v.1.25  
changed lines
  Added in v.1.30


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>