第 5 回 何度も呼び出そう レポート課題 氏名:小林愛実 学籍番号:c1100816 語学クラス:英語6 コース(系):政策マネジメント 1、筆記問題 A、 Kobayashi Manami ASCIIコードで表すと K = 0x4b o = 0x6f b = 0x62 a = 0x61 y = 0x79 a = 0x61 s = 0x73 h = 0x68 i = 0x69 M = 0x4d a = 0x61 n = 0x6e a = 0x61 m = 0x6d i = 0x69 となる。 a = 10 b = 11 c = 12 d = 13 e = 14 f = 15 まず、16進数を10進数にする。 0x4b = 4*16^1 + 11*16^0 = 64 + 11 = 75 よって、0x4b = 0d75 0x6f = 6*16^1 + 15*16^0 = 96 + 15 = 111 よって、0x6f = 0d111 0x62 = 6*16^1 + 2*16^0 = 96 + 2 = 98 よって、0x62 = 0d98 0x61 = 6*16^1 + 1*16^0 = 96 + 1 = 97 よって、0x61 = 0d97 0x79 = 7*16^1 + 9*16^0 = 112 + 9 = 121 よって、0x79 = 0d121 0x61 = 6*16^1 + 1*16^0 = 96 + 1 = 97 よって、0x61 = 0d97 0x73 = 7*16^1 + 3*16^0 = 112 + 3 = 115 よって、0x73 = 0d115 0x68 = 6*16^1 + 8*16^0 = 96 + 8 = 104 よって、0x68 = 0d104 0x69 = 6*16^1 + 9*16^0 = 96 + 9 = 105 よって、0x69 = 0d105 0x4d = 4*16^1 + 13*16^0 = 64 + 13 = 77 よって、0x4d = 0d77 0x61 = 6*16^1 + 1*16^0 = 96 + 1 = 97 よって、0x61 = 0d97 0x6e = 6*16^1 + 14*16^0 = 96 +14 = 110 よって、0x6e = 0d110 0x61 = 6*16^1 + 1*16^0 = 96 + 1 = 97 よって、0x61 = 0d97 0x6d = 6*16^1 + 11*16^0 = 96 + 11 = 107 よって、0x6d = 0d107 0x69 = 6*16^1 + 9*16^0 = 96 + 9 = 105 よって、0x69 = 0d105 これらを足すと 75 + 111 + 98 + 97 + 121 + 97 + 115 + 104 + 105 + 77 + 97 + 110 + 97 + 107 + 105 = 1516 0d1516になる。 10進数で計算した値を16で割る。 16)1516 12 = c ----- 16) 94 14 = e ----- 5 0x5ec 上記より、0d1516 = 0x5ec になる。 (確かめ算) 0d1516を2進数にすると 2)1516 0 ----- 2) 758 0 ----- 2) 379 1 ----- 2) 189 1 ----- 2) 94 0 ----- 2) 47 1 ----- 2) 23 1 ----- 2) 11 1 ----- 2) 5 1 ----- 2) 2 0 ----- 1 0d1516 = 0b10111101100 になる。 2進数を16進数にすると 101/1110/1100 101 = 5 1110 = 14 = e 1100 = 12 = c 0x5ec となり、答えが一致するためこの答えは正しいと言える。 B、 いつもの昼ご飯をプログラム風に書き直します。 def otyazuke(rice,sake, otya) riceを炊く sakeを焼く owan = rice と sake をお茶碗にいれる owan = owan に otya をかける end # owan を返す def asazuke(hakusai, aszukenomoto,takanotume) hakusaiを切る aszukenomotoを用意する boll = hakusai と aszukenomoto をいれる boll = boll に takanotume をのせる end otyazuke("100g, 30g, 100cc") # お茶漬を作るので呼び出す asazuke(300g, 300cc, 4g") # 浅漬けを作るので呼び出す print("いただきます。\n") 2、プログラミング問題 A、考えた設定 10個のボールが入った箱の中から、何個ボールを取るか入力してもらい、その組 み合わせを計算するプログラム。 B、プログラム #!/usr/koeki/bin/ruby def factorial(n) if n == 1 # nが1だったら 1 # 1を返す else # 1以外の場合は n*factorial(n-1) end # if の終わり end # def の終わり def choose(a, b) factorial(a)/(factorial(b)*factorial(a-b)) # 計算式 mCn =m!/(n!(m-n)!) end # def の終わり STDERR.print("10個のボールが入っている箱の中から、何個かボールをとる。\n") #説明文 STDERR.print("何個のボールをとりますか?: \n") # 入力を求める boll = gets.to_i # 入力された文字列を整数に hakononaka = 10 # 箱の中にはもともと10個のボールが入っている printf("%d個のボールから%d個のボールをとる組み合わせは、\n",hakononaka, boll) printf("%d通りです。\n",choose(hakononaka,boll)) # 計算結果の表示 C、変更点 授業中に作成した def_metabolic.rb を参考に作成した。 変更点は、methodを二つから一つにしたこと、 組合せの式 mCn = m!/(n!(m-n)!)を使用したことです。 D、実行結果 *2個選んだとき pan{c110081}% ./def_combination.rb [~/Ruby] 10個のボールが入っている箱の中から、何個かボールをとる。 何個のボールをとりますか?: 2 10個のボールから2個のボールをとる組み合わせは、 45通りです。 *5個選んだとき pan{c110081}% ./def_combination.rb [~/Ruby] 10個のボールが入っている箱の中から、何個かボールをとる。 何個のボールをとりますか?: 5 10個のボールから5個のボールをとる組み合わせは、 252通りです。 E、考察 10個の中から2個選ぶときの計算は 10C2 mCn = m!/(n!(m-n)!) 上の計算式の用に計算すると 10C2 = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 -------------------------------------- 2・1・(8 * 7 * 6 * 5 * 4 * 3 * 2 * 1) = 3628800 ---------- 80640 = 45 (上の計算) pan{c110081}% bc -l [~/Ruby] 10*9*8*7*6*5*4*3*2*1 3628800 2*1*8*7*6*5*4*3*2*1 80640 3628800/80640 45 プログラムの計算結果と同じ答えになるため、 このプログラムは正しいと言える。 3、感想 機械的な操作を繰り返すもの 洗濯機を考えた。 洗濯機は、グルグルと一定にまわり、しばらくしたら反対まわりをする。 そして、洗濯が終わるとピーとなる。 これは、機械的な操作を繰り返すものだと思った。 今回のレポートは時間が足りず、Aで終わってしまったのが残念でした。 また、プログラム問題だけでなく、数学の問題もあり、大変でした。 4、参考文献 西村まどか 基礎プログラミングII 第5回 http://roy/~madoka/2011/r2/05/ 神田直弥 基礎プログラミングI 第9回 http://roy/~naoya/ruby/9.html 東北公益文化大学 公益学部 公益学科 2年 小林愛実 c110081f.koeki-u.ac.jp