Question 1: Is there an intelligent solution to avoid the label zero on the axes when creating a graph (other than interrupting the counter)?
Question 2: What is wrong with my popups? Code follows:
#---------------------------------------------------------------------------------------------------------------------
# tagging and description section
#---------------------------------------------------------------------------------------------------------------------
# DESCRIPTION
# Recognizing properties of the parameters k and p from the graph of y=kx^p
# ENDDESCRIPTION
# Homework/Workshop3/Souza/problem3.pg
#---------------------------------------------------------------------------------------------------------------------
# initialization section
#---------------------------------------------------------------------------------------------------------------------
DOCUMENT();
loadMacros("PGstandard.pl",
"MathObjects.pl",
"PGgraphmacros.pl",
"parserPopUp.pl",
"PGML.pl",
"PGcourse.pl");
Context("Numeric");
#Context()->variables->add(t => "Real");
#---------------------------------------------------------------------------------------------------------------------
# problem set-up section
#---------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------
# text section
#---------------------------------------------------------------------------------------------------------------------
TEXT(beginproblem());
$showPartialCorrectAnswers = 1;
$refreshCachedImages = 1;
Context("Numeric");
$pixels = 200;
# Create the canvas
$gr = init_graph(-3,-3,3,6, # xmin, ymin, xmax, ymax
axes=>[0,0], grid=>[6,9], size=>[$pixels, $pixels]);
$gr -> lb('reset'); # remove default labels
# axes labels
$gr->lb( new Label(2.5,0,'x', 'black', 'center', 'bottom'));
$gr->lb( new Label(0.1,5.5,'y', 'black', 'left', 'middle'));
# axes labels
foreach my $i (-2..2) {
$gr->lb( new Label($i,0, $i, 'black', 'center', 'top'));
}
foreach my $i (-2..5) {
$gr->lb( new Label(-0.1,$i, $i, 'black', 'right', 'middle'));
}
######
###### Maybe randomize the graph?
######
# plot a function
$f = Formula("2*sqrt(x)");
add_functions($gr, "$f for x in <-1,4> using color:blue and weight:2");
#########
### Problem worked up to here
#########
install_problem_grader(~~&std_problem_grader);
$showPartialCorrectAnswers = 0;
$popup1 = PopUp(
["choose","linear","quadratic","exponential"],
"power function",
);
$popup2 = PopUp(
["choose","d less than 0","d greater than 1"],
"d between 0 and 1",
);
BEGIN_PGML
>> [@ image(insertGraph($gr), width=>$pixels, height=>$pixels, tex_size=>900) @]*
[` f(x)=c\cdot x^d `] <<
a. Which type of function is this? [_________]{$popup1}
b. What is the value of [` c `] ? [` c = `] [____] {2}
c. Choose the best option for [` d `]: [@ $popup2->menu() @]*
END_PGML
ANS( $popup2->cmp() );
#---------------------------------------------------------------------------------------------------------------------
# (answer and) solution section
#---------------------------------------------------------------------------------------------------------------------
BEGIN_PGML_SOLUTION
*SOLUTION*
The correct answers are [@ $popup1->correct_ans() @]* , 2 (the value of the function at 1) and
[@ $popup2->correct_ans() @]* (since the power function is increasing and concave down).
END_PGML_SOLUTION
ENDDOCUMENT();
Hi,
When I ran your code, I received the error message:
Problem1 ERROR caught by Translator while processing problem file:tmpEdit/Experimental/Popup_debug.pg.pearson.tmp **************** ERRORS from evaluating PG file:
The correct choice must be one of the PopUp menu items at line 2 of (eval 4648) Died within Value::Error called at line 100 of [PG]/macros/parserPopUp.pl from within parser::PopUp::new called at line 2 of (eval 4648) from within main::PopUp called at line 63 of (eval 4423)
which tells me that the correct answer is not among the choices listed in the PopUp. In particular, in the first popup you need "power function" to appear twice (once in the list of choices and once as the correct answer).
###### begin pg code ###########
$popup1 = PopUp(
["choose","linear","quadratic","exponential","power function"],
"power function",
);
###### end pg code ############
Similar remarks apply to the second popup. Also, there should be no space between the answer blank and the answer: it should be [____]{"2"} and not [____] {"2"}.
Best regards,
Paul Pearson
########### begin pg file ###############
DOCUMENT();
loadMacros("PGstandard.pl",
"MathObjects.pl",
"PGgraphmacros.pl",
"parserPopUp.pl",
"PGML.pl",
"PGcourse.pl");
Context("Numeric");
#Context()->variables->add(t => "Real");
#---------------------------------------------------------------------------------------------------------------------
# problem set-up section
#---------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------
# text section
#---------------------------------------------------------------------------------------------------------------------
TEXT(beginproblem());
$showPartialCorrectAnswers = 1;
$refreshCachedImages = 1;
Context("Numeric");
$pixels = 200;
# Create the canvas
$gr = init_graph(-3,-3,3,6, # xmin, ymin, xmax, ymax
axes=>[0,0], grid=>[6,9], size=>[$pixels, $pixels]);
$gr -> lb('reset'); # remove default labels
# axes labels
$gr->lb( new Label(2.5,0,'x', 'black', 'center', 'bottom'));
$gr->lb( new Label(0.1,5.5,'y', 'black', 'left', 'middle'));
# axes labels
foreach my $i (-2..2) {
$gr->lb( new Label($i,0, $i, 'black', 'center', 'top'));
}
foreach my $i (-2..5) {
$gr->lb( new Label(-0.1,$i, $i, 'black', 'right', 'middle'));
}
######
###### Maybe randomize the graph?
######
# plot a function
$f = Formula("2*sqrt(x)");
add_functions($gr, "$f for x in <-1,4> using color:blue and weight:2");
#########
### Problem worked up to here
#########
install_problem_grader(~~&std_problem_grader);
$showPartialCorrectAnswers = 0;
$popup1 = PopUp(
["choose","linear","quadratic","exponential","power function"],
"power function",
);
$popup2 = PopUp(
["choose","less than 0","between 0 and 1","greater than 1",],
"between 0 and 1",
);
BEGIN_PGML
>> [@ image(insertGraph($gr), width=>$pixels, height=>$pixels, tex_size=>900) @]*
[` f(x)=c\cdot x^d `] <<
a. Which type of function is this? [_________]{$popup1}
b. What is the value of [` c `] ? [` c = `] [____]{"2"}
c. Choose the best option for [` d `]: [__]{$popup2}
END_PGML
#---------------------------------------------------------------------------------------------------------------------
# (answer and) solution section
#---------------------------------------------------------------------------------------------------------------------
BEGIN_PGML_SOLUTION
*SOLUTION*
The correct answers are [@ $popup1->correct_ans() @]* , 2 (the value of the function at 1) and
[@ $popup2->correct_ans() @]* (since the power function is increasing and concave down).
END_PGML_SOLUTION
ENDDOCUMENT();
What the rookie eyes don't see! Thanks a lot!
Further questions: In the third colum "correct answer" the solutions are listed as 1 word "powerfunction" and "dbetween0and1". Any fix for that? (In the solutions field they are displayed correctly.) Did I understand correctly that one cannot display math in the pop ups? Can I at least force "d" to be in italics?
Further questions: In the third colum "correct answer" the solutions are listed as 1 word "powerfunction" and "dbetween0and1". Any fix for that? (In the solutions field they are displayed correctly.) Did I understand correctly that one cannot display math in the pop ups? Can I at least force "d" to be in italics?
Hi Regina,
I didn't see an answer to this in the preceding, so I'll first take a stab at it:
Question 1: Is there an intelligent solution to avoid the label zero on the axes when creating a graph (other than interrupting the counter)?
My answer: no, not really. I'd just rewrite your label command asforeach my $i (-2, -1, 1, 2) {
$gr->lb( new Label($i,0, $i, 'black', 'center', 'top'));
}
As for formatting in PopUps, I don't think they support non-plain text display. The old PG checkbox macros do, however.
Cheers,
Gavin
Avoiding 0 (or any other values):
The suggested solution is good is the list od labels is not too long. If your labels go say from -20 to 20, it is easier to filter them with
The suggested solution is good is the list od labels is not too long. If your labels go say from -20 to 20, it is easier to filter them with
grep
: foreach my $i (grep { $_ != 0 } -20..20) { ...
You can also construct the labels first, and then use them: @ylabs = -20..-1; push @ylabs, 1..20; foreach my $i (@ylabs) { ...
Easier just to use
foreach my $i (-20..-1,1..20) { ... }than to use
grep
or make a separate array variable.
Or that. :)
I would say that that is a pretty intelligent solution.
I did not know you can do that in Perl.
I would say that that is a pretty intelligent solution.
I did not know you can do that in Perl.
This is actually an error in the MathObject String object (on which the PopUp is based). I have a new version of the String object that takes care of it, but it is not in the production version yet. I have modified the parserPopUp.pl file in the course's templates/macros directory to include the changes for now. So your correct answers should be formatted properly at this point.
As Gavin mentions, pop up menus can only display plain text, not styled text or mathematics. The parserRadioButtons.pl file (in the course templates/macros directory) does allow math within the text, as does the older radio button implementation. But these aren't menus: all the choices will show at once, and there is a button next to each to select it.
As Gavin mentions, pop up menus can only display plain text, not styled text or mathematics. The parserRadioButtons.pl file (in the course templates/macros directory) does allow math within the text, as does the older radio button implementation. But these aren't menus: all the choices will show at once, and there is a button next to each to select it.