--- loncom/homework/default_homework.lcpm 2000/11/22 00:00:54 1.11 +++ loncom/homework/default_homework.lcpm 2001/05/08 14:57:12 1.19 @@ -2,23 +2,25 @@ # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run() # # +#init some globals $RANDOMINIT=0; +$pi=atan2(1,1)*4; sub caparesponse_check { my $answer=''; #done my $type=''; #done my $tol_type=''; # gets it's value from whether tol has a % or not done my $tol=''; #done - my $sig_lbound=''; - my $sig_ubound=''; + my $sig=''; #done lowerbnd,upperbnd + my $sig_lbound=''; #done + my $sig_ubound=''; #done my $ans_fmt=''; - my $units=''; + my $units=''; #done my $calc=''; my ($response,$expr)=@_; - ($answer,$type,$tol,$sig_lbound,$sig_ubound,$ans_fmt, - $units,$calc) = eval $expr.'return $answer,$type,$tol,$sig_lbound,$sig_ubound,$ans_fmt,$units,$calc'; - + ($answer,$type,$tol,$sig,$ans_fmt, + $units,$calc) = eval $expr.';return $answer,$type,$tol,$sig,$ans_fmt,$units,$calc'; #type's definitons come from capaParser.h if ($type eq '' ) { if ( $answer eq ($answer *1.0)) { $type = 2; @@ -37,16 +39,23 @@ sub caparesponse_check { $tol_type=1; #TOL_ABSOLUTE } else { if ($tol =~ /%$/) { - $tol=chop($tol); + chop $tol; $tol_type=2; #TOL_PERCENTAGE } else { $tol_type=1; #TOL_ABSOLUTE } } + + if ($sig eq '') { + $sig_lbound = 0; #SIG_LB_DEFAULT + $sig_ubound =15; #SIG_UB_DEFAULT + } else { + ($sig_lbound,$sig_ubound) = split /,/,$sig; + } my $result = &caparesponse_capa_check_answer($response,$answer,$type, $tol_type,$tol, $sig_lbound,$sig_ubound, - $ans_fmt, $units,$calc); + $ans_fmt,$units,$calc); if ($result == '1') { $result='EXACT_ANS'; } elsif ($result == '2') { $result='APPROX_ANS'; } @@ -60,9 +69,43 @@ sub caparesponse_check { elsif ($result =='10') { $result='SUB_RECORDED'; } elsif ($result =='11') { $result='BAD_FORMULA'; } elsif ($result =='12') { $result='WANTED_NUMERIC'; } - else {$result = "ERROR: Unknown Result: $result";} + else {$result = "ERROR: Unknown Result:$result:$@:";} + + return "$result:
Error $error:
Answer $answer:
Response $response:
$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$units
"; +} - return "$result:$tol:$tol_type"; +sub caparesponse_check_list { + my ($response,$expr)=@_; + my $result=''; + my $aresult=''; + my $current_answer; + my $answer = eval $expr.';return $answer'; + my (@list) = eval $answer; + my (@responselist)=split /,/,$response; + my $unit=''; + $result.="Final response :$responselist['-1']:
"; + if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) { + $responselist['-1']=$1; + $unit=$2; + } + $result.="Final response :$responselist['-1']:
"; + $unit=~s/\s//; + my $i=0; + my $awards=''; + for ($i=0; $i<@list;$i++) { + if ($unit eq '') { + $aresult=&caparesponse_check($responselist[$i], + $expr.';my $answer='.$list[$i].';'); + } else { + $aresult=&caparesponse_check($responselist[$i]." $unit", + $expr.';my $answer='.$list[$i].';'); + } + my ($temp)=split /:/, $aresult; + $awards.="$temp,"; + $result.=$aresult; + } + chop $awards; + return "$awards:
$result"; } sub tex { @@ -102,8 +145,10 @@ sub random { } sub tan { sin($_[0]) / cos($_[0]) } +sub atan { atan2($_[0], 1); } sub acos { atan2(sqrt(1 - $_[0] * $_[0]), $_[0] ); } sub asin { atan2($_[0], sqrt(1- $_[0] * $_[0]) ); } +sub log10 { log($_[0])/log(10); } sub html { if ( $external::target eq "web" ) {