Diff for /loncom/homework/default_homework.lcpm between versions 1.41 and 1.69

version 1.41, 2001/12/04 14:48:35 version 1.69, 2004/02/18 22:49:32
Line 1 Line 1
 # file name (temp): default_homework  # The LearningOnline Network with CAPA 
 # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run()  # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run()
 #  #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
   #
 # Guy Albertelli  # Guy Albertelli
 #  #
 # 05/25/2001 H. K. Ng  # 05/25/2001 H. K. Ng
 # 05/31/2001 H. K. Ng  # 05/31/2001 H. K. Ng
   # 12/21/2001 Matthew
 #  #
 #init some globals  #init some globals
 $hidden::RANDOMINIT=0;  $hidden::RANDOMINIT=0;
 $pi=atan2(1,1)*4;  $pi=atan2(1,1)*4;
 $rad2deg=180.0/$pi;  $rad2deg=180.0/$pi;
 $deg2rad=$pi/180.0;  $deg2rad=$pi/180.0;
   $"=' ';
   
 sub caparesponse_check {  sub caparesponse_check {
   #not properly used yet: calc    #not properly used yet: calc
   #not to be used: $ans_fmt    #not to be used: $ans_fmt
   my ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc,$samples) =    my ($type,$tol,$sig,$ans_fmt,$unit,$calc,$samples) =
     eval $_[1].      eval $_[2].
       ';return ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc,$samples);';        ';return ($type,$tol,$sig,$ans_fmt,$unit,$calc,$samples);';
   
   my $tol_type=''; # gets it's value from whether tol has a % or not done    my $tol_type=''; # gets it's value from whether tol has a % or not done
   my $sig_lbound=''; #done    my $sig_lbound=''; #done
   my $sig_ubound=''; #done    my $sig_ubound=''; #done
   my ($response,$expr)=@_;    my ($answer,$response,$expr)=@_;
   
   
   #type's definitons come from capaParser.h    #type's definitons come from capaParser.h
Line 30  sub caparesponse_check { Line 57  sub caparesponse_check {
   #remove leading and trailing whitespace    #remove leading and trailing whitespace
   if ($response=~ /^\s|\s$/) {    if ($response=~ /^\s|\s$/) {
     $response=~ s:^\s+|\s+$::g;      $response=~ s:^\s+|\s+$::g;
     $message .="Removed ws now :$response:<br />";      $message .="Removed ws now :$response:\n";
   } else {    } else {
     $message .="no ws in :$response:<br />";      $message .="no ws in :$response:\n";
   }    }
   
     if (length($response) > 500) { return "TOO_LONG: Answer too long"; }
   
   if ($type eq '' ) {    if ($type eq '' ) {
     $message .= "Didn't find a type :$type:$expr: defaulting<br />";      $message .= "Didn't find a type :$type:$expr: defaulting\n";
     if ( $answer eq ($answer *1.0)) { $type = 2;      if ( $answer eq ($answer *1.0)) { $type = 2;
     } else { $type = 3; }      } else { $type = 3; }
   } else {    } else {
Line 55  sub caparesponse_check { Line 84  sub caparesponse_check {
   #formula type setup the sample points    #formula type setup the sample points
   if ($type eq '8') {    if ($type eq '8') {
     ($id_list,$points)=split(/@/,$samples);      ($id_list,$points)=split(/@/,$samples);
     $message.="Found :$points: points<br />";      $message.="Found :$id_list:$points: points in $samples\n";
   }    }
   if ($tol eq '') {    if ($tol eq '') {
     $tol=0.0;      $tol=0.0;
Line 74  sub caparesponse_check { Line 103  sub caparesponse_check {
     $sig_ubound =15; #SIG_UB_DEFAULT      $sig_ubound =15; #SIG_UB_DEFAULT
   } else {    } else {
     ($sig_lbound,$sig_ubound) = split /,/,$sig;      ($sig_lbound,$sig_ubound) = split /,/,$sig;
       if (!defined($sig_lbound)) {
         $sig_lbound = 0; #SIG_LB_DEFAULT
         $sig_ubound =15; #SIG_UB_DEFAULT
       }
       if (!defined($sig_ubound)) { $sig_ubound=$sig_lbound; }
   }    }
   my $result = &caparesponse_capa_check_answer($response,$answer,$type,    my $result = &caparesponse_capa_check_answer($response,$answer,$type,
        $tol_type,$tol,         $tol_type,$tol,
Line 95  sub caparesponse_check { Line 129  sub caparesponse_check {
   elsif ($result =='12') { $result='WANTED_NUMERIC'; }    elsif ($result =='12') { $result='WANTED_NUMERIC'; }
   else  {$result = "ERROR: Unknown Result:$result:$@:";}    else  {$result = "ERROR: Unknown Result:$result:$@:";}
   
   return "$result:<br />Error $error:<br />Answer $answer:<br />Response $response:<br /> type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|<br />$message$expr";    return "$result:\nError $error:\nAnswer $answer:\nResponse $response:\n type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|\n$message$expr";
 }  }
   
 sub get_array_args {  sub get_array_args {
   my ($expr,$arg)=@_;    my ($expr,$arg)=@_;
   # do these first, because who knows what varname the instructor might have used    # do these first, because who knows what varname the instructor might have used
   # but it probably isn't $CAPARESPONSE_CHECK_LIST_answer    # but it probably isn't $CAPARESPONSE_CHECK_LIST_answer
   my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $'.$arg; #'    my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $'.$arg; #' stupid emacs
   my $GET_ARRAY_ARGS_result;    my $GET_ARRAY_ARGS_result="expr is $expr\narg is $arg\nfirst answer guess is $CAPARESPONSE_CHECK_LIST_answer\n";
   my @GET_ARRAY_ARGS_list;    my @GET_ARRAY_ARGS_list;
   if ($CAPARESPONSE_CHECK_LIST_answer =~ /^\s*[\$\@]/) {    if ($CAPARESPONSE_CHECK_LIST_answer =~ /^\s*[\$\@]/) {
     (@GET_ARRAY_ARGS_list) = eval $CAPARESPONSE_CHECK_LIST_answer;      (@GET_ARRAY_ARGS_list) = eval $CAPARESPONSE_CHECK_LIST_answer;
   }    }
   $GET_ARRAY_ARGS_result.="error:$@:<br />";    $GET_ARRAY_ARGS_result.="error:$@:\n";
   # if the eval fails just use what is in the answer exactly    # if the eval fails just use what is in the answer exactly
   if (!defined(@GET_ARRAY_ARGS_list) || !defined($GET_ARRAY_ARGS_list[0])) {    if (!(@GET_ARRAY_ARGS_list) || !defined($GET_ARRAY_ARGS_list[0])) {
     $GET_ARRAY_ARGS_result.="list zero is undefined<br />";      $GET_ARRAY_ARGS_result.="list zero is undefined\n";
     $GET_ARRAY_ARGS_list[0]=$CAPARESPONSE_CHECK_LIST_answer;      $GET_ARRAY_ARGS_list[0]=$CAPARESPONSE_CHECK_LIST_answer;
   }    }
   return $GET_ARRAY_ARGS_result,@GET_ARRAY_ARGS_list;    return $GET_ARRAY_ARGS_result,@GET_ARRAY_ARGS_list;
Line 119  sub get_array_args { Line 153  sub get_array_args {
   
 sub caparesponse_check_list {  sub caparesponse_check_list {
   my ($response,$expr)=@_;    my ($response,$expr)=@_;
   my $result;  #  $expr =~ s/\\/\\\\/g;
   my ($result,@list) = &get_array_args($expr,'answer');  #  $expr =~ s/\'/\\\'/g;
   #  my ($result,@list) = &get_array_args($expr,'answer');
   #  $expr =~ s/\\\'/\'/g;
   #  $expr =~ s/\\\\/\\/g;
     my ($result,@list);
     @list=@CAPARESPONSE_CHECK_LIST_answer;
   my $aresult='';    my $aresult='';
   my $current_answer;    my $current_answer;
   my $answers=join(':',@list);    my $answers=join(':',@list);
   $result.="Got response :$answers:<br />";    $result.="Got response :$answers:\n";
   my @responselist;    my @responselist;
   my $type =eval $expr.';return $answer;';    my $type =eval $expr.';return $type;';
   if ($type ne '' && $#list > 0) {    if ($type ne '' && $#list > 0) {
     (@responselist)=split /,/,$response;      (@responselist)=split /,/,$response;
   } else {    } else {
     (@responselist)=($response);      (@responselist)=($response);
   }    }
   my $unit='';    my $unit='';
   $result.="Initial final response :$responselist['-1']:<br />";    $result.="Initial final response :$responselist['-1']:\n";
   if ($type eq '') {    if ($type eq '' || $type eq 'float') {
     #for numerical problems split off the unit      #for numerical problems split off the unit
     if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) {      if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) {
       $responselist['-1']=$1;        $responselist['-1']=$1;
       $unit=$2;        $unit=$2;
     }      }
   }    }
   $result.="Final final response :$responselist['-1']:<br />";    $result.="Final final response :$responselist['-1']:\n";
   $result.=":$#list: answers<br />";    $result.=":$#list: answers\n";
   $unit=~s/\s//;    $unit=~s/\s//;
   my $i=0;    my $i=0;
   my $awards='';    my $awards='';
   for ($i=0; $i<@list;$i++) {    for ($i=0; $i<@list;$i++) {
     $result.="trying answer :$list[$i]:<br />";      $result.="trying answer :$list[$i]:\n";
       my $thisanswer=$list[$i];
   #    $thisanswer=~ s/\\/\\\\/g;
   #    $thisanswer =~ s/\'/\\\'/g;
       $result.="trying answer :$thisanswer:\n";
     if ($unit eq '') {      if ($unit eq '') {
       $aresult=&caparesponse_check($responselist[$i],        $aresult=&caparesponse_check($thisanswer,$responselist[$i],
      $expr.';my $answer=\''.$list[$i].'\';');       $expr);
     } else {      } else {
       $aresult=&caparesponse_check($responselist[$i]." $unit",        $aresult=&caparesponse_check($thisanswer,$responselist[$i]." $unit",
    $expr.';my $answer=\''.$list[$i].'\';');     $expr);
     }      }
     my ($temp)=split /:/, $aresult;      my ($temp)=split /:/, $aresult;
     $awards.="$temp,";      $awards.="$temp,";
     $result.=$aresult;      $result.=$aresult;
   }    }
   chop $awards;    chop $awards;
   return "$awards:<br />$result";    return "$awards:\n$result";
 }  }
   
 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 "";
   }    }
Line 181  sub var_in_tex { Line 224  sub var_in_tex {
   
 sub web {  sub web {
   if ( $external::target eq "tex" ) {    if ( $external::target eq "tex" ) {
     return @_[1];      return $_[1];
   } else {    } else {
     if ( $external::target eq "web") {      if ( $external::target eq "web" || $external::target eq "answer") {
       return @_[2];        return $_[2];
     } else {      } else {
       return @_[0];        return $_[0];
     }      }
   }    }
 }  }
Line 197  sub html { Line 240  sub html {
   }    }
 }  }
   
 sub problem {  
   return '1';  
 }  
   
 sub hinton {  sub hinton {
   return 0;    return 0;
 }  }
   
 sub random {  sub random {
   my ($start,$end,$step)=@_;      my ($start,$end,$step)=@_;
   if ( ! $hidden::RANDOMINIT ) {      if ( ! $hidden::RANDOMINIT ) {
     srand($external::randomseed);   if ($external::randomseed == 0) { $external::randomseed=1; }
     $hidden::RANDOMINIT=1;   if ($external::randomseed =~/,/) {
   }      my ($num1,$num2)=split(/,/,$seed);
   my $num=1+int(($end-$start)/$step);      &random_set_seed(abs($num1),abs($num2));
   my $result=$start + int(rand() * $num)*$step;   } else {
   return $result;      &random_set_seed(1,int(abs($external::randomseed)));
    }
    &math_random_uniform();
    $hidden::RANDOMINIT=1;
       }
       if (!defined($step)) { $step=1; }
       my $num=1+int(($end-$start)/$step);
       my $result=$start + int(&math_random_uniform() * $num)*$step;
       return $result;
 }  }
   
 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 @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);
   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 @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);
   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 @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);
   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 @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);
   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 @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);
   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 @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);
   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 @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);
   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 @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);
   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 @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);
   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();
   &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);
   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 @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);
   return @retArray;    return @retArray;
 }  }
   
 sub random_permutation {  sub random_permutation {
   my ($seed,@inArray) = @_;    my ($seed,@inArray) = @_;
     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);
   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 @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);
   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 @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);
   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 @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);
   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 @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);
   return @retArray;    return @retArray;
 }  }
   
