第 5 回 何度も呼び出そう レポート課題 氏名:齋藤陽香 学籍番号:c1100880 語学クラス:英語6 コース:政策マネジメント 1-A. ● ASCIIコード S … 0x53 = 5 3 A … 0x41 = 4 1 I … 0x49 = 4 9 T … 0x54 = 5 4 O … 0x4f = 4 15 H … 0x48 = 4 8 A … 0x41 = 4 1 R … 0x52 = 5 2 U … 0x55 = 5 5 K … 0x4b = 4 11 A … 0x41 = 4 1 一文字ずつ加算していく。 53 + 41 (1の位) 3 + 1 = 4 (10の位) 5 + 4 = 9 よって、53 + 41 = 0x94 94 + 49 (1の位) 4 + 9 = 13(d) (10の位) 9 + 4 = 13(d) よって、94 + 41 = 0xdd 1313 + 54 (1の位) 13 + 4 = 17 17 / 16 = 1 余り 1 (10の位) 13 + 5 + 1 = 19 19 / 16 = 1 余り 1 よって、1313 + 54 = 0x131 131 + 415 (1の位) 1 + 15 = 16 = 10 = a (10の位) 3 + 4 = 7 (100の位)1 よって、131 + 415 = 1716 = 0x17a 1716 + 48 (1の位) 16 + 8 = 24 24 / 16 = 1 余り 8 (10の位) 7 + 4 + 1 = 12(c) (100の位)1 よって、1716 + 48 = 1128 = 0x1c8 1128 + 41 (1の位) 1 + 8 = 9 (10の位) 12 + 4 = 16(a) (100の位)1 よって、1128 + 41 = 1169 = 0x1a9 1169 + 52 (1の位) 9 + 2 = 11 = b (10の位) 16 + 5 = 21 21 / 16 = 1 余り 5 (10の位) 1 + 1 = 2 よって、1669 + 52 = 2511 = 0x25b 2511 + 55 (1の位) 11 + 5 = 16 = 10 (10の位) 5 + 5 = 10 = a (100の位)2 よって、2511 + 55 = 21016 =0x2a10 21016 + 411 (1の位) 16 + 11 = 27 27 / 16 = 1 余り 11 11 = b (10の位) 10 + 4 + 1 = 15 = f (100の位)2 よって、21016 + 411 = 21511 = 0x2fb 21511 + 41 (1の位) 11 + 1 = 12 = c (10の位) 15 + 4 = 19 19 / 16 = 1 余り 3 (100の位) 2 + 1 = 3 よって、21511 + 41 = 3312 = 0x33c ・0x33c を 16で割る → 0x33c = 3312 3312 / 16 = 207 余りはない。 ・SAITOHARUKAの合計は S+A+I+T+O+H+A+R+U+K+A= 0x33c ● 10進数 ・S … 0x53 (1) 16**1 16**0 (2) 16 1 (3) 5 3 (4) 80 3 0x51 … 80 + 3 = 0d83 ・A … 0x41 (1) 16**1 16**0 (2) 16 1 (3) 4 1 (4) 64 1 0x41 … 64 + 1 = 65 ・I … 0x49 (1) 16**1 16**0 (2) 16 1 (3) 4 9 (4) 64 9 0x49 … 64 + 9 = 0d73 ・T … 0x54 (1) 16**1 16**0 (2) 16 1 (3) 5 4 (4) 80 4 0x54 … 80 + 4 = 0d84 ・O … 0x4f (1) 16**1 16**0 (2) 16 1 (3) 4 15 (4) 64 15 0x4f … 64 + 15 = 0d79 ・H … 0x48 (1) 16**1 16**0 (2) 16 1 (3) 4 8 (4) 64 8 0x48 … 64 + 8 = 0d72 ・A … 0x41 (1) 16**1 16**0 (2) 16 1 (3) 4 1 (4) 64 1 0x41 … 64 + 1 = 0d65 ・R … 0x52 (1) 16**1 16**0 (2) 16 1 (3) 5 2 (4) 80 2 0x52 … 80 + 2 = 0d82 ・U … 0x55 (1) 16**1 16**0 (2) 16 1 (3) 5 5 (4) 80 5 0x55 … 80 + 5 = 0d85 ・K … 0x4b (1) 16**1 16**0 (2) 16 1 (3) 4 11 (4) 64 11 0x4b … 64 + 11 = 75 ・A … 0x41 (1) 16**1 16**0 (2) 16 1 (3) 4 1 (4) 64 1 0x41 … 64 + 1 = 0d65 よって、 S + A + I + T + O + H + A + R + U + K + A = 83 + 65 + 73 + 84 + 79 + 72 + 65 + 82 + 85 + 75 + 65 = 0d828 これを16進数に直すと、 16 )828 … 12 ------ 16 ) 51 … 3 ------ 16 ) 3 … 3 ------ 0 ・0d828 を 16 で割った数 → 828 / 16 = 51 余り 12 ・合計 → S + A + I + T + O + H + A + R + U + K + A = 83 + 65 + 73 + 84 + 79 + 72 + 65 + 82 + 85 + 75 + 65 = 0d828 1-B. 出掛けるまでの行程をプログラム風に書き直します。 def go(cloth, makeup, hair ,depart) cloth を着替える makeup する hair をセットする perfect = depert end go(15分 ,15分 ,5分) print("いってきまーーーす!\n") 2-A. i.考えた設定 くじ引きを行った人の中から当たる人の組合せを求めた。 ii.作成したプログラム(def_combination.rb) #!/usr/koeki/bin/ruby print("\n") print("くじ引きをしました。\n") print("そして、くじがが当たりました。\n") print("\n") print("くじが当たる人の組合せは何通り?\n") print("\n") def factorial(winner) # 階乗の式を作成 if winner == 1 1 else winner * factorial(winner-1) end end def hit(people, winner) if people == winner # くじを引いた人数と当たった人数が同じ 1 # mCn = 1C1 = 1 ( ※ m=1 , n=1 ) else factorial(people) / (factorial(winner) * factorial(people-winner)) # 組合せの式 # mCn = m! / (n!(m-n)) end end STDERR.print("くじを引いた人: ") people = gets.to_i # くじ引きをした人数の入力を求める STDERR.print("当たった人: ") winner = gets.to_i # くじが当たる人数の入力 if winner > people # 当たった人がくじ引きをした人より多いとき print("\n") print("くじを引いた人より当たった人が多いことはないよ…。\n") print("なので、計算できません。\n") else # くじ引きをした人が当たった人より多いとき print("\n") printf("%d人当たったときは%d通りの組合せがあります。\n",winner,hit(people,winner)) # 組合せを表示 end print("\n") iii.もとにしたプログラムと変更点 授業で作成したプログラムの def_factorial.rb を基にして作成した。 変更点は、組合せを求める式を挿入した点。この式では、def_factorial.rb で 作成した階乗の計算を行うプログラムを活用した。しかし、挿入した式だけだとくじ引きをした人数と当たった人数が同じときに答えがでないので if メソッド を用いて答え が出るように指示した。 また、くじ引きをした人数と当たった人数の入力を求める指示も組み込んだ。 iv.実行結果 (その1)くじ引きをした人数 > 当たった人数 pan{c110088}% ./def_combination.rb [~/Ruby] くじ引きをしました。 そして、くじがが当たりました。 くじが当たる人の組合せは何通り? くじを引いた人: 5 当たった人: 4 4人当たったときは5通りの組合せがあります。 (その2)くじ引きをした人数 = 当たった人数 pan{c110088}% ./def_combination.rb [~/Ruby] くじ引きをしました。 そして、くじがが当たりました。 くじが当たる人の組合せは何通り? くじを引いた人: 5 当たった人: 5 5人当たったときは1通りの組合せがあります。 (その3)くじ引きをした人数 < 当たった人数 pan{c110088}% ./def_combination.rb [~/Ruby] くじ引きをしました。 そして、くじがが当たりました。 くじが当たる人の組合せは何通り? くじを引いた人: 5 当たった人: 6 くじを引いた人より当たった人が多いことはないよ…。 なので、計算できません。 v.考察 実行結果(その1)を考える。 確かめ算をしてみると、 pan{c110088}% bc -l [~/Ruby] 5*4*3*2*1/(4*3*2*1*1) 5.00000000000000000000 quit プログラムででた答えと確かめ算の答えは一致する。 実行結果(その2)を考える。 実行結果(その3)を考える。 確かめ算をすると、 pan{c110088}% bc -l [~/Ruby] 5*4*3*2*1/(6*5*4*3*2*1*-1) -.16666666666666666666 quit となる。答えがマイナスになるため、組合せが出来ないことがわかる。 以上の理由からこのプログラムは正しい、といえる。 3.感想 身近にある機械的な操作を繰り返すものは自動ドア、エスカレーターだと考えた。 自動ドアはセンサーに反応する度に開閉を繰り返す。また、エスカレーターはひ たすら階段が動いている。 そのため、この二つは機械的な操作を繰り返すものであるといえる。 4.参考文献 ・神田先生のページ(値の型変換・演算子) http://roy/~naoya/ruby/3.html ・神田先生のページ(16進数・ASCIIコード) http://roy/~naoya/ruby/9.html ・共同学習者 菊池綾、畠山貴衣、伊藤桜子 ----------------------------------- 東北公益文科大学 公益学部 公益学科 2年 齋藤陽香 c110088@f.koeki-u.ac.jp