version 1.152.2.3, 2012/11/22 02:15:42
|
version 1.171, 2016/12/06 20:51:11
|
Line 253 sub caparesponse_check {
|
Line 253 sub caparesponse_check {
|
elsif ($result =='15') { $result='UNIT_IRRECONCIBLE'; } |
elsif ($result =='15') { $result='UNIT_IRRECONCIBLE'; } |
else {$result = "ERROR: Unknown Result:$result:$@:";} |
else {$result = "ERROR: Unknown Result:$result:$@:";} |
|
|
# &LONCAPA_INTERNAL_DEBUG("RetError $reterror: Answer $answer: Response $response: type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|"); |
|
# &LONCAPA_INTERNAL_DEBUG(" $answer $response $result "); |
|
return ($result,$reterror); |
return ($result,$reterror); |
} |
} |
|
|
Line 265 sub caparesponse_check_list {
|
Line 263 sub caparesponse_check_list {
|
my $type = $LONCAPA::CAPAresponse_args{'type'}; |
my $type = $LONCAPA::CAPAresponse_args{'type'}; |
my $answerunit=$LONCAPA::CAPAresponse_args{'unit'}; |
my $answerunit=$LONCAPA::CAPAresponse_args{'unit'}; |
&LONCAPA_INTERNAL_DEBUG("Got type :$type: answer unit :$answerunit:\n"); |
&LONCAPA_INTERNAL_DEBUG("Got type :$type: answer unit :$answerunit:\n"); |
|
|
my $preprocess=$LONCAPA::CAPAresponse_args{'preprocess'}; |
my $preprocess=$LONCAPA::CAPAresponse_args{'preprocess'}; |
$preprocess=~s/^\&//; |
$preprocess=~s/^\&//; |
|
|
Line 309 sub caparesponse_check_list {
|
Line 307 sub caparesponse_check_list {
|
my ($allowalgebra)=($LONCAPA::CAPAresponse_args{'allowalgebra'}=~/^(yes|1|on)$/i); |
my ($allowalgebra)=($LONCAPA::CAPAresponse_args{'allowalgebra'}=~/^(yes|1|on)$/i); |
if ($type eq 'float' || $type eq '') { |
if ($type eq 'float' || $type eq '') { |
#for numerical problems split off the unit |
#for numerical problems split off the unit |
my ($part1,$part2); |
my $part1; |
|
my $part2; |
if ($allowalgebra) { |
if ($allowalgebra) { |
($part1,$part2)=($responses->[0][-1]=~ /^(.*[^\s])\s+([^\s]+)$/); |
($part1,$part2)=($responses->[0][-1]=~ /^(.*[^\s])\s+([^\s]+)$/); |
} else { |
} else { |
($part1,$part2)=($responses->[0][-1]=~ /^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$/); |
($part1,$part2)=($responses->[0][-1]=~ /^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$/); |
} |
} |
Line 1044 sub format_significant_figures {
|
Line 1043 sub format_significant_figures {
|
my ($zeros) = ($xint =~ /(0+)$/); |
my ($zeros) = ($xint =~ /(0+)$/); |
# return number to original magnitude |
# return number to original magnitude |
my $numSig = $xint*10**($x10-$sig+$power); |
my $numSig = $xint*10**($x10-$sig+$power); |
# insert trailing zero's if have decimal point |
if ($numSig =~ /^(\d+)\.(\d+)/) { |
$numSig =~ s/^(\d+)\.(\d+)(\e?(.*)?)$/$1\.$2$zeros$3/; |
# insert trailing zero's if have decimal point |
# put a decimal pt for number ending with 0 and length = # of sig fig |
my @digarray = split('',$1.$2); |
$numSig.='.' if (length($numSig) == $sig && $numSig =~ /0$/); |
my $sigcount; |
if (length($numSig) < $sig) { |
while (@digarray > 0) { |
$numSig.='.'.substr($zeros,0,($sig-length($numSig))); |
my $item = shift(@digarray); |
|
if ($item) { |
|
$sigcount = 1 + @digarray; |
|
last; |
|
} |
|
} |
|
if (($sigcount) && ($sig >= $sigcount)) { |
|
$zeros = substr($zeros,0,($sig - $sigcount)); |
|
} |
|
$numSig =~ s/^(\d+)\.(\d+)(\e?(.*)?)$/$1\.$2$zeros$3/; |
|
} else { |
|
if ($numSig =~ /^(\d+)e([\+\-]\d+)$/i) { |
|
my $pre_exp = $1; |
|
my $exponent = $2; |
|
$numSig = $pre_exp.'.'.$zeros.'E'.$exponent; |
|
} elsif ($numSig =~ /0$/) { |
|
# add decimal pt for number ending with 0 and length == # of sig figs |
|
if (length($numSig) == $sig) { |
|
$numSig.='.'; |
|
} elsif (length($numSig) > $sig) { |
|
# exponential form for number ending with 0 and length > # of sig figs |
|
my $fmtsig = $sig-1; |
|
if ($fmtsig) { |
|
$numSig = sprintf('%.'.$fmtsig.'E',$numSig); |
|
} |
|
} elsif (length($numSig) < $sig) { |
|
$numSig.='.'.substr($zeros,0,($sig-length($numSig))); |
|
} |
|
} else { |
|
if (length($numSig) < $sig) { |
|
$numSig.='.'.substr($zeros,0,($sig-length($numSig))); |
|
} |
|
} |
} |
} |
# return number with sign |
# return number with sign |
return $sign.$numSig; |
return $sign.$numSig; |
|
|
} |
} |
|
|
sub map { |
sub map { |
Line 1184 sub middlename {
|
Line 1214 sub middlename {
|
$middlename = '' if $middlename eq ""; |
$middlename = '' if $middlename eq ""; |
return $middlename; |
return $middlename; |
} |
} |
|
|
sub lastname { |
sub lastname { |
my $lastname = &EXT('environment.lastname'); |
my $lastname = &EXT('environment.lastname'); |
$lastname = '' if $lastname eq ""; |
$lastname = '' if $lastname eq ""; |
Line 1198 sub sec {
|
Line 1228 sub sec {
|
} |
} |
|
|
sub submission { |
sub submission { |
my ($partid,$responseid,$subnumber)=@_; |
my ($partid,$responseid,$subnumber,$encode,$cleanupnum,$mapalias)=@_; |
my $sub=''; |
my $sub=''; |
if ($subnumber) { $sub=$subnumber.':'; } |
if ($subnumber) { $sub=$subnumber.':'; } |
return &EXT('user.resource.'.$sub.'resource.'.$partid.'.'.$responseid.'.submission'); |
my $output = |
|
&EXT('user.resource.'.$sub.'resource.'.$partid.'.'.$responseid.'.submission',$mapalias); |
|
if (ref($output) eq 'ARRAY') { |
|
my @items = @{$output}; |
|
if ($encode) { |
|
@items = map { &encode_response($_); } @items; |
|
} |
|
if (ref($cleanupnum) eq 'HASH') { |
|
@items = map { &cleanup_numerical_response($cleanupnum,$_); } @items; |
|
} |
|
return \@items; |
|
} else { |
|
if ($encode) { |
|
$output = &encode_response($output); |
|
} |
|
if (ref($cleanupnum) eq 'HASH') { |
|
$output = &cleanup_numerical_response($cleanupnum,$output); |
|
} |
|
return $output; |
|
} |
|
} |
|
|
|
sub encode_response { |
|
my ($value) = @_; |
|
$value =~ s/&/&/g; |
|
$value =~ s/</</g; |
|
$value =~ s/>/>/g; |
|
$value =~ s/"/"/g; |
|
return $value; |
|
} |
|
|
|
sub cleanup_numerical_response { |
|
my ($cleanupnum,$value) = @_; |
|
if (ref($cleanupnum) eq 'HASH') { |
|
if ($cleanupnum->{exponent}) { |
|
if ($value =~ m{^(.*)[\*xX]\s*10\s*\^\s*(\+|\-)?\s*(\d+)(.*)$}) { |
|
my $pre_exp = $1; |
|
my $sign = $2; |
|
my $exponent = $3; |
|
my $post_exp = $4; |
|
if ($pre_exp !~ /\./) { |
|
$pre_exp .= '.'; |
|
} |
|
if ($sign eq '') { |
|
$sign = '+'; |
|
} |
|
$value = $pre_exp.'E'.$sign.$exponent.$post_exp; |
|
} |
|
} |
|
if ($cleanupnum->{comma}) { |
|
$value =~ s{(\d+),(\d+)}{$1$2}; |
|
} |
|
if ($cleanupnum->{letterforzero}) { |
|
$value =~ s/^\s*o(\.\d+)/0$1/i; |
|
} |
|
if ($cleanupnum->{spaces}) { |
|
$value =~ s{^\s+|\s+$}{}g; |
|
if ($value =~ m{^(.*)\.\s+(\d+)(.*)$}) { |
|
my $pre_pt = $1; |
|
my $decimal = $2; |
|
my $post_dec = $3; |
|
$value = $pre_pt.'.'.$decimal.$post_dec; |
|
} |
|
} |
|
if ($cleanupnum->{format} =~ /^\d+s$/i) { |
|
$value = &format_significant_figures($value,$cleanupnum->{format}); |
|
} |
|
} |
|
return $value; |
} |
} |
|
|
sub currentpart { |
sub currentpart { |
Line 1360 sub proper_path {
|
Line 1458 sub proper_path {
|
} |
} |
} |
} |
|
|
|
sub input_id { |
|
my ($part_id, $response_id, $textline_id) = @_; |
|
return 'HWVAL_'.$part_id.'_'.$response_id.'_'.$textline_id; |
|
} |
|
|