Line 352  sub log { log(shift) } Line 431  sub log { log(shift) }
 sub atan2 { atan2($_[0],$_[1]) }  sub atan2 { atan2($_[0],$_[1]) }
 sub sqrt { sqrt(shift) }  sub sqrt { sqrt(shift) }
   
 sub tan  { sin($_[0]) / cos($_[0]) }  sub tan  { CORE::sin($_[0]) / CORE::cos($_[0]) }
 #sub atan { atan2($_[0], 1); }  #sub atan { atan2($_[0], 1); }
 #sub acos { atan2(sqrt(1 - $_[0] * $_[0]), $_[0] ); }  #sub acos { atan2(sqrt(1 - $_[0] * $_[0]), $_[0] ); }
 #sub asin { atan2($_[0], sqrt(1- $_[0] * $_[0]) );  }  #sub asin { atan2($_[0], sqrt(1- $_[0] * $_[0]) );  }
   
 sub log10 { log($_[0])/log(10); }  sub log10 { CORE::log($_[0])/CORE::log(10); }
   
 sub factorial {  sub factorial {
     my $input = int(shift);      my $input = CORE::int(shift);
     return "Error - unable to take factorial of an negative number ($input)" if $input < 0;      return "Error - unable to take factorial of an negative number ($input)" if $input < 0;
     return "Error - factorial result is greater than system limit ($input)" if $input > 170;      return "Error - factorial result is greater than system limit ($input)" if $input > 170;
     return 1 if $input == 0;      return 1 if $input == 0;
Line 403  sub sub_string { Line 482  sub sub_string {
 }  }
   
 sub pow   {return $_[0] ** $_[1]; }  sub pow   {return $_[0] ** $_[1]; }
 sub ceil  {return (($_[0]-int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? (int($_[0])+ 1) : int($_[0])); }  sub ceil  {return (($_[0]-CORE::int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? (CORE::int($_[0])+ 1) : CORE::int($_[0])); }
 sub floor  {return (($_[0]-int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? int($_[0]) : (int($_[0])-1)); }  sub floor  {return (($_[0]-CORE::int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? CORE::int($_[0]) : (CORE::int($_[0])-1)); }
 #sub floor {return int($_[0]); }  #sub floor {return int($_[0]); }
   
 sub format {  sub format {
   my ($value,$fmt)=@_;    my ($value,$fmt)=@_;
   return sprintf('%.'.$fmt,$value);    my $dollarmode;
     if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } 
     $fmt=~s/e/E/g;
     my $result=sprintf('%.'.$fmt,$value);
     $result=~s/(E[+-]*)0/$1/;
     if ($dollarmode) {$result=&dollarmode($result);}
     return $result;
   }
   
   sub prettyprint {
     my ($value,$fmt,$target)=@_;
     my $result;
     my $dollarmode;
     if (!$target) { $target = $external::target; }
     if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } 
     if ($fmt) { $value=sprintf('%.'.$fmt,$value); }
     if ($value =~ /([0-9\.\-\+]+)E([0-9\-\+]+)/i ) {
       my $frac=$1;
       if ($dollarmode) { $frac=&dollarformat($frac); }
       my $exponent=$2;
       $exponent=~s/^\+0*//;
       $exponent=~s/^-0*/-/;
       $exponent=~s/^-0*/-/;
       if ($exponent eq '-') { undef($exponent); }
       if ($exponent) {
         if ($target eq 'web') {
    $result=$frac.'&#215;10<sup>'.$exponent.'</sup>';
         } elsif ($target eq 'tex') {
    $result='\ensuremath{'.$frac.'\times 10^{'.$exponent.'}}';
         } else {
    $result=$value;
         }
       } else {
         $result=$frac;
       }
     } else {
       $result=$value;
       if ($dollarmode) { $result=&dollarformat($result,$target); }
     }
     return $result;
   }
   
   sub dollarformat {
     my ($number,$target) = @_;
     if (!$target) { $target = $external::target; }
     if ($number =~ /\./) {
       while ($number =~ /([^\.,]+)([^\.,][^\.,][^\.,])([,0-9]*\.[0-9]*$)/) {
         $number = $1.','.$2.$3;
       }
     } else {
       while ($number =~ /([^,]+)([^,][^,][^,])([,0-9]*)$/) {
         $number = $1.','.$2.$3;
       }
     }
     if ($target eq 'tex') {
       $number='\$'.$number; #' stupid emacs
     } else {
       $number='$'.$number; #' stupid emacs
     }
     return $number; 
 }  }
   
 sub map {  sub map {
     my ($phrase,$dest,$source)=@_;      my ($phrase,$dest,$source)=@_;
       my @oldseed=&random_get_seed();
     my @seed = &random_seed_from_phrase($phrase);      my @seed = &random_seed_from_phrase($phrase);
     &random_set_seed(@seed);      &random_set_seed(@seed);
     my $destct = scalar(@$dest);      my $destct = scalar(@$dest);
Line 425  sub map { Line 564  sub map {
     $output[$ctr] = $$dest[$idx[$ctr]];      $output[$ctr] = $$dest[$idx[$ctr]];
     $ctr++;      $ctr++;
  }   }
           &random_set_seed(@oldseed);
  return @output;   return @output;
     } else {      } else {
  my $num = scalar(@$source);   my $num = scalar(@$source);
Line 444  sub map { Line 584  sub map {
     }      }
  }   }
     }      }
       &random_set_seed(@oldseed);
       return '';
 }  }
   
 sub rmap {  sub rmap {
     my ($phrase,$dest,$source)=@_;      my ($phrase,$dest,$source)=@_;
       my @oldseed=&random_get_seed();
     my @seed = &random_seed_from_phrase($phrase);      my @seed = &random_seed_from_phrase($phrase);
     &random_set_seed(@seed);      &random_set_seed(@seed);
     my $destct = scalar(@$dest);      my $destct = scalar(@$dest);
Line 465  sub rmap { Line 608  sub rmap {
     $output[$ctr] = $$dest[$r_idx[$ctr]];      $output[$ctr] = $$dest[$r_idx[$ctr]];
     $ctr++;      $ctr++;
  }   }
           &random_set_seed(@oldseed);
  return @output;   return @output;
     } else {      } else {
  my $num = scalar(@$source);   my $num = scalar(@$source);
Line 490  sub rmap { Line 634  sub rmap {
     }      }
  }   }
     }      }
       &random_set_seed(@oldseed);
       return '';
 }  }
   
 sub capa_id { return }  sub capa_id { return }
Line 585  sub array_moments { Line 731  sub array_moments {
     $kurt+=$x**4;      $kurt+=$x**4;
   }    }
   $output[2]=$var/($N-1);    $output[2]=$var/($N-1);
   $sdev=sqrt($output[2]);    $sdev=CORE::sqrt($output[2]);
   if ($sdev == 0) {    if ($sdev == 0) {
      $output[3]="inf-variance=0";       $output[3]="inf-variance=0";
      $output[4]="inf-variance=0";       $output[4]="inf-variance=0";
Line 601  sub choose { Line 747  sub choose {
   return $_[$num];    return $_[$num];
 }  }
   
   # expiremental idea
   sub proper_path {
     my ($path)=@_;
     if ( $external::target eq "tex" ) {
       return '/home/httpd/html'.$path;
     } else {
       return $path;
     }
   }
   

Removed from v.1.41  
changed lines
  Added in v.1.69


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.