第6回 目的に応じて使ってみよう レポート課題 氏名:菅原彩花 学籍番号:c1101253 語学クラス:英語6 コース:政策マネジメントコース 1、筆記問題 A、alphabet=["a","b","c",..."z"]みるときに配列は配列[0,1,2,3,...]と続く のでalphabet[18]はアルファベットの19番目の文字になるため「s」になる。 またalphabet[40]はアルファベットの41番目にあたるが、アルファベットは26文 字のため空白(なし)になる。よってalphabet[40]は空を表すnilになると考えら れる。 2、プログラム問題(AとBを選択) (1)問題A (def_statistic.rb) A-a、設定 1ヶ月の平均気温を入力し、入力した分の月の平均気温を求める。 A-b、作成したプログラム #!/usr/koeki/bin/ruby def average(total) #defは関数をつくるメソッド sum = 0.0 #初期値を設定。小数点第1位まで表示させたいので0.0にする。 for kion in total #データの変数kionの配列total sum += kion #sumにkionを足していく end #forの終わりのend printf("%dヶ月分まで入力終了\n",total.length) #何ヵ月分入力したかを表示させる sum / total.length #入力データの合計÷入力データの個数 end #defの終わりのend kionn = Array.new #仮に数値を入れる配列kionn month = 0 while true STDERR.print("1ヶ月の平均気温を入力してください(Ctrl-dで終了):") line = gets #入力した値をkionnに入れる if line == nil #Ctrl-dが入力されたとき break #whileから抜ける end #ifのend kionn << line.to_f #配列にlineを小数に変換して追加していく month += 1 #入力した月の分monthに1ずつ加算する end printf("\n%dヶ月の平均気温は%2.2f度です\n",month,average(kionn)) A-c、実行結果 (1) pan{c110125}% ./def_statistic.rb [~/Ruby] 1ヶ月の平均気温を入力してください(Ctrl-dで終了):12.2 1ヶ月の平均気温を入力してください(Ctrl-dで終了):14.3 1ヶ月の平均気温を入力してください(Ctrl-dで終了):15.4 1ヶ月の平均気温を入力してください(Ctrl-dで終了):20.1 1ヶ月の平均気温を入力してください(Ctrl-dで終了):25.4 1ヶ月の平均気温を入力してください(Ctrl-dで終了):30.0 1ヶ月の平均気温を入力してください(Ctrl-dで終了):6ヶ月分まで入力終了 6ヶ月の平均気温は19.57度です (2) pan{c110125}% ./def_statistic.rb [~/Ruby] 1ヶ月の平均気温を入力してください(Ctrl-dで終了):31.0 1ヶ月の平均気温を入力してください(Ctrl-dで終了):25.5 1ヶ月の平均気温を入力してください(Ctrl-dで終了):34.7 1ヶ月の平均気温を入力してください(Ctrl-dで終了):10.2 1ヶ月の平均気温を入力してください(Ctrl-dで終了):15.4 1ヶ月の平均気温を入力してください(Ctrl-dで終了):17.6 1ヶ月の平均気温を入力してください(Ctrl-dで終了):6ヶ月分まで入力終了 6ヶ月の平均気温は22.40度です A-d、プログラムの説明 プログラム本体に「#〜」で説明している。 A-e、考察 計算結果が正しいのかkterm上でbc-lを使い確かめる。 (1) pan{SUGAWARA Sayaka}% bc -l [~/Ruby] 12.2+14.3+15.4+20.1+25.4+30.0 117.4 117.4/6 19.56666666666666666666 quit 答えは小数点第2位まで表示するので小数点第3位を四捨五入すると19.57度にな る。 (2) pan{c110125}% bc -l [~/Ruby] 31.0+25.5+34.7+10.2+15.4+17.6 134.4 134.4/6 22.40000000000000000000 quit 答えは22.40度になった。 (1)、(2)より実行結果は正しいと考えられる。 B-a、設定 授業で使ったdef_rubiocci.rbをもとに子犬を育てるプログラム def_rollplaying_a.rbを作成する。 B-b、作成したプログラム #!/usr/koeki/bin/ruby def cry(ct) #関数の設定 ct.times do #.times doで繰り返す print("\nわん!!\t") end #doのend print("\n") #改行 sleep(1) #1秒待つ end def fat(day,koudou) #体重を計算する関数。仮引数はdayとkoudou x = 3 * day - koudou #体重は3*日数-選択肢の番号 printf("*%d日目*\n",day) #何日目かを表示 x end #defのend def message(name) #選択しを表示させる関数 STDERR.printf("%sを世話しよう: \n", name) STDERR.print("[1]\tエサをあげる\n") STDERR.print("[2]\tお風呂に入れてあげる\n") STDERR.print("[3]\t散歩する\n") end #defのend printf("子犬を飼うことになりました\n") STDERR.printf("子犬の名前は?") #名前を入力させる name = gets.chomp if name == "" #入力されずリターンされたときはたろうにする name = "たろう" end #ifのend printf("%sという名前になった。\n",name) happy = 1 # 幸せ度 weight = 1 # 体重 days = 0 # 育てた日数 printf("よく鳴くと大きくなるよ\n") print "-" * 40 #「-」で区切り線を表示 while true #条件を満たすまで繰り返す cry(happy) #「わん!!」を幸せ度の数だけ表示 message(name) #選択肢を表示させる answer = gets.chomp.to_i #入力された文字を整数に変換 happy += days * answer #幸せ度を加算していく weight += fat(days,answer) #体重を加算して行く if happy > 5 #幸せ度が5より大きいとき break #終了 end #ifのend if weight > 5 #体重が5より大きいとき break #終了 end #ifのend cry(answer) #cryの関数に入力した数を代入 days += 1 #日にちをすすめる end #whileのend print "-" * 40 #「-」で区切り線を表示 cry(weight) # 最終段階の体重が「わん!!」になる printf("よく見ると%sは", name) if weight > 5 #体重が5より大きいとき print("ゴールデンレトリバー") elsif weight > 3 #体重が3<体重<5のとき print("柴犬") else print("チワワ") #それ以外のとき end print("でした\n") #ifのend B-c、実行結果 (1)選択肢1を選び続けた場合 [1] エサをあげる [2] お風呂に入れてあげる [3] 散歩する 1 *1日目* わん!! わん!! わん!! ぽちを世話しよう: [1] エサをあげる [2] お風呂に入れてあげる [3] 散歩する 1 *2日目* ---------------------------------------- わん!! わん!! わん!! わん!! わん!! わん!! わん!! よく見るとぽちはゴールデンレトリバーでした (2)選択肢2を選び続けた場合(名前はつけない) たろうを世話しよう: [1] エサをあげる [2] お風呂に入れてあげる [3] 散歩する 2 *1日目* わん!! わん!! わん!! わん!! わん!! たろうを世話しよう: [1] エサをあげる [2] お風呂に入れてあげる [3] 散歩する 2 *2日目* ---------------------------------------- わん!! わん!! わん!! わん!! よく見るとたろうは柴犬でした (3)選択肢3を選び続けた場合 わん!! るびおを世話しよう: [1] エサをあげる [2] お風呂に入れてあげる [3] 散歩する 3 *1日目* わん!! わん!! わん!! わん!! わん!! わん!! わん!! るびおを世話しよう: [1] エサをあげる [2] お風呂に入れてあげる [3] 散歩する 3 *2日目* ---------------------------------------- わん!! よく見るとるびおはチワワでした B-d、プログラムの説明 プログラム本体に「#〜」で説明している。 B-e、考察 幸せ度(days*answer)の合計が5より大きくなるまで何日かかるかを求めた後、そ の日数分体重(3 * day - koudou)を求める。また計算にはbc -lを使う。 (1)のとき *幸せ度 1日目 pan{c110125}% bc -l [~/Ruby] 1日目 1*1 1 2日目 2*1 2 幸せ度合計 1+2 3 3日目 3*1 3 幸せ度合計 3+3 6 quit また体重が5より大きくなった時点で終了なので体重が5を超えるのは何日目を計 算する。 *体重 pan{c110125}% bc -l [~/Ruby] 1日目 3*1-1 2 2日目 3*2-1 5 3日目 3*3-1 8 quit よって3日目で幸せ度が5より大きくなり、体重も3日目で5を超えるので3日目の 体重を計算する。 pan{c110125}% bc -l [~/Ruby] 3*3-1 8 quit 体重>5のときはゴールデンレトリバーになるので正しい。 (2)のとき *幸せ度 pan{c110125}% bc -l [~/Ruby] 1日目 1*2 2 2日目 2*2 4 幸せ度合計 2+4 6 quit *体重 pan{c110125}% bc -l [~/Ruby] 1日目 3*1-2 1 2日目 3*2-1 5 3日目 3*3-2 7 quit よって2日目で幸せ度が5を超えるので2日目の体重を計算すると、 pan{c110125}% bc -l [~/Ruby] 3*2-2 4 quit なので、3<体重<=5の範囲にあり、柴犬になることは正しい。 (3)のとき *幸せ度 pan{c110125}% bc -l [~/Ruby] 1日目 1*3 3 2日目 2*3 6 quit *体重 pan{c110125}% bc -l [~/Ruby] 1日目 3*1-3 0 2日目 3*2-3 3 3日目 3*3-3 6 quit よって2日目で幸せ度が5を超えるので2日目の体重を計算すると、 pan{c110125}% bc -l [~/Ruby] 3*2-3 3 quit なので体重<3よりチワワになることは正しい。 3、感想 シュミレーションゲームや戦闘ゲームではdefをつかって独自に関数を作りポイ ントを計算できると考えられる。たとえば恋愛シュミレーションでより相手にす かれる行動を選択したときはポイントが高くつき、相手に嫌われるような行動を選 択すればポイントは減ってしまうからだ。 今回の課題はほとんど授業で使用したプログラムから作ったが、授業のとき以上 にプログラムの中身を理解することができた。プログラム課題Bの問題はポイン トを計算してプログラムで設定するのが大変でした。 4、参考文献 2010年基礎プログラミング講義ノート URL:http://roy/~madoka/2010/r2/06/rpt/crt.html 2011年基礎プログラミング講義ノート URL:http://roy/~madoka/2011/r2/06/ 平均値を求めるプログラム(def_ary_movie.rb) URL:http://roy/~madoka/2011/prog/def_ary_movie.rb ルビオッチ(def_rubiocci.rb) URL:http://roy/~madoka/2011/prog/def_rubiocci.rb ------------------- 東北公益文科大学 公益学部 公益学科 2年 菅原彩花 c110125@f.koeki-u.ac.jp