version 1.146, 2004/06/04 22:06:07
|
version 1.153, 2004/10/05 20:18:29
|
Line 45 sub start_numericalresponse {
|
Line 45 sub start_numericalresponse {
|
$result.=&Apache::edit::text_arg('Answer:','answer',$token); |
$result.=&Apache::edit::text_arg('Answer:','answer',$token); |
if ($token->[1] eq 'numericalresponse') { |
if ($token->[1] eq 'numericalresponse') { |
$result.=&Apache::edit::text_arg('Incorrect Answers:','incorrect', |
$result.=&Apache::edit::text_arg('Incorrect Answers:','incorrect', |
$token); |
$token). |
|
&Apache::loncommon::help_open_topic('numerical_wrong_answers'); |
$result.=&Apache::edit::text_arg('Unit:','unit',$token,5). |
$result.=&Apache::edit::text_arg('Unit:','unit',$token,5). |
&Apache::loncommon::help_open_topic('Physical_Units'); |
&Apache::loncommon::help_open_topic('Physical_Units'); |
$result.=&Apache::edit::text_arg('Format:','format',$token,4). |
$result.=&Apache::edit::text_arg('Format:','format',$token,4). |
Line 102 sub start_numericalresponse {
|
Line 103 sub start_numericalresponse {
|
} else { |
} else { |
$format=$formats[0]; |
$format=$formats[0]; |
} |
} |
my $formatted; |
my $formatted=&format_number($answer,$format,$target, |
if ((defined($format)) && ($format ne '')) { |
$safeeval); |
$format=~s/e/E/g; |
$answertxt.=$formatted.','; |
&Apache::lonxml::debug("formatting with :$format: answer :$answer:"); |
|
$formatted=sprintf('%.'.$format,$answer).','; |
|
} else { |
|
&Apache::lonxml::debug("no format answer :$answer:"); |
|
$formatted="$answer,"; |
|
} |
|
$answertxt.=$formatted; |
|
} |
} |
chop $answertxt; |
chop $answertxt; |
if ($target eq 'web') { |
if ($target eq 'web') { |
$answertxt.=" $unit.<br />"; |
$answertxt.=" $unit "; |
} |
} |
$Apache::inputtags::answertxt{$id}=$answertxt; |
$Apache::inputtags::answertxt{$id}=$answertxt; |
} |
} |
Line 154 sub end_numericalresponse {
|
Line 148 sub end_numericalresponse {
|
my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval); |
my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval); |
my (@answers)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval); |
my (@answers)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval); |
my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval); |
my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval); |
my @values=&make_numerical_bubbles($number_of_bubbles,$target,$answers[0],$formats[0],\@incorrect); |
my @values=&make_numerical_bubbles($number_of_bubbles,$target,$answers[0],$formats[0],\@incorrect,$safeeval); |
$response=$values[$response]; |
$response=$values[$response]; |
} |
} |
$Apache::lonhomework::results{"resource.$partid.$id.submission"}=$response; |
$Apache::lonhomework::results{"resource.$partid.$id.submission"}=$response; |
Line 162 sub end_numericalresponse {
|
Line 156 sub end_numericalresponse {
|
$$args_ref{'response'}=$response; |
$$args_ref{'response'}=$response; |
my $hideunit=&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffunit'); |
my $hideunit=&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffunit'); |
|
|
foreach my $arg ('type','tol','sig','ans_fmt','unit','calc', |
foreach my $arg ('type','tol','sig','format','unit','calc', |
'samples') { |
'samples') { |
$$args_ref{$arg}= |
$$args_ref{$arg}= |
&Apache::lonxml::get_param($arg,$parstack,$safeeval); |
&Apache::lonxml::get_param($arg,$parstack,$safeeval); |
Line 234 sub end_numericalresponse {
|
Line 228 sub end_numericalresponse {
|
my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval); |
my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval); |
my @bubble_values=&make_numerical_bubbles($number_of_bubbles, |
my @bubble_values=&make_numerical_bubbles($number_of_bubbles, |
$target,$answers[0], |
$target,$answers[0], |
$formats[0],\@incorrect); |
$formats[0],\@incorrect,$safeeval); |
my @alphabet=('A'..'Z'); |
my @alphabet=('A'..'Z'); |
if ($target eq 'web') { |
if ($target eq 'web') { |
if ($tag eq 'numericalresponse') { |
if ($tag eq 'numericalresponse') { |
Line 330 sub end_numericalresponse {
|
Line 324 sub end_numericalresponse {
|
} |
} |
if ($fmt && $tag eq 'numericalresponse') { |
if ($fmt && $tag eq 'numericalresponse') { |
$fmt=~s/e/E/g; |
$fmt=~s/e/E/g; |
$ans = sprintf('%.'.$fmt,$ans); |
$ans = &format_number($ans,$fmt,$target,$safeeval); |
if ($high) { |
if ($high) { |
$high=sprintf('%.'.$fmt,$high); |
$high=&format_number($high,$fmt,$target,$safeeval); |
$low =sprintf('%.'.$fmt,$low); |
$low =&format_number($low,$fmt,$target,$safeeval); |
} |
} |
} |
} |
if ($target eq 'answer') { |
if ($target eq 'answer') { |
Line 411 sub get_table_sizes {
|
Line 405 sub get_table_sizes {
|
$textwidth=$1.'.'.$2; |
$textwidth=$1.'.'.$2; |
} |
} |
my $bubbles_per_line=int($textwidth/$cell_width); |
my $bubbles_per_line=int($textwidth/$cell_width); |
if (($bubbles_per_line > $number_of_bubbles/2) && ($number_of_bubbles % 2==0)) {$bubbles_per_line=$number_of_bubbles/2;} |
if ($bubbles_per_line > $number_of_bubbles) { |
|
$bubbles_per_line=$number_of_bubbles; |
|
}elsif (($bubbles_per_line > $number_of_bubbles/2) && ($number_of_bubbles % 2==0)) {$bubbles_per_line=$number_of_bubbles/2;} |
my $number_of_tables = int($number_of_bubbles/$bubbles_per_line); |
my $number_of_tables = int($number_of_bubbles/$bubbles_per_line); |
my @table_range = (); |
my @table_range = (); |
for (my $i=0;$i<$number_of_tables;$i++) {push @table_range,$bubbles_per_line;} |
for (my $i=0;$i<$number_of_tables;$i++) {push @table_range,$bubbles_per_line;} |
Line 425 sub get_table_sizes {
|
Line 421 sub get_table_sizes {
|
} |
} |
|
|
sub format_number { |
sub format_number { |
my ($number,$format,$target)=@_; |
my ($number,$format,$target,$safeeval)=@_; |
my $ans; |
my $ans; |
if ($format ne '') { |
if ($format eq '') { |
$format=~s/e/E/g; |
|
$ans = sprintf('%.'.$format,$number); |
|
} else { |
|
my $format = ''; |
|
#What is the number? (integer,decimal,floating point) |
#What is the number? (integer,decimal,floating point) |
if ($number=~/^(\d*\.?\d*)(E|e)(\d*)$/) { |
if ($number=~/^(\d*\.?\d*)(E|e)(\d*)$/) { |
$format = '3e'; |
$format = '3e'; |
Line 440 sub format_number {
|
Line 432 sub format_number {
|
} elsif ($number=~/^(\d*)$/) { |
} elsif ($number=~/^(\d*)$/) { |
$format = 'd'; |
$format = 'd'; |
} |
} |
$ans = sprintf('%.'.$format,$number); |
|
} |
|
if ($target eq 'tex') { |
|
if ($ans =~ m/([0-9\.\-\+]+)E([0-9\-\+]+)/ ) { |
|
my $number = $1; |
|
my $power = $2; |
|
$power=~s/^\+//; |
|
$power=~s/^(-?)0+(\d+)/$1$2/; |
|
$ans=$number.'$\times 10^{'.$power.'}$'; #'stupidemacs |
|
} |
|
} |
} |
|
$ans=&Apache::run::run("&prettyprint(q\0$number\0,q\0$format\0,q\0$target\0)",$safeeval); |
return $ans; |
return $ans; |
} |
} |
|
|
sub make_numerical_bubbles { |
sub make_numerical_bubbles { |
my ($number_of_bubbles,$target,$answer,$format,$incorrect) =@_; |
my ($number_of_bubbles,$target,$answer,$format,$incorrect,$safeeval) =@_; |
my @bubble_values = (); |
my @bubble_values = (); |
&Apache::lonxml::debug("answer is $answer incorrect is $incorrect"); |
&Apache::lonxml::debug("answer is $answer incorrect is $incorrect"); |
my @oldseed=&Math::Random::random_get_seed(); |
my @oldseed=&Math::Random::random_get_seed(); |
Line 472 sub make_numerical_bubbles {
|
Line 455 sub make_numerical_bubbles {
|
&Math::Random::random_set_seed(@oldseed); |
&Math::Random::random_set_seed(@oldseed); |
if (defined($format) && $format ne '') { |
if (defined($format) && $format ne '') { |
foreach my $value (@bubble_values) { |
foreach my $value (@bubble_values) { |
$value=&format_number($value,$format,$target); |
$value=&format_number($value,$format,$target,$safeeval); |
} |
} |
} |
} |
return @bubble_values; |
return @bubble_values; |
Line 492 sub make_numerical_bubbles {
|
Line 475 sub make_numerical_bubbles {
|
for ($ind=0;$ind<$number_of_bubbles;$ind++) { |
for ($ind=0;$ind<$number_of_bubbles;$ind++) { |
$bubble_values[$ind] = $answer*($factor**($power-$powers[$#powers-$ind])); |
$bubble_values[$ind] = $answer*($factor**($power-$powers[$#powers-$ind])); |
$bubble_values[$ind] = &format_number($bubble_values[$ind], |
$bubble_values[$ind] = &format_number($bubble_values[$ind], |
$format,$target); |
$format,$target,$safeeval); |
|
|
} |
} |
&Math::Random::random_set_seed(@oldseed); |
&Math::Random::random_set_seed(@oldseed); |
Line 517 sub get_tolrange {
|
Line 500 sub get_tolrange {
|
sub get_sigrange { |
sub get_sigrange { |
my ($sig)=@_; |
my ($sig)=@_; |
&Apache::lonxml::debug("Got a sig of :$sig:"); |
&Apache::lonxml::debug("Got a sig of :$sig:"); |
|
my $courseid=$ENV{'request.course.id'}; |
|
if (lc($ENV{"course.$courseid.disablesigfigs"}) eq 'yes') { |
|
return (15,0); |
|
} |
my $sig_lbound; |
my $sig_lbound; |
my $sig_ubound; |
my $sig_ubound; |
if ($sig eq '') { |
if ($sig eq '') { |
Line 548 sub start_stringresponse {
|
Line 535 sub start_stringresponse {
|
my $result; |
my $result; |
my $id = &Apache::response::start_response($parstack,$safeeval); |
my $id = &Apache::response::start_response($parstack,$safeeval); |
if ($target eq 'meta') { |
if ($target eq 'meta') { |
&Apache::response::start_response($parstack,$safeeval); |
|
$result=&Apache::response::meta_package_write('stringresponse'); |
$result=&Apache::response::meta_package_write('stringresponse'); |
&Apache::response::end_response(); |
|
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_start($target,$token); |
$result.=&Apache::edit::tag_start($target,$token); |
$result.=&Apache::edit::text_arg('Answer:','answer',$token); |
$result.=&Apache::edit::text_arg('Answer:','answer',$token); |
Line 558 sub start_stringresponse {
|
Line 543 sub start_stringresponse {
|
[['cs','Case Sensitive'],['ci','Case Insensitive'], |
[['cs','Case Sensitive'],['ci','Case Insensitive'], |
['mc','Case Insensitive, Any Order'], |
['mc','Case Insensitive, Any Order'], |
['re','Regular Expression']],$token); |
['re','Regular Expression']],$token); |
|
$result.=&Apache::edit::text_arg('String to display for answer:', |
|
'answerdisplay',$token); |
$result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
$result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $constructtag; |
my $constructtag; |
Line 570 sub start_stringresponse {
|
Line 557 sub start_stringresponse {
|
} |
} |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
if ( &Apache::response::show_answer() ) { |
if ( &Apache::response::show_answer() ) { |
$Apache::inputtags::answertxt{$id}= |
my $answer= |
&Apache::lonxml::get_param('answer',$parstack,$safeeval); |
&Apache::lonxml::get_param('answerdisplay',$parstack,$safeeval); |
|
if (!defined $answer || $answer eq '') { |
|
$answer= |
|
&Apache::lonxml::get_param('answer',$parstack,$safeeval); |
|
} |
|
$Apache::inputtags::answertxt{$id}=$answer; |
} |
} |
} elsif ($target eq 'answer' || $target eq 'grade') { |
} elsif ($target eq 'answer' || $target eq 'grade') { |
&Apache::response::reset_params(); |
&Apache::response::reset_params(); |