第6回 目的に応じて使ってみよう レポート課題 氏名:小川まどか 学籍番号:C1100420 語学クラス:英語2 コース:社会福祉 1.筆記問題 A. 初めに配列 alphabetを全部表示させる。 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[18] aから0、1、2、…と数えていく。 数えて18番目にあるのはs したがって、alphabet[18]=sである。 ・alphabet[40] aから0、1、2、…と数えていく。 数えて40番目にはalphabetはない。 なぜなら配列の中には、25番目までしか入っていないからである。 したがって、alphabet[40]=nil(なし)である。 2.プログラム問題 A. i.考えた設定 気温を入力してもらい平均値を計算するプログラム def_statistic.rbを作成し た。 ii.作成したプログラム #!/usr/koeki/bin/ruby def average(score) # メソッドを設定する sum = 0.0 for kion in score sum += kion # sumにkionを足していく end # forを終了する sum / score.length # 平均を求める end # defを終了する ondo = Array.new # 配列 ondをつくる while true STDERR.print "気温を入力して下さい(終了はctrl+dです):" temperature = gets if temperature == nil # もし temperatureがなかったら break # 繰り返しから抜ける end # ifを終了する ondo << temperature.to_i end # whikeを終了する printf("\n平均気温は %3.1f です\n",average(ondo)) iii.もとにしたプログラムからの変更点 授業で作成したプログラム def_ary_movie.rb をもとに作成した。 print文と変数を変更した。 iv.実行結果 pan{c110042}% ./def_statistic.rb [~/Ruby] 気温を入力して下さい(終了はctrl+dです):13 気温を入力して下さい(終了はctrl+dです):11 気温を入力して下さい(終了はctrl+dです):16 気温を入力して下さい(終了はctrl+dです):14 気温を入力して下さい(終了はctrl+dです):12 気温を入力して下さい(終了はctrl+dです):13 気温を入力して下さい(終了はctrl+dです):^D 平均気温は 13.2 です v.考察 実行結果が合っているか bc-lで確認した。 pan{c110042}% bc -l [~/Ruby] 13 + 11 + 16 + 14 + 12 + 13 79 79 / 6 13.16666666666666666666 小数点第二位で四捨五入されている。 6が繰り上がって1が2になり、13.2となる。 よって、このプログラムは正しいと言える。 B. i.考えた設定 methodを3つ以上使用したゲームのプログラム def_rollplaying_a.rbを作成し た。 ii.作成したプログラム #!/usr/koeki/bin/ruby def cry(nakigoe) # 呼び出す nakigoe.times do # 繰り返す print("みゃあー\t") # 鳴き声 end # defを終了する print("\n") sleep(1) # 1秒間sleepさせる end # defを終了する 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 sodatu(day,exercise) x = 4 * day - exercise printf("%d日目\n",day) printf("体重増加分 %d\n", x) x end print("段ボールに入っている子ねこを見つけた。\n") print("その子ねこを拾って帰ることにした。\n") STDERR.printf("名前は何にする?(名前を入力しないとみけになります):") name = gets.chomp if name == "" name = "みけ" # 空白だったら"みけ"と名前をつける end # ifを終了する printf("%sという名前をつけました!\n",name) grow = 1 # 成長度合い weight = 1 # 体重 day = 0 # 育てた日にち printf("よく鳴くとどんどん成長するよ!\n") while true cry(grow) message(name) answer = gets.chomp.to_i grow += day * answer printf("成長度合い grow=%d\n", grow) weight += sodatu(day,answer) printf("体重 weight=%d\n", weight) if grow > 4 # 成長度合いが4より大きかったら break # 繰り返しから抜ける end # ifを終了する if weight > 4 # 体重が4より大きかったら break # 繰り返しから抜ける end # ifを終了する cry(answer) day += 1 end cry(weight) # 最終段階の体重が鳴き声になる printf("%sは", name) if weight > 8 print("黒色のねこになりました!") # 鳴き声が5以上8以下なら黒ねこになる elsif weight <= 5 print("茶色のねこになりました!") # 鳴き声が5以下なら茶ねこになる else print("白色のねこになりました!") # それ以外なら白ねこになる end iii.もとにしたプログラムからの変更点 授業で作成したプログラム def_rubiocci.rbをもとにした。 選択肢(STDERR.print文)を変えた。 iv.実行結果 例1.黒色のねこ pan{c110042}% ./def_rollplaying_a.rb [~/Ruby] 段ボールに入っている子ねこを見つけた。 その子ねこを拾って帰ることにした。 名前は何にする?(名前を入力しないとみけになります): みけという名前をつけました! よく鳴くとどんどん成長するよ! みゃあー みけを世話しよう: [1] キャットフードをあげる [2] まぐろの缶詰めをあげる [3] ミルクをあげる 1 成長度合い grow=1 0日目 体重増加分 -4 体重 weight=-3 みゃあー みゃあー みけを世話しよう: [1] キャットフードをあげる [2] まぐろの缶詰めをあげる [3] ミルクをあげる 1 成長度合い grow=2 1日目 体重増加分 0 体重 weight=-3 みゃあー みゃあー みゃあー みけを世話しよう: [1] キャットフードをあげる [2] まぐろの缶詰めをあげる [3] ミルクをあげる 1 成長度合い grow=4 2日目 体重増加分 4 体重 weight=1 みゃあー みゃあー みゃあー みゃあー みゃあー みけを世話しよう: [1] キャットフードをあげる [2] まぐろの缶詰めをあげる [3] ミルクをあげる 1 成長度合い grow=7 3日目 体重増加分 8 体重 weight=9 みゃあー みゃあー みゃあー みゃあー みゃあーみゃあー みゃあー みゃあー みゃあー みけは黒色のねこになりました! 例2.茶色のねこ pan{c110042}% ./def_rollplaying_a.rb [~/Ruby] 段ボールに入っている子ねこを見つけた。 その子ねこを拾って帰ることにした。 名前は何にする?(名前を入力しないとみけになります): みけという名前をつけました! よく鳴くとどんどん成長するよ! みゃあー みけを世話しよう: [1] キャットフードをあげる [2] まぐろの缶詰めをあげる [3] ミルクをあげる 2 成長度合い grow=1 0日目 体重増加分 -8 体重 weight=-7 みゃあー みゃあー みゃあー みけを世話しよう: [1] キャットフードをあげる [2] まぐろの缶詰めをあげる [3] ミルクをあげる 2 成長度合い grow=3 1日目 体重増加分 -4 体重 weight=-11 みゃあー みゃあー みゃあー みゃあー みゃあー みけを世話しよう: [1] キャットフードをあげる [2] まぐろの缶詰めをあげる [3] ミルクをあげる 2 成長度合い grow=7 2日目 体重増加分 0 体重 weight=-11 みけは茶色のねこになりました! v.考察 実行結果が合っているか bc-lで確認した。 x = 4 * day - exercise に当てはめて計算する。 例1.黒色のねこ pan{c110042}% bc -l [~/Ruby] 4 * 0 -1 -1 4 * 1 -1 3 4 * 2 -1 7 4 * 3 -1 11 quit 鳴き声が8以上なら黒ねこになる。 計算結果は11で、8以上で黒ねこになっているので計算は正しい。 例2.茶色のねこ pan{c110042}% bc -l [~/Ruby] 4 * 0 -2 -2 4 * 1 -2 2 4 * 2 -2 6 quit 鳴き声が8以下で5以上なら茶ねこになる。 計算結果は6で、8以下で5以上で茶ねこになっているので計算は正しい。 よって、このプログラムは正しいと言える。 3.感想 methodの考え方を使っているゲームには、戦闘系のゲームや冒険系のゲームがあ る。武器の選択や成長の程度などによりエンディングが変化するからである。 methodを用いると、ゲームが作れるのだと分かった。自分が普段やっているゲー ムもこういう仕組みが使われているのだなあと分かって勉強になった。ゲームを やる際にどんな仕組みが使われているのか考えてみたい。 4.参考文献 基礎プログラミングII 第6回 目的に応じて使ってみよう (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/06/) ・電話番号サービス (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/06/r2_06_02_theme_01_telephone.html) ・なわとびの数 (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/06/r2_06_07_theme_06_ary.html) ・映画の星付けランキング (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/06/r2_06_08_theme_07_aryavg.html) ・るびおっち (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/06/r2_06_11_theme_09_rubiocci.html) 西村まどか先生