--- loncom/homework/default_homework.lcpm 2000/10/25 22:02:53 1.7 +++ loncom/homework/default_homework.lcpm 2000/11/22 00:00:54 1.11 @@ -5,54 +5,88 @@ $RANDOMINIT=0; sub caparesponse_check { - my $answer=''; - my $type=''; - my $tol_type=''; - my $tolerance=''; + 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 $ans_fmt=''; - my $unit_str=''; + my $units=''; my $calc=''; my ($response,$expr)=@_; - ($answer,$type,$tol_type,$tolerance,$sig_lbound,$sig_ubound,$ans_fmt, - $unit_str,$calc) = eval $expr.'return $answer,$type,$tol_type,$tolerance,$sig_lbound,$sig_ubound,$ans_fmt,$unit_str,$calc'; + ($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'; + + #type's definitons come from capaParser.h + if ($type eq '' ) { + if ( $answer eq ($answer *1.0)) { $type = 2; + } else { $type = 3; } + } else { + if ($type eq 'cs') { $type = 4; + } elsif ($type eq 'ci') { $type = 3; + } elsif ($type eq 'mc') { $type = 5; + } elsif ($type eq 'fml') { $type = 8; + } elsif ($type eq 'subj') { $type = 7; + } else { return "ERROR: Unknown type of answer: $type" } + } + + if ($tol eq '') { + $tol=0.0; + $tol_type=1; #TOL_ABSOLUTE + } else { + if ($tol =~ /%$/) { + $tol=chop($tol); + $tol_type=2; #TOL_PERCENTAGE + } else { + $tol_type=1; #TOL_ABSOLUTE + } + } my $result = &caparesponse_capa_check_answer($response,$answer,$type, - $tol_type,$tolerance, + $tol_type,$tol, $sig_lbound,$sig_ubound, - $ans_fmt, $unit_str,$calc); - return ":$result:$response:$answer:"; + $ans_fmt, $units,$calc); + + if ($result == '1') { $result='EXACT_ANS'; } + elsif ($result == '2') { $result='APPROX_ANS'; } + elsif ($result == '3') { $result='SIG_FAIL'; } + elsif ($result == '4') { $result='UNIT_FAIL'; } + elsif ($result == '5') { $result='NO_UNIT'; } + elsif ($result == '6') { $result='UNIT_OK'; } + elsif ($result == '7') { $result='INCORRECT'; } + elsif ($result == '8') { $result='UNIT_NOTNEEDED'; } + elsif ($result == '9') { $result='ANS_CNT_NOT_MATCH'; } + elsif ($result =='10') { $result='SUB_RECORDED'; } + elsif ($result =='11') { $result='BAD_FORMULA'; } + elsif ($result =='12') { $result='WANTED_NUMERIC'; } + else {$result = "ERROR: Unknown Result: $result";} + + return "$result:$tol:$tol_type"; } sub tex { if ( $external::target eq "tex" ) { - #$SCRIPT_RESULT.=@_[0]; return @_[0]; } else { - #$SCRIPT_RESULT.=@_[1]; return @_[1]; } } sub web { if ( $external::target eq "tex" ) { - #$SCRIPT_RESULT.=@_[1]; return @_[1]; } else { if ( $external::target eq "web") { - #$SCRIPT_RESULT.=@_[0]; return @_[0]; } else { - #$SCRIPT_RESULT.=@_[2]; return @_[2]; } } } sub problem { - $SCRIPT_RESULT.='1'; - return ''; + return '1'; } sub hinton { @@ -73,7 +107,6 @@ sub asin { atan2($_[0], sqrt(1- $_[0] * sub html { if ( $external::target eq "web" ) { - #$SCRIPT_RESULT.=@_[0]; return @_[0]; } } @@ -85,7 +118,7 @@ sub floor {return int($_[0]); } sub format { my ($value,$fmt)=@_; - $SCRIPT_RESULT.=sprintf('%.'.$fmt,$value); + return sprintf('%.'.$fmt,$value); } sub map {