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

sakharuk lon-capa-cvs@mail.lon-capa.org
Mon, 30 Sep 2002 15:10:58 -0000


sakharuk		Mon Sep 30 11:10:58 2002 EDT

  Modified files:              
    /loncom/homework/caparesponse	caparesponse.pm 
  Log:
  Changes were done to print exams with numericalresponse type of problems.
  
  
Index: loncom/homework/caparesponse/caparesponse.pm
diff -u loncom/homework/caparesponse/caparesponse.pm:1.57 loncom/homework/caparesponse/caparesponse.pm:1.58
--- loncom/homework/caparesponse/caparesponse.pm:1.57	Wed Sep  4 02:55:27 2002
+++ loncom/homework/caparesponse/caparesponse.pm	Mon Sep 30 11:10:58 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # caparesponse definition
 #
-# $Id: caparesponse.pm,v 1.57 2002/09/04 06:55:27 albertel Exp $
+# $Id: caparesponse.pm,v 1.58 2002/09/30 15:10:58 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -157,46 +157,111 @@
       }
     }
   } elsif ($target eq 'web' || $target eq 'tex') {
-    my $award = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
-    my $status = $Apache::inputtags::status['-1'];
-    if ($award =~ /^correct/ || $status eq "SHOW_ANSWER" ) {
-      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);
-
-      if ($target eq 'web') {
+    if ($Apache::lonhomework::type ne 'exam') {
+      my $award = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
+      my $status = $Apache::inputtags::status['-1'];
+      if ($award =~ /^correct/ || $status eq "SHOW_ANSWER" ) {
+	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);
+	
+	if ($target eq 'web') {
 	  $result="<br />The computer got ";
-      } elsif ($target eq 'tex') {
+        } elsif ($target eq 'tex') {
 	  $result='\vskip 0 mm The computer got \\texttt{';
-      }
-      for (my $i=0; $i <= $#answers; $i++) {
-	my $answer=$answers[$i];
-	my $format;
-	if ($#formats > 0) {
-	  $format=$formats[$i];
-	} else {
-	  $format=$formats[0];
-	}
-	my $formatted;
-	if ((defined($format)) && ($format ne '')) {
-	  &Apache::lonxml::debug("formatting with :$format: answer :$answer:");
-	  $formatted=sprintf('%.'.$format,$answer).',';
-	} else {
-	  &Apache::lonxml::debug("no format answer :$answer:");
-	  $formatted="$answer,";
+        }
+	for (my $i=0; $i <= $#answers; $i++) {
+	   my $answer=$answers[$i];
+	   my $format;
+	   if ($#formats > 0) {
+	     $format=$formats[$i];
+	   } else {
+	     $format=$formats[0];
+	   }
+	   my $formatted;
+	   if ((defined($format)) && ($format ne '')) {
+	     &Apache::lonxml::debug("formatting with :$format: answer :$answer:");
+	     $formatted=sprintf('%.'.$format,$answer).',';
+	   } else {
+	     &Apache::lonxml::debug("no format answer :$answer:");
+	     $formatted="$answer,";
+	   }
+	   if ($target eq 'tex') {$formatted=&Apache::lonxml::latex_special_symbols($formatted);}
+	     $result.=$formatted;
+           }
+	   chop $result;
+	   if ($target eq 'web') {
+	     $result.=" $unit.<br />";
+	   } elsif ($target eq 'tex') {
+	     $result.=&Apache::lonxml::latex_special_symbols($unit);
+	     $result.="}. \\vskip 0 mm ";
+	   }
+       }
+    } else {
+      	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);
+	my $number_of_bubbles = 8; #default values for number of bubbles
+	my @bubbles_values = (); 
+	my @factors = (1.13,1.17,1.25,1.33,1.45); #default values of factors
+	my @powers = (1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0); #default values for powers
+	my $factors_number = 5; #default values for number of factors
+	my $powers_number = 8; #default values for number of powers
+	my $symb;
+	if ($ENV{'form.symb'}=~/___\d+___/) {$symb=$ENV{'form.symb'};} else {$symb=$ENV{'request.symb'};}
+	my $randomseed = srand(&Apache::lonnet::rndseed($symb,$ENV{'request.course.id'},
+                                                              $ENV{'user.domain'},$ENV{'user.name'}));
+	my $ind=1+int(rand()*($factors_number-1));
+	my $factor = $factors[$ind];
+	$ind=1+int(rand()*($powers_number-1));
+	my $power = $powers[$ind];
+	for ($ind=0;$ind<$number_of_bubbles;$ind++) {
+	    $bubbles_values[$ind] = $answers[0]*$factor**($power-$powers[$powers_number-$ind-1]);
+	}	    
+        if ($target eq 'web') {
+	    $result.= '<table border="1"><tr>';
+	    for ($ind=0;$ind<$number_of_bubbles;$ind++) {
+		my $ans = sprintf('%.'.$formats[0],$bubbles_values[$ind]);
+		$result.='<td>'.$ans.'</td>';
+		}
+	    $result.='</tr></table>';
+	} elsif ($target eq 'tex') {
+	    my @alphabet = ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
+                            'Q','R','S','T','U','V','W','X','Y','Z');
+	    my $max_val = 0;
+	    if ($formats[0]=~m/^(\d+)E([^\d]*)(\d*)$/) {
+		$max_val=$1+$2+4;
+	    }
+	    $max_val = int(90/(($max_val+6)*2));
+            my $celllength = 90/$max_val-12;
+	    my @table_range = ();
+	    my $number_of_tables = int($number_of_bubbles/$max_val);
+	    for (my $i=0;$i<$number_of_tables;$i++) {push @table_range,$max_val;}
+	    if ($number_of_bubbles % $max_val != 0) {
+		$number_of_tables++;
+		push @table_range,($number_of_bubbles % $max_val);
+	    }
+	    my $j=0;
+	    my $cou=0;
+	    $result.='\vskip 2 mm \noindent ';
+	    for (my $i=0;$i<$number_of_tables;$i++) {
+		$result.='\vskip 0 mm \noindent \begin{tabular}{|';
+		for ($ind=0;$ind<$table_range[$j];$ind++) {
+		    $result.='lp{'.$celllength.' mm}|';
+		}
+		$result.='}\hline';
+		for ($ind=$cou;$ind<$cou+$table_range[$j];$ind++) {
+		    my $ans = sprintf('%.'.$formats[0],$bubbles_values[$ind]);
+		    $result.=' '.$alphabet[$ind].': & '.$ans.' ';
+		    if ($ind != $cou+$table_range[$j]-1) {$result.=' & ';}
+		}
+		$j++;
+		$cou += $table_range[$j];
+		$result.='\\\\\hline\end{tabular}\vskip 0 mm ';
+	    }	    
 	}
-	if ($target eq 'tex') {$formatted=&Apache::lonxml::latex_special_symbols($formatted);}
-	$result.=$formatted;
-      }
-      chop $result;
-      if ($target eq 'web') {
-	$result.=" $unit.<br />";
-      } elsif ($target eq 'tex') {
-	$result.=&Apache::lonxml::latex_special_symbols($unit);
-	$result.="}. \\vskip 0 mm ";
-      }
     }
   } elsif ($target eq 'edit') {
     $result.='</td></tr>'.&Apache::edit::end_table;
@@ -260,7 +325,7 @@
     }
     $result.=&Apache::response::answer_footer($$tagstack[-1]);
   }
-  &Apache::response::end_response;
+    &Apache::response::end_response;
   return $result;
 }