version 1.153, 2006/12/11 17:37:43
|
version 1.156, 2006/12/15 22:11:43
|
Line 488 sub start_mathresponse {
|
Line 488 sub start_mathresponse {
|
} |
} |
} elsif ($target eq 'answer' || $target eq 'grade') { |
} elsif ($target eq 'answer' || $target eq 'grade') { |
&Apache::response::reset_params(); |
&Apache::response::reset_params(); |
my $args_ref= \%{$safeeval->varglob('LONCAPA::mathresponse_args')}; |
|
undef(%{ $args_ref }); |
|
$$args_ref{'cas'}=$token->[2]{'cas'}; |
|
$$args_ref{'args'}=$token->[2]{'args'}; |
|
} elsif ($target eq 'meta') { |
} elsif ($target eq 'meta') { |
$result .= &Apache::response::meta_package_write('mathresponse'); |
$result .= &Apache::response::meta_package_write('mathresponse'); |
} |
} |
Line 514 sub end_mathresponse {
|
Line 510 sub end_mathresponse {
|
$Apache::lonhomework::results{"resource.$part.$id.submission"}= |
$Apache::lonhomework::results{"resource.$part.$id.submission"}= |
$response; |
$response; |
my $error; |
my $error; |
my $args_ref= \%{$safeeval->varglob('LONCAPA::mathresponse_args')}; |
my $award; |
my $award; |
my $cas = &Apache::lonxml::get_param('cas',$parstack,$safeeval); |
if ($$args_ref{'cas'} eq 'maxima') { |
if ($cas eq 'maxima') { |
$award=&Apache::lonmaxima::maxima_run($Apache::response::custom_answer,$response,$$args_ref{'args'}); |
my $args = [&Apache::lonxml::get_param_var('args',$parstack,$safeeval)]; |
} |
$award=&Apache::lonmaxima::maxima_run($Apache::response::custom_answer,$response,$args); |
|
} |
if (!&Apache::inputtags::valid_award($award)) { |
if (!&Apache::inputtags::valid_award($award)) { |
$error = $award; |
$error = $award; |
$award = 'ERROR'; |
$award = 'ERROR'; |
Line 538 sub end_mathresponse {
|
Line 535 sub end_mathresponse {
|
return $result; |
return $result; |
} |
} |
|
|
|
sub implicit_multiplication { |
|
my ($expression)=@_; |
|
# Escape scientific notation, so 3e8 does not become 3*e*8 |
|
# 3e8 -> 3&8; 3e-8 -> 3&-8; 3E+8 -> e&+8 |
|
$expression=~s/(\d+)e([\+\-]*\d+)/$1\&\($2\)/gsi; |
|
# 3x10^8 -> 3&8; 3*10^-8 -> 3&-8 |
|
$expression=~s/(\d+)(?:x|\*)10(?:\^|\*\*)([\+\-]*\d+)/$1\&\($2\)/gsi; |
|
# Fill in multiplication signs |
|
# a b -> a*b;3 b -> 3*b;3 4 -> 3*4 |
|
$expression=~s/(\w)\s+(\w)/$1\*$2/gs; |
|
# )( -> )*(; ) ( -> )*( |
|
$expression=~s/\)\s*\(/\)\*\(/gs; |
|
# 3a -> 3*a; 3( -> 3*(; 3 ( -> 3*(; 3A -> 3*A |
|
$expression=~s/(\d)\s*([a-zA-Z\(])/$1\*$2/gs; |
|
# a ( -> a*( |
|
$expression=~s/(\w)\s+\(/$1\*\(/gs; |
|
# )a -> )*a; )3 -> )*3; ) 3 -> )*3 |
|
$expression=~s/\)\s*(\w)/\)\*$1/gs; |
|
# 3&8 -> 3e8; 3&-4 -> 3e-4 |
|
$expression=~s/(\d+)\&\(([\+\-]*\d+)\)/$1e$2/gs; |
|
return $expression; |
|
} |
|
|
sub start_answer { |
sub start_answer { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |