Difference between revisions of "AlgebraicFractions"
Line 5: | Line 5: | ||
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
||
<em>This code shows how to format questions in which the answer is an algebraic fraction that has separate answer blanks for the numerator and denominator that are stacked on top of each other like a fraction. Stacking the answer blanks is nice formatting that simplifies how to ask students for the parts of a fraction separately. In addition, having two separate answer blanks is useful for requiring students to simplify their answer as much as possible.</em> |
<em>This code shows how to format questions in which the answer is an algebraic fraction that has separate answer blanks for the numerator and denominator that are stacked on top of each other like a fraction. Stacking the answer blanks is nice formatting that simplifies how to ask students for the parts of a fraction separately. In addition, having two separate answer blanks is useful for requiring students to simplify their answer as much as possible.</em> |
||
+ | </p> |
||
+ | |||
+ | <ul type="square"> |
||
+ | <li><b>Example 1:</b> (Recommended) Algebraic fractions using MultiAnswer</li> |
||
+ | <li><b>Example 2:</b> Algebraic fractions without using MultiAnswer</li> |
||
+ | </ul> |
||
+ | |||
+ | |||
+ | <p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
||
+ | <em><b>Example 1: (Recommended) Algebraic fractions using MultiAnswer</em> |
||
</p> |
</p> |
||
Line 10: | Line 20: | ||
[[IndexOfProblemTechniques|Problem Techniques Index]] |
[[IndexOfProblemTechniques|Problem Techniques Index]] |
||
</p> |
</p> |
||
+ | |||
+ | <table cellspacing="0" cellpadding="2" border="0"> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <th> PG problem file </th> |
||
+ | <th> Explanation </th> |
||
+ | </tr> |
||
+ | |||
+ | <!-- Load specialized macro files section --> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <td style="background-color:#ddffdd;border:black 1px dashed;"> |
||
+ | <pre> |
||
+ | DOCUMENT(); |
||
+ | |||
+ | loadMacros( |
||
+ | "PGstandard.pl", |
||
+ | "MathObjects.pl", |
||
+ | "PGunion.pl", |
||
+ | "parserMultiAnswer.pl", |
||
+ | "PGcourse.pl", |
||
+ | ); |
||
+ | |||
+ | TEXT(beginproblem()); |
||
+ | </pre> |
||
+ | </td> |
||
+ | <td style="background-color:#ccffcc;padding:7px;"> |
||
+ | <p> |
||
+ | <b>Initialization:</b> |
||
+ | We include the macros file <code>PGunion.pl</code> to be able to display the answer boxes on top of each other (as a fraction). |
||
+ | </p> |
||
+ | </td> |
||
+ | </tr> |
||
+ | |||
+ | <!-- Setup section --> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <td style="background-color:#ffffdd;border:black 1px dashed;"> |
||
+ | <pre> |
||
+ | Context("Numeric")->variables->are(y=>"Real"); |
||
+ | |||
+ | $a = random(2,8,2); |
||
+ | $b = random(3,9,2); |
||
+ | $c = random(1,9,1); |
||
+ | |||
+ | while ($c == $b/$a) { $c = random(1,9,1); } |
||
+ | |||
+ | $fraction = "\frac{$a y}{y-$c} + \frac{$b}{$c - y} "; |
||
+ | |||
+ | $num = Formula("$a y - $b")->reduce; |
||
+ | $den = Formula("y - $c")->reduce; |
||
+ | |||
+ | $numbogus = Formula("$a*y+$b"); |
||
+ | $denbogus = Formula("(y-$c)*($c-y)"); |
||
+ | |||
+ | $multians = MultiAnswer($num, $den)->with( |
||
+ | singleResult => 0, |
||
+ | allowBlankAnswers => 1, |
||
+ | checker => sub { |
||
+ | my ( $correct, $student, $ansHash ) = @_; |
||
+ | my ( $f1stu, $f2stu ) = @{$student}; |
||
+ | my ( $f1, $f2 ) = @{$correct}; |
||
+ | |||
+ | if ( ref($f1) eq ref($f1stu) && ( $f1==$f1stu && $f2==$f2stu) || |
||
+ | ref($f2) eq ref($f2stu) && (-$f1==$f1stu && -$f2==$f2stu) ) { |
||
+ | return [1,1]; |
||
+ | } elsif (ref($f1) eq ref($f1stu) && (($f1==$f1stu) || (-$f1==$f1stu))) { |
||
+ | return [1,0]; |
||
+ | } elsif (( ref($f1) eq ref($f1stu) && ($numbogus==$f1stu || -$numbogus==$f1stu) ) || |
||
+ | ( ref($f2) eq ref($f2stu) && ($denbogus==$f2stu || -$denbogus==$f2stu) )) { |
||
+ | $ansHash->setMessage(1,"Find a common denominator first"); |
||
+ | $ansHash->setMessage(2,"Find a common denominator first"); |
||
+ | return [0,0]; |
||
+ | } elsif (ref($f2) eq ref($f2stu) && (($f2==$f2stu) || (-$f2==$f2stu))) { |
||
+ | return [0,1]; |
||
+ | } elsif ( ref($f1) eq ref($f1stu) && ref($f2) eq ref($f2stu) && $f1*$f2stu==$f1stu*$f2 ) { |
||
+ | $ansHash->setMessage(1,"Simplify your answer further"); |
||
+ | $ansHash->setMessage(2,"Simplify your answer further"); |
||
+ | return [0,0]; |
||
+ | } else { |
||
+ | return [0,0]; |
||
+ | } |
||
+ | } |
||
+ | ); |
||
+ | |||
+ | |||
+ | # |
||
+ | # Display the fraction and answer blanks nicely |
||
+ | # |
||
+ | Context()->texStrings; |
||
+ | if ($displayMode eq 'TeX') { |
||
+ | $showfraction = |
||
+ | "\[ $fraction = ".$multians->ans_rule(10).$multians->ans_rule(10)." \]"; |
||
+ | } else { |
||
+ | $showfraction = |
||
+ | ColumnTable( |
||
+ | "\( \displaystyle $fraction = \)", |
||
+ | $multians->ans_rule(20).$BR.$HR.$multians->ans_rule(20), |
||
+ | indent => 0, separation => 10, valign => "MIDDLE" |
||
+ | ); |
||
+ | } |
||
+ | Context()->normalStrings; |
||
+ | </pre> |
||
+ | </td> |
||
+ | <td style="background-color:#ffffcc;padding:7px;"> |
||
+ | <p> |
||
+ | <b>Setup:</b> |
||
+ | We define a string <code>$fraction</code> that will be displayed in TeX mode. We define MathObjects formulas <code>$num</code> and <code>$den</code> that are the correct numerator and denominator for the answer. |
||
+ | </p> |
||
+ | <p> |
||
+ | We define a mode-dependent string <code>$showfraction</code> that will be the nicely formatted fraction and answer blanks. To display the fraction nicely in TeX mode, we use displaystyle math <code>\[ ... \]</code> and append two concatenated answer blanks to the string <code>$fraction</code>. In other modes (such as html), we use a <code>ColumnTable</code> from <code>PGunion.pl</code> macros to display the answer blanks as a fraction. |
||
+ | </p> |
||
+ | <p> |
||
+ | To get fractions that have a large font size, be sure to use the LaTeX command <code>\( \displaystyle \frac{a}{b} \)</code>. |
||
+ | For fractions over fractions, to keep the font size large use the LaTeX commands |
||
+ | <pre> |
||
+ | \( |
||
+ | \displaystyle\frac{ |
||
+ | \displaystyle\frac{a}{b} |
||
+ | }{ |
||
+ | \displaystyle\frac{c}{d} |
||
+ | } |
||
+ | \) |
||
+ | </pre> |
||
+ | </p> |
||
+ | </td> |
||
+ | </tr> |
||
+ | |||
+ | <!-- Question text section --> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <td style="background-color:#ffdddd;border:black 1px dashed;"> |
||
+ | <pre> |
||
+ | Context()->texStrings; |
||
+ | BEGIN_TEXT |
||
+ | Perform the indicated operations. |
||
+ | Express your answer in reduced form. |
||
+ | $BR |
||
+ | $BR |
||
+ | $BCENTER |
||
+ | $showfraction |
||
+ | $ECENTER |
||
+ | END_TEXT |
||
+ | Context()->normalStrings; |
||
+ | </pre> |
||
+ | <td style="background-color:#ffcccc;padding:7px;"> |
||
+ | <p> |
||
+ | <b>Main Text:</b> |
||
+ | Everything is as usual. Insert the fraction and answer blanks using <code>$showfraction</code>. |
||
+ | </p> |
||
+ | </td> |
||
+ | </tr> |
||
+ | |||
+ | <!-- Answer section --> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <td style="background-color:#eeddff;border:black 1px dashed;"> |
||
+ | <pre> |
||
+ | $showPartialCorrectAnswers = 1; |
||
+ | |||
+ | install_problem_grader(~~&std_problem_grader); |
||
+ | |||
+ | ANS( $multians->cmp() ); |
||
+ | |||
+ | ENDDOCUMENT(); |
||
+ | </pre> |
||
+ | <td style="background-color:#eeccff;padding:7px;"> |
||
+ | <p> |
||
+ | <b>Answer Evaluation:</b> |
||
+ | If you want to give students feedback on whether their numerator and denominator are correct, set <code>$showPartialCorrectAnswers = 1;</code>, otherwise set it to 0 to withhold feedback. If you want to withhold credit until both answer blanks are correct, use the standard problem grader, otherwise omit it to use the default (average problem grader). |
||
+ | </p> |
||
+ | <p> |
||
+ | We added custom answer hints provided by <code>answerHints.pl</code> to let the student know when they have a correct answer that can be simplified. Alternatively, we could have used <code>parserMultiAnswer.pl</code> instead, but it would have involved writing even more lines of code. |
||
+ | </p> |
||
+ | </td> |
||
+ | </tr> |
||
+ | </table> |
||
+ | |||
+ | <p style="text-align:center;"> |
||
+ | [[IndexOfProblemTechniques|Problem Techniques Index]] |
||
+ | </p> |
||
+ | |||
+ | [[Category:Problem Techniques]] |
||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
||
+ | <em><b>Example 2: Algebraic fractions without using MultiAnswer</em> |
||
+ | </p> |
||
+ | |||
<table cellspacing="0" cellpadding="2" border="0"> |
<table cellspacing="0" cellpadding="2" border="0"> |
Revision as of 01:46, 11 April 2010
Algebraic Fractions in Student Answers
This code shows how to format questions in which the answer is an algebraic fraction that has separate answer blanks for the numerator and denominator that are stacked on top of each other like a fraction. Stacking the answer blanks is nice formatting that simplifies how to ask students for the parts of a fraction separately. In addition, having two separate answer blanks is useful for requiring students to simplify their answer as much as possible.
- Example 1: (Recommended) Algebraic fractions using MultiAnswer
- Example 2: Algebraic fractions without using MultiAnswer
Example 1: (Recommended) Algebraic fractions using MultiAnswer
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "PGunion.pl", "parserMultiAnswer.pl", "PGcourse.pl", ); TEXT(beginproblem()); |
Initialization:
We include the macros file |
Context("Numeric")->variables->are(y=>"Real"); $a = random(2,8,2); $b = random(3,9,2); $c = random(1,9,1); while ($c == $b/$a) { $c = random(1,9,1); } $fraction = "\frac{$a y}{y-$c} + \frac{$b}{$c - y} "; $num = Formula("$a y - $b")->reduce; $den = Formula("y - $c")->reduce; $numbogus = Formula("$a*y+$b"); $denbogus = Formula("(y-$c)*($c-y)"); $multians = MultiAnswer($num, $den)->with( singleResult => 0, allowBlankAnswers => 1, checker => sub { my ( $correct, $student, $ansHash ) = @_; my ( $f1stu, $f2stu ) = @{$student}; my ( $f1, $f2 ) = @{$correct}; if ( ref($f1) eq ref($f1stu) && ( $f1==$f1stu && $f2==$f2stu) || ref($f2) eq ref($f2stu) && (-$f1==$f1stu && -$f2==$f2stu) ) { return [1,1]; } elsif (ref($f1) eq ref($f1stu) && (($f1==$f1stu) || (-$f1==$f1stu))) { return [1,0]; } elsif (( ref($f1) eq ref($f1stu) && ($numbogus==$f1stu || -$numbogus==$f1stu) ) || ( ref($f2) eq ref($f2stu) && ($denbogus==$f2stu || -$denbogus==$f2stu) )) { $ansHash->setMessage(1,"Find a common denominator first"); $ansHash->setMessage(2,"Find a common denominator first"); return [0,0]; } elsif (ref($f2) eq ref($f2stu) && (($f2==$f2stu) || (-$f2==$f2stu))) { return [0,1]; } elsif ( ref($f1) eq ref($f1stu) && ref($f2) eq ref($f2stu) && $f1*$f2stu==$f1stu*$f2 ) { $ansHash->setMessage(1,"Simplify your answer further"); $ansHash->setMessage(2,"Simplify your answer further"); return [0,0]; } else { return [0,0]; } } ); # # Display the fraction and answer blanks nicely # Context()->texStrings; if ($displayMode eq 'TeX') { $showfraction = "\[ $fraction = ".$multians->ans_rule(10).$multians->ans_rule(10)." \]"; } else { $showfraction = ColumnTable( "\( \displaystyle $fraction = \)", $multians->ans_rule(20).$BR.$HR.$multians->ans_rule(20), indent => 0, separation => 10, valign => "MIDDLE" ); } Context()->normalStrings; |
Setup:
We define a string
We define a mode-dependent string
To get fractions that have a large font size, be sure to use the LaTeX command \( \displaystyle\frac{ \displaystyle\frac{a}{b} }{ \displaystyle\frac{c}{d} } \) |
Context()->texStrings; BEGIN_TEXT Perform the indicated operations. Express your answer in reduced form. $BR $BR $BCENTER $showfraction $ECENTER END_TEXT Context()->normalStrings; |
Main Text:
Everything is as usual. Insert the fraction and answer blanks using |
$showPartialCorrectAnswers = 1; install_problem_grader(~~&std_problem_grader); ANS( $multians->cmp() ); ENDDOCUMENT(); |
Answer Evaluation:
If you want to give students feedback on whether their numerator and denominator are correct, set
We added custom answer hints provided by |
Example 2: Algebraic fractions without using MultiAnswer
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "PGunion.pl", "MathObjects.pl", "answerHints.pl", "PGcourse.pl", ); TEXT(beginproblem()); |
Initialization:
We include the macros file |
Context("Numeric"); $fraction = "\frac{d}{dx} \left( \frac{-(x^2+4)}{(x^2-4)^2} \right)"; $num = Formula("2 * x * (x**2 + 12)")->reduce; $den = Formula("(x**2 - 4)**3")->reduce; # # Display the fraction and answer blanks nicely # Context()->texStrings; if ($displayMode eq 'TeX') { $showfraction = "\[ $fraction = ".ans_rule(10).ans_rule(10)." \]"; } else { $showfraction = ColumnTable( "\( \displaystyle $fraction = \)", ans_rule(20).$BR.$HR.ans_rule(20), indent => 0, separation => 10, valign => "MIDDLE" ); } Context()->normalStrings; |
Setup:
We define a string
We define a mode-dependent string
To get fractions that have a large font size, be sure to use the LaTeX command \( \displaystyle\frac{ \displaystyle\frac{a}{b} }{ \displaystyle\frac{c}{d} } \) |
Context()->texStrings; BEGIN_TEXT Calculate the indicated derivative. Simplify your answer as much as possible. $BR $BR $BCENTER $showfraction $ECENTER END_TEXT Context()->normalStrings; |
Main Text:
Everything is as usual. Insert the fraction and answer blanks using |
$showPartialCorrectAnswers = 1; install_problem_grader(~~&std_problem_grader); ANS( $num->cmp() ->withPostFilter(AnswerHints( Formula("-2x(x^2-4)+4(x^2+4)(x^2-4)") => "Simplify your answer further.", )) ); ANS( $den->cmp() ->withPostFilter(AnswerHints( Formula("(x^2-4)^4") => "Simplify your answer further.", )) ); ENDDOCUMENT(); |
Answer Evaluation:
If you want to give students feedback on whether their numerator and denominator are correct, set
We added custom answer hints provided by |