--- loncom/homework/default_homework.lcpm 2001/07/13 14:49:28 1.30 +++ loncom/homework/default_homework.lcpm 2001/08/22 22:21:46 1.35 @@ -24,11 +24,22 @@ sub caparesponse_check { my $unit=''; #done my $calc=''; my ($response,$expr)=@_; - + + ($answer,$type,$tol,$sig,$ans_fmt, - $unit,$calc) = eval $expr.';return $answer,$type,$tol,$sig,$ans_fmt,$unit,$calc'; + $unit,$calc) = eval $expr.';return ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc);'; #type's definitons come from capaParser.h + my $message=''; + #remove leading and trailing whitespace + if ($response=~ /^\s|\s$/) { + $response=~ s:^\s+|\s+$::g; + $message .="Removed ws now :$response:
"; + } else { + $message .="no ws in :$response:
"; + } + if ($type eq '' ) { + $message .= "Didn't find a type :$type:$expr: defaulting
"; if ( $answer eq ($answer *1.0)) { $type = 2; } else { $type = 3; } } else { @@ -77,7 +88,7 @@ sub caparesponse_check { elsif ($result =='12') { $result='WANTED_NUMERIC'; } else {$result = "ERROR: Unknown Result:$result:$@:";} - return "$result:
Error $error:
Answer $answer:
Response $response:
$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$units
"; + return "$result:
Error $error:
Answer $answer:
Response $response:
type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$units
$message$expr"; } sub caparesponse_check_list { @@ -87,26 +98,44 @@ sub caparesponse_check_list { my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $answer'; my (@list) = eval $CAPARESPONSE_CHECK_LIST_answer; my $result=''; + $result.="error:$@:
"; + # if the eval fails just use what is in the answer exactly + if (!defined(@list) || !defined($list[0])) { + $result.="list zero is undefined
"; + $list[0]=$CAPARESPONSE_CHECK_LIST_answer; + } my $aresult=''; my $current_answer; - my (@responselist)=split /,/,$response; + $result.="Got response :$CAPARESPONSE_CHECK_LIST_answer:$list[0]:
"; + my @responselist; + my $type =eval $expr.';return $answer;'; + if ($type ne '' && $#list > 0) { + (@responselist)=split /,/,$response; + } else { + (@responselist)=($response); + } my $unit=''; - $result.="Final response :$responselist['-1']:
"; - if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) { - $responselist['-1']=$1; - $unit=$2; + $result.="Initial final response :$responselist['-1']:
"; + if ($type eq '') { + #for numerical problems split off the unit + if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) { + $responselist['-1']=$1; + $unit=$2; + } } - $result.="Final response :$responselist['-1']:
"; + $result.="Final final response :$responselist['-1']:
"; + $result.=":$#list: answers
"; $unit=~s/\s//; my $i=0; my $awards=''; for ($i=0; $i<@list;$i++) { + $result.="trying answer :$list[$i]:
"; if ($unit eq '') { $aresult=&caparesponse_check($responselist[$i], - $expr.';my $answer='.$list[$i].';'); + $expr.';my $answer=\''.$list[$i].'\';'); } else { $aresult=&caparesponse_check($responselist[$i]." $unit", - $expr.';my $answer='.$list[$i].';'); + $expr.';my $answer=\''.$list[$i].'\';'); } my ($temp)=split /:/, $aresult; $awards.="$temp,"; @@ -239,16 +268,9 @@ sub random_noncentral_f { } sub random_multivariate_normal { - my ($item_cnt,$seed,@mean) = @_; - return "Number of deviates must be greater than 0" if $item_cnt <= 0; - my (@covar,@retArray); - my $ind = 0; - while ($ind<$item_cnt) { - push @covar, pop (@mean); - $ind++; - } + my ($item_cnt,$seed,$mean,$covar) = @_; &random_set_seed_from_phrase($seed); - @retArray=&math_random_multivariate_normal($item_cnt,@mean,@covar); + @retArray=&math_random_multivariate_normal($item_cnt,@$mean,@$covar); return @retArray; }