[LON-CAPA-cvs] cvs: loncom /homework/caparesponse caparesponse.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 12 Feb 2002 07:23:31 -0000


albertel		Tue Feb 12 02:23:31 2002 EDT

  Modified files:              
    /loncom/homework/caparesponse	caparesponse.pm 
  Log:
  - prints out answer range based on set tolerance
  
  
Index: loncom/homework/caparesponse/caparesponse.pm
diff -u loncom/homework/caparesponse/caparesponse.pm:1.50 loncom/homework/caparesponse/caparesponse.pm:1.51
--- loncom/homework/caparesponse/caparesponse.pm:1.50	Thu Jan 17 07:23:31 2002
+++ loncom/homework/caparesponse/caparesponse.pm	Tue Feb 12 02:23:31 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # caparesponse definition
 #
-# $Id: caparesponse.pm,v 1.50 2002/01/17 12:23:31 harris41 Exp $
+# $Id: caparesponse.pm,v 1.51 2002/02/12 07:23:31 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -191,6 +191,7 @@
     $result.='</td></tr>'.&Apache::edit::end_table;
   } elsif ($target eq 'answer') {
 
+    &Apache::response::setup_params($$tagstack[-1]);
     my (@answers)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);
     my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval);
     my $unit=&Apache::lonxml::get_param_var('unit',$parstack,$safeeval);
@@ -207,12 +208,21 @@
 	  $fmt=$formats[0];
 	}
       }
-      if ($fmt) { $ans = sprintf('%.'.$fmt,$ans); }
+      my ($high,$low);
+      if ($Apache::inputtags::params{'tol'}) {
+	($high,$low)=&get_tolrange($ans,$Apache::inputtags::params{'tol'});
+      }	
+      if ($fmt) {
+	$ans = sprintf('%.'.$fmt,$ans);
+	if ($high) {
+	  $high = sprintf('%.'.$fmt,$high); $low = sprintf('%.'.$fmt,$low);
+	}
+      }
+      if ($high) { $ans.=' ['.$low.','.$high.'] '; }
       $result.=&Apache::response::answer_part($$tagstack[-1],$ans);
     }
     if ($unit) {
-      $result.=&Apache::response::answer_part($$tagstack[-1],
-					      '<b>'.$unit.'</b>');
+      $result.=&Apache::response::answer_part($$tagstack[-1],"<b>$unit</b>");
     }
     if ($type || $token->[1] eq 'stringresponse') {
       my $string='Case Insensitive';
@@ -236,6 +246,21 @@
   }
   &Apache::response::end_response;
   return $result;
+}
+
+sub get_tolrange {
+  my ($ans,$tol)=@_;
+  my ($high,$low);
+  if ($tol =~ /%$/) {
+    chop($tol);
+    my $change=$ans*($tol/100.0);
+    $high=$ans+$change;
+    $low=$ans-$change;
+  } else {
+    $high=$ans+$tol;
+    $low=$ans-$tol;
+  }
+  return ($high,$low);
 }
 
 sub start_stringresponse {