Hi, For starters, I would use a problem with only one part and three answer fields inside the customresponse. Evaluation of the input should be inside the <answer>-block:
<customresponse …> <startouttext />…<endouttext …> <textline …> <startouttext />…<endouttext …> <textline …> <startouttext />…<endouttext …> <textline …> <answer …> </answer/> </customresponse> The answers will be in an array $$submission[0], $$submission[1], … If any of those are (still) zero, return "MISSING_ANSWER" In the very last step, calculate and check what you want, return "EXACT_ANS" or "INCORRECT". - Gerd. On Sep 2, 2013, at 3:03 PM, Josh Wolosz <jwol...@slrsd.org> wrote: > Hi Everyone, > > I have a question in regards to Custom Response problems. I would like to > try moving some of my labs into lon-capa, and one of the first ones involves > working with percent error (for high school freshman). > > Here's what I would like to have happen: > > 1) Students enter an estimated value > 2) Students enter the actual/measured value > 3) Students then input their percent error which loncapa calculates and > determines if they are correct or not > > Here is the script I have tried: > > <script type="loncapa/perl"> > # Get the entered answer. First argument is partID, second is responseID > $given=&submission(1,11); > $example='You chose '.$given.' m'; > $given2=&submission(3,4); > $example2='You chose '.$given2.' m'; > $a=&abs($given2-$given)/$given2; > </script> > > I'm getting an error returned saying there is an illegal division by zero, > specifically: > > $a=&abs($given2-$given)/$given2; > > I understand that at the beginning of the problem nothing has been submitted, > so $given2 has no value. Is there a way around this? Thanks for your help, > and I apologize if it is a very simple solution that I am missing. > > Sincerely > Joshua Wolosz > > The full code is: > > <problem> > > <parameter name="ordered" id="13" type="string_yesno" default="no" > description="Show Parts One-at-a-Time" /> > > <script type="loncapa/perl"> > # Get the entered answer. First argument is partID, second is responseID > $given=&submission(1,11); > $example='You chose '.$given.' m'; > $given2=&submission(3,4); > $example2='You chose '.$given2.' m'; > $a1=100*&abs($given2-$given)/$given2; > </script> > > <part id="1"> > <startouttext /> > <i><b>Note:</b> You do not need to include the units when you input your > calculations.</i><br></br> > > What did you estimate the width of the object to be? > <endouttext /> > <customresponse answerdisplay="$example" id="11"> > <answer type="loncapa/perl"># We do not want a vector > if ($submission=~/\,/) { return 'EXTRA_ANSWER'; } > # No units needed > if ($submission=~/^\d+\s+\w+$/) { return 'UNIT_NOTNEEDED'; } > # Need a numerical answer here > if ($submission!~/^[\d\.]+$/) { return 'WANTED_NUMERIC'; } > { return 'EXACT_ANS'; }</answer> > <textline readonly="no" /> > </customresponse><startouttext />meters<endouttext /> > </part> > > <part id="3"> > <startouttext /> > What did you <u>measure</u> the width of the object to be? > <endouttext /> > <customresponse answerdisplay="$example2" id="4"> > <answer type="loncapa/perl"># We do not want a vector > if ($submission=~/\,/) { return 'EXTRA_ANSWER'; } > # No units needed > if ($submission=~/^\d+\s+\w+$/) { return 'UNIT_NOTNEEDED'; } > # Need a numerical answer here > if ($submission!~/^[\d\.]+$/) { return 'WANTED_NUMERIC'; } > { return 'EXACT_ANS'; }</answer> > <textline readonly="no" /> > </customresponse><startouttext />meters<endouttext /> > </part> > > <part id="5"> > <startouttext /> > What was your percent error for the width? > <endouttext /> > <numericalresponse answer="$a1" id="194"> > <responseparam name="tol" type="tolerance" default="0.5%" > description="Numerical Tolerance" /> > <textline readonly="no" /> > </numericalresponse> > </part> > </problem > > > > > When writing or responding, please remember that the Secretary of the > Commonwealth of Massachusetts has determined that email is a public record. > > This communication may contain privileged or other confidential information. > If you are not the intended recipient, or believe that you have received this > communication in error, please do not print, copy, retransmit, disseminate, > or otherwise use the information. Also, please indicate to the sender that > you have received this email in error, and delete the copy you received. > Thank you for your cooperation. > > > _______________________________________________ > LON-CAPA-users mailing list > LON-CAPA-users@mail.lon-capa.org > http://mail.lon-capa.org/mailman/listinfo/lon-capa-users _______________________________________________ LON-CAPA-users mailing list LON-CAPA-users@mail.lon-capa.org http://mail.lon-capa.org/mailman/listinfo/lon-capa-users