#/*********************************************************** # binomial.rb -- 2項分布 #***********************************************************/ def error(s) printf("%s\n", s) exit 1 end printf("n, p? "); n, p = gets.scan(/[+-]*[\d\.e]+/) n = n.to_i; p = p.to_f q = 1 - p; s = t = q ** n if (s == 0); error("n か p が大きすぎます"); end for k in 0...n printf("%4d %7.4f\n", k, s) t *= (n - k) * p / ((k + 1) * q).to_f s += t end printf("%4d %7.4f\n", n, s) exit 0