1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
| #!/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
use Math::Counting;
my %opts;
my ( $n, $r );
getopts( 'aecfpn:r:h', %opts );
if ( @ARGV == 0 || exists $opts{h} ) {
print STDOUT ;
exit(0);
}
if ( exists $opts{n} ) {
$n = $opts{n};
}
elsif ( @ARGV == 1 || @ARGV == 2 ) {
$n = $ARGV[0];
}
else {
print STDOUT ;
exit(0);
}
if ( exists $opts{r} ) {
$r = $opts{r};
}
elsif ( @ARGV == 2 ) {
$r = $ARGV[1];
}
elsif ( defined($n) ) {
}
else {
print STDOUT ;
exit(0);
}
unless ( $n =~ /^d+$/ ) {
print "Please input an NATURAL NUMBER for "n"!n";
exit(0);
}
if ( defined($r) && $r !~ /^d+$/ ) {
print "Please input an NATURAL NUMBER for "r"!n";
exit(0);
}
my $f = Math::Counting::bfact($n);
my $fe = Math::Counting::factorial($n);
my ( $p, $pe, $c, $ce );
if ( defined($r) ) {
$p = Math::Counting::bperm( $n, $r );
$pe = Math::Counting::permutation( $n, $r );
$c = Math::Counting::bcomb( $n, $r );
$ce = Math::Counting::combination( $n, $r );
}
if ( exists $opts{e} ) {
$f = $fe;
$p = $pe;
$c = $ce;
}
if ( exists $opts{a}
|| ( !( exists $opts{f} ) && !( exists $opts{p} ) && !( exists $opts{c} ) )
)
{
if ( defined($r) ) {
print "$n! = $fn";
print "P($n,$r) = $pn";
print "C($n,$r) = $cn";
}
else {
print "$n! = $fn";
}
}
if ( exists $opts{f} ) {
print "$fn";
}
if ( exists $opts{p} ) {
if ( defined($r) ) {
print "$pn";
}
else {
print
"Please input the "r" if you want to compute the permutations.n";
}
}
if ( exists $opts{c} ) {
if ( defined($r) ) {
print "$cn";
}
else {
print
"Please input the "r" if you want to compute the combinations.n";
}
}
__DATA__
Program: fpc.pl (v20110927)
Author: Yixf (yixf1986@gmail.com)
Summary: Compute the factorial, number of permutations/arrangements and number of combinations.
Usage: fpc.pl [OPTIONS] (N|-n N) (R|-r R)
Options:
-a (All) Compute the factorial, permutations/arrangements and combinations. [default]
-e Use the scientific notation.
-f (Factorial) Return the number of arrangements of n.
-p (Permutation) Return the number of arrangements of r elements drawn from a set of n elements.
-c (Combination) Return the number of ways to choose r elements from a set of n elements.
-n (N) The number of elements to draw from.
-r (R) The number of elements to choose. |
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
use Math::Counting;
my %opts;
my ( $n, $r );
getopts( 'aecfpn:r:h', %opts );
if ( @ARGV == 0 || exists $opts{h} ) {
print STDOUT ;
exit(0);
}
if ( exists $opts{n} ) {
$n = $opts{n};
}
elsif ( @ARGV == 1 || @ARGV == 2 ) {
$n = $ARGV[0];
}
else {
print STDOUT ;
exit(0);
}
if ( exists $opts{r} ) {
$r = $opts{r};
}
elsif ( @ARGV == 2 ) {
$r = $ARGV[1];
}
elsif ( defined($n) ) {
}
else {
print STDOUT ;
exit(0);
}
unless ( $n =~ /^d+$/ ) {
print "Please input an NATURAL NUMBER for "n"!n";
exit(0);
}
if ( defined($r) && $r !~ /^d+$/ ) {
print "Please input an NATURAL NUMBER for "r"!n";
exit(0);
}
my $f = Math::Counting::bfact($n);
my $fe = Math::Counting::factorial($n);
my ( $p, $pe, $c, $ce );
if ( defined($r) ) {
$p = Math::Counting::bperm( $n, $r );
$pe = Math::Counting::permutation( $n, $r );
$c = Math::Counting::bcomb( $n, $r );
$ce = Math::Counting::combination( $n, $r );
}
if ( exists $opts{e} ) {
$f = $fe;
$p = $pe;
$c = $ce;
}
if ( exists $opts{a}
|| ( !( exists $opts{f} ) && !( exists $opts{p} ) && !( exists $opts{c} ) )
)
{
if ( defined($r) ) {
print "$n! = $fn";
print "P($n,$r) = $pn";
print "C($n,$r) = $cn";
}
else {
print "$n! = $fn";
}
}
if ( exists $opts{f} ) {
print "$fn";
}
if ( exists $opts{p} ) {
if ( defined($r) ) {
print "$pn";
}
else {
print
"Please input the "r" if you want to compute the permutations.n";
}
}
if ( exists $opts{c} ) {
if ( defined($r) ) {
print "$cn";
}
else {
print
"Please input the "r" if you want to compute the combinations.n";
}
}
__DATA__
Program: fpc.pl (v20110927)
Author: Yixf (yixf1986@gmail.com)
Summary: Compute the factorial, number of permutations/arrangements and number of combinations.
Usage: fpc.pl [OPTIONS] (N|-n N) (R|-r R)
Options:
-a (All) Compute the factorial, permutations/arrangements and combinations. [default]
-e Use the scientific notation.
-f (Factorial) Return the number of arrangements of n.
-p (Permutation) Return the number of arrangements of r elements drawn from a set of n elements.
-c (Combination) Return the number of ways to choose r elements from a set of n elements.
-n (N) The number of elements to draw from.
-r (R) The number of elements to choose.
相关