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

www www@source.lon-capa.org
Wed, 10 Nov 2010 22:41:29 -0000


www		Wed Nov 10 22:41:29 2010 EDT

  Modified files:              
    /loncom/homework	functionplotresponse.pm 
  Log:
  Labels appear to be working. Still has debugging code.
  
  
Index: loncom/homework/functionplotresponse.pm
diff -u loncom/homework/functionplotresponse.pm:1.30 loncom/homework/functionplotresponse.pm:1.31
--- loncom/homework/functionplotresponse.pm:1.30	Tue Nov  9 02:29:52 2010
+++ loncom/homework/functionplotresponse.pm	Wed Nov 10 22:41:29 2010
@@ -1,7 +1,7 @@
 # LearningOnline Network with CAPA
 # option list style responses
 #
-# $Id: functionplotresponse.pm,v 1.30 2010/11/09 02:29:52 www Exp $
+# $Id: functionplotresponse.pm,v 1.31 2010/11/10 22:41:29 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -799,6 +799,17 @@
    my $li=0;
    my $lh=400;
 
+# Special case: the upper boundary was not defined
+# and needs to be set to the value where
+# the condition is not true anymore => set flag
+
+   my $findupper=0;
+   if (($xfinal eq '')
+    && (!defined($Apache::functionplotresponse::functionplotrulelabels{$xfinallabel}))
+    && ($xfinallabel)) {
+       $findupper=1;
+   }
+
 # if a hard value is set for the boundaries, it overrides the label
    if (($xinitial ne '') && ($xinitiallabel ne '') && ($xinitiallabel ne 'start')) {
       $li=&array_index($xmin,$xmax,$xinitial);
@@ -808,15 +819,18 @@
       $lh=&array_index($xmin,$xmax,$xfinal);
       $Apache::functionplotresponse::functionplotrulelabels{$xfinallabel}=$lh;
    }
+# if the label is defined, use it
    if (defined($Apache::functionplotresponse::functionplotrulelabels{$xinitiallabel})) {
       $li=$Apache::functionplotresponse::functionplotrulelabels{$xinitiallabel};
    } else {
       $li=&array_index($xmin,$xmax,$xinitial);
    }
-   if (defined($Apache::functionplotresponse::functionplotrulelabels{$xfinallabel})) {
-      $lh=$Apache::functionplotresponse::functionplotrulelabels{$xfinallabel};
-   } else {
-      $lh=&array_index($xmin,$xmax,$xfinal);
+   unless ($findupper) {
+      if (defined($Apache::functionplotresponse::functionplotrulelabels{$xfinallabel})) {
+         $lh=$Apache::functionplotresponse::functionplotrulelabels{$xfinallabel};
+      } else {
+         $lh=&array_index($xmin,$xmax,$xfinal);
+      }
    }
 # Basic sanity checks
    if ($li<0) { $li=0; }
@@ -824,7 +838,8 @@
    if ($li>$lh) {
        $lh=$li;
    }
-   &Apache::lonnet::logthis("Init $xinitial=$li Final $xfinal=$lh");
+
+   &Apache::lonnet::logthis("Init $xinitial=$li Final $xfinal=$lh Findupper: $findupper");
    my $tol=$tolfunc;
    if ($derivative==2) {
       $tol=$told2fdx2;
@@ -840,7 +855,16 @@
         } else {
            $val=$Apache::functionplotresponse::func[$i];
         }
-        unless (&compare_rel($relationship,$value,$val,$tol)) { return 0; };
+        unless (&compare_rel($relationship,$value,$val,$tol)) { 
+           &Apache::lonnet::logthis("Condition false $findupper at $i with $val");
+           if (($findupper) && ($i>$li)) {
+              $Apache::functionplotresponse::functionplotrulelabels{$xfinallabel}=$i;
+              &Apache::lonnet::logthis("Setting $xfinallabel to $i");
+              return 1;
+           } else {
+              return 0; 
+           }
+        }
    }
    return 1;
 }