[LON-CAPA-cvs] cvs: loncom(version_2_10_X) /homework default_homework.lcpm
raeburn
raeburn at source.lon-capa.org
Thu Oct 6 13:20:38 EDT 2011
raeburn Thu Oct 6 17:20:38 2011 EDT
Modified files: (Branch: version_2_10_X)
/loncom/homework default_homework.lcpm
Log:
- Backport 1.153, 1,154, 1.155, 1.156, 1.157, 1.158, 1.159, 1.161.
-------------- next part --------------
Index: loncom/homework/default_homework.lcpm
diff -u loncom/homework/default_homework.lcpm:1.152.2.1 loncom/homework/default_homework.lcpm:1.152.2.2
--- loncom/homework/default_homework.lcpm:1.152.2.1 Wed Aug 3 03:37:23 2011
+++ loncom/homework/default_homework.lcpm Thu Oct 6 17:20:37 2011
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run()
#
-# $Id: default_homework.lcpm,v 1.152.2.1 2011/08/03 03:37:23 raeburn Exp $
+# $Id: default_homework.lcpm,v 1.152.2.2 2011/10/06 17:20:37 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -143,7 +143,6 @@
my $sig_lbound=''; #done
my $sig_ubound=''; #done
-
#type's definitons come from capaParser.h
#remove leading and trailing whitespace
@@ -152,10 +151,8 @@
}
if ($response=~ /^\s|\s$/) {
$response=~ s:^\s+|\s+$::g;
- &LONCAPA_INTERNAL_DEBUG("Removed ws now :$response:");
}
- #&LONCAPA_INTERNAL_DEBUG(" type is $type ");
if ($type eq 'cs' || $type eq 'ci') {
#for string answers make sure all places spaces occur, there is
#really only 1 space, in both the answer and the response
@@ -179,7 +176,6 @@
if (length($response) > 500) { return ('TOO_LONG',undef); }
if ($type eq '' ) {
- &LONCAPA_INTERNAL_DEBUG("Didn't find a type :$type: defaulting");
if ( $answer eq ($answer *1.0)) { $type = 2;
} else { $type = 3; }
} else {
@@ -199,7 +195,6 @@
#formula type setup the sample points
if ($type eq '8') {
($id_list,$points)=split(/@/,$samples);
- &LONCAPA_INTERNAL_DEBUG("Found :$id_list:$points: points in $samples");
}
if ($tol eq '') {
$tol=0.0;
@@ -258,8 +253,8 @@
elsif ($result =='15') { $result='UNIT_IRRECONCIBLE'; }
else {$result = "ERROR: Unknown Result:$result:$@:";}
- &LONCAPA_INTERNAL_DEBUG("RetError $reterror: Answer $answer: Response $response: type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|");
- &LONCAPA_INTERNAL_DEBUG(" $answer $response $result ");
+# &LONCAPA_INTERNAL_DEBUG("RetError $reterror: Answer $answer: Response $response: type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|");
+# &LONCAPA_INTERNAL_DEBUG(" $answer $response $result ");
return ($result,$reterror);
}
@@ -271,6 +266,9 @@
my $answerunit=$LONCAPA::CAPAresponse_args{'unit'};
&LONCAPA_INTERNAL_DEBUG("Got type :$type: answer unit :$answerunit:\n");
+ my $preprocess=$LONCAPA::CAPAresponse_args{'preprocess'};
+ $preprocess=~s/^\&//;
+
my $num_input_lines =
scalar(@{$LONCAPA::CAPAresponse_answer->{'answers'}});
@@ -307,22 +305,43 @@
}
}
- &LONCAPA_INTERNAL_DEBUG("Initial final response :$responses->[0][-1]:");
my $unit;
+ my ($allowalgebra)=($LONCAPA::CAPAresponse_args{'allowalgebra'}=~/^(yes|1|on)$/i);
if ($type eq 'float' || $type eq '') {
#for numerical problems split off the unit
-# if ( $responses->[0][-1]=~ /(.*[^\s])\s+([^\s]+)/ ) {
- if ( $responses->[0][-1]=~ /^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$/ ) {
- $responses->[0][-1]=$1;
- $unit=&capa_formula_fix($2);
- &LONCAPA_INTERNAL_DEBUG("Found unit :$unit:");
+ my ($part1,$part2);
+ if ($allowalgebra) {
+ ($part1,$part2)=($responses->[0][-1]=~ /^(.*[^\s])\s+([^\s]+)$/);
+ } else {
+ ($part1,$part2)=($responses->[0][-1]=~ /^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$/);
+ }
+ if (defined($part1) && defined($part2)) {
+ $responses->[0][-1]=$part1;
+ $unit=&capa_formula_fix($part2);
+ my $customunits=$LONCAPA::CAPAresponse_args{'customunits'};
+ if ($customunits =~ /\S/) {
+ foreach my $replacement (split(/\s*\,\s*/,$customunits)) {
+ my ($which,$what)=split(/\s*\=\s*/,$replacement);
+ if ((defined($which)) && (defined($what))) {
+ $what=&capa_formula_fix($what);
+ $unit=~s/$which/\($what\)/g;
+ }
+ }
+ }
}
}
- &LONCAPA_INTERNAL_DEBUG("Final final response :$responses->[0][-1]:$unit:");
$unit=~s/\s//;
my $error;
foreach my $response (@$responses) {
- foreach my $element (@$response) {
+ foreach my $element (@$response) {
+ # See if we have preprocessor
+ if ($preprocess=~/\S/) {
+ if (defined(&$preprocess)) {
+ no strict 'refs';
+ $element=&$preprocess($element,$unit);
+ use strict 'refs';
+ }
+ }
if (($type eq 'float') || (($type eq '') && ($unit ne ''))) {
$element =~ s/\s//g;
}
@@ -344,6 +363,10 @@
if (($element =~ /^[0\.]+$/) && ($unit!~/\w/) && ($answerunit=~/\w/)) {
$appendunit=$answerunit;
}
+# Do the math for the student if allowed
+ if ($allowalgebra) {
+ $element=&cas('maxima',$element);
+ }
if ($appendunit ne '') {
$element .= " $appendunit";
}
@@ -392,6 +415,15 @@
}
}
}
+ # See if we have preprocessor for string responses
+ if (($preprocess=~/\S/) && ($type eq 'cs' || $type eq 'ci')) {
+ if (defined(&$preprocess)) {
+ no strict 'refs';
+ $response->[$j]=&$preprocess($response->[$j]);
+ use strict 'refs';
+ }
+ }
+
my ($award,$msg) = &caparesponse_check($answer->[$j],
$response->[$j]);
if ($type eq 'cs' || $type eq 'ci') {
@@ -430,6 +462,15 @@
}
}
}
+ # See if we have preprocessor
+ if (($preprocess=~/\S/) && ($type eq 'cs' || $type eq 'ci')) {
+ if (defined(&$preprocess)) {
+ no strict 'refs';
+ $response->[$j]=&$preprocess($response->[$j]);
+ use strict 'refs';
+ }
+ }
+
my ($award,$msg) = &caparesponse_check($answer->[$j],
$response->[$j]);
if ($type eq 'cs' || $type eq 'ci') {
@@ -1125,11 +1166,23 @@
return $course;
}
+sub classid {
+ my $courseid = &EXT('request.course.id');
+ $courseid = '' if $courseid eq "";
+ return $courseid;
+}
+
sub firstname {
my $firstname = &EXT('environment.firstname');
$firstname = '' if $firstname eq "";
return $firstname;
}
+
+sub middlename {
+ my $middlename = &EXT('environment.middlename');
+ $middlename = '' if $middlename eq "";
+ return $middlename;
+}
sub lastname {
my $lastname = &EXT('environment.lastname');
@@ -1196,6 +1249,40 @@
return &EXT('resource.'.$partid.'.answerdate');
}
+sub parameter_setting {
+ my ($which,$partid)=@_;
+ unless ($partid) { $partid=0; }
+ return &EXT('resource.'.$partid.'.'.$which);
+}
+
+sub stored_data {
+ my ($which,$partid)=@_;
+ unless ($partid) { $partid=0; }
+ return &EXT('user.resource.resource.'.$partid.'.'.$which);
+}
+
+sub wrong_bubbles {
+ my ($correct,$lower,$upper,$step, at given)=@_;
+ my @array=();
+ my %hash=();
+ foreach my $new (@given) {
+ $hash{$new}=1;
+ }
+ my $num=int(¶meter_setting('numbubbles',¤tpart()));
+ unless ($num) { $num=8; }
+ if ($num>1) {
+ for (my $i=0;$i<=500;$i++) {
+ my $new=&random($lower,$upper,$step);
+ if ($hash{$new}) { next; }
+ if (abs($new-$correct)<$step) { next; }
+ $hash{$new}=1;
+ @array=keys(%hash);
+ if ($#array+2>=$num) { last; }
+ }
+ }
+ return @array;
+}
+
sub array_moments {
my @input=@_;
my (@output,$N);
More information about the LON-CAPA-cvs
mailing list