Diff for /loncom/homework/caparesponse/caparesponse.pm between versions 1.259 and 1.263

version 1.259, 2018/09/13 17:00:05 version 1.263, 2021/10/05 02:41:32
Line 401  sub setup_capa_response { Line 401  sub setup_capa_response {
     if (ref($response)) {      if (ref($response)) {
  $$args_ref{'response'}=dclone($response);   $$args_ref{'response'}=dclone($response);
     } else {      } else {
  $$args_ref{'response'}=dclone([$response]);   $$args_ref{'response'}=dclone(["$response"]);
     }      }
 }  }
   
Line 760  sub end_numericalresponse { Line 760  sub end_numericalresponse {
  my $ans=$answers[$i];   my $ans=$answers[$i];
  my $fmt=$formats[0];   my $fmt=$formats[0];
  if (@formats && $#formats) {$fmt=$formats[$i];}   if (@formats && $#formats) {$fmt=$formats[$i];}
  foreach my $element (@$ans) {       my @answers;
    if (ref($ans) eq 'ARRAY') {
       @answers = (@{$ans});
    }
    foreach my $element (@answers) {    
     if ($fmt && $tag eq 'numericalresponse') {      if ($fmt && $tag eq 'numericalresponse') {
  $fmt=~s/e/E/g;   $fmt=~s/e/E/g;
  if ($unit=~/\$/) { $fmt="\$".$fmt; $unit=~s/\$//g; }   if ($unit=~/\$/) { $fmt="\$".$fmt; $unit=~s/\$//g; }
Line 770  sub end_numericalresponse { Line 774  sub end_numericalresponse {
  if ($fmt=~/\$/ && !$needsdollar) { $element=~s/\$//; }   if ($fmt=~/\$/ && !$needsdollar) { $element=~s/\$//; }
     }      }
  }   }
  push(@fmt_ans,join(',',@$ans));   push(@fmt_ans,join(',',@answers));
     }      }
     my $response=\@fmt_ans;      my $response=\@fmt_ans;
   
Line 1061  sub make_numerical_bubbles { Line 1065  sub make_numerical_bubbles {
                      &Math::Random::random_uniform_integer(1,1,10);                       &Math::Random::random_uniform_integer(1,1,10);
     }      }
     for ($ind=0;$ind<$number_of_bubbles;$ind++) {      for ($ind=0;$ind<$number_of_bubbles;$ind++) {
  $bubble_values[$ind] = $answerfactor*($factor**($power-$powers[$#powers-$ind]));   my $exponent = $power-$powers[$#powers-$ind];
    $bubble_values[$ind] = $answerfactor*($factor**$exponent);
   
    # If bubble is for correct answer (i.e., exponent = 0), and value
    # of $answerfactor * factor**$exponent is an integer with more than
    # 15 digits, assign $answerfactor itself as bubble value.
    # This prevents a "use fewer digits" issue on 64bit servers
    # when correct answer is >= 1e+16, and when correct bubble is A.
   
    if ($exponent == 0) {
       if ($bubble_values[$ind] =~ /^-?(\d+)$/) {
    if (length($1) > 15) {
       $bubble_values[$ind] = $answerfactor;
    }
       }
    }
   
  $bubble_display[$ind] = &format_number($bubble_values[$ind],   $bubble_display[$ind] = &format_number($bubble_values[$ind],
        $format,$target,$safeeval);         $format,$target,$safeeval);
     }      }

Removed from v.1.259  
changed lines
  Added in v.1.263


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>