Diff for /loncom/homework/caparesponse/test.pl between versions 1.3 and 1.4

version 1.3, 2006/09/29 20:55:36 version 1.4, 2006/09/29 20:56:38
Line 1 Line 1
 use strict;  use strict;
 use warnings;  use capa;
   
 my $n = 0;  my $unit="N";
 my $total = 0;  my $answer="3.4 N";
 my $num_left = 0;  my $scaled="3.2";
 my @order;  print("\n return code is (should be 6)".&capa::caparesponse_get_real_response($unit,$answer,\$scaled));
   print("\nscaled (should be 0.0034) ".$scaled." unit $unit answer $answer");
 sub factorial {  $unit="m";
     my $input = CORE::int(shift);  $answer="3.4 mm/J";
     return "Error - unable to take factorial of an negative number ($input)" if $input < 0;  $scaled=3.2;
     return "Error - factorial result is greater than system limit ($input)" if $input > 170;  print("\n return code is (should be 15)".&capa::caparesponse_get_real_response($unit,$answer,\$scaled));
     return 1 if $input == 0;  print("\nscaled (should be 3.2) ".$scaled." unit $unit answer $answer");
     my $result = 1;   print("\n");
     for (my $i=2; $i<=$input; $i++) { $result *= $i }  
     return $result;  
 }  
   
 sub init {  
     my ($size) = @_;  
     @order = (0..$size-1);  
     $n = $size;  
     $total = $num_left = &factorial($size);  
 }  
   
 sub get_next {  
     if ($num_left == $total) {  
  $num_left--;  
  return @order;  
     }  
   
   
     # Find largest index j with a[j] < a[j+1]  
   
     my $j = scalar(@order) - 2;  
     while ($order[$j] > $order[$j+1]) {  
  $j--;  
     }  
   
     # Find index k such that a[k] is smallest integer  
     # greater than a[j] to the right of a[j]  
   
     my $k = scalar(@order) - 1;  
     while ($order[$j] > $order[$k]) {  
  $k--;  
     }  
   
     # Interchange a[j] and a[k]  
   
     @order[($k,$j)] = @order[($j,$k)];  
   
     # Put tail end of permutation after jth position in increasing order  
   
     my $r = scalar(@order) - 1;  
     my $s = $j + 1;  
   
     while ($r > $s) {  
  @order[($s,$r)]=@order[($r,$s)];  
  $r--;  
  $s++;  
     }  
   
     $num_left--;  
     return(@order);  
 }  
   
 &init(9);  
 while($num_left) {  
     print(join(':',&get_next()).$/);  
 }  

Removed from v.1.3  
changed lines
  Added in v.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>