--- loncom/homework/default_homework.lcpm 2004/05/17 22:20:21 1.80 +++ loncom/homework/default_homework.lcpm 2004/06/09 21:08:21 1.86 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run() # -# $Id: default_homework.lcpm,v 1.80 2004/05/17 22:20:21 albertel Exp $ +# $Id: default_homework.lcpm,v 1.86 2004/06/09 21:08:21 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -69,6 +69,7 @@ sub caparesponse_check { $answer=~s/ +/ /g; $response=~s/ +/ /g; } + if ($type eq 'float') { $response=~s/,//g; } if (length($response) > 500) { return "TOO_LONG: Answer too long"; } if ($type eq '' ) { @@ -105,17 +106,8 @@ sub caparesponse_check { } } - if ($sig eq '') { - $sig_lbound = 0; #SIG_LB_DEFAULT - $sig_ubound =15; #SIG_UB_DEFAULT - } else { - ($sig_lbound,$sig_ubound) = split /,/,$sig; - if (!defined($sig_lbound)) { - $sig_lbound = 0; #SIG_LB_DEFAULT - $sig_ubound =15; #SIG_UB_DEFAULT - } - if (!defined($sig_ubound)) { $sig_ubound=$sig_lbound; } - } + ($sig_ubound,$sig_lbound)=&LONCAPA_INTERNAL_get_sigrange($sig); + my $reterror=""; my $result = &caparesponse_capa_check_answer($response,$answer,$type, $tol_type,$tol, @@ -142,7 +134,7 @@ sub caparesponse_check { elsif ($result =='15') { $result='UNIT_IRRECONCIBLE'; } else {$result = "ERROR: Unknown Result:$result:$@:";} - return ("$result:\nRetError $reterror:\nError $error:\nAnswer $answer:\nResponse $response:\n type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|\n$message",$reterror); + return ("$result:\nRetError $reterror:\nAnswer $answer:\nResponse $response:\n type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|\n$message",$reterror); } @@ -172,7 +164,7 @@ sub caparesponse_check_list { $unit=$2; } } - $result.="Final final response :$responselist['-1']:\n"; + $result.="Final final response :$responselist['-1']:$unit:\n"; $result.=":$#list: answers\n"; $unit=~s/\s//; my $i=0; @@ -241,7 +233,10 @@ sub random { if ( ! $hidden::RANDOMINIT ) { if ($external::randomseed == 0) { $external::randomseed=1; } if ($external::randomseed =~/,/) { - my ($num1,$num2)=split(/,/,$seed); + my ($num1,$num2)=split(/,/,$external::randomseed); + &random_set_seed(1,abs($num1)); + } elsif ($external::randomseed =~/:/) { + my ($num1,$num2)=split(/:/,$external::randomseed); &random_set_seed(abs($num1),abs($num2)); } else { &random_set_seed(1,int(abs($external::randomseed))); @@ -480,15 +475,17 @@ sub floor {return (($_[0]-CORE::int($_[ sub format { my ($value,$fmt)=@_; - my $dollarmode,$commamode; - if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } - if ($fmt =~ /^,(.*)/) { $fmt=$1; $commamode=1; } + my ($dollarmode,$commamode,$alwaysperiod,$options); + if ($fmt =~ /^([^\d]*)(.*)/) { $options=$1; $fmt=$2; } + #if ($options =~ /\$/) { $dollamode=1; } + #if ($options =~ /,/) { $commamode=1; } + if ($options =~ /\./) { $alwaysperiod=1; } $fmt=~s/e/E/g; my $result=sprintf('%.'.$fmt,$value); - if ($fmt eq '0f') { $result .='.'; } + if ($alwaysperiod && $fmt eq '0f') { $result .='.'; } $result=~s/(E[+-]*)0/$1/; - if ($dollarmode) {$result=&dollarformat($result);} - if ($commamode) {$result=&commaformat($result);} + #if ($dollarmode) {$result=&dollarformat($result);} + #if ($commamode) {$result=&commaformat($result);} return $result; } @@ -534,13 +531,21 @@ sub chemparse { sub prettyprint { my ($value,$fmt,$target)=@_; my $result; - my $dollarmode,$commamode; if (!$target) { $target = $external::target; } if ($fmt =~ /chem/i) { return(&chemparse($value)); } - if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } - if ($fmt =~ /^,(.*)/) { $fmt=$1; $commamode=1; } + my ($dollarmode,$commamode,$alwaysperiod,$options); + if ($fmt =~ /^([^\d]*)(.*)/) { $options=$1; $fmt=$2; } + if ($options =~ /\$/) { $dollarmode=1; } + if ($options =~ /,/) { $commamode=1; } + if ($options =~ /\./) { $alwaysperiod=1; } if ($fmt) { $value=sprintf('%.'.$fmt,$value); } - if ($fmt eq '0f') { $value .='.'; } + if ($alwaysperiod && $fmt eq '0f') { + if ($target eq 'tex') { + $value .='\\ensuremath{.}'; + } else { + $value .='.'; + } + } if ($value =~ /([0-9\.\-\+]+)E([0-9\-\+]+)/i ) { my $frac=$1; if ($dollarmode) { $frac=&dollarformat($frac); } @@ -563,8 +568,8 @@ sub prettyprint { } } else { $result=$value; - if ($dollarmode) { $result=&dollarformat($result,$target); } - if ($commamode) { $result=&commaformat($result,$target); } + if ($dollarmode) { $result=&dollarformat($result,$target); } + elsif ($commamode) { $result=&commaformat($result,$target); } } return $result; }