version 1.150, 2004/06/29 22:42:50
|
version 1.156, 2004/10/21 02:43:34
|
Line 62 sub start_numericalresponse {
|
Line 62 sub start_numericalresponse {
|
if ($token->[1] eq 'numericalresponse') { |
if ($token->[1] eq 'numericalresponse') { |
$constructtag=&Apache::edit::get_new_args($token,$parstack, |
$constructtag=&Apache::edit::get_new_args($token,$parstack, |
$safeeval,'answer', |
$safeeval,'answer', |
'incorrect','unit', |
'incorrect','unit', |
'format'); |
'format'); |
} elsif ($token->[1] eq 'formularesponse') { |
} elsif ($token->[1] eq 'formularesponse') { |
$constructtag=&Apache::edit::get_new_args($token,$parstack, |
$constructtag=&Apache::edit::get_new_args($token,$parstack, |
Line 103 sub start_numericalresponse {
|
Line 103 sub start_numericalresponse {
|
} else { |
} else { |
$format=$formats[0]; |
$format=$formats[0]; |
} |
} |
my $formatted; |
if ($unit=~/\$/) { $format="\$".$format; $unit=~s/\$//g; } |
if ((defined($format)) && ($format ne '')) { |
if ($unit=~/\,/) { $format="\,".$format; $unit=~s/\,//g; } |
$format=~s/e/E/g; |
my $formatted=&format_number($answer,$format,$target, |
&Apache::lonxml::debug("formatting with :$format: answer :$answer:"); |
$safeeval); |
$formatted=sprintf('%.'.$format,$answer).','; |
$answertxt.=$formatted.','; |
} else { |
|
&Apache::lonxml::debug("no format answer :$answer:"); |
|
$formatted="$answer,"; |
|
} |
|
$answertxt.=$formatted; |
|
} |
} |
chop $answertxt; |
chop $answertxt; |
if ($target eq 'web') { |
if ($target eq 'web') { |
Line 141 sub end_numericalresponse {
|
Line 136 sub end_numericalresponse {
|
if ($Apache::lonhomework::type eq 'exam' && |
if ($Apache::lonhomework::type eq 'exam' && |
$tag eq 'formularesponse') { |
$tag eq 'formularesponse') { |
$increment=&Apache::response::scored_response($partid,$id); |
$increment=&Apache::response::scored_response($partid,$id); |
|
} elsif ($Apache::lonhomework::type eq 'survey') { |
|
if ( !defined($ENV{'form.submitted'})) { return ''; } |
|
my $response = &Apache::response::getresponse(); |
|
if ( $response =~ /[^\s]/) { |
|
my %previous=&Apache::response::check_for_previous($response, |
|
$partid,$id); |
|
$Apache::lonhomework::results{"resource.$partid.$id.submission"}=$response; |
|
my $ad=$Apache::lonhomework::results{"resource.$partid.$id.awarddetail"}='SUBMITTED'; |
|
&Apache::response::handle_previous(\%previous,$ad); |
|
} |
} else { |
} else { |
my $response = &Apache::response::getresponse(); |
my $response = &Apache::response::getresponse(); |
if ( $response =~ /[^\s]/) { |
if ( $response =~ /[^\s]/) { |
Line 155 sub end_numericalresponse {
|
Line 160 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 163 sub end_numericalresponse {
|
Line 168 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 235 sub end_numericalresponse {
|
Line 240 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 305 sub end_numericalresponse {
|
Line 310 sub end_numericalresponse {
|
$Apache::lonhomework::analyze{"$part_id.type"} = $tag; |
$Apache::lonhomework::analyze{"$part_id.type"} = $tag; |
my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval); |
my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval); |
push (@{ $Apache::lonhomework::analyze{"$part_id.incorrect"} }, @incorrect); |
push (@{ $Apache::lonhomework::analyze{"$part_id.incorrect"} }, @incorrect); |
|
&Apache::response::check_if_computed($token,$parstack, |
|
$safeeval,'answer'); |
} |
} |
if (scalar(@$tagstack)) { |
if (scalar(@$tagstack)) { |
&Apache::response::setup_params($tag,$safeeval); |
&Apache::response::setup_params($tag,$safeeval); |
Line 331 sub end_numericalresponse {
|
Line 338 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); |
if ($unit=~/\$/) { $fmt="\$".$fmt; $unit=~s/\$//g; } |
if ($high) { |
if ($unit=~/\,/) { $fmt="\,".$fmt; $unit=~s/\,//g; } |
$high=sprintf('%.'.$fmt,$high); |
$ans = &format_number($ans,$fmt,$target,$safeeval); |
$low =sprintf('%.'.$fmt,$low); |
#if ($high) { |
} |
# $high=&format_number($high,$fmt,$target,$safeeval); |
|
# $low =&format_number($low,$fmt,$target,$safeeval); |
|
#} |
} |
} |
if ($target eq 'answer') { |
if ($target eq 'answer') { |
if ($high && $tag eq 'numericalresponse') { $ans.=' ['.$low.','.$high.']'; } |
if ($high && $tag eq 'numericalresponse') { $ans.=' ['.$low.','.$high.']'; } |
Line 412 sub get_table_sizes {
|
Line 421 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 426 sub get_table_sizes {
|
Line 437 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 441 sub format_number {
|
Line 448 sub format_number {
|
} elsif ($number=~/^(\d*)$/) { |
} elsif ($number=~/^(\d*)$/) { |
$format = 'd'; |
$format = 'd'; |
} |
} |
$ans = sprintf('%.'.$format,$number); |
|
} |
} |
if ($target eq 'tex') { |
if (!$Apache::lonxml::default_homework_loaded) { |
if ($ans =~ m/([0-9\.\-\+]+)E([0-9\-\+]+)/ ) { |
&Apache::lonxml::default_homework_load($safeeval); |
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 473 sub make_numerical_bubbles {
|
Line 474 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 493 sub make_numerical_bubbles {
|
Line 494 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 561 sub start_stringresponse {
|
Line 562 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 573 sub start_stringresponse {
|
Line 576 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(); |
Line 665 sub end_stringresponse {
|
Line 673 sub end_stringresponse {
|
if ($target eq 'analyze') { |
if ($target eq 'analyze') { |
push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id"); |
push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id"); |
$Apache::lonhomework::analyze{"$part.$id.type"} = 'stringresponse'; |
$Apache::lonhomework::analyze{"$part.$id.type"} = 'stringresponse'; |
|
&Apache::response::check_if_computed($token,$parstack,$safeeval, |
|
'answer'); |
} |
} |
&Apache::response::setup_params('stringresponse',$safeeval); |
&Apache::response::setup_params('stringresponse',$safeeval); |
if ($target eq 'answer') { |
if ($target eq 'answer') { |