第 5 回 何度も呼び出そう レポート課題 氏名:下妻 匡哉 学籍番号:c1101164 語学クラス:英語(6) コース(系):地域共創コース 1-A.S = 0x53 h = 0x68 i = 0x69 m = 0x6d o = 0x6f t = 0x74 s = 0x73 u = 0x75 m = 0x6d a = 0x61 M = 0x4d a = 0x61 s = 0x73 a = 0x61 y = 0x79 a = 0x61 16進数の足し算 0x53 + 0x68 + 0x69 + 0x6d + 0x6f + 0x74 + 0x73 +0x75 + 0x6d + 0x61 + 0x4d + 0x61 + 0x73 + 0x61 + 0x79 + 0x61 =0x686 以下16進数の筆算 53 bb 124 191 200 274 2e7 35c 3c9 42a 477 +68 +69 + 6d + 6f + 74 + 73 + 75 + 6d + 61 + 4d + 61 --- --- ---- ---- ---- ---- ---- ---- ---- ---- ---- bb 124 191 200 274 2e7 35c 3c9 42a 477 4d8 4d8 54b 5ac 625 + 73 + 61 + 79 + 61 ---- ---- ---- ---- 54b 5ac 625 686 A.0x686 ------- 16進数を10進数に変換して足し算 [1] |16^1|16^0| |16^1|16^0| |16^1|16^0| |16^1|16^0 | |16^1|16^0 | [2] | 16 | 1 | | 16 | 1 | | 16 | 1 | | 16 | 1 | | 16 | 1 | [3] | 5 | 3 | | 6 | 8 | | 6 | 9 | | 6 |d(13)| | 6 |f(15)| [4] | 80 | 3 | | 96 | 8 | | 96 | 9 | | 96 | 13 | | 96 | 15 | -------------------------------------------------------------------- |16^1|16^0| |16^1|16^0| |16^1|16^0| |16^1|16^0 | |16^1|16^0 | | 16 | 1 | | 16 | 1 | | 16 | 1 | | 16 | 1 | | 16 | 1 | | 7 | 4 | | 7 | 3 | | 7 | 5 | | 6 |d(13)| | 6 | 1 | |112 | 4 | |112 | 3 | |112 | 5 | | 96 | 13 | | 96 | 1 | -------------------------------------------------------------------- |16^1|16^0 | |16^1|16^0| |16^1|16^0 | |16^1|16^0 | | 16 | 1 | | 16 | 1 | | 16 | 1 | | 16 | 1 | | 4 |d(13)| | 6 | 1 | | 7 | 3 | | 6 | 1 | | 64 | 13 | | 96 | 1 | |112 | 3 | | 96 | 1 | -------------------------------------------------------------------- |16^1|16^0| |16^1|16^0 | | 16 | 1 | | 16 | 1 | | 7 | 9 | | 6 | 1 | |112 | 9 | | 96 | 1 | 0x53 + 0x68 + 0x69 + 0x6d + 0x6f + 0x74 + 0x73 +0x75 + 0x6d + 0x61 =0b{(80+3) + (96+8) + (96+9) + (96+13) + (96+15) + (112+4) + (112+3) + (112+5) + (96+13) + (96+1)} =0b(83 + 104 + 105 + 109 + 111 + 116 + 115 + 117 + 109 + 97) =0b1066 0x4d + 0x61 + 0x73 + 0x61 + 0x79 + 0x61 =0b{(64+13) + (96+1) + (112+3) + (96+1) + (112+9) + (96+1)} =0b(77 + 97 + 115 + 97 + 121 + 97) =0b604 0b1065 + 0b604 = 0b1670 A.0b1670 -------- 1670を16進数にするために、16で割ってみる。 16)1670 ----- 16) 104 6 ----- 16) 6 8 ----- 0 6 下(逆)から読むと 686 、よって 0x686 になる。 0x686 を10進数にする。 |16^2|16^1|16^0| | 256| 16 | 1 | | 6| 8 | 6 | |1536|128 | 6 | つまり、0x686 = 1536 + 128 + 6 = 1670 となる。 以上から、16進数と10進数で計算した結果が同じで、0x686 = 0b1670 となり、 計算が一致することが確認できた。 1-B. def chidimi(moto, nira, tare) nira を切る moto に混ぜる bottle = moto + nira frying pan = bottle frying pan = dish end chidimi(1すくい, 10切れ, 1さじ) # 完成させるので呼び出す print("あつあつのチヂミをどうぞ\n") -------------------------------------------------------------------------------- 2.プログラミング問題 A. (1)考えた設定 ある和太鼓チームが公演することになった。その公演当日に参加できる人数と 公演に出るメンバーの人数を入力して、その組み合わせを計算するプログラム def_combination.rbを作成した。 (2)作成したプログラム #!/usr/koeki/bin/ruby def japandrum(a)# 関数japandrumとする。引数はallのa if a == 1 # aが1のとき、 1 # 1を返す。 else a * japandrum(a-1) # aが1以外のとき、aより一つ少ない数字をかける end end def formation(all,choose) # 関数formationとする if all==choose # all,chooseが同じ数の場合 1 # 1となる else japandrum(all)/(japandrum(choose) * japandrum(all-choose)) # その他の場合 # japandrum に入れられた数を aCr = a!/r!(a-r)!の公式を用いて計算する # 今回、aはall,rはchooseとなる end end STDERR.printf("打ち手は何人いますか?:") uchite = gets.to_i # 入力された値を整数にする STDERR.printf("メンバーは何人選びますか?:") member = gets.to_i #同上 if uchite < member # 打ち手より選ぶメンバーが多い場合 print("計算できません。最初からやり直して正しい数値を再入力して下さい。\n") # エラーメッセージを表示 else # 打ち手の方がメンバーより多い場合 printf("%d人から%d人選ぶときの組み合わせは、%d通りです。\n",uchite, member, formation(uchite,member)) # 上記のdef関数で計算された結果を表示 end (3)実行結果 pan{c110116}% ./def_combination.rb [~/Ruby] 打ち手は何人いますか?:10 メンバーは何人選びますか?:7 10人から7人選ぶときの組み合わせは、120通りです。 pan{c110116}% ./def_combination.rb [~/Ruby] 打ち手は何人いますか?:5 メンバーは何人選びますか?:8 計算できません。最初からやり直して正しい数値を再入力して下さい。 pan{c110116}% ./def_combination.rb [~/Ruby] 打ち手は何人いますか?:8 メンバーは何人選びますか?:8 8人から8人選ぶときの組み合わせは、1通りです。 (4)考察 pan{c110116}% ./def_combination.rb [~/Ruby] 打ち手は何人いますか?:10 メンバーは何人選びますか?:7 10人から7人選ぶときの組み合わせは、120通りです。 このとき、10人から7人を選ぶので、10C7となる。 aCr = a!/r!(a-r)!の公式を用いて pan{c110116}% bc -l [~] (10*9*8)/(3*2*1) 120.00000000000000000000 よって、120通りであることが確認できる。 pan{c110116}% ./def_combination.rb [~/Ruby] 打ち手は何人いますか?:5 メンバーは何人選びますか?:8 計算できません。最初からやり直して正しい数値を再入力して下さい。 これは、5人から8人を選ぶことはできないので、計算できない。 pan{c110116}% ./def_combination.rb [~/Ruby] 打ち手は何人いますか?:8 メンバーは何人選びますか?:8 8人から8人選ぶときの組み合わせは、1通りです。 このときは、8人から8人を選ぶので、8C8となる。 aCr = a!/r!(a-r)!の公式を用いて pan{c110116}% bc -l [~] (8*7*6*5*4*3*2*1)/(8*7*6*5*4*3*2*1) 1.00000000000000000000 よって、1通りであることが確認できる。 以上から、正しく計算が行われていることが確認できる。 -------------------------------------------------------------------------------- 3.感想 機械的に繰り返すものについて、自動ドアを思いついた。 どこの自動ドアでもそうだが、センサーで何かを捉えると開く。しばらくし て閉まる。 センサーで何も捉えなかったり、電源が切られていると開かない。 これらは、稼動している間、同じ行動を繰り返している、と言えるのではないだ ろうか。 今回のレポートは、本気の数学の知識を用いないと完成を見なかった。そこで、 高校時代に使った数学のテキストを家から引っ張りだした。意外な形で活用と復 習ができたので、良い機会になったと思う。 -------------------------------------------------------------------------------- 4.参考文献 http://www.geocities.co.jp/SiliconValley-SanJose/7769/hard/keisan.html 2進数と16進数の計算 http://roy/~naoya/ruby/9.html 神田 直弥 基礎プログラミングI 第 9 回 16進数・ASCIIコード http://roy/~madoka/2010/r2/05/05_07_theme_05_factorial.html 西村 まどか 基礎プログラミングII 第 5 回 「何度も呼び出そう」 階乗計算 http://roy/~madoka/2010/r2/05/rpt/crt.html 西村 まどか 基礎プログラミングII(2010) 第 5 回 「何度も呼び出そう」 http://roy/~madoka/2011/prog/def_firefly.rb 西村 まどか 基礎プログラミングII 第 5 回 「何度も呼び出そう」 ほたるの数と米の収穫量 http://roy/~madoka/2011/r2/05/r2_05_01_theme_01_diet.html 西村 まどか 基礎プログラミングII 第 5 回 「何度も呼び出そう」 脱メタボリック計画 http://roy/~madoka/2011/r2/05/r2_05_02_theme_02_deccelate.html 西村 まどか 基礎プログラミングII 第 5 回 「何度も呼び出そう」 体力があがったら http://roy/~madoka/2011/r2/05/r2_05_05_theme_03_param.html 西村 まどか 基礎プログラミングII 第 5 回 「何度も呼び出そう」 シミュレーションで考え ること http://www.kwansei.ac.jp/hs/z90010/sugaku1/kakuritu/combi1/combi1.htm 組合せ(1) 共同学習者:菅原 彩花 ------------------------- 東北公益文科大学 公益学部 2年 下妻 匡哉 C110116@f.koeki-u.ac.jp -------------------------