Difference between revisions of "ListAnswers"

From WeBWorK_wiki
Jump to navigation Jump to search
(New page: <h2>Lists of Answers: PG Code Snippet</h2> <p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> <em>This code snippet shows the essential PG code to check lists of obj...)
 
 
(25 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<h2>Lists of Answers: PG Code Snippet</h2>
+
<h2>Lists of Answers</h2>
   
 
<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 snippet shows the essential PG code to check lists of objects as answers to a problem. Note that these are <b>insertions</b>, not a complete PG file. This code will have to be incorporated into the problem file on which you are working.</em>
 
  +
<em>This is the PG code to check lists of objects entered into one answer blank as answers to a problem.
  +
<br />
  +
<br />
  +
For lists of answers entered into multiple answer blanks, please see [http://webwork.maa.org/wiki/MultiAnswerProblems MultiAnswerProblems]</em>
  +
</p>
  +
<p style="text-align:center;">
  +
[[IndexOfProblemTechniques|Problem Techniques Index]]
 
</p>
 
</p>
   
Line 10: Line 16:
 
<th> Explanation </th>
 
<th> Explanation </th>
 
</tr>
 
</tr>
  +
  +
<tr valign="top">
  +
<td style="background-color:#ddffdd;border:black 1px dashed;">
  +
<pre>
  +
DOCUMENT();
  +
loadMacros(
  +
"PGstandard.pl",
  +
"MathObjects.pl"
  +
);
  +
TEXT(beginproblem());
  +
</pre>
  +
</td>
  +
<td style="background-color:#ccffcc;padding:7px;">
  +
<p>
  +
<b>Initialization:</b>
  +
Load the macro file <code>MathObjects.pl</code>.
  +
</p>
  +
</td>
  +
</tr>
  +
 
<tr valign="top">
 
<tr valign="top">
 
<td style="background-color:#ffffdd;border:black 1px dashed;">
 
<td style="background-color:#ffffdd;border:black 1px dashed;">
 
<pre>
 
<pre>
$factors = List(Compute("x+2"),Compute("x+3"));
 
  +
Context("Numeric");
$roots = List( -3, -2 );
 
  +
  +
$factors = List(Compute("x+2"),Compute("x+3"));
  +
$roots = List( -3, -2 );
  +
  +
# If there were only one solution
  +
# $roots = List(4);
  +
  +
# If there were no solutions
  +
# $roots = List("NONE");
 
</pre>
 
</pre>
 
</td>
 
</td>
 
<td style="background-color:#ffffcc;padding:7px;">
 
<td style="background-color:#ffffcc;padding:7px;">
 
<p>
 
<p>
  +
<b>Setup:</b>
 
We need make no changes or additions to the tagging and description section of the PG file, or to the problem initialization section (unless we need to load some macros for the type of problem that we're creating). In the problem set-up section of the file, we include the definition of the list(s) that we're expecting as an answer.
 
We need make no changes or additions to the tagging and description section of the PG file, or to the problem initialization section (unless we need to load some macros for the type of problem that we're creating). In the problem set-up section of the file, we include the definition of the list(s) that we're expecting as an answer.
 
</p>
 
</p>
 
<p>
 
<p>
 
Note that the argument of the <code>List</code> call are the objects in the list, which can be any MathObjects. Here we create a list of Formulas and a list of Reals (the numbers that we use in the second list will be promoted to Real MathObjects when the List is created).
 
Note that the argument of the <code>List</code> call are the objects in the list, which can be any MathObjects. Here we create a list of Formulas and a list of Reals (the numbers that we use in the second list will be promoted to Real MathObjects when the List is created).
  +
</p>
  +
<p>
  +
If, for example, there were no real roots, we should set <code>$roots = List("NONE");</code> so that students who enter a list of roots will not receive an error message about entering the wrong type of answer. If we were to use <code>$roots = String("NONE");</code> instead, students who enter anything other than a string (e.g., a list of numbers) will receive an error message.
  +
</p>
  +
<p>
  +
Similarly, if there were only one root at x=4, we would use <code>$roots = List(4);</code> instead of <code>$roots = Real(4);</code> to avoid sending error messages to students who enter multiple answers or NONE.
 
</p>
 
</p>
 
</td>
 
</td>
Line 29: Line 70:
 
<td style="background-color:#ffdddd;border:black 1px dashed;">
 
<td style="background-color:#ffdddd;border:black 1px dashed;">
 
<pre>
 
<pre>
BEGIN_TEXT
 
  +
Context()->texStrings;
What are the factors of \(x^2 + 5 x + 6\)?
 
  +
BEGIN_TEXT
$BR
 
  +
What are the factors of \(x^2 + 5 x + 6\)?
Factors = \{ ans_rule(25) \}
 
  +
$BR
$BR
 
  +
Factors = \{ ans_rule(25) \}
${BITALIC}(Enter the factors as a comma-separated
 
  +
$BR
list.)$EITALIC
 
  +
${BITALIC}(Enter the factors as a comma-separated
$PAR
 
  +
list.)$EITALIC
What are the roots of this equation?
 
  +
$PAR
$BR
 
  +
What are the roots of this equation?
Roots = \{ ans_rule(15) \}
 
  +
$BR
$BR
 
  +
Roots = \{ ans_rule(15) \}
${BITALIC}(Enter the roots in a comma-separated
 
  +
$BR
list, ${BBOLD}ordered from smallest to
 
  +
${BITALIC}(Enter the roots in a comma-separated
largest$EBOLD.)$EITALIC
 
  +
list, ${BBOLD}ordered from smallest to
END_TEXT
 
  +
largest$EBOLD.)$EITALIC
  +
END_TEXT
  +
Context()->normalStrings;
 
</pre>
 
</pre>
 
<td style="background-color:#ffcccc;padding:7px;">
 
<td style="background-color:#ffcccc;padding:7px;">
 
<p>
 
<p>
In the text section of the problem, we ask for the answers as we'd expect. It's generally a good idea to make sure that it's clear what we expect students to enter (in this case, a comma-separated list). To point out the obvious, there's no reason in this case to make only one of the requested lists have a specific order... except that it lets us see how to do it in this example problem.
 
  +
<b>Main text:</b>
  +
We ask for the answers as we'd expect. It's generally a good idea to make sure that it's clear what we expect students to enter (in this case, a comma-separated list). To point out the obvious, there's no reason in this case to make only one of the requested lists have a specific order... except that it lets us see how to do it in this example problem.
 
</p>
 
</p>
 
</td>
 
</td>
Line 55: Line 99:
 
<td style="background-color:#eeddff;border:black 1px dashed;">
 
<td style="background-color:#eeddff;border:black 1px dashed;">
 
<pre>
 
<pre>
ANS( $factors-&gt;cmp() );
+
ANS( $factors-&gt;cmp() );
ANS( $roots-&gt;cmp( ordered=&gt;1 );
+
ANS( $roots-&gt;cmp(ordered=&gt;1) );
  +
  +
ENDDOCUMENT();
 
</pre>
 
</pre>
 
<td style="background-color:#eeccff;padding:7px;">
 
<td style="background-color:#eeccff;padding:7px;">
 
<p>
 
<p>
Then, in the answer and solution section of the problem we can just check the answers against the correct List answers. To force the students' list answers to match the order of the correct answer, we include the <code>ordered=&gt;1</code> flag in the <code>cmp()</code> call.
 
  +
<b>Answer Evaluation:</b>
  +
We can just check the answers against the correct List answers. To force the students' list answers to match the order of the correct answer, we include the <code>ordered=&gt;1</code> flag in the <code>cmp()</code> call. The default is <code>ordered=&gt;0</code> for unordered answers.
  +
</p>
  +
<p>
  +
Other commonly used options include <code>showHints=&gt;1, showLengthHints=&gt;1, partialCredit=&gt;1</code> as arguments to the <code>cmp()</code> call.
  +
For all options, see the entries for "MathObjects-based Answer Checkers" and "Flags for Union()->cmp and List()->cmp" on [http://webwork.maa.org/pod/pg/doc/MathObjects/MathObjectsAnswerCheckers.html MathObjectsAnswerCheckers.html]
 
</p>
 
</p>
 
</td>
 
</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
  +
<p style="text-align:center;">
  +
[[IndexOfProblemTechniques|Problem Techniques Index]]
  +
</p>
  +
  +
[[Category:Problem Techniques]]
  +
  +
  +
  +
<ul>
  +
<li>POD documentation: [http://webwork.maa.org/pod/pg/doc/MathObjects/MathObjectsAnswerCheckers.html MathObjectsAnswerCheckers.html]</li>
  +
</ul>

Latest revision as of 17:28, 7 April 2021

Lists of Answers

This is the PG code to check lists of objects entered into one answer blank as answers to a problem.

For lists of answers entered into multiple answer blanks, please see MultiAnswerProblems

Problem Techniques Index

PG problem file Explanation
DOCUMENT();
loadMacros(
"PGstandard.pl",
"MathObjects.pl"
);
TEXT(beginproblem());

Initialization: Load the macro file MathObjects.pl.

Context("Numeric");

$factors = List(Compute("x+2"),Compute("x+3"));
$roots = List( -3, -2 );

# If there were only one solution
# $roots = List(4);

# If there were no solutions
# $roots = List("NONE");

Setup: We need make no changes or additions to the tagging and description section of the PG file, or to the problem initialization section (unless we need to load some macros for the type of problem that we're creating). In the problem set-up section of the file, we include the definition of the list(s) that we're expecting as an answer.

Note that the argument of the List call are the objects in the list, which can be any MathObjects. Here we create a list of Formulas and a list of Reals (the numbers that we use in the second list will be promoted to Real MathObjects when the List is created).

If, for example, there were no real roots, we should set $roots = List("NONE"); so that students who enter a list of roots will not receive an error message about entering the wrong type of answer. If we were to use $roots = String("NONE"); instead, students who enter anything other than a string (e.g., a list of numbers) will receive an error message.

Similarly, if there were only one root at x=4, we would use $roots = List(4); instead of $roots = Real(4); to avoid sending error messages to students who enter multiple answers or NONE.

Context()->texStrings;
BEGIN_TEXT
What are the factors of \(x^2 + 5 x + 6\)?
$BR
Factors = \{ ans_rule(25) \}
$BR
${BITALIC}(Enter the factors as a comma-separated
list.)$EITALIC
$PAR
What are the roots of this equation?
$BR
Roots = \{ ans_rule(15) \}
$BR
${BITALIC}(Enter the roots in a comma-separated
list, ${BBOLD}ordered from smallest to 
largest$EBOLD.)$EITALIC
END_TEXT
Context()->normalStrings;

Main text: We ask for the answers as we'd expect. It's generally a good idea to make sure that it's clear what we expect students to enter (in this case, a comma-separated list). To point out the obvious, there's no reason in this case to make only one of the requested lists have a specific order... except that it lets us see how to do it in this example problem.

ANS( $factors->cmp() );
ANS( $roots->cmp(ordered=>1) );

ENDDOCUMENT();

Answer Evaluation: We can just check the answers against the correct List answers. To force the students' list answers to match the order of the correct answer, we include the ordered=>1 flag in the cmp() call. The default is ordered=>0 for unordered answers.

Other commonly used options include showHints=>1, showLengthHints=>1, partialCredit=>1 as arguments to the cmp() call. For all options, see the entries for "MathObjects-based Answer Checkers" and "Flags for Union()->cmp and List()->cmp" on MathObjectsAnswerCheckers.html

Problem Techniques Index