第 6 回 目的に応じて使ってみよう レポート課題 氏名:伊藤詩野 学籍番号:c1110186 語学クラス:中国語3 コース:社会福祉コース 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] は、22番目の文字ということである。 配列は0番目から始まるので、アルファベット a~z を 0~25 と数えていくと 22番目にあるのは「w」。よって、alphabet = [22] とは w を示している。 次に、alphabet = [-1] を求める。アルファベットは26文字だが、この場合は配 列のため 0 からカウントしているため26番目の文字は存在しない。同時に、0番 目より下の文字も存在しない。よって、alphabet = [-1] は nil となる。 B. 平均と標準偏差を求める方法と式を説明する。 ◯平均について 計算方法 : 与えられた値の和を求め、合計を個数で割る。 A + B + C + D + E ... / 個数 = 平均 例 ) 2 + 4 + 6 + 8 + 10 / 5 = 6 ◯標準偏差について 標準偏差とは? : 標準偏差はデータの分布のばらつきをみる一つの尺度。平均 値と標準偏差の値が分かれば、データがどの範囲にどのよう な割合で分布しているか程度明らかになる。 計算方法 : 各値と平均値との差の2乗の平方根が標準偏差である。 1.平均を求める 例 ) 2 + 4 + 6 + 8 + 10 / 5 = 6 平均 = 6 2.それぞれのデータの平均との差を求める (データ) - (平均値) = 差 2 - 6 = -4 4 - 6 = -2 6 - 6 = 0 8 - 6 = 2 10 - 6 = 4 3.平均との差を 2乗 し、すべて足す (平均との差)^ 2 = ?? -4^2 = 16 -2^2 = 4 0^2 = 0 2^2 = 4 4^2 = 16 16 + 4 + 0 + 4 + 16 = 40 4.2乗の合計を、個数で割る 40 / 5 = 8 5.それをルートでくくる √8 = 2√2 以上、5つの過程を経て標準偏差を求めることができる。 ◯参考文献 ■ 標準偏差 URL:http://www.bekkoame.ne.jp/~mathebit/0f22i76/s_deviation3.html 2.プログラム問題 選択:A def_statistic.rb ◯設定 : 配列を取りこんで、平均値を計算するプログラム ◯もとにしたプログラムと変更点 講義で作成した def_ary_movie.rb を参考に、関数名、文章などを変更した ◯プログラム #!/usr/koeki/bin/ruby #coding: euc-jp def ave(school) # 平均 数値をしまう変数 def - end sum = 0.0 # 割り算のため、少数点数にする for people in school # for in - end で school の中の people について sum += people end sum / school.length end def bs(school) # 分散 sum = 0.0 for people in school sum += (people - ave(school))**2 # 分散 = ((値 - 平均値 ^2)の総和/個数 end sum / school.length end def hh(school) # 標準偏差 Math.sqrt(bs(school)) # ルート 標準偏差 = (分散)の平方根 end test = Array.new print("\n") print("あなたの試験の結果について、平均 /分散 /標準偏差 を求めます\n") print("\n") while true # 繰り返す whiel - end STDERR.print("点数 : ") score = gets if score == nil # score なら nil if - end break end test << score.to_i end printf("\n平均点: %3.1f \n分散: %.3f \n標準偏差: %.3f \n", ave(test), bs(test), hh(test)) ◯実行結果 pan{c111018}% ./def_statistic.rb [~/Ruby] あなたの試験の結果について、平均 /分散 /標準偏差 を求めます 点数 : 54 点数 : 82 点数 : 66 点数 : 91 点数 : 86 点数 : ^D 平均点: 75.8 分散: 188.960 標準偏差: 13.746 ◯考察 平均 /分散/ 標準偏差 を答えを、bc-l を用いて確かめる pan{ITO Shino}% bc -l [~/Ruby] 54 + 82 + 66 + 91 + 86 379 quit 点数の合計 = 379 pan{ITO Shino}% bc -l [~/Ruby] 379 / 5 75.80000000000000000000 quit 平均 = 75.8 pan{ITO Shino}% bc -l [~/Ruby] (54-75.8)^2+(82-75.8)^2+(66-75.8)^2+(91-75.8)^2+(86-75.8)^2 944.80 944.8 / 5 188.96000000000000000000 quit 分散 = 188.96 pan{ITO Shino}% bc -l [~/Ruby] 13.746^2 188.952516 quit 分散や標準偏差では、四捨五入されているため、答えに多少の誤差が生じた。 ◯参考文献 ・library mathn URL:http://doc.ruby-lang.org/ja/1.9.3/library/mathn.html ・分散と標準偏差 URL:http://kogolab.jp/elearn/hamburger/chap1/sec4.html ・■ 標準偏差 URL:http://www.bekkoame.ne.jp/~mathebit/0f22i76/s_deviation3.html 選択:B def_rollplaying.rb ◯設定 大学生活の過ごし方を選択して、未来が変わるプログラム ◯もとにしたプログラムと変更点 授業で作成した def_rubiocci.rb をもとに、メソッド等の名前を変更した。 また、設定に合わせてエンディングも変更した。 ◯プログラム #!/usr/koeki/bin/ruby #coding: euc-jp def voice(vi) # 効果音を表示させる関数。仮引数 nayamu vi.times do # 変数 .times do で繰り返し print("最近 充実してる、よし!\n") end print("\n") sleep 2 end def choose(name) STDERR.printf("◆ %s の大学生活をコーディネートしよう\n", name) tame = ["アルバイト","勉強","遊ぶ"] for select in 0 .. tame.length - 1 STDERR.printf("[%d]\t%s\n", select + 1, tame[select]) end end def happy(time,stimulant) # 引数 time,stimulant hp = 4 * time - stimulant # hp は、4 * 回数 - 選択した数 printf("%d年目\n",time + 1) # 年数を表示 return hp end STDERR.printf("◆ 名前を設定してね : ") name = gets.chomp # ユーザーの名前をとってくる if name == "" name = "ジョン" # 入力が無い場合は、ジョンと名付ける end printf("\nこんちには、わたしの名前は %s \n",name) # 自己紹介 fight = 1 # 努力度 level = 1 # スキル year = 0 # 年数 print("\n") printf("よく働くと、社会適応能力がアップするよ!\n") print("\n") printf("よく勉強すると、成績アップするよ!\n") print("\n") printf("よく遊ぶと、友だちが増えて コミュニケーションスキルがアップするよ!\n") print("\n") while true # 繰り返し choose(name) ans = gets.to_i # 答えを求める voice(ans) print "-" * 80 # 端から端まで---で区切る fight += year * ans # 努力度は選んだ回数と番号をかける level += happy(year,ans) if fight > 4 # もし努力度が4より大きければ break # ぬける end # ifに対するend if level > 4 # もしスキルが4より大きければ break # ぬける end # ifに対するend year += 1 # 次の年にするために1を足す end # whileに対するend STDERR.print("◆ 未来が決った\n") voice(level) # 最終段階のレベル printf("%sは", name) if level > 8 # もしスキルが8より大きければ print("就職活動で内定をもらいました\n") elsif level <= 5 # もしスキルが5と同じか小さければ print("フリーターになりました\n遊んでばかりじゃ、ダメだね\n") else # それ以外ならば print("大学院に進学しました\n") end # ifに対するend ◯実行結果 その1 pan{c111018}% ./def_rollplaying.rb [~/Ruby] ◆ 名前を設定してね : しの こんちには、わたしの名前は しの よく働くと、社会適応能力がアップするよ! よく勉強すると、成績アップするよ! よく遊ぶと、友だちが増えて コミュニケーションスキルがアップするよ! ◆ しの の大学生活をコーディネートしよう [1]アルバイト [2]勉強 [3]遊ぶ 3 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! --------------------------------------------------------------------------------1年目 ◆ しの の大学生活をコーディネートしよう [1]アルバイト [2]勉強 [3]遊ぶ 3 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! ------------------------------------------------------------------------------- 2年目 ◆ しの の大学生活をコーディネートしよう [1]アルバイト [2]勉強 [3]遊ぶ 3 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! ------------------------------------------------------------------------------- 3年目 ◆ 未来が決った 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! しのはフリーターになりました 遊んでばかりじゃ、ダメだね その2 pan{c111018}% ./def_rollplaying.rb [~/Ruby] ◆ 名前を設定してね : しの こんちには、わたしの名前は しの よく働くと、社会適応能力がアップするよ! よく勉強すると、成績アップするよ! よく遊ぶと、友だちが増えて コミュニケーションスキルがアップするよ! ◆ しの の大学生活をコーディネートしよう [1] アルバイト [2] 勉強 [3] 遊ぶ 2 最近 充実してる、よし! 最近 充実してる、よし! --------------------------------------------------------------------------------1年目 ◆ しの の大学生活をコーディネートしよう [1] アルバイト [2] 勉強 [3] 遊ぶ 1 最近 充実してる、よし! --------------------------------------------------------------------------------2年目 ◆ しの の大学生活をコーディネートしよう [1] アルバイト [2] 勉強 [3] 遊ぶ 2 最近 充実してる、よし! 最近 充実してる、よし! --------------------------------------------------------------------------------3年目 ◆ 未来が決った 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! 最近 充実してる、よし! しのは大学院に進学しました ◯考察 確認のため、hp の計算を行う。 hp増加分を求めるには、 hp = 4 * time - stimulant に当てはめて計算する。 その1 pan{c111018}% bc -l [~/Ruby] 4 * 0 - 3 -3 4 * 1 -3 1 4 * 2 -3 5 quit その2 pan{c111018}% bc -l [~/Ruby] 4 * 0 -2 -2 4 * 1 -1 3 4 * 2 -2 6 quit 実行結果1.2どちらもプログラムで指定した条件と一致した答えが実行されたの で、このプログラムは正常である。 ◯参考文献 ・基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「電話番号サービス」 西村まどか URL:http://roy/~madoka/2012/r2/06/r2_06_02_theme_01_telephone.html ・基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「るびおっち」 西村まどか URL:http://roy/~madoka/2012/r2/06/r2_06_11_theme_09_rubiocci.html ・基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「while 文で入力するとき」 西村まどか URL:http://roy/~madoka/2012/r2/06/r2_06_10_theme_08_while.html 3.感想 メソッドを使って、今回のるびおっちのように育成ゲームを作れると思う。 『たまごっち』なども、同じように応用したものだと考えられる。 4.共同学習者 浅沼佑香さん 村上茉奈美さん 5.添付ファイル ・def_statistic.rb ・def_rollplaying.rb