Your answer to the following question will help this utter newbie WeBWorK author get started...
I've created a variable:
$num = random(2,6,1);
I want to use variable $new for the correct answer, and its value should be $num-1. I know to put
ANS($new->cmp() );
after the question statement. But what do I put up in the initialization to compute $new?
I tried, right after the definition of $num, using:
$new = $num - 1;
but I get a to-me mysterious tranlator error that I cannot all method "cmp" without a package or object reference.
P.S. In this message, I wanted to make the code to appear in a proper font for code. Can I just use typical <code> </code> tags in this editor? Note that I don't see any option here for previewing my post (unlike in most forums I read).
When you wrote $new->cmp, you are asking WW to use the "cmp" method for the object "$new". The method you used to create $new was as a simple variable assignment, a scalar. Scalars do not know how to do comparisons for answer checking.
The MathObjects.pl library allows you to create objects that are aware of such methods.
( see http://webwork.maa.org/wiki/Introduction_to_MathObjects )
If you were to change your line
$new = $num-1;
to the MathObjects-aware line
$new = Compute("$num-1");
then the comparison will be correctly performed. Instead of being a scalar, $new is now an object of type Real that knows how to interpret the cmp method. In addition, the correct answer will show how to compute the answer ($num-1) instead of just the value.
If you really don't want to use MathObjects library, then there is an answer checker for comparing numbers. You could have gotten rid of $new altogether and used
ANS( num_cmp($num-1) );
- Brian Walton
The MathObjects.pl library allows you to create objects that are aware of such methods.
( see http://webwork.maa.org/wiki/Introduction_to_MathObjects )
If you were to change your line
$new = $num-1;
to the MathObjects-aware line
$new = Compute("$num-1");
then the comparison will be correctly performed. Instead of being a scalar, $new is now an object of type Real that knows how to interpret the cmp method. In addition, the correct answer will show how to compute the answer ($num-1) instead of just the value.
If you really don't want to use MathObjects library, then there is an answer checker for comparing numbers. You could have gotten rid of $new altogether and used
ANS( num_cmp($num-1) );
- Brian Walton
Brian has given you the correct advice, but I thought I'd add two comments.
First, be sure to load the MathObjects.pl macros via
loadMacros("MathObjects.pl");at the top of your problem.
Second, if you don't want the correct answer to appear as $num-1 (e.g., if $num is 3, the correct answer will show as 3-1), then you can do either
$new = Compute($num-1);(with no quotation marks, so the subtraction is done first and THEN
Compute()
is called on the result), or
$new = Real($num-1);which creates a Real MathObject directly.
Good luck with your authoring.
Davide PS, if you are using the reply form to enter your message, you can enter <code>...</code> directly, but if you are using the WYSIWYG editor, then you can't enter HTML directly (though you could probably select a monospace font). I have also been unhappy about no preview, but once you post you can continue to edit for 30 minutes, so that's almost like a preview.