第 5 回 何度も呼び出そう レポート課題 氏名: 五十嵐兼一 学籍番号:c1100153 語学クラス:英語2 コース(系):社会福祉コース 1.筆記問題 A. KENICHI を ASCIIkコードになおすと、 K = 0x4B N = 0x45 I = 0x4E C = 0x49 H = 0x43 I = 0x48 となる。 それぞれを10進数に沿って数字になおしていくと、 4B = 4 11 45 = 4 5 4E = 4 14 49 = 4 9 43 = 4 3 48 = 4 8 となる。 すべて足し合わせると、 4B(11) + 45 = 4 + 4, 11 + 5 = 8, 16 = 90 90 + 4E(14) = 9 + 4, 0 + 14 = 13, 14 = DE DE(13, 14) + 49 = 13 + 4, 14 + 9 = 17, 23 = 127 127 + 43 = 1, 2 + 4, 7 + 3 = 1, 6, 10 = 16A 16A(10) + 48 = 1, 6 + 4, 10 + 8 = 1, 10, 18 = 1B2 結果 0x1B2 となる。 K = 0x4B N = 0x45 I = 0x4E C = 0x49 H = 0x43 I = 0x48 を10進数になおすと、 4B(11) = 4 * 16^1 + 11 * 16^0 = 75 45 = 4 * 16^1 + 5 * 16^0 = 69 4E(14) = 4 * 16^1 + 14 * 16^0 = 78 49 = 4 * 16^1 + 9 * 16^0 = 73 43 = 4 * 16^1 + 3 * 16^0 = 67 48 = 4 +16^1 + 8 * 16^0 = 72 75 + 69 + 78 + 73 + 67 + 72 = 434 10進数は 0d434 となる。 これを16進数になおすと、 16)434 2 ----- 16)27 11(B) --- 1 0x1B2 となる。 0d434 = 0x1B2 となるので、計算が合っていることが確認できた。 B. 朝食を準備をするときの準備手順をプログラム風に書き直します。 def food(bread, egg, hamu,) # メゾット egg を焼く hamu を焼く bread を焼く dish = bread を乗せる dish = dish に egg と hamuを乗せる end # def 終わり。food を返す。 def kokoa(kona, oyu, suger) # メゾット oyu を湧かす kona を入れる suger を入れる kokoa = kona に suger を入れる kokoa = kokoa に oyu を注ぐ end # def 終わり。kokoa を返す。 food(1枚, 1個, 2枚) # あさごはんを作るので呼び出す kokoa(スプーン2杯, 100cc, スプーン1杯) # 飲み物 を作るので呼び出す print("あさごはんできたよ\n") 2.プログラム問題 A. ◯作成したプログラム #!/usr/koeki/bin/ruby def factorial(m) if m == 1 # m が 1 だったら 1 else m * factorial(m-1) end # if に対する end end # def に対する end def combination(a, b) # 関数の式をつくる # a が候補者 b が 当選者 factorial(a) / (factorial(b) * factorial(a-b)) # mCn = m! / (n!(m-n)) end # def に対する end print("明るい選挙の候補者を選びます。\n\n") STDERR.printf("明るい選挙への候補者は何人いますか? : ") # 候補者の人数 member = gets.to_i #入力されたものを整数にする STDERR.printf("当選者を何人選びますか? : ") # 当選者の人数 choose = gets.to_i #入力されたものを整数にする printf("%d人選んだときの組み合わせは%d通りです。 \n",choose,combination(member,choose)) ◯実行結果 pan{c110015}% ./def_combination.rb [~/Ruby] 明るい選挙の候補者を選びます。 明るい選挙への候補者は何人いますか? : 8 当選者を何人選びますか? : 2 2人選んだときの組み合わせは28通りです。 ◯考察 8C2 = (8 * 7) / (2 * 1) を計算すると pan{c110015}% bc -l [~/Ruby] (8 * 7) / (2 * 1) 28.00000000000000000000 quit 結果 28 通りになるので、このプログラムは正しいといえる。 3.感想 機械的な操作を繰り返すものとして、時計、ゼンマイのおもちゃ、地球の自転な どがあると思う。 今回は理解するのに時間がかかった。また、自分の名前を手計算するとき間違え てしまい苦労した。プログラムも階乗の計算を少し忘れていたので復習にもなっ たと思う。 4.参考文献 西村まどか 基礎プログラミング II 第 5 回 「何度も呼び出そう」 http://roy/~madoka/2011/r2/05/ 神田直弥 16進数・ASCIIコード http://roy/~naoya/ruby/9.html