[LON-CAPA-cvs] cvs: loncom /homework radiobuttonresponse.pm
albertel
lon-capa-cvs-allow@mail.lon-capa.org
Fri, 29 Jun 2007 17:32:32 -0000
albertel Fri Jun 29 13:32:32 2007 EDT
Modified files:
/loncom/homework radiobuttonresponse.pm
Log:
- making sure that whichfoils is called only once per target so randomness
doesn't change
Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.122 loncom/homework/radiobuttonresponse.pm:1.123
--- loncom/homework/radiobuttonresponse.pm:1.122 Fri Jun 29 13:24:03 2007
+++ loncom/homework/radiobuttonresponse.pm Fri Jun 29 13:32:31 2007
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# mutliple choice style responses
#
-# $Id: radiobuttonresponse.pm,v 1.122 2007/06/29 17:24:03 albertel Exp $
+# $Id: radiobuttonresponse.pm,v 1.123 2007/06/29 17:32:31 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -158,15 +158,14 @@
sub grade_response {
- my ($max,$randomize, $bubbles_per_line)=@_;
- #keep the random numbers the same must always call this
- my ($answer,@whichfoils)=&whichfoils($max,$randomize);
+ my ($answer, $whichfoils, $bubbles_per_line)=@_;
+
if ( !&Apache::response::submitted() ) { return; }
my $response;
if ($env{'form.submitted'} eq 'scantron') {
$response = &Apache::response::getresponse(1,undef,
- &bubble_line_count(scalar(@whichfoils),
+ &bubble_line_count(scalar(@{ $whichfoils}),
$bubbles_per_line),
$bubbles_per_line);
@@ -179,7 +178,7 @@
my $part=$Apache::inputtags::part;
my $id = $Apache::inputtags::response['-1'];
my %responsehash;
- $responsehash{$whichfoils[$response]}=$response;
+ $responsehash{$whichfoils->[$response]}=$response;
my $responsestr=&Apache::lonnet::hash2str(%responsehash);
my %previous=&Apache::response::check_for_previous($responsestr,
$part,$id);
@@ -232,20 +231,18 @@
'-2');
my $randomize = &Apache::lonxml::get_param('randomize',$parstack,
$safeeval,'-2');
- my ($answer,@shown) = &whichfoils($max,$randomize);
+ my ($answer, @shown) = &whichfoils($max, $randomize);
$answer_count = scalar(@shown);
if ($target eq 'web' || $target eq 'tex') {
$result=&displayfoils($target,
- $max,
- $randomize,
+ $answer, \@shown,
$direction,
$bubbles_per_line);
} elsif ($target eq 'answer' ) {
- $result=&displayanswers($max,$randomize);
+ $result=&displayanswers($answer, \@shown);
} elsif ( $target eq 'grade') {
- &grade_response($max,$randomize,
- $bubbles_per_line);
+ &grade_response($answer, \@shown, $bubbles_per_line);
} elsif ( $target eq 'analyze') {
&Apache::response::analyze_store_foilgroup(\@shown,
['text','value','location']);
@@ -389,6 +386,10 @@
- and selects a single correct statement from all possilble true statments
- and limits it to a toal of $max foils
+WARNING: this routine uses the random number generator, it should only
+be called once per target, otherwise it can cause randomness changes in
+homework problems.
+
Arguments
$max - maximum number of foils to select (including the true one)
(so a max of 5 is: 1 true, 4 false)
@@ -539,10 +540,9 @@
}
sub displayfoils {
- my ($target,$max,$randomize,$direction, $bubbles_per_line)=@_;
+ my ($target,$answer,$whichfoils,$direction, $bubbles_per_line)=@_;
my $result;
- my ($answer,@whichfoils)=&whichfoils($max,$randomize);
my $part=$Apache::inputtags::part;
my $solved=$Apache::lonhomework::history{"resource.$part.solved"};
if ( ($target ne 'tex') &&
@@ -552,7 +552,7 @@
$result.='<table><tr>';
}
}
- foreach my $name (@whichfoils) {
+ foreach my $name (@{ $whichfoils }) {
if ($direction eq 'horizontal') {
if ($target ne 'tex') { $result.='<td>'; }
}
@@ -593,7 +593,7 @@
if ($target ne 'tex' && $direction eq 'horizontal') {
$result.="<table><tr>";
}
- foreach my $name (@whichfoils) {
+ foreach my $name (@{ $whichfoils }) {
if ($target ne 'tex') {
if ($direction eq 'horizontal') {
$result.="<td>";
@@ -652,15 +652,14 @@
}
sub displayanswers {
- my ($max,$randomize)=@_;
- my ($answer,@whichopt) = &whichfoils($max,$randomize);
+ my ($answer, $whichopt)=@_;
my $result=&Apache::response::answer_header('radiobuttonresponse');
if ($Apache::lonhomework::type eq 'exam') {
my $correct = ('A'..'Z')[$answer];
$result.=&Apache::response::answer_part('radiobuttonresponse',
$correct);
}
- foreach my $name (@whichopt) {
+ foreach my $name (@{ $whichopt }) {
$result.=&Apache::response::answer_part('radiobuttonresponse',
$Apache::response::foilgroup{$name.'.value'});
}