第 6 回 目的に応じて使ってみよう レポート課題 氏名:夏井 知恵子 学籍番号:c1101655 語学クラス:英語クラス6 コース:政策マネジメント 1.筆記問題 A.配列 alphabet の、 alphabet[18] は s である。 配列を数えるときは0から順に数えていくため、アルファベットで19番目の文字 にあたるsがalphabet[18] に該当する。 また、alphabet[40] は存在しない。なぜならば、配列は中に入れられているも のに対して 0 から順番に番号が付けられている。つまり、アルファベットは 26 文字であるため配列の番号は 25 までしか存在しない。したがって、 alphabet[40]は nil 。つまり、存在しないということになる。 2.プログラム問題 プログラムA i. 考えた設定 平均睡眠時間を求めるプログラムを設定した。 ii. 作成したプログラム #!/usr/koeki/bin/ruby def average(day) # averageは line = gets で入力された数値が入る配列 sum = 0.0 # 小数点第1位まで求めるため、0.0とする for suimin in day # 配列dayの要素を取り出し、suiminに繰り返し代入 sum += suimin # 睡眠時間の合計 end # for 終わり sum / day.length # 配列 day の要素数を数え、 sum を割り、平均を求める end # def 終わり time = Array.new # 新しい配列 time を作る while true # 繰り返し STDERR.print "睡眠時間を入力して下さい(終了はCtrl-d): " line = gets # line に入力された数値を入れる if line == nil # Ctrl-d と入力 break # 繰り返しから抜ける end # if 終わり time << line.to_i # lineを整数に変換し、timeに入れる end # while終わり printf("\n 睡眠時間の平均は %3.1f 時間です\n", average(time)) iii. もとにしたプログラムからの変更点 講義で使用した def_ary_movie.rb を参考にプログラムを作成した。 変更点 :プログラムに応じた変数とprint文を設定した点。 iv. プログラムを実行した結果画面 pan{c110165}% ./def_statistic.rb [~/Ruby] 睡眠時間を入力して下さい(終了はCtrl-d): 4 睡眠時間を入力して下さい(終了はCtrl-d): 8 睡眠時間を入力して下さい(終了はCtrl-d): 9 睡眠時間を入力して下さい(終了はCtrl-d): 7 睡眠時間を入力して下さい(終了はCtrl-d): 3 睡眠時間を入力して下さい(終了はCtrl-d): ^D 睡眠時間の平均は 6.2 時間です v.考察 プログラムの計算が正しいかどうか bc -l を使って計算した。 pan{c110165}% bc -l [~/Ruby] 4 + 8 + 9 + 7 + 3 31 31 / 5 6.20000000000000000000 プログラムの計算と一致した。よって、このプログラムは正しいといえる。 vi. 参考文献 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「映画の星づけ ランキング」 http://roy/~madoka/2011/r2/06/r2_06_08_theme_07_aryavg.html 西村まどか プログラムB i. 考えた設定 選んだ解答によってエンディングが異なる、苔を栽培するプログラムを設定した。 ii. 作成したプログラム #!/usr/koeki/bin/ruby def sound(s) # 関数をsoundと設定。仮引数はs s.times do # s を指定された回数繰り返す print("さわ\t") end #times doの終わり print("\n") sleep(0.5) end #defの終わり def message(name) # 関数をmassegeと設定。仮引数はname STDERR.printf("%s を世話しよう\n",name) STDERR.print("[1]\t水をあげる\n") STDERR.print("[2]\t話しかける\n") STDERR.print("[3]\t放置する\n") end #defの終わり def grow(days,answer) #関数をgrowと設定。仮引数はdays, answer x = 4 * days - answer #grow = 4 * 回数 - 選択した数字 printf("%d日目\n",days) x end printf("友達から苔をもらった。\n") STDERR.printf("名前をつけてあげよう!:") name = gets.chomp # 名前の入力 if name == "" # name が空欄だったら name = "苔" # name は苔 end # if 終わり printf("%sという名前にした。\n",name) care = 1 # 世話をした度合い seichou = 1 # 成長具合 day = 0 # 育てた日付 printf("よく鳴くと大きくなるよ\n") while true # 条件を満たすまで繰り返し sound(care) # "さわ"を繰り返す message(name) # 選択肢を表示 ans = gets.chomp.to_i care += day * ans seichou += grow(day,ans) if care > 4 # care が4より大きければ break # 繰り返しから抜ける end # if 終わり if seichou > 4 # seichou が4より大きければ break # 繰り返しから抜ける end # if 終わり sound(ans) # sound に代入 day += 1 # day を進める end # while true 終わり sound(seichou) # 最終段階の体重が鳴き声になる printf("%sは", name) if seichou > 8 # seichou が8より大きければ print("花を咲かせました。") elsif seichou <= 5 # seichou が5以下だったら print("枯れました。") else # その他の場合 print("あまり変化しませんでした。") end # if 終わり iii. もとにしたプログラムからの変更点 講義で使用したdef_rubiocci.rb を参考にした。 変更点 ・プログラムに合うように変数を変更した点 ・プリント文もプログラムに合うように変更した点 iv. プログラムを実行した結果画面 花を咲かせる場合(xの値が8以上になるように選択肢を選択) pan{c110165}% ./def_rollplaying_a.rb [~/Ruby] 友達から苔をもらった。 名前をつけてあげよう!:koke1 koke1という名前にした。 愛情を注ぐと大きくなります。 さわ koke1 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 1 0日目 さわ さわ koke1 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 1 1日目 さわ さわ さわ koke1 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 1 2日目 さわ さわ さわ さわ さわ さわ さわ さわ さわ さわ koke1は花を咲かせました。% あまり変化がない場合(xの値が5以上8以下になるように選択肢を選択) pan{c110165}% ./def_rollplaying_a.rb [~/Ruby] 友達から苔をもらった。 名前をつけてあげよう!:koke2 koke2という名前にした。 愛情を注ぐと大きくなります。 さわ koke2 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 2 0日目 さわ さわ さわ koke2 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 2 1日目 さわ さわ さわ さわ さわ koke2 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 2 2日目 さわ さわ さわ さわ さわ さわ さわ koke2はあまり変化しませんでした。% 枯れる場合(xの値が5以下になるように選択肢を選択) pan{c110165}% ./def_rollplaying_a.rb [~/Ruby] 友達から苔をもらった。 名前をつけてあげよう!:koke3 koke3という名前にした。 愛情を注ぐと大きくなります。 さわ koke3 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 3 0日目 さわ さわ さわ さわ koke3 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 3 1日目 さわ さわ さわ さわ さわ さわ さわ koke3 を世話しよう [1] 水をあげる [2] 話しかける [3] 放置する 3 2日目 さわ さわ さわ さわ koke3は枯れました。% v.考察 bc -l を用いて計算が正しく行われているか確かめた。 花を咲かせる場合 pan{c110165}% bc -l [~/Ruby] 1(初期値) 4 * 0 -1 -1 4 * 1 -1 3 4 * 2 -1 7 -1 + 3 + 7 + 1 10 8以上であれば、「花をさかせました。」となるように設定したので、設定通りの 処理をしているといえる。 あまり変化しない場合 1 4 * 0 -2 -2 4 * 1 - 2 2 4 * 2 - 2 6 -2 + 2 + 6 + 1 7 5以上8以下であれば、「あまり変化しませんでした。」となるように設定したの で、設定通りの処理をしているといえる。 枯れてしまう場合 1 4 * 0 -3 -3 4 * 1 -3 1 4 * 2 - 3 5 -3 + 1 + 5 + 1 4 5以下であれば、「枯れました。」となるように設定したので、設定通りの処理 をしているといえる。 vi.参考文献 http://roy/~madoka/2011/r2/06/r2_06_11_theme_09_rubiocci.html 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「るびおっち」 西村まどか 3.感想 method の考え方を利用していると思われるのは たまごっち のような育成ゲー ムだと思う。今回のプログラムのようにユーザーの選択によってゲームのなかの キャラクターの成長の仕方が変化するからである。 今回のプログラムBは参考にしたプログラムに書かれていることを理解することを優 先したため、あまりオリジナリティが出せなかった。自分なりに工夫してプログ ラムを作れるようにしたい。