ファイルの添付を忘れてしまったため、ファイルを添付してから送信しなおしました。 第 6 回 目的に応じて使ってみよう レポート課題 氏名: 土門千里 学籍番号: C1111122 語学クラス: 英語5 コース: 政策マネジメント 1. 筆記問題 A. 配列を全て表すと以下のようになる。 alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n", "o","p","q","r","s","t","u","v","w","x","y","z"] 次に、alphabet[22] と alphabet[-1] の答えを上記の配列を参考にして導き出 す。ここで注意することは、配列の番号は 1 からではなく、0 から始まってい るという点である。アルファベットと番号の組み合わせは以下のようになる。 a = 0 k = 10 u = 20 b = 1 l = 11 v = 21 c = 2 m = 12 w = 22 d = 3 n = 13 x = 23 e = 4 o = 14 y = 24 f = 5 p = 15 z = 25 g = 6 q = 16 h = 7 r = 17 i = 8 s = 18 j = 9 t = 19 上記の組み合わせから、alphabet[22] は w、alphabet[-1] は組み合わせが存在 しないということが分かる。この場合は、nil(無効、空の情報) を使用する。 以上の組み合わせから、 alphabet[22] = w alphabet[-1] = nil(無効、空の情報) という答えが導き出される。 B. 平均と標準偏差の求め方を、具体例を用いて記すことにした。 (例) あるクラスに A君、B君、C君、D君 が居る。 彼等の身長はそれぞれ 160cm、157cm、173cm、168cm である。 彼等の身長の平均値と、標準偏差を求めたい。 1-1) 平均の求め方 まず、ここで使用するデータは [160、157、173、168] の 4 つである。 平均値を求めるためには、まずはじめに全てのデータを足していく。 160 + 157 + 173 + 168 = 658 すると、彼等の身長のデータを足した合計は 658 であるということが分かる。 次に、この合計をデータ数で割る。データ数と言うのは、平均を求める際に対象 となったデータの数である。ここでは、A君、B君、C君、D君 の 4 人が対象となっ ているため、データ数は 4 であることが分かる。 658 / 4 = 164.5 よって、A君、B君、C君、D君 の平均身長は 164.5cm であることがわかる。 1-2) 考察 ・bc -l による計算 pan{DOMON Chisato}% bc -l [~] 160 + 157 + 173 + 168 658 658 / 4 164.50000000000000000000 quit bc -l による計算結果と答えが同じであったため、計算結果は正しいといえる。 2-1) 標準偏差の求め方 次に、A君、B君、C君、D君 の身長の標準偏差を求める。標準偏差の求め方は、 標準偏差 = √(測定値 - 平均値)**2 の和 / データ数 である。 測定値とは、A君、B君、C君、D君 のそれぞれの身長 [160、157、173、168] の ことであり、平均値は上の計算で出た 164.5 cm のことである。まずはじめに、 A君、B君、C君、D君 のそれぞれの身長から平均値 164.5cm を引く。 A君 160 - 164.5 = -4.5 B君 157 - 164.5 = -7.5 C君 173 - 164.5 = 8.5 D君 168 - 164.5 = 3.5 この計算により、それぞれの平均値からのズレが [-4.5、-7.5、8.5、3.5] であ ることが分かる。ちなみに、この平均値からのズレを全て足すと、0 になる。 次に、それぞれの平均値からのズレを 2 乗して足し、合計をデータ数で割る。 A君 -4.5 * 2 乗 = 20.25 B君 -7.5 * 2 乗 = 56.25 C君 8.5 * 2 乗 = 72.25 D君 3.5 * 2 乗 = 12.25 20.25 + 56.25 + 72.25 + 12.25 = 161.0 161.0 / 4 = 40.25 最後に、この計算では数字を 2 乗して加えたものであるため、元に戻すために 平均の平方根を取らなければならない。すると答えは、 √40.25 = 6.34 となる。 よって、A君、B君、C君、D君 の標準偏差は 6.34 である。 2-2) 考察 ・bc -l による計算 pan{c111112}% bc -l [~] -4.5 * -4.5 20.25 -7.5 * -7.5 56.25 8.5 * 8.5 72.25 3.5 * 3.5 12.25 20.25 + 56.25 + 72.25 + 12.25 161.00 161.0 / 4 40.25000000000000000000 6.3443 * 6.3443 40.25014249 quit bc -l による計算結果と答えが同じであったため、計算結果は正しいといえる。 2. プログラム問題 A と B を選択した。 A a) 考えた設定 入力されたテストの点数というデータから平均点と分散を計算するプログラム。 b) 参考にしたプログラムからの変更点 def_ary_movie.rb のプログラムを参考にして制作した。参考にしたプログラム からの変更点としては、分散も計算できるように設定したところである。 c) 作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp def average(test) # test は数値をしまう配列 sum = 0.0 for mark in test # test の中の mark について sum += mark # 全員の点数を足していく end # for の終了 sum / test.length # 全員のテストの合計を test のデータ数で割る end # def の終了 def bunsan(test) # test は数値をしまう配列 sum = 0.0 for mark in test # test の中の mark について sum += (mark - average(test))** 2 # 全員の点数を足していく # 分散 = 変数から期待値を引いて 2 乗し、それを足していったもの end sum / test.length # 全員のテストの合計を test のデータ数で割る end # def の終了 score = Array.new # からっぽの配列 score を作る print("テストの平均点を計算します。\n") print("得点の入力を終了するには Ctrl-D を入力して下さい。\n") print("\n") sleep 2 # 2 秒後にプログラムが動く while true # 何度も繰り返す STDERR.print("得点: ") point = gets # 入力されたデータを取り込む if point == nil # 入力を止める場合には Ctrl-D を打つ break # 入力を止める end # if の終了 score << point.to_i end # while の終了 print("\n") print("\n") printf("テストの平均点は %3.1f 点でした。\n", average(score)) # 平均点の表示 printf("テストの分散は %3.1f でした。\n", bunsan(score)) # 分散の表示 d) プログラム実行結果 1) テストの平均点が偶数の場合 pan{c111112}% ./def_statistic.rb [~/Ruby] テストの平均点を計算します。 得点の入力を終了するには Ctrl-D を入力して下さい。 得点: 30 得点: 40 得点: 50 得点: 60 得点: 70 得点: ^D テストの平均点は 50.0 点でした。 テストの分散は 200.0 でした。 2) テストの平均点が奇数の場合 pan{c111112}% ./def_statistic.rb [~/Ruby] テストの平均点を計算します。 得点の入力を終了するには Ctrl-D を入力して下さい。 得点: 30 得点: 40 得点: 50 得点: 60 得点: 70 得点: 20 得点: ^D テストの平均点は 45.0 点でした。 テストの分散は 291.7 でした。 3) テストの得点が全て同じであった場合 pan{c111112}% ./def_statistic.rb [~/Ruby] テストの平均点を計算します。 得点の入力を終了するには Ctrl-D を入力して下さい。 得点: 50 得点: 50 得点: 50 得点: 50 得点: 50 得点: ^D テストの平均点は 50.0 点でした。 テストの分散は 0.0 でした。 e) 考察 1) テストの平均点が偶数の場合 ・bc -l による計算結果 (30 + 40 + 50 + 60 + 70) /5 # 平均点の計算 50.00000000000000000000 30 - 50 # 変数(それぞれのテストの得点) - 平均点 -20 40 - 50 -10 50 - 50 0 60 - 50 10 70 - 50 20 -20 * -20 # (変数 - 平均値) の 2 乗 400 -10 * -10 100 0 * 0 0 10 * 10 100 20 * 20 400 (400 + 100 + 0 + 100 + 400) / 5 # (変数 - 平均値) の 2 乗 の和 / データ数 200.00000000000000000000 quit bc -l による計算結果とプログラムによる平均、分散の計算結果が同じであった ため、プログラムは正しく動いているといえる。 2) テストの平均点が奇数の場合 ・bc -l による計算結果 pan{c111112}% bc -l [~/Ruby] (30 + 40 + 50 + 60 + 70 + 20) / 6 # 平均点の計算 45.00000000000000000000 30 - 45 # 変数(それぞれのテストの得点) - 平均点 -15 40 - 45 -5 50 - 45 5 60 - 45 15 70 - 45 25 20 - 45 -25 -15 * -15 # (変数 - 平均値) の 2 乗 225 -5 * -5 25 5 * 5 25 15 * 15 225 25 * 25 625 -25 * -25 625 (225 + 25 + 25 + 225 + 625 + 625) / 6 # (変数 - 平均値) の 2 乗 の和 / データ数 291.66666666666666666666 quit bc -l による計算結果とプログラムによる平均、分散の計算結果が同じであった ため、プログラムは正しく動いているといえる。 3) テストの得点が全て同じであった場合 ・bc -l による計算結果 pan{c111112}% bc -l [~/Ruby] (50 + 50 + 50 + 50 + 50) / 5 # 平均点の計算 50.00000000000000000000 50 - 05 # 変数(それぞれのテストの得点) - 平均点 0 50 - 50 0 50 - 50 0 50 - 50 0 50 - 50 0 0 * 0 # (変数 - 平均値) の 2 乗 0 0 * 0 0 0 * 0 0 0 * 0 0 0 * 0 0 (0 + 0 + 0 + 0 + 0) / 5 # (変数 - 平均値) の 2 乗 の和 / データ数 0 quit bc -l による計算結果とプログラムによる平均、分散の計算結果が同じであった ため、プログラムは正しく動いているといえる。 B. a) 考えた設定 友人からもらった花の種を育てるプログラム。育て方によって咲く花の種類が違っ てくる。 b) 参考にしたプログラムからの変更点 def_rubiocci.rb を参考にして作成した。参考にしたプログラムからの変更点は、 育て方によって変化するバリエーションを増やしたところである。 c) 作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp def move(flower) # 花の栄養度がどれくらいであるのかを表示 flower.times do # 世話した度に表示する print("*") # * で栄養度を表示する end # times do の終了 sleep 1 # 1 秒後に次の文章を表示 end # def の終了 def care(seeds) # 何度も表示させる STDERR.print("\n") STDERR.print("[1]水を与える\n") # 選択肢 1 STDERR.print("[2]栄養を与える\n") # 選択肢 2 STDERR.print("[3]なにもしない\n") # 選択肢 3 STDERR.printf("%s の種の世話はどうしますか?: ", seeds) end # def の終了 def flower(day,water) nourishment = 4 * day - water # 栄養度の計算 printf("%d 日目\n", day+1) # 現在は何日目であるかを表示 nourishment.to_i # 栄養度を数字として取り込む end # def の終了 print("花の種をもらった。\n") STDERR.print("貰ったのは何色の種ですか?: ") seeds = gets.chomp # 入力されたデータを取り込む if seeds =="" # もしデータが入力されなかった場合 seeds ="?" # "?" として表示される end # if の終了 printf("%s 色の種ですね。\n", seeds) print("大切に育てれば綺麗な花が咲きますよ。\n") nutrition = 1 # 栄養度 happy = 1 # 健康度 days = 0 # 経過した日付 while true # 何度も繰り返す care(seeds) # care(seeds) を表示する ans = gets.chomp.to_i # 入力された数字を取り込む happy += days * ans # 健康度の計算 nutrition += flower(days,ans) # 栄養度の計算 move(nutrition) # 現在の栄養度がいくらであるのかを表示 if nutrition > 4 # もし、現在の栄養度が 4 以上であるならば break # 止まる end # if の終了 if happy > 6 # もし、現在の健康度が 6 以上であるのならば break # 止まる end # if の終了 days += 1 # 経過した日付を足していく end # while true の終了 STDERR.print("\n\n") STDERR.print("あなたが貰ってきた種に変化がありました!!\n") printf("%s の種は", seeds) if nutrition > 10 # 栄養度が 10 以上の場合 print("バラになりました") # 花はバラになる elsif nutrition > 9 # 栄養度が 9 以上の場合 print("コスモスになりました") # 花はコスモスになる elsif nutrition > 8 # 栄養度が 8 以上の場合 print("向日葵になりました") # 花は向日葵になる elsif nutrition > 7 # 栄養度が 7 以上の場合 print("チューリップになりました") # 花はチューリップになる elsif nutrition > 6 # 栄養度が 6 以上の場合 print("牡丹になりました") # 花は牡丹になる elsif nutrition > 5 # 栄養度が 5 以上の場合 print("スズランになりました") # 花はスズランになる elsif nutrition > 4 # 栄養度が 4 以上の場合 print("マリーゴールドになりました") # 花はマリーゴールドになる else # 栄養度が 4 以下の場合 print("花が咲きませんでした") # 花が咲かないで終わる end # if の終了 d) プログラム実行結果 1) 選択肢 1 のみを実行した場合 pan{c111112}% ./def_rollplaing.rb [~/Ruby] 花の種をもらった。 貰ったのは何色の種ですか?: 赤 赤 色の種ですね。 大切に育てれば綺麗な花が咲きますよ。 [1]水を与える [2]栄養を与える [3]なにもしない 赤 の種の世話はどうしますか?: 1 1 日目 [1]水を与える [2]栄養を与える [3]なにもしない 赤 の種の世話はどうしますか?: 1 2 日目 *** [1]水を与える [2]栄養を与える [3]なにもしない 赤 の種の世話はどうしますか?: 1 3 日目 ********** あなたが貰ってきた種に変化がありました!! 赤 の種はコスモスになりました% 2) 選択肢 1-2-3 の順に実行した場合 pan{DOMON Chisato}% ./def_rollplaing.rb [~/Ruby] 花の種をもらった。 貰ったのは何色の種ですか?: 黄 黄 色の種ですね。 大切に育てれば綺麗な花が咲きますよ。 [1]水を与える [2]栄養を与える [3]なにもしない 黄 の種の世話はどうしますか?: 1 1 日目 [1]水を与える [2]栄養を与える [3]なにもしない 黄 の種の世話はどうしますか?: 2 2 日目 ** [1]水を与える [2]栄養を与える [3]なにもしない 黄 の種の世話はどうしますか?: 3 3 日目 ******* あなたが貰ってきた種に変化がありました!! 黄 の種は牡丹になりました% 3) 選択肢 2-3-2 の順に実行した場合 pan{DOMON Chisato}% ./def_rollplaing.rb [~/Ruby] 花の種をもらった。 貰ったのは何色の種ですか?: 青 青 色の種ですね。 大切に育てれば綺麗な花が咲きますよ。 [1]水を与える [2]栄養を与える [3]なにもしない 青 の種の世話はどうしますか?: 2 1 日目 [1]水を与える [2]栄養を与える [3]なにもしない 青 の種の世話はどうしますか?: 3 2 日目 [1]水を与える [2]栄養を与える [3]なにもしない 青 の種の世話はどうしますか?: 2 3 日目 ****** あなたが貰ってきた種に変化がありました!! 青 の種はスズランになりました% 4) 選択肢 1-2-2 の順に実行した場合 pan{c111112}% ./def_rollplaing.rb [~/Ruby] 花の種をもらった。 貰ったのは何色の種ですか?: 紫 紫 色の種ですね。 大切に育てれば綺麗な花が咲きますよ。 [1]水を与える [2]栄養を与える [3]なにもしない 紫 の種の世話はどうしますか?: 1 1 日目 [1]水を与える [2]栄養を与える [3]なにもしない 紫 の種の世話はどうしますか?: 2 2 日目 ** [1]水を与える [2]栄養を与える [3]なにもしない 紫 の種の世話はどうしますか?: 2 3 日目 ******** あなたが貰ってきた種に変化がありました!! 紫 の種はチューリップになりました% 5) 選択肢 3-3-2 の順に実行した場合 pan{c111112}% ./def_rollplaing.rb [~/Ruby] 花の種をもらった。 貰ったのは何色の種ですか?: 橙 橙 色の種ですね。 大切に育てれば綺麗な花が咲きますよ。 [1]水を与える [2]栄養を与える [3]なにもしない 橙 の種の世話はどうしますか?: 3 1 日目 [1]水を与える [2]栄養を与える [3]なにもしない 橙 の種の世話はどうしますか?: 3 2 日目 [1]水を与える [2]栄養を与える [3]なにもしない 橙 の種の世話はどうしますか?: 2 3 日目 ***** あなたが貰ってきた種に変化がありました!! 橙 の種はマリーゴールドになりました% 6) 選択肢 1-2-1 の順に実行した場合 pan{DOMON Chisato}% ./def_rollplaing.rb [~/Ruby] 花の種をもらった。 貰ったのは何色の種ですか?: 緑 緑 色の種ですね。 大切に育てれば綺麗な花が咲きますよ。 [1]水を与える [2]栄養を与える [3]なにもしない 緑 の種の世話はどうしますか?: 1 1 日目 [1]水を与える [2]栄養を与える [3]なにもしない 緑 の種の世話はどうしますか?: 2 2 日目 ** [1]水を与える [2]栄養を与える [3]なにもしない 緑 の種の世話はどうしますか?: 1 3 日目 ********* あなたが貰ってきた種に変化がありました!! 緑 の種は向日葵になりました% 7) 選択肢 3-3-3 の順に実行した場合 pan{DOMON Chisato}% ./def_rollplaing.rb [~/Ruby] 花の種をもらった。 貰ったのは何色の種ですか?: ? 色の種ですね。 大切に育てれば綺麗な花が咲きますよ。 [1]水を与える [2]栄養を与える [3]なにもしない ? の種の世話はどうしますか?: 3 1 日目 [1]水を与える [2]栄養を与える [3]なにもしない ? の種の世話はどうしますか?: 3 2 日目 [1]水を与える [2]栄養を与える [3]なにもしない ? の種の世話はどうしますか?: 3 3 日目 **** あなたが貰ってきた種に変化がありました!! ? の種は花が咲きませんでした% e) 考察 1) 選択肢 1 のみを実行した場合 ・bc- l による実行結果 pan{c111112}% bc -l 4 * 0 - 1 -1 4 * 1 - 1 3 4 * 2 - 1 7 -1 + 3 + 7 9 quit プログラムの実行結果が 9 より大きければコスモスに変化するという設定をし ていたため、プログラムは正しく動いていることがこの計算結果により分かった。 2) 選択肢 1-2-3 の順に実行した場合 ・bc- l による実行結果 pan{c111112}% bc -l [~/Ruby] 4 * 0 - 1 -1 4 * 1 - 2 2 4 * 2 - 3 5 -1 + 2 + 5 6 quit プログラムの実行結果が 6 より大きければ牡丹に変化するという設定をしてい たため、プログラムは正しく動いていることがこの計算結果により分かった。 3) 選択肢 2-3-2 の順に実行した場合 ・bc- l による実行結果 pan{c111112}% bc -l [~/Ruby] 4 * 0 - 2 -2 4 * 1 - 3 1 4 * 2 - 2 6 -2 + 1 + 6 5 quit プログラムの実行結果が 5 より大きければスズランに変化するという設定をし ていたため、プログラムは正しく動いていることがこの計算結果により分かった。 4) 選択肢 1-2-2 の順に実行した場合 ・bc- l による実行結果 pan{DOMON Chisato}% bc -l [~/Ruby] 4 * 0 - 1 -1 4 * 1 - 2 2 4 * 2 - 2 6 -1 + 2 + 6 7 quit プログラムの実行結果が 7 より大きければチューリップに変化するという設定 をしていたため、プログラムは正しく動いていることがこの計算結果により分かっ た。 5) 選択肢 3-3-2 の順に実行した場合 ・bc- l による実行結果 pan{DOMON Chisato}% bc -l [~/Ruby] 4 * 0 - 3 -3 4 * 1 - 3 1 4 * 2 - 2 6 -3 + 1 + 6 4 quit プログラムの実行結果が 4 より大きければマリーゴールドに変化するという設 定をしていたため、プログラムは正しく動いていることがこの計算結果により分 かった。 6) 選択肢 1-2-1 の順に実行した場合 ・bc- l による実行結果 pan{DOMON Chisato}% bc -l [~/Ruby] 4 * 0 - 1 -1 4 * 1 - 2 2 4 * 2 - 1 7 -1 + 2 + 7 8 quit プログラムの実行結果が 8 より大きければ向日葵に変化するという設定をして いたため、プログラムは正しく動いていることがこの計算結果により分かった。 7) 選択肢 3-3-3 の順に実行した場合 ・bc- l による実行結果 pan{c111112}% bc -l [~/Ruby] 4 * 0 - 3 -3 4 * 1 - 3 1 4 * 2 - 3 5 -3 + 1 + 5 3 quit プログラムの実行結果が 4 よりも小さければ花が咲かないという設定をしてい たため、プログラムは正しく動いていることがこの計算結果により分かった。 また、花の種の色の名前を入力しない場合には "?" と表示させると言う設定を していたが、その設定も正しく作動していると言うことが分かった。 3. 感想 method が使われているものとして、RPG や 育成ゲームなどがこれに当てはまる のではないのかと思った。自分が選択した技などで相手に与えるダメージなどが 決まってくるため当てはまるのではないかと思った。 4. 参考文献 前野晶弘・三國彰 図解でわかる 統計解析 より 標準偏差とはなにか (p22-p24) 日本実業出版社, 2009 西村まどか 統計の考え方 第 10 回 (分散) より 「分散」 http://roy/~madoka/2012/bst/10/bst_10_02_theme_02_variance.html 西村まどか 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) より 「映画の星づけランキング」 http://roy/~madoka/2012/r2/06/r2_06_08_theme_07_aryavg.html#methodinmethod 西村まどか 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) より 「while 文で入力するとき」 http://roy/~madoka/2012/r2/06/r2_06_10_theme_08_while.html 西村まどか 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) より 「るびおっち」 http://roy/~madoka/2012/r2/06/r2_06_11_theme_09_rubiocci.html