第 5 回 何度も呼び出そう レポート課題 氏名: 薮田大樹 学籍番号: c1101916 語学クラス: 中国語3 コース(系): 地域共創コース 1、筆記問題 A: 名前を16進数で表すと (yabuta taiki) yは 0x79 aは 0x61 bは 0x62 uは 0x75 tは 0x74 aは 0x61 tは 0x74 aは 0x61 iは 0x69 kは 0x6b iは 0x69 になります。 y: 0x79 = 7*16^1+9*16^0 = 121 a: 0x61 = 6*16^1+1*16^0 = 97 b: 0x62 = 6*16^1+2*16^0 = 98 u: 0x75 = 7*16^1+5*16^0 = 117 t: 0x74 = 7*16^1+4*16^0 = 116 a: 0x61 = 6*16^1+1*16^0 = 97 t: 0x74 = 7*16^1+4*16^0 = 116 a: 0x61 = 7*16^1+9*16^0 = 121 i: 0x69 = 6*16^1+9*16^0 = 105 k: 0x6 11 = 6*16^1+11*16^0 = 107 i: 0x69 = 6*16^1+9*16^0 = 105 文字コードを全て足していく。 121 + 97 + 98 + 117 + 116 + 97 + 116 + 121 + 105 + 107 + 101 = 1196 (電卓計算) bc -lで確かめ算をすると 121 + 97 + 98 + 117 + 116 + 97 + 116 + 121 + 105 + 107 + 101 1196 となるので数字は一致して正確である。 1196を 16 進数にするため16で割る。 16)1196 ----- 16) 74 12(c) ----- 16) 4 10(a) ----- 0 4 下から読むと 4acになる。よって 16 進数で表すと 0x4ac になる。 0d1196 = 0x4ac となる。 (10進数) (16進数) B: 毎日シャンプーをする行動を表した。 def bath(sorp, wash, susugu) 手に sorp を取る。 ソープで頭を wash する。 head = susugu end bath(5プッシュ ,30秒 ,60秒) # 頭を洗うので呼び出す print("しっかり乾かしてね!\n") 2、プログラム問題 ---- (概要) --------------------- 受験をこのプログラムの場面とし、受験者の人数、 選ばれる人数をそれぞれ入力してもらい、組み合わせを計算する。 ---- (作成したプログラム) -------- #!/usr/koeki/bin/ruby def factorial(y) # y = メソッド if y == 1 # yが1の場合 1 else y * factorial(y-1) # yに factorial(y)メソットをかける。 end # if - endを使用 end # def - endを使用 def choice(a, b) # メソットの設定 factorial(a) / (factorial(b) * factorial(a-b)) #公式に従い計算させる。 end # def - endを使用 print("受験者の中から合格者を選びます\n") STDERR.print("受験者数: ") # 標準出力で画面に出力させる person = gets.to_i # gets.to_iにすることで入力されたものを整数にする STDERR.print("合格者にする数: ") goukaku = gets.to_i printf("%d人合格したときのの組み合わせは%d通りです。\n",goukaku , choice(person,goukaku)) ---- (元にしたプログラムからの変更点) -------- factorial の引数を m から y に変えた。組み合わせを求めるために def choice(a, b) を定義した。 ---- (実行結果) ------------------------------ pan{c110191}% ./def_combination.rb [~/Ruby] 受験者の中から合格者を選びます 受験者数: 100 合格者にする数: 10 10人合格したときのの組み合わせは17310309456440通りです。 ---- (考察) ---------------------------------- 何通りかを確認するために、[100 C 10]の公式を確かめ算をした。 pan{YABUTA Taiki}% bc -l [~/Ruby] (100*99*98*97*96*95*94*93*92*91)/(10*9*8*7*6*5*4*3*2*1) 17310309456440.00000000000000000000 という結果になり、受験者数を100人にし、合格者数を10人に 設定した場合の、合格者の組合せは17310309456440通りあることがわかった。 プログラム実施結果と一致しているので、プログラムは値を正しく 読み込み、計算をしているということが言える。 ---- 3、感想 --------------------------------- 機械的な操作を繰り返すものとして、バッティングセンターの 球を投げる機械が挙げられるのではないか。 毎球同じスピード、同じ間隔で投げるのでそう思った。 あと、一つお願いがあるのですが、評価メールの内容が 「Cです」とかだけだと、どこが間違っていてどう改善すれば良いのか わからないので、一言だけでも良いのでアドバイスをいただけると 今後のプログラム作りにも活かせるのではないかと思います。 ---- 4、参考文献 ----------------------------- 神田直弥先生 06/20の授業内容:16進数・ASCIIコード http://roy/~naoya/ruby/9.html 西村まどか先生 基礎プログラミング II 第5回 (何度も呼び出そう)「階乗計算」 http://roy/~madoka/2011/r2/05/r2_05_07_theme_05_factorial.html