Diff for /loncom/homework/default_homework.lcpm between versions 1.61 and 1.74

version 1.61, 2003/04/30 21:10:50 version 1.74, 2004/03/16 19:47:47
Line 40  $deg2rad=$pi/180.0; Line 40  $deg2rad=$pi/180.0;
 $"=' ';  $"=' ';
   
 sub caparesponse_check {  sub caparesponse_check {
   #not properly used yet: calc      my ($answer,$response)=@_;
   #not to be used: $ans_fmt      #not properly used yet: calc
   my ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc,$samples) =      #not to be used: $ans_fmt
     eval $_[1].      my $type=$LONCAPA::CAPAresponse_args{'type'};
       ';return ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc,$samples);';      my $tol=$LONCAPA::CAPAresponse_args{'tol'};
       my $sig=$LONCAPA::CAPAresponse_args{'sig'};
   my $tol_type=''; # gets it's value from whether tol has a % or not done      my $ans_fmt=$LONCAPA::CAPAresponse_args{'ans_fmt'};
   my $sig_lbound=''; #done      my $unit=$LONCAPA::CAPAresponse_args{'unit'};
   my $sig_ubound=''; #done      my $calc=$LONCAPA::CAPAresponse_args{'calc'};
   my ($response,$expr)=@_;      my $samples=$LONCAPA::CAPAresponse_args{'samples'};
       
       my $tol_type=''; # gets it's value from whether tol has a % or not done
   #type's definitons come from capaParser.h      my $sig_lbound=''; #done
   my $message='';      my $sig_ubound=''; #done
   #remove leading and trailing whitespace  
   if ($response=~ /^\s|\s$/) {  
     $response=~ s:^\s+|\s+$::g;      #type's definitons come from capaParser.h
     $message .="Removed ws now :$response:\n";      my $message='';
   } else {      #remove leading and trailing whitespace
     $message .="no ws in :$response:\n";      if (!defined($response)) {
   }   $response='';
       }
   if ($type eq '' ) {      if ($response=~ /^\s|\s$/) {
     $message .= "Didn't find a type :$type:$expr: defaulting\n";   $response=~ s:^\s+|\s+$::g;
     if ( $answer eq ($answer *1.0)) { $type = 2;   $message .="Removed ws now :$response:\n";
     } else { $type = 3; }      } else {
   } else {   $message .="no ws in :$response:\n";
          if ($type eq 'cs')    { $type = 4;      }
     } elsif ($type eq 'ci')    { $type = 3;  
     } elsif ($type eq 'mc')    { $type = 5;      if (length($response) > 500) { return "TOO_LONG: Answer too long"; }
     } elsif ($type eq 'fml')   { $type = 8;  
     } elsif ($type eq 'subj')  { $type = 7;      if ($type eq '' ) {
     } elsif ($type eq 'float') { $type = 2;   $message .= "Didn't find a type :$type: defaulting\n";
     } elsif ($type eq 'int')   { $type = 1;   if ( $answer eq ($answer *1.0)) { $type = 2;
     } else { return "ERROR: Unknown type of answer: $type" }        } else { $type = 3; }
   }      } else {
    if ($type eq 'cs')    { $type = 4; }
   my $points;   elsif ($type eq 'ci')    { $type = 3 }
   my $id_list;   elsif ($type eq 'mc')    { $type = 5; }
   #formula type setup the sample points   elsif ($type eq 'fml')   { $type = 8; }
   if ($type eq '8') {   elsif ($type eq 'subj')  { $type = 7; }
     ($id_list,$points)=split(/@/,$samples);   elsif ($type eq 'float') { $type = 2; }
     $message.="Found :$id_list:$points: points in $samples\n";   elsif ($type eq 'int')   { $type = 1; }
   }   else { return "ERROR: Unknown type of answer: $type" }
   if ($tol eq '') {      }
     $tol=0.0;  
     $tol_type=1; #TOL_ABSOLUTE      my $points;
   } else {      my $id_list;
     if ($tol =~ /%$/) {      #formula type setup the sample points
       chop $tol;      if ($type eq '8') {
       $tol_type=2; #TOL_PERCENTAGE   ($id_list,$points)=split(/@/,$samples);
     } else {   $message.="Found :$id_list:$points: points in $samples\n";
       $tol_type=1; #TOL_ABSOLUTE      }
     }      if ($tol eq '') {
   }   $tol=0.0;
    $tol_type=1; #TOL_ABSOLUTE
   if ($sig eq '') {      } else {
     $sig_lbound = 0; #SIG_LB_DEFAULT   if ($tol =~ /%$/) {
     $sig_ubound =15; #SIG_UB_DEFAULT      chop $tol;
   } else {      $tol_type=2; #TOL_PERCENTAGE
     ($sig_lbound,$sig_ubound) = split /,/,$sig;   } else {
     if (!defined($sig_lbound)) {      $tol_type=1; #TOL_ABSOLUTE
       $sig_lbound = 0; #SIG_LB_DEFAULT   }
       $sig_ubound =15; #SIG_UB_DEFAULT      }
     }  
     if (!defined($sig_ubound)) { $sig_ubound=$sig_lbound; }      if ($sig eq '') {
   }   $sig_lbound = 0; #SIG_LB_DEFAULT
   my $result = &caparesponse_capa_check_answer($response,$answer,$type,   $sig_ubound =15; #SIG_UB_DEFAULT
        $tol_type,$tol,      } else {
        $sig_lbound,$sig_ubound,   ($sig_lbound,$sig_ubound) = split /,/,$sig;
        $ans_fmt,$unit,$calc,$id_list,   if (!defined($sig_lbound)) {
        $points,$external::randomseed);      $sig_lbound = 0; #SIG_LB_DEFAULT
       $sig_ubound =15; #SIG_UB_DEFAULT
   if    ($result == '1') { $result='EXACT_ANS'; }    }
   elsif ($result == '2') { $result='APPROX_ANS'; }   if (!defined($sig_ubound)) { $sig_ubound=$sig_lbound; }
   elsif ($result == '3') { $result='SIG_FAIL'; }      }
   elsif ($result == '4') { $result='UNIT_FAIL'; }      my $reterror="";
   elsif ($result == '5') { $result='NO_UNIT'; }      my $result = &caparesponse_capa_check_answer($response,$answer,$type,
   elsif ($result == '6') { $result='UNIT_OK'; }   $tol_type,$tol,
   elsif ($result == '7') { $result='INCORRECT'; }   $sig_lbound,$sig_ubound,
   elsif ($result == '8') { $result='UNIT_NOTNEEDED'; }   $ans_fmt,$unit,$calc,$id_list,
   elsif ($result == '9') { $result='ANS_CNT_NOT_MATCH'; }   $points,$external::randomseed,
   elsif ($result =='10') { $result='SUB_RECORDED'; }   \$reterror);
   elsif ($result =='11') { $result='BAD_FORMULA'; }  
   elsif ($result =='12') { $result='WANTED_NUMERIC'; }      if    ($result == '1') { $result='EXACT_ANS'; } 
   else  {$result = "ERROR: Unknown Result:$result:$@:";}      elsif ($result == '2') { $result='APPROX_ANS'; }
       elsif ($result == '3') { $result='SIG_FAIL'; }
   return "$result:\nError $error:\nAnswer $answer:\nResponse $response:\n type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|\n$message$expr";      elsif ($result == '4') { $result='UNIT_FAIL'; }
 }      elsif ($result == '5') { $result='NO_UNIT'; }
       elsif ($result == '6') { $result='UNIT_OK'; }
 sub get_array_args {      elsif ($result == '7') { $result='INCORRECT'; }
   my ($expr,$arg)=@_;      elsif ($result == '8') { $result='UNIT_NOTNEEDED'; }
   # do these first, because who knows what varname the instructor might have used      elsif ($result == '9') { $result='ANS_CNT_NOT_MATCH'; }
   # but it probably isn't $CAPARESPONSE_CHECK_LIST_answer      elsif ($result =='10') { $result='SUB_RECORDED'; }
   my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $'.$arg; #'      elsif ($result =='11') { $result='BAD_FORMULA'; }
   my $GET_ARRAY_ARGS_result;      elsif ($result =='12') { $result='WANTED_NUMERIC'; }
   my @GET_ARRAY_ARGS_list;      else  {$result = "ERROR: Unknown Result:$result:$@:";}
   if ($CAPARESPONSE_CHECK_LIST_answer =~ /^\s*[\$\@]/) {  
     (@GET_ARRAY_ARGS_list) = eval $CAPARESPONSE_CHECK_LIST_answer;      return ("$result:\nRetError $reterror:\nError $error:\nAnswer $answer:\nResponse $response:\n type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|\n$message",$reterror);
   }  
   $GET_ARRAY_ARGS_result.="error:$@:\n";  
   # if the eval fails just use what is in the answer exactly  
   if (!(@GET_ARRAY_ARGS_list) || !defined($GET_ARRAY_ARGS_list[0])) {  
     $GET_ARRAY_ARGS_result.="list zero is undefined\n";  
     $GET_ARRAY_ARGS_list[0]=$CAPARESPONSE_CHECK_LIST_answer;  
   }  
   return $GET_ARRAY_ARGS_result,@GET_ARRAY_ARGS_list;  
 }  }
   
   
 sub caparesponse_check_list {  sub caparesponse_check_list {
   my ($response,$expr)=@_;      my $response=$LONCAPA::CAPAresponse_args{'response'};
   $expr =~ s/\\/\\\\/g;      my ($result,@list);
   $expr =~ s/\'/\\\'/g;      @list=@LONCAPA::CAPAresponse_answer;
   my ($result,@list) = &get_array_args($expr,'answer');      my $aresult='';
   my $aresult='';      my $current_answer;
   my $current_answer;      my $answers=join(':',@list);
   my $answers=join(':',@list);      $result.="Got response :$answers:\n";
   $result.="Got response :$answers:\n";      &LONCAPA_INTERNAL_DEBUG("<blink>Yo!</blink> got ".join(':',%LONCAPA::CAPAresponse_args));
   my @responselist;      my @responselist;
   my $type =eval $expr.';return $answer;';      my $type = $LONCAPA::CAPAresponse_args{'type'};
   if ($type ne '' && $#list > 0) {      $result.="Got type :$type:\n";
     (@responselist)=split /,/,$response;      if ($type ne '' && $#list > 0) {
   } else {   (@responselist)=split /,/,$response;
     (@responselist)=($response);      } else {
   }   (@responselist)=($response);
   my $unit='';      }
   $result.="Initial final response :$responselist['-1']:\n";      my $unit='';
   if ($type eq '') {      $result.="Initial final response :$responselist['-1']:\n";
     #for numerical problems split off the unit      if ($type eq '' || $type eq 'float') {
     if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) {   #for numerical problems split off the unit
       $responselist['-1']=$1;   if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) {
       $unit=$2;      $responselist['-1']=$1;
     }      $unit=$2;
   }   }
   $result.="Final final response :$responselist['-1']:\n";      }
   $result.=":$#list: answers\n";      $result.="Final final response :$responselist['-1']:\n";
   $unit=~s/\s//;      $result.=":$#list: answers\n";
   my $i=0;      $unit=~s/\s//;
   my $awards='';      my $i=0;
   for ($i=0; $i<@list;$i++) {      my $awards='';
     $result.="trying answer :$list[$i]:\n";      my @msgs;
     my $thisanswer=$list[$i];      for ($i=0; $i<@list;$i++) {
     $thisanswer=~ s/\\/\\\\/g;   my $msg;
     $thisanswer =~ s/\'/\\\'/g;   $result.="trying answer :$list[$i]:\n";
     if ($unit eq '') {   my $thisanswer=$list[$i];
       $aresult=&caparesponse_check($responselist[$i],   $result.="trying answer :$thisanswer:\n";
      $expr.';my $answer=\''.$thisanswer.'\';');   if ($unit eq '') {
     } else {      ($aresult,$msg)=&caparesponse_check($thisanswer,$responselist[$i]);
       $aresult=&caparesponse_check($responselist[$i]." $unit",   } else {
    $expr.';my $answer=\''.$thisanswer.'\';');      ($aresult,$msg)=&caparesponse_check($thisanswer,
     }   $responselist[$i]." $unit");
     my ($temp)=split /:/, $aresult;   }
     $awards.="$temp,";   my ($temp)=split /:/, $aresult;
     $result.=$aresult;   $awards.="$temp,";
   }   $result.=$aresult;
   chop $awards;   push(@msgs,$msg);
   return "$awards:\n$result";      }
       chop $awards;
       return ("$awards:\n$result",@msgs);
 }  }
   
 sub tex {  sub tex {
   if ( $external::target eq "tex" ) {      if ( $external::target eq "tex" ) {
     return $_[0];   return $_[0];
   } else {      } else {
     return $_[1];   return $_[1];
   }      }
 }  }
   
 sub var_in_tex {  sub var_in_tex {
   if ( $external::target eq "tex" ) {      if ( $external::target eq "tex" ) {
     return $_[0];   return $_[0];
   } else {      } else {
     return "";   return "";
   }      }
 }  }
   
 sub web {  sub web {
   if ( $external::target eq "tex" ) {      if ( $external::target eq "tex" ) {
     return $_[1];   return $_[1];
   } else {  
     if ( $external::target eq "web" || $external::target eq "answer") {  
       return $_[2];  
     } else {      } else {
       return $_[0];   if ( $external::target eq "web" || $external::target eq "answer") {
       return $_[2];
    } else {
       return $_[0];
    }
     }      }
   }  
 }  }
   
 sub html {  sub html {
   if ( $external::target eq "web" ) {      if ( $external::target eq "web" ) {
     return shift;   return shift;
   }      }
 }  }
   
 sub hinton {  sub hinton {
   return 0;      return 0;
 }  }
   
 sub random {  sub random {
Line 257  sub random { Line 252  sub random {
 }  }
   
 sub random_normal {  sub random_normal {
   my ($item_cnt,$seed,$av,$std_dev) = @_;      my ($item_cnt,$seed,$av,$std_dev) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_normal($item_cnt,$av,$std_dev);      @retArray=&math_random_normal($item_cnt,$av,$std_dev);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_beta {  sub random_beta {
   my ($item_cnt,$seed,$aa,$bb) = @_;      my ($item_cnt,$seed,$aa,$bb) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_beta($item_cnt,$aa,$bb);      @retArray=&math_random_beta($item_cnt,$aa,$bb);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_gamma {  sub random_gamma {
   my ($item_cnt,$seed,$a,$r) = @_;      my ($item_cnt,$seed,$a,$r) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_gamma($item_cnt,$a,$r);      @retArray=&math_random_gamma($item_cnt,$a,$r);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_exponential {  sub random_exponential {
   my ($item_cnt,$seed,$av) = @_;      my ($item_cnt,$seed,$av) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_exponential($item_cnt,$av);      @retArray=&math_random_exponential($item_cnt,$av);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_poisson {  sub random_poisson {
   my ($item_cnt,$seed,$mu) = @_;      my ($item_cnt,$seed,$mu) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_poisson($item_cnt,$mu);      @retArray=&math_random_poisson($item_cnt,$mu);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_chi {  sub random_chi {
   my ($item_cnt,$seed,$df) = @_;      my ($item_cnt,$seed,$df) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_chi_square($item_cnt,$df);      @retArray=&math_random_chi_square($item_cnt,$df);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_noncentral_chi {  sub random_noncentral_chi {
   my ($item_cnt,$seed,$df,$nonc) = @_;      my ($item_cnt,$seed,$df,$nonc) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_noncentral_chi_square($item_cnt,$df,$nonc);      @retArray=&math_random_noncentral_chi_square($item_cnt,$df,$nonc);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_f {  sub random_f {
   my ($item_cnt,$seed,$dfn,$dfd) = @_;      my ($item_cnt,$seed,$dfn,$dfd) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_f($item_cnt,$dfn,$dfd);      @retArray=&math_random_f($item_cnt,$dfn,$dfd);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_noncentral_f {  sub random_noncentral_f {
   my ($item_cnt,$seed,$dfn,$dfd,$nonc) = @_;      my ($item_cnt,$seed,$dfn,$dfd,$nonc) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_noncentral_f($item_cnt,$dfn,$dfd,$nonc);      @retArray=&math_random_noncentral_f($item_cnt,$dfn,$dfd,$nonc);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_multivariate_normal {  sub random_multivariate_normal {
   my ($item_cnt,$seed,$mean,$covar) = @_;      my ($item_cnt,$seed,$mean,$covar) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_multivariate_normal($item_cnt,@$mean,@$covar);      @retArray=&math_random_multivariate_normal($item_cnt,@$mean,@$covar);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_multinomial {  sub random_multinomial {
   my ($item_cnt,$seed,@p) = @_;      my ($item_cnt,$seed,@p) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_multinomial($item_cnt,@p);      @retArray=&math_random_multinomial($item_cnt,@p);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_permutation {  sub random_permutation {
   my ($seed,@inArray) = @_;      my ($seed,@inArray) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_permutation(@inArray);      @retArray=&math_random_permutation(@inArray);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_uniform {  sub random_uniform {
   my ($item_cnt,$seed,$low,$high) = @_;      my ($item_cnt,$seed,$low,$high) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_uniform($item_cnt,$low,$high);      @retArray=&math_random_uniform($item_cnt,$low,$high);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_uniform_integer {  sub random_uniform_integer {
   my ($item_cnt,$seed,$low,$high) = @_;      my ($item_cnt,$seed,$low,$high) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_uniform_integer($item_cnt,$low,$high);      @retArray=&math_random_uniform_integer($item_cnt,$low,$high);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_binomial {  sub random_binomial {
   my ($item_cnt,$seed,$nt,$p) = @_;      my ($item_cnt,$seed,$nt,$p) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_binomial($item_cnt,$nt,$p);      @retArray=&math_random_binomial($item_cnt,$nt,$p);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub random_negative_binomial {  sub random_negative_binomial {
   my ($item_cnt,$seed,$ne,$p) = @_;      my ($item_cnt,$seed,$ne,$p) = @_;
   my @oldseed=&random_get_seed();      my @oldseed=&random_get_seed();
   my @retArray;      my @retArray;
   &random_set_seed_from_phrase($seed);      &random_set_seed_from_phrase($seed);
   @retArray=&math_random_negative_binomial($item_cnt,$ne,$p);      @retArray=&math_random_negative_binomial($item_cnt,$ne,$p);
   &random_set_seed(@oldseed);      &random_set_seed(@oldseed);
   return @retArray;      return @retArray;
 }  }
   
 sub abs { abs(shift) }  sub abs { abs(shift) }
Line 480  sub floor  {return (($_[0]-CORE::int($_[ Line 475  sub floor  {return (($_[0]-CORE::int($_[
 #sub floor {return int($_[0]); }  #sub floor {return int($_[0]); }
   
 sub format {  sub format {
   my ($value,$fmt)=@_;      my ($value,$fmt)=@_;
   my $dollarmode;      my $dollarmode;
   if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; }       if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } 
   my $result=sprintf('%.'.$fmt,$value);      $fmt=~s/e/E/g;
   $result=~s/(E[+-]*)0/$1/;      my $result=sprintf('%.'.$fmt,$value);
   if ($dollarmode) {$result=&dollarmode($result);}      $result=~s/(E[+-]*)0/$1/;
   return $result;      if ($dollarmode) {$result=&dollarmode($result);}
       return $result;
 }  }
   
 sub prettyprint {  sub prettyprint {
   my ($value,$fmt)=@_;      my ($value,$fmt,$target)=@_;
   my $result;      my $result;
   my $dollarmode;      my $dollarmode;
   if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; }       if (!$target) { $target = $external::target; }
   if ($fmt) { $value=sprintf('%.'.$fmt,$value); }      if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } 
   if ($value =~ /([0-9\.\-\+]+)E([0-9\-\+]+)/ ) {      if ($fmt) { $value=sprintf('%.'.$fmt,$value); }
     my $frac=$1;      if ($value =~ /([0-9\.\-\+]+)E([0-9\-\+]+)/i ) {
     if ($dollarmode) { $frac=&dollarformat($frac); }   my $frac=$1;
     my $exponent=$2;   if ($dollarmode) { $frac=&dollarformat($frac); }
     $exponent=~s/^\+0*//;   my $exponent=$2;
     $exponent=~s/^-0*/-/;   $exponent=~s/^\+0*//;
     if ($exponent) {   $exponent=~s/^-0*/-/;
       if ($external::target eq 'web') {   $exponent=~s/^-0*/-/;
  $result=$frac.'&#215;10<sup>'.$exponent.'</sup>';   if ($exponent eq '-') { undef($exponent); }
       } elsif ($external::target eq 'tex') {   if ($exponent) {
  $result='\ensuremath{'.$frac.'\times 10^{'.$exponent.'}}';      if ($target eq 'web') {
       } else {   $result=$frac.'&#215;10<sup>'.$exponent.'</sup>';
  $result=$value;      } elsif ($target eq 'tex') {
       }   $result='\ensuremath{'.$frac.'\times 10^{'.$exponent.'}}';
       } else {
    $result=$value;
       }
    } else {
       $result=$frac;
    }
     } else {      } else {
       $result=$frac;   $result=$value;
    if ($dollarmode) { $result=&dollarformat($result,$target); }
     }      }
   } else {      return $result;
     $result=$value;  
     if ($dollarmode) { $result=&dollarformat($result); }  
   }  
   return $result;  
 }  }
   
 sub dollarformat {  sub dollarformat {
   my ($number) = @_;      my ($number,$target) = @_;
   if ($number =~ /\./) {      if (!$target) { $target = $external::target; }
     while ($number =~ /([^\.,]+)([^\.,][^\.,][^\.,])([,0-9]*\.[0-9]*$)/) {      if ($number =~ /\./) {
       $number = $1.','.$2.$3;   while ($number =~ /([^\.,]+)([^\.,][^\.,][^\.,])([,0-9]*\.[0-9]*)$/) {
     }      $number = $1.','.$2.$3;
   } else {   }
     while ($number =~ /([^,]+)([^,][^,][^,])([,0-9]*)$/) {      } else {
       $number = $1.','.$2.$3;   while ($number =~ /([^,]+)([^,][^,][^,])([,0-9]*)$/) {
     }      $number = $1.','.$2.$3;
   }   }
   if ($external::target eq 'tex') {      }
     $number='\$'.$number; #' stupid emacs      if ($target eq 'tex') {
   } else {   $number='\$'.$number; #' stupid emacs
     $number='$'.$number; #' stupid emacs      } else {
   }   $number='$'.$number; #' stupid emacs
   return $number;       }
       return $number; 
 }  }
   
 sub map {  sub map {
Line 631  sub capa_id { return } Line 631  sub capa_id { return }
 sub problem { return }  sub problem { return }
   
 sub name{  sub name{
   my $fullname = &EXT('environment.lastname').', '.&EXT('environment.firstname').' '.&EXT('environment.middlename');      my $fullname = &EXT('environment.lastname').', '.&EXT('environment.firstname').' '.&EXT('environment.middlename');
   $fullname = "" if $fullname eq ",  ";      $fullname = "" if $fullname eq ",  ";
   $fullname =~ s/\%2d/-/g;      $fullname =~ s/\%2d/-/g;
   return $fullname;      return $fullname;
 }  }
   
 sub student_number {   sub student_number { 
   my $id = &EXT('environment.id');      my $id = &EXT('environment.id');
   $id = '' if $id eq "";      $id = '' if $id eq "";
   return $id;      return $id;
 }  }
   
 sub class {  sub class {
   my $course = &EXT('course.description');      my $course = &EXT('course.description');
   $course = '' if $course eq "";      $course = '' if $course eq "";
   return $course;      return $course;
 }  }
   
 sub sec {   sub sec { 
   my $sec = &EXT('request.course.sec');      my $sec = &EXT('request.course.sec');
   $sec = '' if $sec eq "";      $sec = '' if $sec eq "";
   return $sec;      return $sec;
 }  }
   
 sub open_date {   sub open_date { 
   my @dc = split(/\s+/,localtime(&EXT('resource.0.opendate')));      my @dc = split(/\s+/,localtime(&EXT('resource.0.opendate')));
   return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969);      return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969);
   my @hm = split(/:/,$dc[3]);      my @hm = split(/:/,$dc[3]);
   my $ampm = " am";      my $ampm = " am";
   if ($hm[0] > 12) {      if ($hm[0] > 12) {
     $hm[0]-=12;   $hm[0]-=12;
     $ampm = " pm";   $ampm = " pm";
   }      }
   return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm;      return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm;
 }  }
   
 sub due_date {   sub due_date { 
   my @dc = split(/\s+/,localtime(&EXT('resource.0.duedate')));      my @dc = split(/\s+/,localtime(&EXT('resource.0.duedate')));
   return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969);      return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969);
   my @hm = split(/:/,$dc[3]);      my @hm = split(/:/,$dc[3]);
   my $ampm = " am";      my $ampm = " am";
   if ($hm[0] > 12) {      if ($hm[0] > 12) {
     $hm[0]-=12;   $hm[0]-=12;
     $ampm = " pm";   $ampm = " pm";
   }      }
   return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm;      return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm;
 #  return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$dc[3];  
 }  }
   
 sub answer_date {   sub answer_date { 
   my @dc = split(/\s+/,localtime(&EXT('resource.0.answerdate')));      my @dc = split(/\s+/,localtime(&EXT('resource.0.answerdate')));
   return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969);      return '' if ($dc[0] eq "Wed" and $dc[2] == 31 and $dc[4] == 1969);
   my @hm = split(/:/,$dc[3]);      my @hm = split(/:/,$dc[3]);
   my $ampm = " am";      my $ampm = " am";
   if ($hm[0] > 12) {      if ($hm[0] > 12) {
     $hm[0]-=12;   $hm[0]-=12;
     $ampm = " pm";   $ampm = " pm";
   }      }
   return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm;      return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$hm[0].':'.$hm[1].$ampm;
 #  return $dc[0].', '.$dc[1].' '.$dc[2].', '.$dc[4].' at '.$dc[3];  
 }  }
   
 sub array_moments {  sub array_moments {
   my @input=@_;      my @input=@_;
   my (@output,$N);      my (@output,$N);
   $N=scalar (@input);      $N=scalar (@input);
   $output[0]=$N;      $output[0]=$N;
   if ($N <= 1) {      if ($N <= 1) {
     $output[1]=$input[0];   $output[1]=$input[0];
     $output[1]="Input array not defined" if ($N == 0);   $output[1]="Input array not defined" if ($N == 0);
     $output[2]="variance undefined for N<=1";   $output[2]="variance undefined for N<=1";
     $output[3]="skewness undefined for N<=1";   $output[3]="skewness undefined for N<=1";
     $output[4]="kurtosis undefined for N<=1";   $output[4]="kurtosis undefined for N<=1";
    return @output;
       }
       my $sum=0;
       foreach my $line (@input) {
    $sum+=$line;
       }
       $output[1] = $sum/$N;
       my ($x,$sdev,$var,$skew,$kurt) = 0;
       foreach my $line (@input) {
    $x=$line-$output[1];
    $var+=$x**2;
    $skew+=$x**3;
    $kurt+=$x**4;
       }
       $output[2]=$var/($N-1);
       $sdev=CORE::sqrt($output[2]);
       if ($sdev == 0) {
    $output[3]="inf-variance=0";
    $output[4]="inf-variance=0";
    return @output;
       }
       $output[3]=$skew/($sdev**3*$N);
       $output[4]=$kurt/($sdev**4*$N)-3;
     return @output;      return @output;
   }  
   my $sum=0;  
   foreach my $line (@input) {  
     $sum+=$line;  
   }  
   $output[1] = $sum/$N;  
   my ($x,$sdev,$var,$skew,$kurt) = 0;  
   foreach my $line (@input) {  
     $x=$line-$output[1];  
     $var+=$x**2;  
     $skew+=$x**3;  
     $kurt+=$x**4;  
   }  
   $output[2]=$var/($N-1);  
   $sdev=CORE::sqrt($output[2]);  
   if ($sdev == 0) {  
      $output[3]="inf-variance=0";  
      $output[4]="inf-variance=0";  
      return @output;  
   }  
   $output[3]=$skew/($sdev**3*$N);  
   $output[4]=$kurt/($sdev**4*$N)-3;  
   return @output;  
 }  }
   
 sub choose {  sub choose {
   my $num = $_[0];      my $num = $_[0];
   return $_[$num];      return $_[$num];
 }  }
   
 # expiremental idea  # expiremental idea
 sub proper_path {  sub proper_path {
   my ($path)=@_;      my ($path)=@_;
   if ( $external::target eq "tex" ) {      if ( $external::target eq "tex" ) {
     return '/home/httpd/html'.$path;   return '/home/httpd/html'.$path;
   } else {      } else {
     return $path;   return $path;
   }      }
 }  }
   

Removed from v.1.61  
changed lines
  Added in v.1.74


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.