Volume1
A Question with Weighted Answer Blanks
This PG code shows how to ask students to set up and evaluate an integral for calculating the volume of a solid of revolution. Each answer blank is weighted.
 File location in OPL: FortLewis/Authoring/Templates/IntegralCalc/Volume1.pg
 PGML location in OPL: FortLewis/Authoring/Templates/IntegralCalc/Volume1_PGML.pg
PG problem file  Explanation 

Problem tagging: 

DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "PGunion.pl", "answerHints.pl", "weightedGrader.pl", ); TEXT(beginproblem()); install_weighted_grader(); $showPartialCorrectAnswers = 1; 
Initialization:
We load 
Context("Numeric"); Context()>variables>are( x=>"Real", dx=>"Real", y=>"Real", dy=>"Real" ); $f = Compute("x"); $g = Compute("x^2"); $upper = Real("1"); $lower = Real("0"); # answers below are intentionally wrong $int = Compute("( pi x  pi x^2 ) dx"); $vol = Compute("pi"); @weights = (5,5,40,50); # # Display the answer blanks properly in different modes # Context()>texStrings; if ($displayMode eq 'TeX') { $integral = 'Volume = \(\displaystyle' . '\int_{'. NAMED_ANS_RULE("lowerlimit",4). '}^{'. NAMED_ANS_RULE("upperlimit",4). '}'. NAMED_ANS_RULE("integrand",30). ' = '. NAMED_ANS_RULE("volume",10). '\)'; } else { $integral = BeginTable(center=>0). Row([ 'Volume = \(\displaystyle\int\)', NAMED_ANS_RULE("upperlimit",4).$BR.$BR. NAMED_ANS_RULE("lowerlimit",4), NAMED_ANS_RULE("integrand",30).$SPACE.' = '.$SPACE. NAMED_ANS_RULE("volume",10), ],separation=>2). EndTable(); } Context()>normalStrings; 
Setup: To keep the code that needs to be modified compartmentalized, we define the functions involved, the limits of integration, the integrand, the volume, and an array of weights (which sum to 100) for each of these answers.
The code for correctly displaying the answer blanks creates 
Context()>texStrings; BEGIN_TEXT Set up and evaluate an integral for the volume of the solid of revolution obtained by rotating the region bounded by \( y = $f \) and \( y = $g \) about the \(x\)axis. $BR $BR $integral END_TEXT TEXT(MODES(TeX=>"",HTML=> "${PAR}${BITALIC}${BBOLD}Note:${EBOLD} You can earn $weights[0]${PERCENT} for the upper limit of integration, $weights[1]${PERCENT} for the lower limit of integration, $weights[2]${PERCENT} for the integrand, and $weights[3]${PERCENT} for the finding the volume. ${EITALIC}")); Context()>normalStrings; 
Main Text:
We use the modespecific 
NAMED_WEIGHTED_ANS( "upperlimit" => $upper>cmp(), $weights[0] ); NAMED_WEIGHTED_ANS( "lowerlimit" => $lower>cmp(), $weights[1] ); NAMED_WEIGHTED_ANS( "integrand" => $int>cmp() >withPostFilter(AnswerHints( Formula("pi x  pi x^2 dx") => "Don't forget to multiply every term in the integrand by dx", Formula("pi x  pi x^2") => "Don't forget the differential dx", Formula("(pi x^2  pi x)*dx") => "Is the parabola above the line?", Formula("pi x^2  pi x") => "Is the parabola above the line?", )), $weights[2] ); NAMED_WEIGHTED_ANS( "volume" => $vol>cmp(), $weights[3] ); 
Answer Evaluation:
The answer evaluator we use is 
Context()>texStrings; BEGIN_SOLUTION Solution explanation goes here. END_SOLUTION Context()>normalStrings; COMMENT('MathObject version. Weights each answer blank separately.'); ENDDOCUMENT(); 
Solution: We include a comment to the instructor to let them know how the question is being graded. 