第6回 目的に応じて使ってみよう レポート課題 氏名:田中井晶帆 学籍番号:C111104A 語学クラス:中国語3 コース:社会福祉 1.筆記問題 A. ● 表を作成してみた 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 10 11 12 13 14 15 16 17 18 19 k l m n o p q r s t 20 21 22 23 24 25 u v w x y z ● プログラムを作ってみた ---- [22] を調べる -------------------------------------------------------- #!/usr/koeki/bin/ruby #coding: euc-jp 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"] printf("22 番目は %s である。\n", alphabet[22]) -------------------------------------------------------------------------- →→ 実行結果 : 22 番目は w である。 ---- [-1] を調べる ------------------------------------------------------- #!/usr/koeki/bin/ruby #coding: euc-jp 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"] printf("-1 番目は %s である。\n", alphabet[-1]) -------------------------------------------------------------------------- →→ 実行結果 : -1 番目は z である。 ※注意! [22] … alphabet という変数に入っている、22番目の文字という意味。 [-1] … alphabet という変数に入っている、-1番目の文字という意味。 数は 0 から始まっている。 上記の表とプログラムの実行結果より、 [22] = w, [-1] = z であることが分かる。 予想としては alphabet の 22 番目の文字、すなわち w であり、alphabet の -1 番目の文字は存在しないため、プログラムの実行結果は表示されない と思っていた。しかしプログラムを実行してみると「-1 番目は z である」 という結果になった。念のため -2 や 90 でも試してみた。結果は以下の通 りである。 ---- [-2] を調べる------------------------------------------------------- #!/usr/koeki/bin/ruby #coding: euc-jp 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"] printf("-2 番目は %s である。\n", alphabet[-2]) -------------------------------------------------------------------------- →→ 実行結果 : -2 番目は y である。 ---- [90] を調べる------------------------------------------------------- #!/usr/koeki/bin/ruby #coding: euc-jp 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"] printf("90 番目は %s である。\n", alphabet[90]) -------------------------------------------------------------------------- →→ 実行結果 : 90 番目は である。 プログラムの実行結果が「-1 = z」,「-2 = y」であることから、マイナス が付くと、 alphabet の変数に入っている文字の中の、最後から何番目か ということを表すようであった。またアルファベットは全部で26個(0 〜 25) であり、プログラムの実行結果が「90 = 」であることから、調べる数が-26 〜25 の場合実行結果が表示され、それ以外の場合は空白になることが分かっ た。 調べる数が -26〜25 というのは、基準(0)は a としているため、そこから 数えて 1番目 = b … 25番目 = z, -1番目 = z … -26番目 = a という 意味である。a は 0 番目でもあるが、-26番目でもある。 B. ●平均 例)ある花屋で1週間でばらが何本売れるか、1ヶ月間調査した。結果は以下 のようになった。 1週目: 15本 2週目: 24本 3週目: 18本 4週目: 27本 1週間で何本売れたか平均を求めたい。 → 式: (15本 + 24本 + 18本 + 27本) / 4週間 答: = 21本 平均を求めるには、全体の合計を出し、その合計をデータの数で割る。 上記の例で説明すると、4週間分の合計が全体の合計であり、1ヶ月で84本 売れている。データの数が1〜4週間分の4つであるから、84を4で割ると答 えを求めることができる。その答えが21本であるから、1ヶ月間のばらの 平均売上げは21本である。 ●標準偏差 例)上記の例を使って説明する。 1ヶ月間のばらの売上げの標準偏差を求めたい。 → 式: [(15 - 21)^2 + (24 - 21)^2 + (18 - 21)^21 + (27 - 21)^2] / 4 答: 22.5 標準偏差を求めるには、平均と各データの差をそれぞれ2乗したものを 全て足し、その答えをデータの数で割る。上記の例で説明すると、平均 が21本であり、21と1〜4週目の各データの差がそれぞれ1週目から -6,3,-3,-6 となる。そしてそれぞれ2乗したものが1週目から 36,9,9,36 となる。この4つの数を足すと90となり、データの数が1〜4週間分の4つ であるから90を4で割ると答えを求めることが出来る。その答えが22.5で あるから、1ヶ月間のばらの売上げの標準偏差は22.5本である。 2.プログラム問題 A.プログラム名: def_statistic.eb ●設定------------------------------------------------------------------- 100m走の記録を入力してもらい、平均を求めるプログラム。また最初に目 標を入力し、その結果によってメッセージも出る。 ●作成したプログラム----------------------------------------------------- #!/usr/koeki/bin/ruby #coding: euc-jp def avg(record) # 変数:avg, 引数:record sum = 0.0 # 平均値を求めるためには割り算をするため、小数にしておく。 for time in record # record の中身を time に代入 sum += time # sumにtimeを足していく end # for の終わり sum / record.length # 平均を出す計算式 end # def の終了 print("100m走の目標を設定してください: ") # 目標タイムの入力 aim = gets.chomp.to_f # 取り込んで数値化する print("\n記録を入力してください。\n") # メッセージ sleep 2 # 2秒待つ print("入力し終わったら Ctrl-d を押してください。\n") # メッセージ sleep 2 # 2秒待つ print("最後に平均を求めます。\n\n") # メッセージ sleep 2 # 2秒待つ heikin = Array.new # 新たに heikin という配列を作る while true # while文 STDERR.print("タイムを入力: ") # メッセージ time = gets # タイムを入力する場所 if time == nil # nil = 空白 break # ループから抜ける end # if文の終わり heikin << time.to_f # 配列に要素をつけくわえる end # while文の終わり printf("\nあなたの平均記録は%3.3fです。\n", avg(heikin)) # 結果を出すメッセージ if aim > avg(heikin) # aimよりもavg(heikin)の数値の方が小さければ print("目標達成おめでとう!!\n") # このメッセージが表示される else # それ以外の場合は print("残念…諦めずに頑張れ!!\n") # このメッセージが表示される end # if文の終わり ●元にしたプログラムからの変更点----------------------------------------- 「def_ary_movie.rb」を元にプログラムを作成した。 変更点1: print文を使って入力の仕方の説明が表示されるようにした。ま た文を読みやすくするため、sleepも使用した。 変更点2: 100m走の目標タイムを入力する部分を追加して、それを gets.chomp.to_iで読み込んで数値化し、if文を使って目標タイ ムが平均タイムを超えたかどうかで、異なるメッセージが表示さ れるようにした。 ●実行結果--------------------------------------------------------------- その1: 目標が達成できた場合 100m走の目標を設定してください: 16.50 記録を入力してください。 入力し終わったら Ctrl-d を押してください。 最後に平均を求めます。 タイムを入力: 16.89 タイムを入力: 16.52 タイムを入力: 16.10 タイムを入力: 16.09 タイムを入力: 16.88 タイムを入力: ^D あなたの平均記録は16.496です。 目標達成おめでとう!! その2: 目標が達成できなかった場合 100m走の目標を設定してください: 14.70 記録を入力してください。 入力し終わったら Ctrl-d を押してください。 最後に平均を求めます。 タイムを入力: 15.30 タイムを入力: 15.63 タイムを入力: 15.11 タイムを入力: 14.66 タイムを入力: 14.72 タイムを入力: ^D あなたの平均記録は15.084です。 残念…諦めずに頑張れ!! ●考察------------------------------------------------------------------- 「その1」について 16.89 + 16.52 + 16.10 + 16.09 + 16.88 82.48 82.48 / 5 16.49600000000000000000 bc -l で計算した結果、上記のような計算になった。 目標タイムが 16.50 で、平均タイムが 16.496 であるため、目標が達成 できている。メッセージも「目標達成おめでとう!!」と出ている。 「その2」について 15.30 + 15.63 + 15.11 + 14.66 + 14.72 75.42 75.42 / 5 15.08400000000000000000 bc -l で計算した結果、上記のような計算になった。 目標タイムが 14.70 で、平均タイムが 15.084 であるため、目標は達成で きていない。メッセージも「残念…諦めずに頑張れ!!」と出ている。 以上のことから、プログラムは正常に動いていると言える。 B.プログラム名: def_rollplaying.rb ●設定 1週間のダイエットをするプログラム。3つの選択肢の中からその日何をす るか選び、選択したものによって結果が異なるプログラム。 ●作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp def standard(hara) # 「down↓」を表示させるための関数(変数:standard, 仮引数:hara) hara.times do # 繰り返す print("down↓\t") # メッセージ end # do の終わり print("\n") # 改行 sleep 1 # 1秒待つ end # def の終わり def bun() # 選択肢を表示させるための関数 STDERR.printf("\n何をする?: \n") # メッセージ choice = ["ゴロゴロ","食事制限","ランニング"] # 選択肢 for sentaku in 0 .. choice.length - 1 # 0〜2までのループ STDERR.printf("[%d]\t%s\n", sentaku + 1, choice[sentaku]) # 選択肢のループ end # for の終わり end # def の終わり def sibou(perday,sports) # 体重の変化量を表示させるための関数(変数:sibou, 仮引数:perday,sports) heru = [1,1,2] # 選択肢に対する体重の変化量 printf("%d日目\n",perday) # メッセージ if sports == 0 # もし sports が0番目だったら printf("%dkg増えた…\n",heru[sports]) # このメッセージを表示して heru[sports] = -1 * heru[sports] # 1減らす else # それ以外だったら printf("%dkg痩せた!\n",heru[sports]) # このメッセージを表示する end # if文の終わり return heru[sports] # heru の中から選ばれたものを返す end # def の終わり print("最近おなかが出てきた…\n") # メッセージ sleep 1 # 1秒待つ print("そうだ!ダイエットをしよう!\n\n") # メッセージ sleep 1 # 1秒待つ STDERR.printf("名前はなぁに?: ") # メッセージ name = gets.chomp # 入力された文字列を読み込む if name == "" # もし名前が無かったら name = "ふと丸" # 名前はふと丸 end # if文の終わり printf("\n-----%s さんのダイエット記録----------\n", name) # メッセージ sleep 1 # 1秒待つ weight = 0 # 体重 day = 1 # ダイエット◯日目 printf("down↓の表示で体重が減るよ!\n") # メッセージ sleep 1 # 1秒待つ while day <= 7 # while文 bun() # def bun() を呼び出す kaito = gets.to_i - 1 # kaito を数値化する if kaito < 0 || kaito > 2 # もし0よりkaitoが小さい場合、もしくはkaitoが2より大きい場合は print("選択肢の中から選んで下さい\n") # このメッセージを表示させる redo # while文の最初に戻る end # if文の終わり standard(kaito) # def standard を呼び出して仮引数をkaitoとする weight += sibou(day, kaito) # 痩せた合計の計算式 printf("体重 weight=%d\n", weight) # 体重の表示 day += 1 # 日にちを1ずつ加算する end # while文の終わり STDERR.print("いざ!測定!!\n") # メッセージ printf("%sさんは", name) # 結果を示すメッセージ if weight >= 6 # もし体重が6以上だったら print("ぺったんこなおなかになりました☆\n") # このメッセージを表示 elsif weight >= 3 # 体重が5以下、または4以上だったら print("ふっくらおなかになりました。\n") # このメッセージを表示 else # それ以外だったら print("ぽっこりおなかのままです…\n") # このメッセージを表示 end # if文の終わり ●元にしたプログラムからの変更点------------------------------------------ 「def_rubiocci.rb」を参考にプログラムを作成した。 変更点1: if文を使って、その日の行動で何kg痩せたか(もしくは増えたか) が表示されるようにした。 変更点2: while文を使って、1週間の体重変動という条件を付けた。 変更点3: if文を使って、選択肢以外のものを選んだときにエラーメッセー ジが表示されるようにした。 変更点4: 体重が増える選択肢と、体重が減る選択肢を設定した。 ●実行結果--------------------------------------------------------------- その1: 名前を"るびお"にした場合 最近おなかが出てきた… そうだ!ダイエットをしよう! 名前はなぁに?: るびお -----るびお さんのダイエット記録---------- (※以下省略) その2: 名前を付けなかった場合 最近おなかが出てきた… そうだ!ダイエットをしよう! 名前はなぁに?: -----ふと丸 さんのダイエット記録---------- (※以下省略) その3: 選択肢以外のものを選んだ場合 最近おなかが出てきた… そうだ!ダイエットをしよう! 名前はなぁに?: -----ふと丸 さんのダイエット記録---------- down↓の表示で体重が減るよ! 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 5 選択肢の中から選んで下さい 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング (※以下省略) その4: 「ぺったんこなおなか」になる 最近おなかが出てきた… そうだ!ダイエットをしよう! 名前はなぁに?: -----ふと丸 さんのダイエット記録---------- down↓の表示で体重が減るよ! 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 3 down↓ down↓ 1日目 2kg痩せた! 体重 weight=2 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 3 down↓ down↓ 2日目 2kg痩せた! 体重 weight=4 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 3 down↓ down↓ 3日目 2kg痩せた! 体重 weight=6 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 3 down↓ down↓ 4日目 2kg痩せた! 体重 weight=8 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 2 down↓ 5日目 1kg痩せた! 体重 weight=9 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 1 6日目 1kg増えた… 体重 weight=8 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 3 down↓ down↓ 7日目 2kg痩せた! 体重 weight=10 いざ!測定!! ふと丸さんはぺったんこなおなかになりました☆ その5: 「ふっくらおなか」になる 最近おなかが出てきた… そうだ!ダイエットをしよう! 名前はなぁに?: -----ふと丸 さんのダイエット記録---------- down↓の表示で体重が減るよ! 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 2 down↓ 1日目 1kg痩せた! 体重 weight=1 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 2 down↓ 2日目 1kg痩せた! 体重 weight=2 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 2 down↓ 3日目 1kg痩せた! 体重 weight=3 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 3 down↓ down↓ 4日目 2kg痩せた! 体重 weight=5 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 3 down↓ down↓ 5日目 2kg痩せた! 体重 weight=7 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 1 6日目 1kg増えた… 体重 weight=6 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 1 7日目 1kg増えた… 体重 weight=5 いざ!測定!! ふと丸さんはふっくらおなかになりました。 その6: 「ぽっこりおなか」のまま 最近おなかが出てきた… そうだ!ダイエットをしよう! 名前はなぁに?: -----ふと丸 さんのダイエット記録---------- down↓の表示で体重が減るよ! 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 1 1日目 1kg増えた… 体重 weight=-1 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 1 2日目 1kg増えた… 体重 weight=-2 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 2 down↓ 3日目 1kg痩せた! 体重 weight=-1 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 1 4日目 1kg増えた… 体重 weight=-2 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 3 down↓ down↓ 5日目 2kg痩せた! 体重 weight=0 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 1 6日目 1kg増えた… 体重 weight=-1 何をする?: [1] ゴロゴロ [2] 食事制限 [3] ランニング 1 7日目 1kg増えた… 体重 weight=-2 いざ!測定!! ふと丸さんはぽっこりおなかのままです… ●考察 「その1」について 「 さんのダイエット記録」のメッセージの中に、"るびお" と入って いる。 「その2」について 名前は付けていないが、「ふと丸 さんのダイエット記録」と表示され ている。 「その3」について 「選択肢の中から選んで下さい」とエラーメッセージが出て、質問を 繰り返す。 「その4」について このプログラムでは、1を選ぶと1kg増え、2を選ぶと1kg減り、3を選ぶ と2kg減るようになっている。「その4」では1を1回、2を1回、3を5回選 んだ。それをbc -lで計算したところ、 2+2+2+2+1-1+2 10 以上のようになった。実行結果でも7日目には10kg減ったことになって いる。 「その5」について 今回は1を2回、2を3回、3を2回選んだ。それをbc -lで計算したところ、 1+1+1+2+2-1-1 5 以上のようになった。実行結果でも7日目には5kg減ったことになって いる。 「その6」について 今回は1を5回、2を1回、3を1回選んだ。それをbc -lで計算したところ、 -1-1+1-1+2-1-1 -2 以上のようになった。実行結果でも7日目には2kg増えたことになってい る。 また「その4」「その5」「その6」をみると、 ・その日の行動でどのくらい体重変動があったかが表示されている ・7日間のダイエット記録である ・体重が増える選択肢と、減る選択肢がある 事が分かる。 以上のことから、プログラムは正常に動いているといえる。またこのプロ グラムでは、7日目に6kg以上体重が減っていたら「ぺったんこなおなか」、 4から5kg減っていたら「ぽっこりおなか」、4kgも減っていなかったら「ぽっ こりおなか」というように、最終的に体重がどのくらい減ったかでエンディ ングが変わってくる。 3.感想 「はい」と答えた方はAの質問に、「いいえ」と答えた方はBの質問に進んで 下さい、というようなアンケートや、サイコロ、グリコ(じゃんけんで何で勝っ たかによって進む数が決まるゲーム)などに method の考え方が使えるのでは ないかと思った。 4.参考文献 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1215944787 YAHOO!JAPAN 知恵袋 解決済みのQ&A 標準偏差の求め方を教えて下さい! 2012 Yahoo Japan Corporation. 共同学習者: 藤川恒介