第 5 回 何度も呼び出そう レポート課題 氏名: 兵藤 理沙 学籍番号: c1101721 語学クラス:英語 6 コース(系): 政策マネジメント 1.筆記問題 A. 第3回の時に調べたASCIIコード H =0x48 y =0x79 o =0x6f d =0x64 o =0x6f R =0x52 i =0x69 s =0x73 a =0x61 16進数を10進数に直すと 16進数 10進数 H =0x48 72 y =0x79 121 o =0x6f 111 d =0x64 100 o =0x6f 111 R =0x52 82 i =0x69 105 s =0x73 115 a =0x61 97 足すと 72 +121 +111 +100 +111 +82 +105 +115 +97 = 914 10進数を16進数へ変換 16 ) 914 ...2 ----- 16 ) 57 ...9 ----- 16 ) 3 ...3 ----- 0 914 = 0x392 16進数を10進数へ変換 16**2 = 256 , 256 * 3 = 768 16**1 = 16 , 16 * 9 = 144 16**0 = 1 , 1 * 2 = 2 768 +144 + 2 = 0d914 (1) 16進数を10進数に直し、足すと914になった。 (2) 10進数の914を16進数に直すと0x392となった。 (3) 16進数の0x392を10進数に直すと0d914となった。 式にすると (1) 72+ 121+ .....+115 +97 =914 (2) 914 = 0x392 (3) 0x392 = 0d914 なので答えが一致していると言える。 B. 毎日の朝御飯をプログラム風に書き直します。 def asagohann(abura, tamago, shouyu) aburaを入れる tamagoを割る medamayaki = aburaとtamagoを入れる medamayaki = medamayakiにshouyuをかける end # medamayakiを返す medamayaki(10g, 1個, 5g) # 朝御飯を作るので呼び出す print("目玉焼き完成。\n") 2,プログラム問題 A. (1)考えた設定 映画へ招待される懸賞に応募した人数と、招待された人の組合せを求めるプログ ラミングを作成しました。 (2)作成したプログラム #!/usr/koeki/bin/ruby def movie(x) # movieという関数を定義する、仮引数は x if x == 1 # x = 1の時 1 # 1と表示する else x * movie(x-1) # x = 1以外の時、xから 1を引く end end def invite(oubo, shoutai) #inviteと関数を定義し、仮引数をouboとshoutaiする if oubo == shoutai # ouboとshoutaiが同じ場合は 1 # 1通りだけなので 1と表示する else movie(oubo)/(movie(shoutai) * movie(oubo-shoutai)) # 何通りかを求める為に nCr = n!/r!(n-r)! の式を使った end end print"応募者から、映画に招待される組合せを求めます。\n" STDERR.printf("応募者は何人ですか?\n") oubosha = gets.to_i # getsでキーボードから入力された文字列を表示する # to_iで整数で表示する STDERR.printf("招待されたのは何人ですか?\n") shoutaisha = gets.to_i # getsでキーボードから入力された文字列を表示する # to_iで整数で表示する if oubosha < shoutaisha # 招待者の方が多いと計算出来ないので print("招待者のほうが多いので入力し直して下さい。\n") # やり直してもらう else printf("応募者%d人から招待される%d人が選ばれる組合せは%d通りです。\n", oubosha, shoutaisha, invite(oubosha, shoutaisha)) # ouboshaにoubosha = gets.to_iで入力した数字が表示される # shoutaishaにshoutaisha = gets.to_iで入力した数字が表示される # invite(oubosha, shoutaisha)に nCr = n!/r!(n-r)! の式を使った答えが表示される end (3)もとにしたプログラムからの変更点 nCr = n!/r!(n-r)!の式は2010年度の第 5回 レポートの講評のよかったレポート 1から参考にしました。 基礎プログラミング II 第 4 回「繰り返しは引っ張りだそう」の3、「どんな関 数がきてもだいじょうぶ」の関数f(x)を参考にしました。 基礎プログラミング II 第 5 回「何度も呼び出そう」の講義ノートを参考にし ました。 (4)プログラムを実行した結果画面 (a) 応募者が10人で、招待者が2人のときの組合せ。 pan{c110172}% ./def_combination.rb [~/Ruby] 応募者から、映画に招待される組合せを求めます。 応募者は何人ですか? 10 招待されたのは何人ですか? 2 応募者10人から招待される2人が選ばれる組合せは45通りです。 (b) 応募者が20人で、招待者が5人のときの組合せ。 pan{c110172}% ./def_combination.rb [~/Ruby] 応募者から、映画に招待される組合せを求めます。 応募者は何人ですか? 20 招待されたのは何人ですか? 5 応募者20人から招待される5人が選ばれる組合せは15504通りです。 (c) 応募者が30人で、招待者が58人のときの組合せ。 pan{c110172}% ./def_combination.rb [~/Ruby] 応募者から、映画に招待される組合せを求めます。 応募者は何人ですか? 30 招待されたのは何人ですか? 58 招待者のほうが多いので入力し直して下さい。 (d) 応募者が10人で、招待者が17人のときの組合せ。 pan{c110172}% ./def_combination.rb [~/Ruby] 応募者から、映画に招待される組合せを求めます。 応募者は何人ですか? 10 招待されたのは何人ですか? 17 招待者のほうが多いので入力し直して下さい。 (5)考察 計算が正しいかbc -lで計算した。 組合せの公式 nCr = nPr / r! = n(n-1)(n-2)……(n-r+1) / r(r-1)(r-2)…… 1 = n! / r!(n-r)! プログラム実行結果の(a) 10 C 2 = pan{c110172}% bc -l [~/Ruby] 10 * 9 / 2 * 1 45.00000000000000000000 45通りとなる プログラム実行結果の(b) 20 C 5 = pan{c110172}% bc -l [~/Ruby] 20 * 19 * 18 * 17 * 16 / 120 15504.00000000000000000000 15504通りとなる 計算と一致しているので、プログラミングが正しく実行されているといえる。 (6)参考文献 http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/04/ 西村まどか 基礎プログラミング II 第 4 回 「繰り返しは引っ張りだそう」 http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/05/ 西村まどか 基礎プログラミング II 第 5 回 「何度も呼び出そう」 http://roy.e.koeki-u.ac.jp/~madoka/2011/rpt/report.html 西村まどか 基礎プログラミング II 第 1 回 「前期の復習」 プログラミングのレポートに 必要な項目 http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/05/rpt/c108203.txt 吉田瑞恵 第 5 回 基礎プログラミング II レポート課題 http://roy.e.koeki-u.ac.jp/~naoya/ruby/9.html 神田直弥 基礎プログラミング I 第 9 回 16進数・ASCIIコード http://naop.jp/kousiki/a/a_3.html 作者はわかりませんでした 公式集 [数学A個数の処理、確率] 協同学習者: 吉住貴則さん 3.感想 車のブレーキやアクセルは足でペダルを踏むと命令が伝わる。 足を離すと命令が伝わらなくなる。 踏むか離すかだけによって運動が変わるので機械的に繰り返していると言える。