# The Structure of a Webwork Problem

WeBWorK problems consist of 4 or 5 parts: loading macros, randomizing parameters, input/output, answer-checking, and sometimes solutions. WeBWorK problems are written in PG, a derivative of perl; you do NOT need to know perl to write/edit problems!

Here is an example problem with explanation.

## Date('January 2010')
## Institution('UC Davis')
## TitleText1('Math 16 for UC Davis')
## EditionText1('1')
## AuthorText1('Larson Edwards')
## Section1('4.1')
## Problem1('15')

DOCUMENT();

"PGbasicmacros.pl",
"PGchoicemacros.pl",
"PGauxiliaryFunctions.pl");

The pound sign (#) denotes a comment. The first 7 lines of this section merely provide information for instructors.

The problem itself begins with

DOCUMENT();

The next line loads macros which translate commands written in the PG language into perl.

### Randomizing parameters

$a = random(2,5,1); do {$b = random(2,4,1); } until ($b !=$a);
$c = random(2,4,1);$d = ($a)**($b);

The dollar sign ($) denotes variables in perl. In this example, a, b, c, and d are variables. The first line sets a to be a random integer between 2 and 5. The second line sets b to be a random integer between 2 and 4, not equal to a. The third line sets c to be a random number between 2 and 4. The last line sets d equal to a^b. Note the use of a double asterisk instead of a caret: while WeBWorK is robust when it comes to accepting student input, it is rather finicky when it comes to creating problems. See http://webwork.maa.org/wiki/Basic_Perl_syntax for more details. http://hobbes.la.asu.edu/courses/webwork-help/randomizers.html contains a thorough description of more ways to randomize parameters. ### Input/output TEXT(beginproblem());$showPartialCorrectAnswers = 1;

BEGIN_TEXT
Solve for $$x$$: $\left(\frac{1}{a}\right)^{c x}=d$
$PAR NOTE: Completely simplify your answer!$PAR
$$x =$$ \{ans_rule(20)\}

END_TEXT

In this section we display the problem to the student and ask the student to enter an answer. Everything the student sees is contained between BEGIN_TEXT and END_TEXT.

Text and math which the student sees are written in LaTeX. However: since the dollar sign ($) is already used to denote variables, you cannot use it to denote LaTeX math mode! Instead, use $$[formula]$$ for in-line display (i.e., instead of single dollar signs), and use $[formula$ for equation mode (i.e., instead of double dollar signs). Note that these commands also work in regular LaTeX. $PAR

denotes a new paragraph.

\{ans_rule(n)\}

creates an answer field into which the student may type an answer. The parameter n controls the length of the field.

$ans = -($b)/($c); ANS(num_cmp($ans, mode=>'strict'));
ENDDOCUMENT();