And I'd like the students to answer withSolve the quadratic equationx^2 = 28
x=2sqrt(7), x=-2sqrt(7)It uses a custom context LimitedRadical in the attached file. The code below works almost exactly how I'd like it to, but it also allows students to enter
In such a situation, I would like a reduction message, similar to the fraction context or indeed to the message provided by this context, to be shown.x = sqrt(28),x=-sqrt(28)
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "parserAssignment.pl", "answerHints.pl", "PGML.pl",
"contextLimitedRadical.pl",
);
##############################################
Context("LimitedRadical"); parser::Assignment->Allow; Context()->operators->redefine(',',using=>',',from=>'Numeric'); Context()->operators->redefine('or',using=>',',from=>'Numeric'); Context()->operators->set( ','=>{string=>' or ',TeX=>'\hbox{ or }'}, 'or'=>{string=>' or ',TeX=>'\hbox{ or }'} );
Context()->lists->set(List => {separator => " or "}); $var = "x"; Context()->variables->are($var=>'Real'); #$a = random(2,10,1); $a = 7; $ans = Compute("$var=2 sqrt($a),$var=-2sqrt($a)");
##############################################
TEXT(beginproblem());
BEGIN_PGML
Solve the quadratic equation
[` [$var]^2 = [$a*4] `].
[_______________________]
END_PGML
##############################################
# works, but no reduction $showPartialCorrectAnswers = 1; ANS($ans->cmp(entry_type => "solution", extra => sub { my ($student,$ansHash,$nth,$value) = @_; if ($student->type ne "Assignment" && $ansHash->{student_formula}->type ne "Assignment") { $student->context->setError("Your$nth $value should be written $var = ___","",undef,undef,$Value::CMP_WARNING); return; } return Value::Real->typeMatch($student); })->withPostFilter(AnswerHints( ["$var=2sqrt($a)","$var=-2sqrt($a)"] => "Are you sure you have all the solutions?", ["2sqrt($a)","-2sqrt($a)"] => ["Your solution is a correct one, but you should write $var = ___<br>Are you sure you have all the solutions?",replaceMessage=>1], ["2sqrt($a),-2sqrt($a)","-2sqrt($a),2sqrt($a)"] => ["Your solutions are correct, but you should write $var = ___",replaceMessage=>1], )));
##############################################
BEGIN_PGML_SOLUTION
[$ans]
END_PGML_SOLUTION
##############################################
ENDDOCUMENT();
I was hoping that I would be able to adapt Davide's solution to this question http://webwork.maa.org/moodle/mod/forum/discuss.php?d=3037 - of my many attempts, this was my most promising start
$showPartialCorrectAnswers = 1; ANS($ans->cmp(entry_type => "a solution", checker => sub { my ($correct,$student,$ansHash,$nth,$value) = @_; return 0 if $ansHash->{isPreview} || $correct != $student; #$student = $ansHash->{student_formula}; $correct = $correct->{original_formula} if defined $correct->{original_formula}; Context()->flags->set(setSqrt => 1, checkAddSub => 1); delete $correct->{test_values}, $student->{test_values}; my $OK = ($correct == $student); # check if equal when sqrt's are replaced by 1 Context()->flags->set(setSqrt => 0, checkAddSub => 0); $check = ($correct==$student); my %ha= %{$ansHash}; my @answerHashKeys=(); for my $key (keys %ha) {push(@answerHashKeys,$key); push(@answerHashKeys,'=>'); push(@answerHashKeys,$ha{$key}); push(@answerHashKeys,$BR);}; Value->Error("$dum $BR check: $check $BR correct is $correct $BR student is $student $BR answerHashKeys is: $BR @answerHashKeys"); $correct->context->setError("You must simplify your answer further") unless $OK; return $OK; }));but it lead nowhere- it seems that $student doesn't look the way I need it to.
If anyone could offer any help, I'd really appreciate it. I'd also be interested in learning how the debugging was done- the above technique of outputting the answer hash to the message window was given to me by a colleague; I wonder if there are other techniques to accompany it.