--- loncom/homework/default_homework.lcpm 2001/12/21 21:37:26 1.44 +++ loncom/homework/default_homework.lcpm 2002/09/20 21:11:18 1.50 @@ -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.44 2001/12/21 21:37:26 matthew Exp $ +# $Id: default_homework.lcpm,v 1.50 2002/09/20 21:11:18 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -101,6 +101,11 @@ sub caparesponse_check { $sig_ubound =15; #SIG_UB_DEFAULT } else { ($sig_lbound,$sig_ubound) = split /,/,$sig; + if (!$sig_lbound) { + $sig_lbound = 0; #SIG_LB_DEFAULT + $sig_ubound =15; #SIG_UB_DEFAULT + } + if (!$sig_ubound) { $sig_ubound=$sig_lbound; } } my $result = &caparesponse_capa_check_answer($response,$answer,$type, $tol_type,$tol, @@ -238,6 +243,7 @@ sub random { srand($external::randomseed); $hidden::RANDOMINIT=1; } + if (!defined($step)) { $step=1; } my $num=1+int(($end-$start)/$step); my $result=$start + int(rand() * $num)*$step; return $result; @@ -436,7 +442,61 @@ sub floor {return (($_[0]-int($_[0]))== sub format { my ($value,$fmt)=@_; - return sprintf('%.'.$fmt,$value); + my $dollarmode; + if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } + my $result=sprintf('%.'.$fmt,$value); + $result=~s/(E[+-]*)0/$1/; + if ($dollarmode) {$result=&dollarmode($result);} + return $result; +} + +sub prettyprint { + my ($value,$fmt)=@_; + my $result; + my $dollarmode; + if ($fmt =~ /^\$(.*)/) { $fmt=$1; $dollarmode=1; } + if ($fmt) { $value=sprintf('%.'.$fmt,$value); } + if ($value =~ /([0-9\.\-\+]+)E([0-9\-\+]+)/ ) { + my $frac=$1; + if ($dollarmode) { $frac=&dollarformat($frac); } + my $exponent=$2; + $exponent=~s/^\+0*//; + $exponent=~s/^-0*/-/; + if ($exponent) { + if ($external::target eq 'web') { + $result=$frac.'×10'.$exponent.''; + } elsif ($external::target eq 'tex') { + $result='\ensuremath{'.$frac.'\times 10^{'.$exponent.'}}'; + } else { + $result=$value; + } + } else { + $result=$frac; + } + } else { + $result=$value; + if ($dollarmode) { $result=&dollarformat($result); } + } + return $result; +} + +sub dollarformat { + my ($number) = @_; + if ($number =~ /\./) { + while ($number =~ /([^\.,]+)([^\.,][^\.,][^\.,])([,0-9]*\.[0-9]*$)/) { + $number = $1.','.$2.$3; + } + } else { + while ($number =~ /([^,]+)([^,][^,][^,])([,0-9]*)$/) { + $number = $1.','.$2.$3; + } + } + if ($external::target eq 'tex') { + $number='\$'.$number; #' stupid emacs + } else { + $number='$'.$number; #' stupid emacs + } + return $number; } sub map { @@ -628,4 +688,13 @@ sub choose { return $_[$num]; } +# expiremental idea +sub proper_path { + my ($path)=@_; + if ( $external::target eq "tex" ) { + return '/home/httpd/html'.$path; + } else { + return $path; + } +}