その練習。
きれいに書けた気がするので公開します。
このコードのポイントは、階乗の計算をするメソッドと
階乗の式を出力するメソッドを分けたところです。
私も初めは、両方の機能を一つのメソッド内に収める設計だった
のですが、それを分割することでプログラムが読みやすく
なっているのでは、ないかと思います。
読みやすいプログラムを記述するというのは、プログラマの
腕の見せ所です。
皆さんも読みやすいプログラムの記述を心がけてください。
if __FILE__ == $0
# ------------------------------------------
# exit が入力されるまで i の階乗を出力し続ける
# ------------------------------------------
# ******************************************
# calc_fractal
# ***
def calc_fractal(i)
if i == 1 then
return 1
else
return i * calc_fractal(i - 1)
end
end
# ******************************************
# fractal_expression
# ***
def fractal_expression(i)
if i == 1 then
return "1"
else
expression = i.to_s
return expression << " * "
+ fractal_expression(i - 1)
end
end
# //////////////////////////////////////////
# Main Process
# ///
i = 1
begin
puts fractal_expression(i) + " = "
+ calc_fractal(i).to_s
i += 1
puts "Please hit Enter key ! "
+ "if you want continue. "
+ "if not type 'exit'"
line = STDIN.gets.chop
end while line != "exit"
# //////////////////////////////////////////
end
-------------------------------------------------------------
出力は、こんな感じです。
1 = 1
Please hit Enter key ! if you want continue. if not type 'exit'
2 * 1 = 2
Please hit Enter key ! if you want continue. if not type 'exit'
3 * 2 * 1 = 6
Please hit Enter key ! if you want continue. if not type 'exit'
4 * 3 * 2 * 1 = 24
Please hit Enter key ! if you want continue. if not type 'exit'
5 * 4 * 3 * 2 * 1 = 120
Please hit Enter key ! if you want continue. if not type 'exit'
6 * 5 * 4 * 3 * 2 * 1 = 720
Please hit Enter key ! if you want continue. if not type 'exit'
7 * 6 * 5 * 4 * 3 * 2 * 1 = 5040
Please hit Enter key ! if you want continue. if not type 'exit'
8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 40320
Please hit Enter key ! if you want continue. if not type 'exit'
9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362880
Please hit Enter key ! if you want continue. if not type 'exit'
10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 3628800
Please hit Enter key ! if you want continue. if not type 'exit'
11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 39916800
Please hit Enter key ! if you want continue. if not type 'exit'
12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 479001600
Please hit Enter key ! if you want continue. if not type 'exit'
13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 6227020800
Please hit Enter key ! if you want continue. if not type 'exit'
14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 87178291200
Please hit Enter key ! if you want continue. if not type 'exit'
15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 1307674368000
Please hit Enter key ! if you want continue. if not type 'exit'
16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 20922789888000
Please hit Enter key ! if you want continue. if not type 'exit'
17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 355687428096000
Please hit Enter key ! if you want continue. if not type 'exit'
18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 6402373705728000
Please hit Enter key ! if you want continue. if not type 'exit'
19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 121645100408832000
Please hit Enter key ! if you want continue. if not type 'exit'
20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 2432902008176640000
Please hit Enter key ! if you want continue. if not type 'exit'
21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 51090942171709440000
Please hit Enter key ! if you want continue. if not type 'exit'
22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 1124000727777607680000
Please hit Enter key ! if you want continue. if not type 'exit'
23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 25852016738884976640000
Please hit Enter key ! if you want continue. if not type 'exit'
24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 620448401733239439360000
Please hit Enter key ! if you want continue. if not type 'exit'
25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 15511210043330985984000000
Please hit Enter key ! if you want continue. if not type 'exit'
26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 403291461126605635584000000
Please hit Enter key ! if you want continue. if not type 'exit'
27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 10888869450418352160768000000
Please hit Enter key ! if you want continue. if not type 'exit'
28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 304888344611713860501504000000
Please hit Enter key ! if you want continue. if not type 'exit'
29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 8841761993739701954543616000000
Please hit Enter key ! if you want continue. if not type 'exit'
30 * 29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 265252859812191058636308480000000
Please hit Enter key ! if you want continue. if not type 'exit'
31 * 30 * 29 * 28 * 27 * 26 * 25 * 24 * 23 * 22 * 21 * 20 * 19 * 18 * 17 * 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 8222838654177922817725562880000000
Please hit Enter key ! if you want continue. if not type 'exit'
exit
ここまでやって疑問。。。。階乗って、×でいいんだっけ?
それとこのプログラムが間違っているかどうかの問題。
私の立場は、
・読みにくいがバグがないプログラム
と
・バグはあるかもしれないが、読みやすいプログラム
では、
後者を支持します。
なので、このプログラムにバグがないことは、保証しません。
それは、保証できないわけではありません。
私は、プログラムにバグがないことを保証するプロセスは、
計画的なテストによって解決すると考えています。
今回は、保証しない方針なので、計画的なテストとか、
そういう堅苦しいことは、していません。
このソースコードは、プログラミングという仕事が好きな人と
楽しみを共有するためのものです。
なのでバグがあったら恥ずかしいですが、
恥ずかしいからと言って、公開しないという選択肢は、
選びません。
私のブログは、プログラミングを仕事としているすべての人が
楽しく仕事をするための活動の一環です。
以上!
2 件のコメント:
もうひとつ気づいたこと。
階乗って、結果の一の位がゼロになるんだね、数が増えると。
10とか20をかけてるから当たり前か。。。汗。
コメントを投稿