Parent Directory | Revision Log

Revision **5373** -
(**download**)
(**as text**)
(**annotate**)

*Sun Aug 19 02:01:57 2007 UTC*
(12 years, 6 months ago)
by *dpvc*

File size: 2526 byte(s)

File size: 2526 byte(s)

Normalized comments and headers to that they will format their POD documentation properly. (I know that the POD processing was supposed to strip off the initial #, but that doesn't seem to happen, so I've added a space throughout.)

1 2 loadMacros('MathObjects.pl'); 3 4 sub _parserDifferenceQuotient_init {}; # don't reload this file 5 6 =head1 DESCRIPTION 7 8 ###################################################################### 9 # 10 # This is a Parser class that implements an answer checker for 11 # difference quotients as a subclass of the Formula class. The 12 # standard ->cmp routine will work for this. The difference quotient 13 # is just a special type of formula with a special variable 14 # for 'dx'. The checker will give an error message if the 15 # student's result contains a dx in the denominator, meaning it 16 # is not fully reduced. 17 # 18 # Use DifferenceQuotient(formula) to create a difference equation 19 # object. If the context has more than one variable, the last one 20 # alphabetically is used to form the dx. Otherwise, you can specify 21 # the variable used for dx as the second argument to 22 # DifferenceQuotient(). You could use a variable like h instead of 23 # dx if you prefer. 24 # 25 # Usage examples: 26 # 27 # $df = DifferenceQuotient("2x+dx"); 28 # ANS($df->cmp); 29 # 30 # $df = DifferenceQuotient("2x+h","h"); 31 # ANS($df->cmp); 32 # 33 # Context()->variables->are(t=>'Real',a=>'Real'); 34 # ANS(DifferenceQuotient("-a/[t(t+dt)]","dt")->cmp); 35 # 36 37 =cut 38 39 Context("Numeric"); 40 41 sub DifferenceQuotient {new DifferenceQuotient(@_)} 42 43 package DifferenceQuotient; 44 our @ISA = qw(Value::Formula); 45 46 sub new { 47 my $self = shift; my $class = ref($self) || $self; 48 my $current = (Value::isContext($_[0]) ? shift : $self->context); 49 my $formula = shift; 50 my $dx = shift || $current->flag('diffQuotientVar') || 'd'.($current->variables->names)[-1]; 51 # 52 # Make a copy of the context to which we add a variable for 'dx' 53 # 54 my $context = $current->copy; 55 $context->variables->add($dx=>'Real') unless ($context->variables->get($dx)); 56 $q = bless $context->Package("Formula")->new($context,$formula), $class; 57 $q->{isValue} = 1; $q->{isFormula} = 1; $q->{'dx'} = $dx; 58 return $q; 59 } 60 61 sub cmp_class {'a Difference Quotient'} 62 63 sub cmp_defaults{( 64 shift->SUPER::cmp_defaults, 65 ignoreInfinity => 0, 66 )} 67 68 sub cmp_postprocess { 69 my $self = shift; my $ans = shift; my $dx = $self->{'dx'}; 70 return if $ans->{score} == 0 || $ans->{isPreview}; 71 $main::__student_value__ = $ans->{student_value}; 72 my ($value,$err) = main::PG_restricted_eval('$__student_value__->substitute(\''.$dx.'\'=>0)->reduce'); 73 $self->cmp_Error($ans,"It looks like you didn't finish simplifying your answer") 74 if $err && $err =~ m/division by zero/i; 75 } 76 77 1;

aubreyja at gmail dot com | ViewVC Help |

Powered by ViewVC 1.0.9 |