第 5 回 何度も呼び出そう レポート課題 氏名:名和 大翔 学籍番号:C1101678 語学クラス:英語6 コース(系):政策マネジメント 1.筆記問題 A.自分の名前のASCIIコードを全て足し合わせる。 16進数の場合 N = 0x4E a = 0x61 w = 0x77 a = 0x61 H = 0x48 i = 0x69 r = 0x72 o = 0x6F h = 0x68 a = 0x61 位をわけて足していくと 4 + 6 + 7 + 6 + 4 + 6 + 7 + 6 + 6 + 6 = 58 E(14) + 1 + 7 + 1 + 8 + 9 + 2 + F(15) + 8 + 1 = 66 58 = 0x3a0 , 66 = 0x42 0x3a0 + 0x42 = 0x3e2 となる。 10進数の場合 N = 0x4E = 16*4 + 1*E(14) = 64 + 14 = 78 a = 0x61 = 16*6 + 1*1 = 96 + 1 = 97 w = 0x77 = 16*7 + 1*7 = 112 + 7 = 119 a = 0x61 = 16*6 + 1*1 = 96 + 1 = 97 H = 0x48 = 16*4 + 1*8 = 64 + 8 = 72 i = 0x69 = 16*6 + 1*9 = 96 + 9 = 105 r = 0x72 = 16*7 + 1*2 = 112 + 2 = 114 o = 0x6F = 16*6 + 1*F(15) = 96 + 15 = 111 h = 0x68 = 16*6 + 1*6 = 96 + 6 = 102 a = 0x61 = 16*6 + 1*1 = 96 + 1 = 97 これらを全部足すと0d994となる。 0d994を16でわると 994 / 16 = 62 … 2 62 / 16 = 3 … 14(e) 3 / 16 = 0 … 3 あまりを下から並べると 3e2 である。 0x3e2を10進数に直すと 256 * 3 + 16 * e(14) + 1 * 2 = 994 994を16でわり、あまりを下から並べると 3e2 である。 よって、0x3e2 = 0d994となり、どちらで計算しても一致することがわかる。 B.アルバイトにいく準備の習慣をプログラミング風に書き直します。 def bite(clothes , hair , teeth) clothes を着替える hair を整える mirror = cloths と hair を確認する mirror = teeth を磨く end #返すものは mirror jyunbi("1分,5分,3分") print("よし!いってきまーす!\n") 2.Aをつくりました。 1.考えた設定 部活動の部員からレギュラーを選ぶ時の組合せを求めるプログラムをつくりま した。 2.作成したプログラム #!/usr/koeki/bin/ruby def factorial(m) if m == 1 1 else m * factorial(m-1) end end def combination(member,regular) factorial(member)/(factorial(regular)*factorial(member-regular)) end print("部活動の部員からレギュラーを選びます。\n") print("レギュラーに選ばれる人の組み合わせを求めます。\n") STDERR.print("全部員数は何人ですか?:") member = gets.to_i STDERR.print("レギュラーを何人選びますか?:") regular = gets.to_i printf("%d 人が全部員のときに %d人のレギュラーを選んだときの組合せは、%d 通りです。\n",member,regular,combination(member,regular)) 3.もとにしたプログラムからの変更点 授業で作成した def_factorial.rb を基にした。これに def combination(member,regular) と factorial(member)/(factorial(regular)*factorial(member-regular)) を 加えて組合せを求めるようにした。 4.実行画面 pan{c110167}% ./def_combination.rb [~/Ruby] 部活動の部員からレギュラーを選びます。 レギュラーに選ばれる人の組み合わせを求めます。 全部員数は何人ですか?:50 レギュラーを何人選びますか?:5 50 人が全部員のときに 5人のレギュラーを選んだときの組合せは、2118760通りです。 5.考察 プログラムが正しく起動しているか確かめるため、確かめ算を行う。 実行結果を数式で表すと 50C5 = 50 * 49 * 48 * 47 * 46 / 5 * 4 * 3 * 2 * 1 である。 ktermでbc -l を入力して確かめ算を行う。 pan{NAWA Hiroha}% bc -l [~/Ruby] ( 50 * 49 * 48 * 47 * 46 )/(5 * 4 * 3 * 2 * 1 ) 2118760.00000000000000000000 よって、実行結果と確かめ算の値が同じなのでこのプログラムは正しい。 3.感想 機械的な操作を繰り返すものとして、考えられるのは、お金をいれると音 が鳴る貯金箱や目覚し時計のアラームである。 4.参考文献 http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/05/ 西村まどか先生 基礎プログラミング II 第 5 回 「何度も呼び出そう」 #作成したプログラム def_combination.rb を添付します。