Diff for /loncom/homework/caparesponse/caparesponse.pm between versions 1.171 and 1.180

version 1.171, 2005/06/26 22:30:05 version 1.180, 2005/09/08 17:49:22
Line 330  sub end_numericalresponse { Line 330  sub end_numericalresponse {
  if ($target eq 'answer') {   if ($target eq 'answer') {
     $result.=&Apache::response::answer_header($tag);      $result.=&Apache::response::answer_header($tag);
  }   }
    my ($sigline,$tolline);
  for(my $i=0;$i<=$#answers;$i++) {   for(my $i=0;$i<=$#answers;$i++) {
     my $ans=$answers[$i];      my $ans=$answers[$i];
     my $fmt=$formats[0];      my $fmt=$formats[0];
Line 352  sub end_numericalresponse { Line 353  sub end_numericalresponse {
  #    $low =&format_number($low,$fmt,$target,$safeeval);   #    $low =&format_number($low,$fmt,$target,$safeeval);
  #}   #}
     }      }
     my $response=$ans;  
     if ($unit) {  
  my $cleanunit=$unit;  
  $cleanunit=~s/\$\,//g;  
  $response.=" $cleanunit";  
     }  
     if ($target eq 'answer') {      if ($target eq 'answer') {
  if ($high && $tag eq 'numericalresponse') { $ans.=' ['.$low.','.$high.']'; }   if ($high && $tag eq 'numericalresponse') {
       $ans.=' ['.$low.','.$high.']';
       $tolline .= "[$low, $high]";
    }
  if (defined($sighigh) && $tag eq 'numericalresponse') {   if (defined($sighigh) && $tag eq 'numericalresponse') {
     if ($env{'form.answer_output_mode'} eq 'tex') {      if ($env{'form.answer_output_mode'} eq 'tex') {
  $ans.= " Sig $siglow - $sighigh";   $ans.= " Sig $siglow - $sighigh";
     } else {      } else {
  $ans.= " Sig <i>$siglow - $sighigh</i>";   $ans.= " Sig <i>$siglow - $sighigh</i>";
    $sigline .= "[$siglow, $sighigh]";
     }      }
  }   }
  $result.=&Apache::response::answer_part($tag,$ans);   $result.=&Apache::response::answer_part($tag,$ans);
Line 378  sub end_numericalresponse { Line 377  sub end_numericalresponse {
     push (@{ $Apache::lonhomework::analyze{"$part_id.format"} }, $fmt);      push (@{ $Apache::lonhomework::analyze{"$part_id.format"} }, $fmt);
  }   }
     }      }
     my ($awards,$msgs)=&check_submission($response,$partid,$id,$tag,   }
  $parstack,$safeeval);  
     my ($ad,$msg) =&Apache::inputtags::finalizeawards($awards,$msgs);   my @fmt_ans;
     if ($ad ne 'EXACT_ANS' && $ad ne 'APPROX_ANS') {   for(my $i=0;$i<=$#answers;$i++) {
       my $ans=$answers[$i];
       my $fmt=$formats[0];
       if (@formats && $#formats) {$fmt=$formats[$i];}
       if ($fmt && $tag eq 'numericalresponse') {
    $fmt=~s/e/E/g;
    if ($unit=~/\$/) { $fmt="\$".$fmt; $unit=~s/\$//g; }
    if ($unit=~/\,/) { $fmt="\,".$fmt; $unit=~s/\,//g; }
    $ans = &format_number($ans,$fmt,$target,$safeeval);
    if ($fmt=~/\$/ && $unit!~/\$/) { $ans=~s/\$//; }
       }
       push(@fmt_ans,$ans);
    }
    my $response=join(', ',@fmt_ans);
    my $hideunit=&Apache::lonnet::EXT('resource.'.$partid.'_'.
     $id.'.turnoffunit');
    if ($unit ne ''  && 
       ! ($Apache::lonhomework::type eq 'exam' ||
          lc($hideunit) eq "yes") )  {
       my $cleanunit=$unit;
       $cleanunit=~s/\$\,//g;
       $response.=" $cleanunit";
    }
   
    my ($awards,$msgs)=&check_submission($response,$partid,$id,$tag,
        $parstack,$safeeval);
    my ($ad,$msg) =&Apache::inputtags::finalizeawards($awards,$msgs);
    if ($ad ne 'EXACT_ANS' && $ad ne 'APPROX_ANS') {
       my $error;
       if ($tag eq 'formularesponse') {
    $error=&mt('Computer\'s answer is incorrect ("[_1]").');
       } else {
  # answer failed check if it is sig figs that is failing   # answer failed check if it is sig figs that is failing
  my ($awards,$msgs)=&check_submission($response,$partid,$id,   my ($awards,$msgs)=&check_submission($response,$partid,$id,
      $tag,$parstack,$safeeval,       $tag,$parstack,
      1);       $safeeval,1);
  my ($ad,$msg)=&Apache::inputtags::finalizeawards($awards,   ($ad,$msg)=&Apache::inputtags::finalizeawards($awards,
  $msgs);        $msgs);
       
  my $msg=&mt('Computer\'s answer is incorrect ("[_1]"). It is likely that the tolerance range ("[_2]" to "[_3]") or significant figures ("[_4]" to "[_5]") needs to be adjusted',$response,$low,$high,$siglow,$sighigh);   if ($sigline ne '') {
  if ($ad ne 'EXACT_ANS' && $ad ne 'APPROX_ANS') {      $error=&mt('Computer\'s answer is incorrect ("[_1]"). It is likely that the tolerance range [_2] or significant figures [_3] need to be adjusted.',$response,$tolline,$sigline);
     &Apache::lonxml::error($msg);  
  } else {   } else {
     &Apache::lonxml::warning($msg);      $error=&mt('Computer\'s answer is incorrect ("[_1]"). It is likely that the tolerance range [_2] needs to be adjusted.',$response,$tolline);
  }   }
     }      }
       if ($ad ne 'EXACT_ANS' && $ad ne 'APPROX_ANS') {
    &Apache::lonxml::error($error);
       } else {
    &Apache::lonxml::warning($error);
       }
  }   }
   
  if (defined($unit) and ($unit ne '') and   if (defined($unit) and ($unit ne '') and
     $tag eq 'numericalresponse') {      $tag eq 'numericalresponse') {
     if ($target eq 'answer') {      if ($target eq 'answer') {
Line 665  sub end_stringresponse { Line 700  sub end_stringresponse {
 # $answer=$token->[2]->{'answer'};  # $answer=$token->[2]->{'answer'};
 #    }  #    }
     ${$safeeval->varglob('LONCAPA::response')}=$response;      ${$safeeval->varglob('LONCAPA::response')}=$response;
     $result = &Apache::run::run('return $LONCAPA::response=~m'.$answer,$safeeval);      $result = &Apache::run::run('if ($LONCAPA::response=~m'.$answer.') { return 1; } else { return 0; }',$safeeval);
     &Apache::lonxml::debug("current $response");      &Apache::lonxml::debug("current $response");
     &Apache::lonxml::debug("current $answer");      &Apache::lonxml::debug("current $answer");
     $ad = ($result) ? 'APPROX_ANS' : 'INCORRECT';      $ad = ($result) ? 'APPROX_ANS' : 'INCORRECT';
Line 726  sub end_stringresponse { Line 761  sub end_stringresponse {
 # foreach my $ans (@answers) {  # foreach my $ans (@answers) {
     if ($target eq 'answer') {      if ($target eq 'answer') {
  $result.=&Apache::response::answer_part('stringresponse',$answer);   $result.=&Apache::response::answer_part('stringresponse',$answer);
    if ($type eq 're') {
       $result.=&Apache::response::answer_part('stringresponse',
       $answerdisplay);
    }
     } elsif ($target eq 'analyze') {      } elsif ($target eq 'analyze') {
  push (@{ $Apache::lonhomework::analyze{"$part.$id.answer"} },   push (@{ $Apache::lonhomework::analyze{"$part.$id.answer"} },
       $answer);        $answer);

Removed from v.1.171  
changed lines
  Added in v.1.180


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