Diff for /loncom/homework/default_homework.lcpm between versions 1.96 and 1.100

version 1.96, 2005/03/29 17:57:51 version 1.100, 2005/06/17 20:24:56
Line 89  sub caparesponse_check { Line 89  sub caparesponse_check {
     } else {      } else {
  $message .="no ws in :$response:\n";   $message .="no ws in :$response:\n";
     }      }
     if ($type eq 'cs' || $type eq 'ci' || $type eq 'mc') {      &LONCAPA_INTERNAL_DEBUG(" type is $type ");
       if ($type eq 'cs' || $type eq 'ci') {
  #for string answers make surec all places spaces occur, there is    #for string answers make surec all places spaces occur, there is 
         #really only 1 space, in both the answer and the response          #really only 1 space, in both the answer and the response
  $answer=~s/ +/ /g;   $answer=~s/ +/ /g;
  $response=~s/ +/ /g;   $response=~s/ +/ /g;
       } elsif ($type eq 'mc') {
    $answer=~s/[\s,]//g;
    $response=~s/[\s,]//g;
     }      }
     if ($type eq 'float' && $unit=~/\$/) {      if ($type eq 'float' && $unit=~/\$/) {
  if ($response!~/^\$/)  { return "NO_UNIT: Missing \$ "; }   if ($response!~/^\$/)  { return "NO_UNIT: Missing \$ "; }
Line 518  sub format { Line 522  sub format {
     #if ($options =~ /\$/) { $dollamode=1; }      #if ($options =~ /\$/) { $dollamode=1; }
     #if ($options =~ /,/)  { $commamode=1; }      #if ($options =~ /,/)  { $commamode=1; }
     if ($options =~ /\./) { $alwaysperiod=1; }      if ($options =~ /\./) { $alwaysperiod=1; }
     $fmt=~s/e/E/g;      my $result;
     my $result=sprintf('%.'.$fmt,$value);      if ($fmt=~/s$/i) {
     if ($alwaysperiod && $fmt eq '0f') { $result .='.'; }   $result=&format_significant_figures($value,$fmt);
     $result=~s/(E[+-]*)0/$1/;      } else {
    $fmt=~s/e/E/g;
    $result=sprintf('%.'.$fmt,$value);
    if ($alwaysperiod && $fmt eq '0f') { $result .='.'; }
    $result=~s/(E[+-]*)0/$1/;
       }
     #if ($dollarmode) {$result=&dollarformat($result);}      #if ($dollarmode) {$result=&dollarformat($result);}
     #if ($commamode) {$result=&commaformat($result);}      #if ($commamode) {$result=&commaformat($result);}
     return $result;      return $result;
Line 585  sub prettyprint { Line 594  sub prettyprint {
     if ($options =~ /\$/) { $dollarmode=1; }      if ($options =~ /\$/) { $dollarmode=1; }
     if ($options =~ /,/)  { $commamode=1; }      if ($options =~ /,/)  { $commamode=1; }
     if ($options =~ /\./) { $alwaysperiod=1; }      if ($options =~ /\./) { $alwaysperiod=1; }
     if ($fmt) { $value=sprintf('%.'.$fmt,$value); }      if ($fmt=~/s$/i) {
    $value=&format_significant_figures($value,$fmt);
       } elsif ($fmt) {
    $value=sprintf('%.'.$fmt,$value);
       }
     if ($alwaysperiod && $fmt eq '0f') {      if ($alwaysperiod && $fmt eq '0f') {
  if ($target eq 'tex') {   if ($target eq 'tex') {
     $value .='\\ensuremath{.}';      $value .='\\ensuremath{.}';
Line 647  sub dollarformat { Line 660  sub dollarformat {
     return $number;       return $number; 
 }  }
   
   # format of form ns or nS where n is an integer
   sub format_significant_figures {
       my ($number,$format) = @_; 
       return '0' if ($number == 0);
       # extract number of significant figures needed
       my ($sig) = ($format =~ /(\d+)s/i);
       # arbitrary choice - suggestions ?? or throw error message?
       $sig = 3 if ($sig eq '');
       # save the minus sign
       my $sign = ($number < 0) ? '-' : '';
       $number = abs($number);
       # needed to correct for a number greater than 1 (or
       my $power = ($number < 1) ? 0 : 1;
       # could round up. Take the integer part of log10.
       my $x10 = int(log($number)/log(10));
       # find number with values left of decimal pt = # of sign figs.
       my $xsig = $number*10**($sig-$x10-$power);
       # get just digits left of decimal pt - also rounds off correctly
       my $xint  = sprintf('%.0f',$xsig);
       # save any trailing zero's
       my ($zeros) = ($xint =~ /(0+)$/);
       # return number to original magnitude
       my $numSig = $xint*10**($x10-$sig+$power);
       # insert trailing zero's if have decimal point
       $numSig =~ s/^(\d+)\.(\d+)(\e?(.*)?)$/$1\.$2$zeros$3/;
       # put a decimal pt for number ending with 0 and length = # of sig fig
       $numSig.='.' if (length($numSig) == $sig && $numSig =~ /0$/);
       if (length($numSig) < $sig) {
    $numSig.='.'.substr($zeros,0,($sig-length($numSig)));
       }
       # return number with sign
       return $sign.$numSig;
   
   }
   
 sub map {  sub map {
     my ($phrase,$dest,$source)=@_;      my ($phrase,$dest,$source)=@_;
     my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();

Removed from v.1.96  
changed lines
  Added in v.1.100


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