Diff for /loncom/homework/default_homework.lcpm between versions 1.62 and 1.71

version 1.62, 2003/05/23 07:04:44 version 1.71, 2004/03/12 21:06:19
Line 42  $"=' '; Line 42  $"=' ';
 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 ($__LC__type,$__LC__tol,$__LC__sig,$__LC__ans_fmt,$__LC__unit,$__LC__calc,$__LC__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 109  sub caparesponse_check { Line 109  sub caparesponse_check {
     }      }
     if (!defined($sig_ubound)) { $sig_ubound=$sig_lbound; }      if (!defined($sig_ubound)) { $sig_ubound=$sig_lbound; }
   }    }
     my $reterror="";
   my $result = &caparesponse_capa_check_answer($response,$answer,$type,    my $result = &caparesponse_capa_check_answer($response,$answer,$type,
        $tol_type,$tol,         $tol_type,$tol,
        $sig_lbound,$sig_ubound,         $sig_lbound,$sig_ubound,
        $ans_fmt,$unit,$calc,$id_list,         $ans_fmt,$unit,$calc,$id_list,
        $points,$external::randomseed);         $points,$external::randomseed,
          \$reterror);
   
   if    ($result == '1') { $result='EXACT_ANS'; }     if    ($result == '1') { $result='EXACT_ANS'; } 
   elsif ($result == '2') { $result='APPROX_ANS'; }    elsif ($result == '2') { $result='APPROX_ANS'; }
Line 129  sub caparesponse_check { Line 131  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:\nError $error:\nAnswer $answer:\nResponse $response:\n type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|\n$message$expr";    return ("$result:\nRetError $reterror:\nError $error:\nAnswer $answer:\nResponse $response:\n type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|\n$message$expr",$reterror);
 }  }
   
 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;
