--- loncom/homework/default_homework.lcpm 2001/01/16 20:15:40 1.15 +++ loncom/homework/default_homework.lcpm 2001/05/30 15:24:53 1.22 @@ -2,18 +2,27 @@ # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run() # # +#init some globals +# +# Guy Albertelli +# +# 05/25/2001 H. K. Ng +# $RANDOMINIT=0; +$pi=atan2(1,1)*4; +$rad2deg=180.0/$pi; +$deg2rad=$pi/180.0; sub caparesponse_check { my $answer=''; #done my $type=''; #done my $tol_type=''; # gets it's value from whether tol has a % or not done my $tol=''; #done - my $sig=''; - my $sig_lbound=''; - my $sig_ubound=''; + my $sig=''; #done lowerbnd,upperbnd + my $sig_lbound=''; #done + my $sig_ubound=''; #done my $ans_fmt=''; - my $units=''; + my $units=''; #done my $calc=''; my ($response,$expr)=@_; @@ -69,7 +78,7 @@ sub caparesponse_check { elsif ($result =='12') { $result='WANTED_NUMERIC'; } else {$result = "ERROR: Unknown Result:$result:$@:";} - return "$result:
Error $error:
Answer $answer:
Response $response:
$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$units
"; + return "$result:
Error $error:
Answer $answer:
Response $response:
$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$units
"; } sub caparesponse_check_list { @@ -81,24 +90,29 @@ sub caparesponse_check_list { my (@list) = eval $answer; my (@responselist)=split /,/,$response; my $unit=''; - $result.="Final response :$responselist['-1']:
"; + $result.="Final response :$responselist['-1']:
"; if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) { $responselist['-1']=$1; $unit=$2; } - $result.="Final response :$responselist['-1']:
"; + $result.="Final response :$responselist['-1']:
"; $unit=~s/\s//; my $i=0; my $awards=''; for ($i=0; $i<@list;$i++) { - $aresult=&caparesponse_check($responselist[$i]." $unit", - $expr.';my $answer='.$list[$i].';'); + if ($unit eq '') { + $aresult=&caparesponse_check($responselist[$i], + $expr.';my $answer='.$list[$i].';'); + } else { + $aresult=&caparesponse_check($responselist[$i]." $unit", + $expr.';my $answer='.$list[$i].';'); + } my ($temp)=split /:/, $aresult; $awards.="$temp,"; $result.=$aresult; } chop $awards; - return "$awards:
$result"; + return "$awards:
$result"; } sub tex { @@ -138,8 +152,37 @@ sub random { } sub tan { sin($_[0]) / cos($_[0]) } -sub acos { atan2(sqrt(1 - $_[0] * $_[0]), $_[0] ); } -sub asin { atan2($_[0], sqrt(1- $_[0] * $_[0]) ); } +#sub atan { atan2($_[0], 1); } +#sub acos { atan2(sqrt(1 - $_[0] * $_[0]), $_[0] ); } +#sub asin { atan2($_[0], sqrt(1- $_[0] * $_[0]) ); } + +sub log10 { log($_[0])/log(10); } + +sub factorial { + my $input = int(shift); + return "Error - unable to take factorial of an negative number ($input)" if $input < 0; + return "Error - factorial result is greater than system limit ($input)" if $input > 170; + return 1 if $input == 0; + my $result = 1; + for (my $i=2; $i<=$input; $i++) { $result *= $i } + return $result; +} + +sub sgn { + return -1 if $_[0] < 0; + return 0 if $_[0] == 0; + return 1 if $_[0] > 0; +} + +sub min { + my @sorted = sort { $a <=> $b || $a cmp $b } @_; + return shift @sorted; +} + +sub max { + my @sorted = sort { $a <=> $b || $a cmp $b } @_; + return pop @sorted; +} sub html { if ( $external::target eq "web" ) { @@ -147,6 +190,21 @@ sub html { } } +sub roundto { + my ($input,$n) = @_; + return sprintf('%.'.$n.'f',$input); +} + +sub to_string { + my ($input,$n) = @_; + return sprintf('%'.$n,$input) if $n ne ""; + return sprintf($input) if $n eq ""; +} + +sub sub_string { + my ($str,$start,$len) = @_; + return substr($str,$start-1,$len); +} sub pow {return $_[0] ** $_[1]; } sub ceil {return (($_[0]-int($_[0]))== 0.0) ? $_[0] : (int($_[0])+ 1); } @@ -175,6 +233,34 @@ sub map { } } +sub name{ + my $fullname = &EXT('environment.lastname').', '.&EXT('environment.firstname').' '.&EXT('environment.middlename'); + $fullname = "" if $fullname eq ", "; + return $fullname; +} + +sub student_number { + my $id = &EXT('environment.id'); + $id = '' if $id eq ""; + return $id; +} + +sub class { + my $course = &EXT('course.description'); + $course = '' if $course eq ""; + return $course; +} + +sub sec { + my $sec = &EXT('request.course.sec'); + $sec = '' if $sec eq ''; + return $sec; +} + +sub open_date { &EXT('resource.0.opendate') } +sub due_date { &EXT('resource.0.duedate') } +sub answer_date { &EXT('resource.0.answerdate') } + sub choose { my $num = $_[0]; return $_[$num];