第 5 回 何度も呼び出そう レポート課題 氏名:吉田 栞 学籍番号:c1101997 語学クラス:英語クラス6 コース(系):政策マネジメントコース 1.筆記問題 A 吉田栞 = Yoshida Shiori 第3回レポートより、16進数に直すと Y = 0x59 S = 0x53 o = 0x6F h = 0x68 s = 0x73 i = 0x69 h = 0x68 o = 0x6F i = 0x69 r = 0x72 d = 0x64 i = 0x69 a = 0x61 となります。 (1)16進数で足し合わせたの場合 ここでは、足して16を超えた場合、1を繰り上げます 5 9 + 6 15 ---------- 12 8 + 7 3 ---------- 1 3 11 + 6 8 ---------- 1 10 3 + 6 9 ---------- 2 0 12 + 6 4 ---------- 2 7 0 + 6 1 ---------- 2 13 1 + 5 3 ---------- 3 2 4 + 6 8 ---------- 3 8 12 + 6 9 ---------- 3 15 5 + 6 15 ---------- 4 6 4 + 7 2 ---------- 4 13 6 + 6 9 ---------- 5 3 15 よって、0x5315となります。 (2)10進数で足し合わせた場合 Y → 5 × 16の1乗 = 80 9 × 16の0乗 = 9 80 + 9 = 89 o → 6 × 16の1乗 = 96 15 × 16の0乗 = 15 96 + 15 = 111 s → 7 × 16の1乗 = 112 3 × 16の0乗 = 3 112 + 3 = 115 h → 6 × 16の1乗 = 96 8 × 16の0乗 = 8 96 + 8 = 104 i → 6 × 16の1乗 = 96 9 × 16の0乗 = 9 96 + 9 = 105 d → 6 × 16の1乗 = 96 4 × 16の0乗 = 4 96 + 4 = 100 a → 6 × 16の1乗 = 96 1 × 16の0乗 = 1 96 + 1 = 97 S → 5 × 16の1乗 = 80 3 × 16の0乗 = 3 80 + 3 = 83 h → 6 × 16の1乗 = 96 8 × 16の0乗 = 8 96 + 8 = 104 i → 6 × 16の1乗 = 96 9 × 16の0乗 = 9 96 + 9 = 105 o → 6 × 16の1乗 = 96 15 × 16の0乗 = 15 96 + 15 = 111 r → 7 × 16の1乗 = 112 2 × 16の0乗 = 2 112 + 2 = 114 i → 6 × 16の1乗 = 96 9 × 16の0乗 = 9 96 + 9 = 105 これらを全て足し合わせると、 105 + 111 + 115 + 104 + 105 + 100 + 97 + 83 + 104 + 105 + 111 + 114 +105 = 1343 1343 ÷ 16 = 83余り15 83 ÷ 16 = 5余り3 5 ÷ 16 = 0余り5 これを逆からにすると0d5315となり、 よって、0x5315 = 0d5315 となり答えが一致します。 B 顔を洗う行動をプログラム風に書きました。 def sengan( sekken,susugi ,taoru) 泡立てネットに sekken をこすりつける 顔を洗ったら susugi をする kao = taoruで拭く end sengan(5g ,40秒 ,30秒) # 顔を洗うため呼び出す print("やっと目が覚めました\n") 2.プログラム問題 A (1)考えた設定 生徒の中から委員長を何人か選び、何通りあるか求めるプログラムを考えました。 (2)プログラム #!/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 kumiawase(a, b) factorial(a) / (factorial(b) * factorial(a-b)) # mCn = m! / (n!(m-n))の計算 end # def の end print("生徒の中から、委員長を選びます。\n") print("\n") print("委員長に選ばれる生徒の組み合わせは何通りですか?\n") print("\n") STDERR.print("生徒数(人): ") ninzu = gets.to_i # 入力された文字列を整数になおし、変数ninzuの中に代入する STDERR.print("選ばれる生徒数(人): ") seito = gets.to_i printf("%d人選んだときの組み合わせは%d通りです。\n",seito , kumiawase(ninzu,seito)) (3)実行結果 pan{c110199}% ./def_combination.rb [~/Ruby] 生徒の中から、委員長を選びます。 委員長に選ばれる生徒の組み合わせは何通りですか? 生徒数(人): 20 選ばれる生徒数(人): 2 2人選んだときの組み合わせは190通りです。 pan{c110199}% ./def_combination.rb [~/Ruby] 生徒の中から、委員長を選びます。 委員長に選ばれる生徒の組み合わせは何通りですか? 生徒数(人): 20 選ばれる生徒数(人): 3 3人選んだときの組み合わせは1140通りです。 (4)考察 確かめ算を行ったところ pan{c110199}% bc -l [~/Ruby] (20*19)/(2*1) 190.00000000000000000000 pan{c110199}% bc -l [~/Ruby] (20*19*18)/(3*2*1) 1140.00000000000000000000 となり、結果が同じであることからプログラムは正しいといえる。 3.感想 機械的な操作を繰り返すものとして、エスカレーターやオルゴールがあると思い ました。 今回の授業を忌引で休んでしまったので、内容を理解するのが本当に大変でした。 友達にアドバイスを貰いながら、なんとかAは出来ましたがBまで挑戦するには自 分の理解が追いつきませんでした。 改めてBは時間を作って出来るようにしたいと思います。 4.参考文献 西村 まどか 基礎プログラミング II 第 5 回 「何度も呼び出そう」 http://roy/~madoka/2011/r2/05/ 5.アドバイス 照井 さつき