Line 153  sub get_array_args { Line 155  sub get_array_args {
   
 sub caparesponse_check_list {  sub caparesponse_check_list {
   my ($response,$expr)=@_;    my ($response,$expr)=@_;
   $expr =~ s/\\/\\\\/g;  #  $expr =~ s/\\/\\\\/g;
   $expr =~ s/\'/\\\'/g;  #  $expr =~ s/\'/\\\'/g;
   my ($result,@list) = &get_array_args($expr,'answer');  #  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:\n";    $result.="Got response :$answers:\n";
   my @responselist;    my @responselist;
   my $type =eval $expr.';return $answer;';    my $type =eval $expr.';return $__LC__type;';
     $result.="Got type :$type:\n";
   if ($type ne '' && $#list > 0) {    if ($type ne '' && $#list > 0) {
     (@responselist)=split /,/,$response;      (@responselist)=split /,/,$response;
   } else {    } else {
Line 169  sub caparesponse_check_list { Line 176  sub caparesponse_check_list {
   }    }
   my $unit='';    my $unit='';
   $result.="Initial final response :$responselist['-1']:\n";    $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;
Line 181  sub caparesponse_check_list { Line 188  sub caparesponse_check_list {
   $unit=~s/\s//;    $unit=~s/\s//;
   my $i=0;    my $i=0;
   my $awards='';    my $awards='';
     my @msgs;
   for ($i=0; $i<@list;$i++) {    for ($i=0; $i<@list;$i++) {
         my $msg;
     $result.="trying answer :$list[$i]:\n";      $result.="trying answer :$list[$i]:\n";
     my $thisanswer=$list[$i];      my $thisanswer=$list[$i];
     $thisanswer=~ s/\\/\\\\/g;  #    $thisanswer=~ s/\\/\\\\/g;
     $thisanswer =~ s/\'/\\\'/g;  #    $thisanswer =~ s/\'/\\\'/g;
       $result.="trying answer :$thisanswer:\n";
     if ($unit eq '') {      if ($unit eq '') {
       $aresult=&caparesponse_check($responselist[$i],   ($aresult,$msg)=&caparesponse_check($thisanswer,$responselist[$i],
      $expr.';my $answer=\''.$thisanswer.'\';');      $expr);
     } else {      } else {
       $aresult=&caparesponse_check($responselist[$i]." $unit",   ($aresult,$msg)=&caparesponse_check($thisanswer,
    $expr.';my $answer=\''.$thisanswer.'\';');      $responselist[$i]." $unit",
       $expr);
     }      }
     my ($temp)=split /:/, $aresult;      my ($temp)=split /:/, $aresult;
     $awards.="$temp,";      $awards.="$temp,";
     $result.=$aresult;      $result.=$aresult;
       push(@msgs,$msg);
   }    }
   chop $awards;    chop $awards;
   return "$awards:\n$result";    return ("$awards:\n$result",@msgs);
 }  }
   
 sub tex {  sub tex {
Line 485  sub format { Line 497  sub format {
   my ($value,$fmt)=@_;    my ($value,$fmt)=@_;
   my $dollarmode;    my $dollarmode;
   if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; }     if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } 
     $fmt=~s/e/E/g;
   my $result=sprintf('%.'.$fmt,$value);    my $result=sprintf('%.'.$fmt,$value);
   $result=~s/(E[+-]*)0/$1/;    $result=~s/(E[+-]*)0/$1/;
   if ($dollarmode) {$result=&dollarmode($result);}    if ($dollarmode) {$result=&dollarmode($result);}
Line 492  sub format { Line 505  sub format {
 }  }
   
 sub prettyprint {  sub prettyprint {
   my ($value,$fmt)=@_;    my ($value,$fmt,$target)=@_;
   my $result;    my $result;
   my $dollarmode;    my $dollarmode;
     if (!$target) { $target = $external::target; }
   if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; }     if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } 
   if ($fmt) { $value=sprintf('%.'.$fmt,$value); }    if ($fmt) { $value=sprintf('%.'.$fmt,$value); }
   if ($value =~ /([0-9\.\-\+]+)E([0-9\-\+]+)/ ) {    if ($value =~ /([0-9\.\-\+]+)E([0-9\-\+]+)/i ) {
     my $frac=$1;      my $frac=$1;
     if ($dollarmode) { $frac=&dollarformat($frac); }      if ($dollarmode) { $frac=&dollarformat($frac); }
     my $exponent=$2;      my $exponent=$2;
     $exponent=~s/^\+0*//;      $exponent=~s/^\+0*//;
     $exponent=~s/^-0*/-/;      $exponent=~s/^-0*/-/;
       $exponent=~s/^-0*/-/;
       if ($exponent eq '-') { undef($exponent); }
     if ($exponent) {      if ($exponent) {
       if ($external::target eq 'web') {        if ($target eq 'web') {
  $result=$frac.'&#215;10<sup>'.$exponent.'</sup>';   $result=$frac.'&#215;10<sup>'.$exponent.'</sup>';
       } elsif ($external::target eq 'tex') {        } elsif ($target eq 'tex') {
  $result='\ensuremath{'.$frac.'\times 10^{'.$exponent.'}}';   $result='\ensuremath{'.$frac.'\times 10^{'.$exponent.'}}';
       } else {        } else {
  $result=$value;   $result=$value;
Line 516  sub prettyprint { Line 532  sub prettyprint {
     }      }
   } else {    } else {
     $result=$value;      $result=$value;
     if ($dollarmode) { $result=&dollarformat($result); }      if ($dollarmode) { $result=&dollarformat($result,$target); }
   }    }
   return $result;    return $result;
 }  }
   
 sub dollarformat {  sub dollarformat {
   my ($number) = @_;    my ($number,$target) = @_;
     if (!$target) { $target = $external::target; }
   if ($number =~ /\./) {    if ($number =~ /\./) {
     while ($number =~ /([^\.,]+)([^\.,][^\.,][^\.,])([,0-9]*\.[0-9]*$)/) {      while ($number =~ /([^\.,]+)([^\.,][^\.,][^\.,])([,0-9]*\.[0-9]*$)/) {
       $number = $1.','.$2.$3;        $number = $1.','.$2.$3;
Line 532  sub dollarformat { Line 549  sub dollarformat {
       $number = $1.','.$2.$3;        $number = $1.','.$2.$3;
     }      }
   }    }
   if ($external::target eq 'tex') {    if ($target eq 'tex') {
     $number='\$'.$number; #' stupid emacs      $number='\$'.$number; #' stupid emacs
   } else {    } else {
     $number='$'.$number; #' stupid emacs      $number='$'.$number; #' stupid emacs

Removed from v.1.62  
changed lines
  Added in v.1.71


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