Difference between revisions of "SimplifiedSquareRoots"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
− | <h2> |
+ | <h2>Simplified Square Roots in Student Answers</h2> |
<!-- Header for these sections -- no modification needed --> |
<!-- Header for these sections -- no modification needed --> |
||
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
||
− | <em>This PG code shows how to |
+ | <em>This PG code shows how to require student answers to be completely reduced square roots.</em> |
</p> |
</p> |
||
Line 169: | Line 169: | ||
[[Category:Problem Techniques]] |
[[Category:Problem Techniques]] |
||
− | |||
− | |||
− | <ul> |
||
− | <li>POD documentation: [http://webwork.maa.org/doc/cvs/pg_CURRENT/ nameOfMacro.pl.html]</li> |
||
− | <li>PG macro: [http://cvs.webwork.rochester.edu/viewcvs.cgi/pg/macros/#dirlist nameOfMacro.pl]</li> |
||
− | </ul> |
Revision as of 17:16, 25 April 2010
Simplified Square Roots in Student Answers
This PG code shows how to require student answers to be completely reduced square roots.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "contextLimitedPowers.pl" ); TEXT(beginproblem()); |
Initialization:
We need to include the macros file |
########################### # # Subclass the numeric functions # package my::Function::numeric; our @ISA = ('Parser::Function::numeric'); # # Override sqrt() to return a special value (usually 1) when evaluated # effectively eliminating it from the product. # sub sqrt { my $self = shift; my $value = $self->context->flag("setSqrt"); return $value+1 if $value && $_[0] == 1; # force sqrt(1) to be incorrect return $value if $value; return $self->SUPER::sqrt(@_); } # # end of subclass # package main; ########################### Context("Numeric")->variables->are( x => ["Real", limits => [0,2]], # only needed if x is used in the square roots ); # # make sqrt() use our subclass # Context()->functions->set(sqrt=>{class=>'my::Function::numeric'}); Context()->flags->set(reduceConstantFunctions=>0); # # Don't allow fractional powers (avoids 1/2 power) # [Could subclass exponentiation to handle that as well] # LimitedPowers::OnlyPositiveIntegers(); $expr = "\sqrt{12 x^2}"; $f = Compute("x*sqrt(6)"); |
Setup: This code is from Davide Cervone (4/25/10). See the discussion simplifying radical expressions for more information. |
BEGIN_TEXT Simplify \( $expr \) assuming that \( x \geq 0 \). Do not enter fractional exponents. $BR $BR \( $expr \) = \{ans_rule(20)\} END_TEXT |
Main Text: The problem text section of the file is as we'd expect. |
$showPartialCorrectAnswers = 1; ANS( $f-> cmp( checker => sub { my ($correct,$student,$ans) = @_; return 0 if $ans->{isPreview} || $correct != $student; # # Get parsed formula for student and correct answers # $student = $ans->{student_formula}; $correct = $correct->{original_formula} if defined $correct->{original_formula}; # # check if equal when sqrt's are replaced by 1 # Context()->flags->set(setSqrt => 1); delete $correct->{test_values}, $student->{test_values}; my $OK = ($correct == $student); Context()->flags->set(setSqrt => 0); # Value::Error("Check to see if your answer is simplified.") unless $OK; return $OK; }, formatStudentAnswer=>"reduced" ) ); ENDDOCUMENT(); |
Answer Evaluation: Use a custom checker to check that the answers are equivalent and that they are still equivalent when sqrt() is replaced by 1 (so the stuff outside the sqrt() is equal in both). |