Hello:
Is there a way to let WeBWorK accept any variable? For example, if the correct solution is {x|x>1}, and if a student typed in {Z|Z>1}, it would be considered correct?
Thank you!
Carl Yao
Math Instructor
Portland Community College
Sample code is here:
# WeBWorK problem written by Carl Yao
# Portland Community College
#
# Give a graph of an inequality, write the set notation and interval notation.
# Answer is like (3, inf).
#
# Last edited by Jordan 8/28/13; Carl Yao on 7/21/13
#
# ENDDESCRIPTION
## DBsubject('Algebra')
## DBchapter('Basic Algebra')
## DBsection('Inequalities')
## KEYWORDS('linear','inequality', 'number line','set notation','interval notation')
## DBCCSS('7.EE.4')
## TitleText1('')
## EditionText1('')
## AuthorText1('')
## Section1('')
## Problem1('')
## Author('Alex Jordan, Carl Yao, Chris Hughes')
## Institution('PCC')
##############################################
DOCUMENT();
loadMacros(
"PGgraphmacros.pl",
"PGstandard.pl",
"MathObjects.pl",
"PGML.pl",
"parserPopUp.pl",
"contextInequalitySetBuilder.pl",
"PGcourse.pl",
);
##############################################
TEXT(beginproblem());
Context("Numeric");
$a = random(-4,4,0.5);
$symbol = '>';
InequalitySetBuilder::UseVerticalSuchThat();
Context("InequalitySetBuilder-Only");
$setans = Compute("{ x | x $symbol $a}");
Context("Interval");
Context()->flags->set("formatStudentAnswer"=>'parsed');
$intans = Compute("($a,inf)");
Context("Numeric");
%answer = (leftType => 'open',
rightType => 'inf', #use 'inf' regardles of +/- inf
);
$aspectRatio = 1/8;
$horPixel = 400;
$verPixel = $horPixel*$aspectRatio;
$screenXSize = $horPixel;
$screenYSize = $screenXSize*$aspectRatio;
$reach = 5;
$verticalSpace = $reach*$aspectRatio;
$hardCopyPercent = 1000; #meaning 100%
#initializing...
@gr=();
#indices will be 0..$#gr in some order, with the index of the correct graph in the 0th position.
@indices=();
#make the graphs
for $leftType ('open','closed', 'inf')
{
for $rightType ('open','closed', 'inf')
{
my $tempgr = init_graph(-$reach,-$verticalSpace,$reach,$verticalSpace,
axes=>[$reach+1,0],
size=>[$horPixel,$verPixel]
);
@ticks = ();
for my $j ((-$reach)..($reach)) {push(@ticks,$j);};
$tempgr->h_ticks(0,"black",@ticks);
$tempgr->lb( new Label(0,-$verticalSpace/5,0,'black','center','top'));
if (($leftType eq 'inf' or $rightType eq 'inf') and !(($leftType eq 'inf' and $rightType eq 'inf')))
{
$tempgr->lb( new Label($a,-$verticalSpace/5,$a,'blue','center','top'));
if ($leftType eq 'open' or $rightType eq 'open')
{
$tempgr->stamps( open_circle($a,0,'blue') )
}
else
{
$tempgr->stamps( closed_circle($a,0,'blue') )
};
$tempgr->moveTo($a,0);
if ($leftType eq 'inf') {$tempgr->arrowTo(-0.99*$reach,0,'blue',3)}
else {$tempgr->arrowTo(0.99*$reach,0,'blue',3)};
push(@gr,$tempgr);
if ($answer{leftType} ne $leftType or $answer{rightType} ne $rightType)
{push(@indices, $#gr);}
else {unshift(@indices, $#gr);}
}
}};
$alt = "Graph of an interval on a number line. There is a hollow circle at $a and everything right of that is shaded.";
##############################################
$refreshCachedImages = 1;
Context()->texStrings;
BEGIN_TEXT
Here is a graph of an interval.$PAR
$BCENTER
\{ image( insertGraph($gr[ $indices[0] ]), width=>$screenXSize, height=>$screenYSize, tex_size=>$hardCopyPercent,
extra_html_tags=>'title="$alt" alt= "$alt" align="top"' ) \}
$ECENTER
$PAR
END_TEXT
Context()->normalStrings;
BEGIN_PGML
Please type:
* *inf* for [`\infty`],
* *[$GTS]=* for [`\geq`],
* and *[$LTS]=* for [`\leq`]
Write this inequality in set-builder notation: [_____________________]
Write this inequality in interval notation: [_____________________]
END_PGML
##############################################
ANS( $setans->cmp() );
ANS( $intans->cmp() );
BEGIN_PGML_SOLUTION
Since the given graph shades all the values greater than [`[$a]`] (but not equal to [`[$a]`]) the graph represents the inequality [`x [$symbol] [$a]`].
The corresponding set notation is [`[$setans]`].
The corresponding interval notation is [`[$intans]`].
END_PGML_SOLUTION
ENDDOCUMENT();
WeBWorK Problems
Accepting all varialbes
This forum has a limit to the number of forum postings you can make in a given time period - this is currently set at 10 posting(s) in 1 day