第 6 回 目的に応じて使ってみよう レポート課題 氏名:照井さつき 学籍番号:C1101589 語学クラス:中国語3 コース(系):政策マネジメント 添付ファイル 1.プログラム問題 A : def_statistic.rb 2.プログラム問題 B : def_rollplaying_a.rb ========== 筆記問題 ========== A.配列変数は「,」ごとに区切られて保存、代入されてある。 また代入された順に0から番号が付けられており、変数名「n」で呼び出すこと が出来る。 したがって、alphabet[18]は19番目に保存、代入された内容を指している。 この小文字はaから順に代入されている。 よって、alphabet[18] = s である。 またこの代入alphabet[40]は41番目に代入されたものを指しているが、 アルファベットは26番目までしか代入されていない。 よって、alphabet[40] = nil (空白) となる。 ========== プログラ厶問題 ========== ---------- A-a.設定 ---------- 配列を取りこんで、平均値を計算するプログラム。 ---------- A-b.作成したプログラム ---------- #!/usr/koeki/bin/ruby def average(total) # メソッドの設定 sum = 0.0 # 割り算なので、小数点数にする。 for plus in total # total の内容を plus と する。 sum += plus # 代入された内容を足してsumに入れる。 end sum / total.length # sumに入れられた合計を代入した個数分割る。 end heikin = Array.new # 配列 heikin を作る。 print("\n") print("テストの平均点を調べます。\n") print("『ctrl+d』で終了します。\n") print("\n") while true # 以下の動作の繰り返しを指示している。 STDERR.print "点数を入力してください: " line = gets # 入力させ、line に代入する。 if line == nil # もしline が nil(ctrl+d)ならば、 break # 繰り返しから抜ける。 end heikin << line.to_i # heikinに、入力された値をlineから取り込む。 end # 繰り返しの指示内容の終わり。 printf("\n平均は %3.1f点です。\n",average(heikin)) print("\n") ---------- A-c.元にしたプログラム ---------- def_ary_movie.rbを使って作成した。 関数名、文章などを変更した。 ---------- A-d.実行結果 ---------- pan{c110158}% ./def_statistic.rb [~/Ruby] テストの平均点を調べます。 『ctrl+d』で終了します。 点数を入力してください: 20 点数を入力してください: 30 点数を入力してください: 55 点数を入力してください: 69 点数を入力してください: ^D 平均は 43.5点です。 ----------- A-e. 考察 ----------- 簡単な数字を入力し、結果の確かめ算をする。 ---実行結果--- pan{c110158}% ./def_statistic.rb [~/Ruby] テストの平均点を調べます。 『ctrl+d』で終了します。 点数を入力してください: 100 点数を入力してください: 50 点数を入力してください: 50 点数を入力してください: 100 点数を入力してください: ^D 平均は 75.0点です。 ---確かめ算--- pan{TERUI Satsuki}% bc -l [~/Ruby] 100+50+50+100 300 300/4 75.00000000000000000000 であった。 足算も正常にされており、入力された個数どおりに割り算もされ、 計算も合っているため正常に動いていることがわかる。 ---------- B-a.設定 ---------- method を 3 つ以上使用した、植物の育成ゲーム。 ---------- B-b.作成したプログラム ---------- #!/usr/koeki/bin/ruby def plant(hana) #成長量表示メソッド hana.times do print("\t↑") end print("\n") print("\n") 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 raise(perday,choice) #日数と成長量計算メソッド x = 2 * choice - perday printf("%d日目\n",perday) printf("成長量 %d\n", x) #増加量表示 x end print("\n") print("友人から一つの種を貰いました。\n") print("\n") print("植物でも話しかけて育てると、綺麗に育つと聞いたあなたは\n") print("植物に名前を付けることにしました。\n") print("\n") STDERR.printf("どんな名前にしますか? : ") name = gets.chomp # 名前入力 if name == "" # 名前が入力されなかった場合、 name = "花子" # 自動的に花子になる。 end printf("%sという名前になりました。\n",name) happy = 1 # 愛情 hight = 1 # 成長量 day = 0 # 育てた日数 print("\n") print("さて、どんな花が咲くでしょうか。\n") print("※ 順調に育っているとどんどん伸び「↑」ます!\n") print("\n") print("-" * 8 + "\n") print("\n") while true message(name) # 文章メソッド内容表示 grow = gets.chomp.to_i # 番号を選び入力 hight += raise(day,grow) # 成長量計算メソッドの計算式でdayとgrowを使って計算 printf("成長量 hight=%d\n", hight) happy += day * grow + 1 # 日数と番号をかけ、合計を愛情に代入 printf(" 愛情 happy=%d\n", happy) if happy > 7 # 愛情が7より大きい場合、 break # 繰り返しから抜ける。 end # if hight > 5 # 成長量が5より大きい場合、 # break # 繰り返しから抜ける。 # end plant(grow) day += 1 #一日ずつ増える。 end plant(hight) # 繰り返しが終わったあとの成長量の数だけ↑が表示される。 printf("%sは", name) if hight > 13 # hight が 14 以上だった場合表示 print("綺麗なチューリップに育った!") elsif hight >8 # hight が 13 以下 8 以上だった場合表示 print("チューリップに育った!") else # hight が 8 以下だった場合表示 print("枯れてしまった…") end print("\n") print("\n") ---------- B-c.元にしたプログラム ---------- def_rubiocci.rb を元に作成した。 計算式、ifの範囲を変更した。 ---------- B-d.実行結果 ---------- ---------- A.hight > 13 だった場合 ---------- pan{c110158}% ./def_rollplaying_a.rb [~/Ruby] 友人から一つの種を貰いました。 植物でも話しかけて育てると、綺麗に育つと聞いたあなたは 植物に名前を付けることにしました。 どんな名前にしますか? : はな はなという名前になりました。 さて、どんな花が咲くでしょうか。 ※ 順調に育っているとどんどん伸び「↑」ます! -------- はなを世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 3 0日目 成長量 6 成長量 hight=7 愛情 happy=2 ↑ ↑ ↑ はなを世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 2 1日目 成長量 3 成長量 hight=10 愛情 happy=5 ↑ ↑ はなを世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 3 2日目 成長量 4 成長量 hight=14 愛情 happy=12 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑ ↑ ↑ ↑ ↑ はなは綺麗なチューリップに育った! ---------- B.10 > hight > 8 だった場合 ---------- pan{c110158}% ./def_rollplaying_a.rb [~/Ruby] 友人から一つの種を貰いました。 植物でも話しかけて育てると、綺麗に育つと聞いたあなたは 植物に名前を付けることにしました。 どんな名前にしますか? : はな はなという名前になりました。 さて、どんな花が咲くでしょうか。 ※ 順調に育っているとどんどん伸び「↑」ます! -------- はなを世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 2 0日目 成長量 4 成長量 hight=5 愛情 happy=2 ↑ ↑ はなを世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 2 1日目 成長量 3 成長量 hight=8 愛情 happy=5 ↑ ↑ はなを世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 3 2日目 成長量 4 成長量 hight=12 愛情 happy=12 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑ ↑ ↑ はなはチューリップに育った! ---------- C.hight < 8 だった場合 + 名前入力無し ---------- pan{c110158}% ./def_rollplaying_a.rb [~/Ruby] 友人から一つの種を貰いました。 植物でも話しかけて育てると、綺麗に育つと聞いたあなたは 植物に名前を付けることにしました。 どんな名前にしますか? : 花子という名前になりました。 さて、どんな花が咲くでしょうか。 ※ 順調に育っているとどんどん伸び「↑」ます! -------- 花子を世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 1 0日目 成長量 2 成長量 hight=3 愛情 happy=2 ↑ 花子を世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 2 1日目 成長量 3 成長量 hight=6 愛情 happy=5 ↑ ↑ 花子を世話しよう: 1, 水をあげる 2, 肥料を与える 3, 日光に当てる 1 2日目 成長量 0 成長量 hight=6 愛情 happy=8 ↑ ↑ ↑ ↑ ↑ ↑ 花子は枯れてしまった… ---------- B-e.考察 ---------- プログラム通りに実行されているか確かめるために、計算の確かめ算をした。 ---------- A の場合 ---------- 成長量の計算は pan{c110158}% bc -l [~/Ruby] 2 * 3 - 0 + 1 7 2 * 2 - 1 + 7 10 2 * 3 - 2 + 10 14 となり、二日目で14になる。 愛情の計算は、 pan{c110158}% bc -l [~/Ruby] 0 * 3 + 1 + 1 2 1 * 2 + 1 + 2 5 2 * 3 + 1 + 5 12 と、なる。 愛情が 8 以上になった場合繰り返しから抜けるため、2日目に12になった為抜け る。 ---------- B の場合 ---------- 成長量の計算は pan{c110158}% bc -l [~/Ruby] 2 * 2 - 0 + 1 5 2 * 2 - 1 + 5 8 2 * 3 - 2 + 8 12 となり、二日目で12になる。 また愛情の計算は、 pan{c110158}% bc -l [~/Ruby] 0 * 2 + 1 + 1 2 1 * 2 + 1 + 2 5 2 * 3 + 1 + 5 12 と、なる。 愛情が 8 以上になった場合繰り返しから抜けるため、2日目に12になった為抜ける。 ---------- C の場合 ---------- 成長量の計算は pan{c110158}% bc -l [~/Ruby] 2 * 1 - 0 + 1 3 2 * 2 - 1 + 3 6 2 * 1 - 2 + 6 6 となり、二日目で6になる。 また、愛情の計算は、 pan{c110158}% bc -l [~/Ruby] 0 * 1 + 1 + 1 2 1 * 2 + 1 + 2 5 2 * 1 + 1 + 5 8 と、なる。 愛情が 8 以上になった場合繰り返しから抜けるため、2日目8になった為抜ける。 よって、プログラミング通りに計算、実行されていることがわかる。 ========== 感想 ========== method の考え方を使って出来るものを考えると、htmlが思い浮かぶ。 の部分に定義し、に鍵をいれ呼び出す。 という部分が似ていると感じた。 メソッドの使い方や、組み方の順番がよくわかっていなかったが、 前述したように、html 作成の の部分に似ていると感じてから、 スムーズに組むことができた。 次回はもっと早く理解して、今回よりもスムーズに組めるようにしたい。 ========== 参考文献 ========== 基礎プログラミング II 第 6 回 「目的に応じて使ってみよう」 http://roy/~madoka/2011/r2/06/ 西村まどか 基礎プログラミングI 第6回 配列 http://roy/~naoya/ruby/6.html 神田直弥