Scaffold
Simple Scaffolded, MultiPart Problems Worked Sequentially
This is the PG code to create a scaffolded problem with multiple parts that are displayed sequentially. This way uses a recent macro, scaffold.pl
that creates a neat student interface - similar to that of CompoundProblem5.pl but with a much cleaner style for authors. The interface has tabs containing sections of the problem that can open and close.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "PGML.pl", "MathObjects.pl", "parserMultiAnswer.pl", "scaffold-simple.pl", "PGcourse.pl", ); TEXT(beginproblem()); $showPartialCorrectAnswers = 1; |
Initialization:
We need make no changes to the initialization section of the file besides including |
Context("Numeric"); Context()->variables->are(x => 'Real'); $a = Compute(random(2,9,1)); $c = Compute(random(1,9,1)); $b = Compute(random(2,6,1)); if ($a*$c > 0) {$b += floor(sqrt(4*$a*$c))} $quadratic = Formula("$a x^2 + $b x + $c"); $x1 = (-$b + sqrt($b**2-4*$a*$c))/(2*$a); $x2 = (-$b - sqrt($b**2-4*$a*$c))/(2*$a); ########################################### # The scaffold Scaffold::Begin(); |
Setup:
In the problem set-up section of the file we define some variables that we will use in the problem, as usual. In addition, we begin the scaffold by Scaffold::Begin( can_open => "when_previous_correct", #first_incorrect, #correct_or_first_incorrect, #incorrect, always, or #never is_open => "first_incorrect" #when_previous_correct, #correct_or_first_incorrect, #incorrect, always, or #never instructor_can_open => "when_previous_correct", #first_incorrect, #correct_or_first_incorrect, #incorrect, #always, or #never ); |
Section::Begin("Part 1: Identify the coefficients"); BEGIN_PGML Consider the quadratic equation given by [`[$quadratic] = 0`]. In this exercise, we will consider three different ways to solve this expression. First, identify the coefficients for the quadratic using the standard form [`ax^2 + bx + c = 0`]: [`a`] = [____]{$a}, [`b`] = [____]{$b}, [`c`] = [____]{$c} END_PGML BEGIN_PGML_SOLUTION Take the coefficient of [`x^2`] for the value of [`a`], the coefficient of [`x`] for [`b`], and the constant for [`c`]. In this case, they are [`a = [$a]`], [`b = [$b]`], and [`c = [$c]`]. END_PGML_SOLUTION Section::End(); ########################################### Section::Begin("Part 2: Solve using the quadratic formula"); $multians1 = MultiAnswer($x1,$x2)->with( singleResult => 0, allowBlankAnswers => 1, checker => sub { my ($correct,$student,$self) = @_; my ($s1, $s2) = @{$student}; my ($c1, $c2) = @{$correct}; return (1,1) if ($c1 == $s1 and $c2 == $s2) or ($c1 == $s2 and $c2 == $s1); return (1,0) if $c1 == $s1 or $c2 == $s1; return (0,1) if $c1 == $s2 or $c2 == $s2; return (0,0); } ); BEGIN_PGML Using the quadratic formula, solve [`[$quadratic] = 0`] >> [`x`] = [______]{$multians1} or [`x`] = [______]{$multians1} << END_PGML BEGIN_PGML_SOLUTION Recall that the quadratic equation is [``x = {-b \pm \sqrt{b^2 - 4ac} \over 2a}``]. You already identified [`a = [$a]`], [`b = [$b]`], and [`c = [$c]`], so the results are: [``x = {-[$b] + \sqrt{[$b]^2 - 4[$a][$c]} \over 2[$a]} = [$x1]``] or [``x = {-[$b] - \sqrt{[$b]^2 - 4[$a][$c]} \over 2[$a]} = [$x2]``]. END_PGML_SOLUTION Section::End(); |
Main Text:
The text section of the problem is now broken into the parts that we want the student to work sequentially. Begin sections with Note that MultiAnswer is used in this question to demonstrate that we can use it, unlike in some previous iterations of compound problems. |
Scaffold::End(); ENDDOCUMENT(); |
Answers and Solutions:
We've included the answers and solutions in each section, so they don't appear here. However, once all of the sections are complete, we close the scaffold with |
As noted above, there are a number of other options that can be supplied to the compoundProblem
object. These include:
-
parts => n
: The number of parts in the problem. If not provided, defaults to 1, which rather defeats the point of using this in the first place. -
weights => [n1,...,nm]
: The relative weights to give to each part in the problem. For example, weights => [2,1,1] would cause the first part to be worth 50% of the points (twice the amount for each of the other two), while the second and third part would be worth 25% each. If weights are not supplied, the parts are weighted by the number of answer blanks in each part (and you must provide the total number of blanks in all the parts by supplying the totalAnswers option). -
totalAnswers => n
: The total number of answer blanks in all the parts put together (this is used when computing the per-part scores, if part weights are not provided). -
saveAllAnswers => 0 or 1
: Usually, the contents of named answer blanks from previous parts are made available to later parts using variables with the same name as the answer blank. Setting saveAllAnswers to 1 will cause ALL answer blanks to be available (via variables like $AnSwEr1, and so on). If not provided, defaults to 0. -
parserValues => 0 or 1
: Determines whether the answers from previous parts are returned as MathObjects (like those returned from Real(), Vector(), etc) or as strings (the unparsed contents of the student answer). If you intend to use the previous answers as numbers, for example, you would want to set this to 1 so that you would get the final result of any formula the student typed, rather than the formula itself as a character string. If not provided, defaults to 0. -
nextVisible => type
: Tells when the "go on to the next part" option is available to the student. The possible types include:ifCorrect
(the default; next is available only when all the answers are correct),Always
(next is always available (but note that students can't go back once they go on), andNever
(the problem controls going on by itself). -
nextStyle => type
: Determines the style of "next" indicator to display (when it is available). The possible types include:CheckBox
(the default),Button
,Forced
(forces students to go on when they next submit answers), andHTML
(provide an arbitrary HTML string).
(These are all taken directly from the documentation in the macro file.)
- PG macro: compoundProblem.pl