--- loncom/homework/caparesponse/caparesponse.pm 2002/09/04 06:55:27 1.57 +++ loncom/homework/caparesponse/caparesponse.pm 2002/09/30 15:10:58 1.58 @@ -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 @@ sub end_numericalresponse { } } } 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="
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.
"; + } 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.= ''; + for ($ind=0;$ind<$number_of_bubbles;$ind++) { + my $ans = sprintf('%.'.$formats[0],$bubbles_values[$ind]); + $result.=''; + } + $result.='
'.$ans.'
'; + } 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.
"; - } elsif ($target eq 'tex') { - $result.=&Apache::lonxml::latex_special_symbols($unit); - $result.="}. \\vskip 0 mm "; - } } } elsif ($target eq 'edit') { $result.=''.&Apache::edit::end_table; @@ -260,7 +325,7 @@ sub end_numericalresponse { } $result.=&Apache::response::answer_footer($$tagstack[-1]); } - &Apache::response::end_response; + &Apache::response::end_response; return $result; }