Difference between revisions of "FactoringAndExpanding"
Line 64: | Line 64: | ||
checker => sub { |
checker => sub { |
||
− | my $correct = shift; my $student = shift; my $ |
+ | my $correct = shift; my $student = shift; my $ansHash = shift; |
my ($F,$G) = @{$correct}; |
my ($F,$G) = @{$correct}; |
||
my ($f,$g) = @{$student}; |
my ($f,$g) = @{$student}; |
||
− | + | $ansHash->setMessage(1,"Neither factor can be constant") |
|
− | unless $f |
+ | unless $f->isFormula; |
− | + | $ansHash->setMessage(2,"Neither factor can be constant") |
|
− | + | unless $g->isFormula; |
|
− | unless $F*$G == $f*$g; |
||
− | # return 0 unless $F*$G == $f*$g; |
||
# use an adaptive parameter 'a' |
# use an adaptive parameter 'a' |
||
Line 79: | Line 79: | ||
my $a = Formula($context,'a'); |
my $a = Formula($context,'a'); |
||
$f = Formula($context,$f); |
$f = Formula($context,$f); |
||
− | my $result = ($a*$F == $f || $a*$G == $f); |
||
+ | $g = Formula($context,$g); |
||
− | Value::Error('Each factor should be linear') unless ($result==1); |
||
+ | $F = Formula($context,$F); |
||
− | return $result; |
||
+ | $G = Formula($context,$G); |
||
+ | |||
+ | if ( (($a*$F == $f) && ($F*$G == $f*$g)) || |
||
+ | (($a*$G == $f) && ($F*$G == $f*$g)) |
||
+ | ) |
||
+ | { |
||
+ | return [1,1]; |
||
+ | } elsif (($a*$F == $f) || ($a*$G == $f)) { |
||
+ | return [1,0]; |
||
+ | } elsif (($a*$F == $g) || ($a*$G == $g)) { |
||
+ | return [0,1]; |
||
+ | } else { |
||
+ | return [0,0]; |
||
+ | } |
||
} |
} |
||
); |
); |
||
− | |||
</pre> |
</pre> |
||
</td> |
</td> |
Revision as of 22:37, 10 April 2010
Factored Answers
This is the PG code to check answers that require students to factor an expression into two pieces that may have a constant factor that could be moved between the pieces.
This example uses adaptive parameters and a MultiAnswer answer evaluator. For more details on these, please see AdaptiveParameters and MultiAnswerProblems.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "parserMultiAnswer.pl", ); TEXT(beginproblem()); |
Initialization:
We need to include the |
Context("Numeric"); $fac1 = Compute("(2 x + 3)"); $fac2 = Compute("(8 x + 12)"); $multians = MultiAnswer($fac1,$fac2)->with( singleResult => 0, allowBlankAnswers => 1, # singleResult => 1, # separator => " * ", # tex_separator => " \cdot ", checker => sub { my $correct = shift; my $student = shift; my $ansHash = shift; my ($F,$G) = @{$correct}; my ($f,$g) = @{$student}; $ansHash->setMessage(1,"Neither factor can be constant") unless $f->isFormula; $ansHash->setMessage(2,"Neither factor can be constant") unless $g->isFormula; # use an adaptive parameter 'a' my $context = Context()->copy; $context->flags->set(no_parameters=>0); $context->variables->add('a'=>'Parameter'); my $a = Formula($context,'a'); $f = Formula($context,$f); $g = Formula($context,$g); $F = Formula($context,$F); $G = Formula($context,$G); if ( (($a*$F == $f) && ($F*$G == $f*$g)) || (($a*$G == $f) && ($F*$G == $f*$g)) ) { return [1,1]; } elsif (($a*$F == $f) || ($a*$G == $f)) { return [1,0]; } elsif (($a*$F == $g) || ($a*$G == $g)) { return [0,1]; } else { return [0,0]; } } ); |
Setup:
This is a standard factoring problem for a non-monic polynomial (where the leading coefficient is not 1 or -1). The
The |
Context()->texStrings; BEGIN_TEXT Factor the following expression. $BR $BR \( 16 t^2 + 48 t + 36 = \big( \) \{$multians->ans_rule(10)\} \( \big) \big( \) \{$multians->ans_rule(10)\} \( \big) \) END_TEXT Context()->normalStrings; |
Main Text:
Each answer blank must be a method of the |
$showPartialCorrectAnswers = 1; install_problem_grader(~~&std_problem_grader); ANS( $multians->cmp() ); ENDDOCUMENT(); |
Answer Evaluation:
Everything is as expected. We give students feedback on whether their answers are correct by using |
- POD documentation: parserMultiAnswer.pl.html
- PG macro: parserMultiAnswer.pl