2017 Problem Authoring Workshop

Problems which ask for examples

Re: Problems which ask for examples

by Davide Cervone -
Number of replies: 0
To be able to work with several answers at once, you need to use the MultiAnswer object available in the parserMultiAnswer.pl macro file. You get access to the student answers through the custom checker function that you provide. See the MultiAnswer documentation for details.

Here is an example of how to do this:

loadMacros(
  "PGstandard.pl",
  "MathObjects.pl",
  "PGML.pl",
  "parserMultiAnswer.pl",
  "PGcourse.pl"
);

Context("Interval");

$A = Compute("{1,2,3,4}");
$B = Compute("{3,4,5,6,7,8}");

$ma = MultiAnswer($A,$B)->with(
  singleResult => true,
  format => "A = %s and B = %s",
  tex_format => "A = %s\hbox{ and }B = %s",
  checker => sub {
    my ($correct, $student, $m, $ans) = @_;
    my ($A, $B) = @$student;
    if (!$ans->{isPreview}) {
      Value->Error("A doesn't have 4 elements") if $A->length != 4;
      Value->Error("B doesn't have 6 elements") if $B->length != 6;
      Value->Error("The union doesn't have 8 elements") if ($A + $B)->length != 8;
    }
    return $A->length == 4 && $B->length == 6 && ($A + $B)->length == 8;
  }
);

BEGIN_PGML
Give an example of sets [`A`] and [`B`] of numbers with [`|A| = 4`], [`|B| = 6`], and [`|A \cup B| = 8`].

>> [`A`] = [______________]{$ma} and [`B`] = [_______________]{$ma}  <<
END_PGML
Note that I have specified "set of numbers" in the problem because MathObejct sets are only for real numbers. I hope that answers the question.