--- loncom/homework/default_homework.lcpm 2002/09/26 20:46:48 1.52 +++ loncom/homework/default_homework.lcpm 2003/03/25 23:05:03 1.60 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run() # -# $Id: default_homework.lcpm,v 1.52 2002/09/26 20:46:48 albertel Exp $ +# $Id: default_homework.lcpm,v 1.60 2003/03/25 23:05:03 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -101,11 +101,11 @@ sub caparesponse_check { $sig_ubound =15; #SIG_UB_DEFAULT } else { ($sig_lbound,$sig_ubound) = split /,/,$sig; - if (!$sig_lbound) { + if (!defined($sig_lbound)) { $sig_lbound = 0; #SIG_LB_DEFAULT $sig_ubound =15; #SIG_UB_DEFAULT } - if (!$sig_ubound) { $sig_ubound=$sig_lbound; } + if (!defined($sig_ubound)) { $sig_ubound=$sig_lbound; } } my $result = &caparesponse_capa_check_answer($response,$answer,$type, $tol_type,$tol, @@ -142,7 +142,7 @@ sub get_array_args { } $GET_ARRAY_ARGS_result.="error:$@:\n"; # 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\n"; $GET_ARRAY_ARGS_list[0]=$CAPARESPONSE_CHECK_LIST_answer; } @@ -151,7 +151,8 @@ sub get_array_args { sub caparesponse_check_list { my ($response,$expr)=@_; - my $result; + $expr =~ s/\\/\\\\/g; + $expr =~ s/\'/\\\'/g; my ($result,@list) = &get_array_args($expr,'answer'); my $aresult=''; my $current_answer; @@ -180,12 +181,15 @@ sub caparesponse_check_list { my $awards=''; for ($i=0; $i<@list;$i++) { $result.="trying answer :$list[$i]:\n"; + my $thisanswer=$list[$i]; + $thisanswer=~ s/\\/\\\\/g; + $thisanswer =~ s/\'/\\\'/g; if ($unit eq '') { $aresult=&caparesponse_check($responselist[$i], - $expr.';my $answer=\''.$list[$i].'\';'); + $expr.';my $answer=\''.$thisanswer.'\';'); } else { $aresult=&caparesponse_check($responselist[$i]." $unit", - $expr.';my $answer=\''.$list[$i].'\';'); + $expr.';my $answer=\''.$thisanswer.'\';'); } my ($temp)=split /:/, $aresult; $awards.="$temp,"; @@ -197,15 +201,15 @@ sub caparesponse_check_list { sub tex { if ( $external::target eq "tex" ) { - return @_[0]; + return $_[0]; } else { - return @_[1]; + return $_[1]; } } sub var_in_tex { if ( $external::target eq "tex" ) { - return @_[0]; + return $_[0]; } else { return ""; } @@ -213,12 +217,12 @@ sub var_in_tex { sub web { if ( $external::target eq "tex" ) { - return @_[1]; + return $_[1]; } else { if ( $external::target eq "web" || $external::target eq "answer") { - return @_[2]; + return $_[2]; } else { - return @_[0]; + return $_[0]; } } } @@ -229,10 +233,6 @@ sub html { } } -sub problem { - return '1'; -} - sub hinton { return 0; } @@ -240,7 +240,9 @@ sub hinton { sub random { my ($start,$end,$step)=@_; if ( ! $hidden::RANDOMINIT ) { - &random_set_seed_from_phrase($external::randomseed); + if ($external::randomseed == 0) { $external::randomseed=1; } + &random_set_seed(1,int(abs($external::randomseed))); + &math_random_uniform(); $hidden::RANDOMINIT=1; } if (!defined($step)) { $step=1; } @@ -417,15 +419,15 @@ sub log { log(shift) } sub atan2 { atan2($_[0],$_[1]) } sub sqrt { sqrt(shift) } -sub tan { sin($_[0]) / cos($_[0]) } +sub tan { CORE::sin($_[0]) / CORE::cos($_[0]) } #sub atan { atan2($_[0], 1); } #sub acos { atan2(sqrt(1 - $_[0] * $_[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 { - 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 - factorial result is greater than system limit ($input)" if $input > 170; return 1 if $input == 0; @@ -468,8 +470,8 @@ sub sub_string { } sub pow {return $_[0] ** $_[1]; } -sub ceil {return (($_[0]-int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? (int($_[0])+ 1) : int($_[0])); } -sub floor {return (($_[0]-int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? int($_[0]) : (int($_[0])-1)); } +sub ceil {return (($_[0]-CORE::int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? (CORE::int($_[0])+ 1) : CORE::int($_[0])); } +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 format { @@ -565,7 +567,7 @@ sub map { } } } - &random_set_seed(@seed); + &random_set_seed(@oldseed); return ''; } @@ -712,7 +714,7 @@ sub array_moments { $kurt+=$x**4; } $output[2]=$var/($N-1); - $sdev=sqrt($output[2]); + $sdev=CORE::sqrt($output[2]); if ($sdev == 0) { $output[3]="inf-variance=0"; $output[4]="inf-variance=0";