--- loncom/homework/radiobuttonresponse.pm 2003/04/18 17:10:08 1.70 +++ loncom/homework/radiobuttonresponse.pm 2003/05/16 19:25:08 1.71 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # mutliple choice style responses # -# $Id: radiobuttonresponse.pm,v 1.70 2003/04/18 17:10:08 sakharuk Exp $ +# $Id: radiobuttonresponse.pm,v 1.71 2003/05/16 19:25:08 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -295,9 +295,10 @@ sub whichfoils { &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue"); my (@toplist, @bottomlist); my $topcount=0; + my $bottomcount=0; # assign everyone to either toplist/bottomlist or whichfalse # which false is randomized, toplist bottomlist are in order - while ((($#whichfalse) < $max-2) && ($#falselist > -1)) { + while ((($#whichfalse+$topcount+$bottomcount) < $max-2) && ($#falselist > -1)) { &Apache::lonxml::debug("Have $#whichfalse max is $max"); my $afalse=int(&Math::Random::random_uniform() * ($#falselist+1)); &Apache::lonxml::debug("From $#falselist elms, picking $afalse"); @@ -310,10 +311,12 @@ sub whichfoils { $topcount++; } elsif ($bottom{$afalse}) { $bottomlist[$bottom{$afalse}]=$afalse; + $bottomcount++; } else { push (@whichfalse,$afalse); } } + &Apache::lonxml::debug("Answer wants $answer"); my $truename=$truelist[$whichtrue]; my $dosplice=1; #insert the true statement, keeping track of where it wants to be @@ -335,11 +338,12 @@ sub whichfoils { $answer+=$topcount+$#whichfalse+1; $dosplice=0; } else { - if ($topcount>0) { - $answer = int(&Math::Random::random_uniform() * ($#whichfalse+1)) - + $topcount; + if ($topcount>0 || $bottomcount>0) { + $answer = int(&Math::Random::random_uniform() * ($#whichfalse+1)) + + $topcount; } } + &Apache::lonxml::debug("Answer now wants $answer"); #add the top items to the top, bottom items to the bottom for (my $i=0;$i<=$#toplist;$i++) { if ($toplist[$i]) { unshift(@whichfalse,$toplist[$i]) }