第 5 回 何度も呼び出そう レポート課題 氏名:菊池綾 学籍番号:c1100644 語学クラス:英語6 コース(系):政策マネジメント 1.筆記問題 A.第 3 回課題で名前を進数変換した結果を用いる。 16進数 / 10進数 k … 0x4b , 75 i … 0x49 , 73 k … 0x4b , 75 u … 0x55 , 85 c … 0x43 , 67 h … 0x48 , 72 i … 0x49 , 73 a … 0x41 , 65 y … 0x59 , 89 a … 0x41 , 65 10進数の結果を全て足し合わせると、 75 + 73 + 75 + 85 + 67 + 72 + 73 + 65 + 89 + 65 = 739 となる。 16進数の結果を全て足し合わせると、 -------- | a = 10 | | b = 11 | | c = 12 | | d = 13 | | e = 14 | | f = 15 | -------- 4b + 49 + 4b + 55 + 43 + 48 + 49 + 41 + 59 + 41 = 94 + a0 + 8b + 8a + 9a = 134 + 115 + 9a = 249 + 9a = 2e3 となる。 それぞれの答えを 16 で割ると、 10進数は、 46 ----- 16 )739 736 ----- 3 よってあまりは 0d3 16進数を 10進数に変換する。 2 * 16**2 + e(14) * 16**1 + 3 * 16**0 = 739 10進数の合計と等しいので、 0x739 = 0d2e3 となる。 B. 洗濯をする行動をプログラム風に表記。 def sentaku(clothes, senzai, time, water) clothes を 洗濯機 に 入れる senzai を 洗濯機に入れる 洗濯機 の スイッチ を 押す 洗い終わる time まで 待つ 終わったら 取り出す wash = clothes と senzai に water を 足す wash = time の間 待つ end #最後のwashの値を返す sentaku(3kg, 10g, 35分, 35L) #洗濯をするので呼び出す print("次は洗濯物を干しましょう。\n") 2.プログラム問題 A. i.考えた設定 入力した値を関数に代入させて計算させ、その結果をprintfメソッドで表示させ る。 combination の計算には factorial の計算が必要になるので、combination の def 文中に factorial のdef 文 を作り、その結果を用いて計算できるようにす る。 ii.作ったプログラム(def_combination.rb) #!/usr/koeki/bin/ruby def combination(m, n) #conbination の関数を def 文で設定。 #変数はmとn。 def factorial(m) #combination の def 文中で使う factorial の関数を #def 文で設定。変数はm。 if m == 1 #入力した m が 1 だった場合 1 # 1 を返す。 else #入力した m が 1 以外あった場合 m * factorial(m-1) #この式に値を代入して答えを返す。 end #if の end end #def factorial の end # p factorial(m) #factorial に 入力した値が正しく代入されているかどうか表示させる。 # p factorial(n) # p factorial(m-n) if m == 1 #入力した m が 1 だった場合 1 # 1 を返す。 else #入力した m が 1 以外あった場合 factorial(m) / (factorial(n) * factorial(m-n)) #この式に値を代入して答えを返す。 end #if の end end #def combination の end print("全体の数を入力: ") #入力をうながす文を表示させる m = gets.chomp!.to_i #入力した値を代入させる print("組み合わせる数を入力: ") n = gets.chomp!.to_i printf("%d から %d を選んで組み合わせた答えは %d です。\n", m, n, combination(m ,n)) #printf メソッドで結果を表示。 #%d は 値を整数に変換して出力させるメソッド。 iii.変更点 def_factorial.rb のプログラムを参考にした。順列の式を用いて計算するため に、組み合わせの def 文中の式に 順列の def 文を追加して、計算式を短くす るようにした。 iv.実行結果 (1) pan{c110064}% ./def_combination.rb [~/Ruby] 全体の数を入力: 10 組み合わせる数を入力: 5 10 から 5 を選んで組み合わせた答えは 252 です。 (2) pan{c110064}% ./def_combination.rb [~/Ruby] 全体の数を入力: 6 組み合わせる数を入力: 4 6 から 4 を選んで組み合わせた答えは 15 です。 (3) pan{KIKUCHI Aya}% ./def_combination.rb [~/Ruby] 全体の数を入力: 3 組み合わせる数を入力: 2 3 から 2 を選んで組み合わせた答えは 3 です。 v.考察 bc -l で計算結果が合っているか検算すると、 (1) pan{c110064}% bc -l [~/Ruby] 10*9*8*7*6*5*4*3*2*1 3628800 5*4*3*2*1 120 10 - 5 5 3628800 / (120 * 120) 252.00000000000000000000 quit (2) pan{c110064}% bc -l [~/Ruby] 6*5*4*3*2*1 720 4*3*2*1 24 6 - 4 2 720 / (24*2) 15.00000000000000000000 quit (3) pan{c110064}% bc -l [~/Ruby] 3*2*1 6 2*1 2 3 - 2 1 6 / (2*1) 3.00000000000000000000 よって、プログラムは正しく動いている。また、def 文の計算式も正しい。 3.感想 水力によるゼンマイ発電機。 水の流れでゼンマイが巻かれる ↓ ゼンマイが戻る ↓ 発電 ↓ またゼンマイが巻かれる 4.参考文献 第 3 回 統計の考え方 「組み合わせ Combination」 西村まどか http://roy/~madoka/2011/r2/05/rpt/rpt.html def_factorial.rb のプログラム ------------------------------- 東北公益文科大学 公益学部 公益学科 2年 菊池綾 c110064@f.koeki-u.ac.jp