I am working on some problems using the quadratic formula.

I am wanting the students to write the answer as a reduced fraction with radicals (when applicable).

I am able to force the students to enter fractions and everything works fine when the square root simplifies to a whole number.

However, if the radical does not simplify, it will not let me pass it to the fraction. I am sure this is an easy fix, but I can not seem to figure out how to make roots and fractions work together.

Thank you:

*I realize that the code below has options for 3 different answers. I had trouble combining them into an if, elsif, and else situation with the different contexts happening.

DOCUMENT();

loadMacros(

"PGstandard.pl",

"MathObjects.pl",

"parserAssignment.pl",

"answerHints.pl",

"PGML.pl",

"contextLimitedRadical.pl",

"PCCmacros.pl",

"contextFraction.pl",

"PGcourse.pl",

);

##############################################

Context("LimitedRadical");

Context()->flags->set(reduceConstants=>0, reduceConstantFunctions=>0, formatStudentAnswer=>parsed,showExtraParens=>0);

parser::Assignment->Allow;

Context()->operators->redefine(',',using=>',',from=>'Numeric');

Context()->operators->redefine('or',using=>',',from=>'Numeric');

Context()->operators->set(

','=>{string=>' or ',TeX=>'\hbox{ or }'},

'or'=>{string=>' or ',TeX=>'\hbox{ or }'}

);

Context()->lists->set(List => {separator => " or "});

$var = "x";

$d = 3;

$e = 2;

$f = 1;

$g = 0;

$h = 0;

$a = $d;

$b = $e-$g;

$c = $f-$h;

$discr = $b*$b - 4*$a*$c;

Context("Fraction");

$ans1 = Fraction(-$b+sqrt($discr),2*$a);

$ans2 = Fraction(-$b-sqrt($discr),2*$a);

##############################################

TEXT(beginproblem());

BEGIN_PGML

Solve the following quadratic equations by the quadratic formula.

[` [$d][$var]^2 +[$e][$var]+[$f]= 0 `]

The solution is

x= [_______________________]

[@KeyboardInstructions("If needed, enter multiple answers separated by commas, as in 1, -1. Answers must be given eactly, including as fractions. If you need to use the square root symbol, as in [`x=\\sqrt{17}`], type it as [|x=sqrt(17)|]*. If there are no real solutions, enter [|no real solutions|]*.")@]**

END_PGML

##############################################

$showPartialCorrectAnswers = 1;

#if no solution

#Context("Vector");

#Context()->strings->add("no real solutions"=>{},

# "no real solution"=>{alias=>'no real solutions'},

#"none"=>{alias=>'no real solutions'},

#);

#$ans = String("no real solutions");

#ANS($ans->cmp());

#if one solution

#$ans = $ans1;

#ANS(num_cmp($ans));

#if 2 solution

$ans = List($ans1,$ans2);

ANS($ans->cmp());