--- loncom/homework/default_homework.lcpm 2001/07/19 21:26:22 1.31
+++ loncom/homework/default_homework.lcpm 2001/10/01 20:15:30 1.37
@@ -13,22 +13,27 @@ $rad2deg=180.0/$pi;
$deg2rad=$pi/180.0;
sub caparesponse_check {
- my $answer=''; #done
- my $type=''; #done
+ #not properly used yet: calc
+ #not to be used: $ans_fmt
+ my ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc) =
+ eval $_[1].';return ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc);';
+
my $tol_type=''; # gets it's value from whether tol has a % or not done
- my $tol=''; #done
- my $sig=''; #done lowerbnd,upperbnd
my $sig_lbound=''; #done
my $sig_ubound=''; #done
- my $ans_fmt='';
- 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);';
+
#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;
@@ -79,14 +84,14 @@ sub caparesponse_check {
elsif ($result =='12') { $result='WANTED_NUMERIC'; }
else {$result = "ERROR: Unknown Result:$result:$@:";}
- return "$result:
Error $error:
Answer $answer:
Response $response:
type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$units
$message$expr";
+ return "$result:
Error $error:
Answer $answer:
Response $response:
type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|
$message$expr";
}
-sub caparesponse_check_list {
- my ($response,$expr)=@_;
+sub get_array_args {
+ my ($expr,$arg)=@_;
# do these first, because who knows what varname the instructor might have used
# but it probably isn't $CAPARESPONSE_CHECK_LIST_answer
- my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $answer';
+ my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $'.$arg; #'
my (@list) = eval $CAPARESPONSE_CHECK_LIST_answer;
my $result='';
$result.="error:$@:
";
@@ -95,10 +100,17 @@ sub caparesponse_check_list {
$result.="list zero is undefined
";
$list[0]=$CAPARESPONSE_CHECK_LIST_answer;
}
+ return @list;
+}
+
+sub caparesponse_check_list {
+ my ($response,$expr)=@_;
+ my (@list) = &get_array_args($expr,'answer');
my $aresult='';
my $current_answer;
$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 {
@@ -258,16 +270,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;
}