第6回 基礎プログラミング II レポート課題 氏名:青木 千紗 学籍番号:C1090012 語学クラス:中国語1 コース(系):地域共創コース 1 筆記問題 A 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] は、配列は0からはじまるので a = 0, b =1 ・・・s = 18 になる ので alphabet[18] = s である。 alphabet[40] は、配列にないので nil になる。 2 プログラム問題 A プログラム(def_statistic.rb) a 考えた設定 1日のテレビを見る平均時間を求めるプログラムを考えた。 b 作成したプログラム #!/usr/koeki/bin/ruby def day(time) # メソットの設定 total = 0.0 for average in time total += average # 平均を求めるために合計を求める end # forに対するend total / time.length # 平均を求める end # defに対するend tv = Array.new # 新しく配列をつくる while true # 繰り返し STDERR.print("\n1日に見るテレビの時間を教えて下さい。(終了はCrtl+D)\n") STDERR.print("時間は小数点で入力してください。例 1時間25分:1.25\n") image = gets # imageをとってくる if image == nil # もしimageがなかったら break # whileからぬける end # ifに対するend tv << image.to_f # 配列にimageを少数に変換して追加していく end # whileに対するend printf("\nみなさんの1日に見るテレビの平均は %3.2f 時間です。\n", day(tv)) c もとにしたプログラム def_ary_movie.rb と ary_jump.rb を参考にプログラムを作成した d 実行結果 pan{c109001}% ./def_statistic.rb [~/Ruby] 1日に見るテレビの時間を教えて下さい。(終了はCrtl+D) 時間は小数点で入力してください。例 1時間25分:1.25 2 1日に見るテレビの時間を教えて下さい。(終了はCrtl+D) 時間は小数点で入力してください。例 1時間25分:1.25 1.30 1日に見るテレビの時間を教えて下さい。(終了はCrtl+D) 時間は小数点で入力してください。例 1時間25分:1.25 0.30 1日に見るテレビの時間を教えて下さい。(終了はCrtl+D) 時間は小数点で入力してください。例 1時間25分:1.25 ^D みなさんの1日に見るテレビの平均は 1.20 時間です。 e 考察 計算を行なったが、正しく計算されているか分からない。 そこで、bc -lで確かめ算を行なった。 pan{c109001}% bc -l [~/Ruby] 2 + 1.30 + 0.30 3.60 3.60 / 3 1.20000000000000000000 quit 実行結果と確かめ算により、きちんと表示され、計算も正しく行なわれているこ とがわかった。よって、このプログラムは正確に機能したといえる。 また、きちんと小数点第3位を四捨五入しているかを確かめるために、「2.32 、 4.32 、 1.03」 で計算してみると、「みなさんの1日に見るテレビの平均は 2.56 時間です。」となった。 これをbc -lで計算すると、 pan{c109001}% bc -l [~/Ruby] 2.32 + 4.32 + 1.03 7.67 7.67 / 3 2.55666666666666666666 quit 「2.556666666・・・」となったのできちんと小数点第3位を四捨五入しているこ とがわかった。 B プログラム(def_rollplaying_a.rb) a 考えた設定 るびおっち的ゲームのつぼみを育てるプログラムを作成した。 b 作成したプログラム #!/usr/koeki/bin/ruby def care(color) # メソットの設定 STDERR.printf("\n%s色のつぼみを育てます。 \n", color) STDERR.print("[1]\t無理矢理開こうとする。\n") STDERR.print("[2]\t水を飲ませてあげる。\n") STDERR.print("[3]\t一緒にたわむれる。\n") end # defに対するend def big(day,move) # メソットの設定 water = 3 * day - move printf("%d日目\n",day) water.to_i # 数値を返す end # defに対するend printf("つぼみをみつけた。\n") STDERR.printf("何色にする?\n") color = gets.chomp # 文字をcolorに入れる if color == "" # もしcolorが""だったら"" color = "透明(笑)" # もしcolorが何もなかったら"透明(笑)" end # ifに対するend printf("\n%s色のつぼみを育てます。\n",color) happy = 0 # 幸せ度 vifour = 0 # 元気度 days = 0 # 育てた日 while true # 繰り返し care(color) smile = gets.chomp.to_i # 答えを求める print "*" * 80 happy += days * smile vifour += big(days,smile) # 元気度を足していく if happy > 4 # もし幸せが4より大きければ break # ぬける end #ifに対するend if vifour > 4 # もし元気度が4より大きければ break # ぬける end # ifに対するend days += 1 # 次の日にちにするために1を足す end # whileに対するend printf("%s色のつぼみは", color) if vifour > 10 # もし元気度が10より大きければ print("チューリップマン") elsif vifour > 7 # もし元気度が7と同じか小さければ print("チューリップ") else # それ以外ならば print("くぼたっち") end # ifに対するend print("になりました\n") c もとにしたプログラム def_rubiocci.rb を参考にプログラムを作成した d 実行結果 (例1として最初:[1]、0日目:[2]、1日目:[3]) pan{c109001}% ./def_rollplaying_a.rb [~/Ruby] つぼみをみつけた。 何色にする? 透明(笑)色のつぼみを育てます。 透明(笑)色のつぼみを育てます。 [1] 無理矢理開こうとする。 [2] 水を飲ませてあげる。 [3] 一緒にたわむれる。 1 ********************************************************************************0日目 透明(笑)色のつぼみを育てます。 [1] 無理矢理開こうとする。 [2] 水を飲ませてあげる。 [3] 一緒にたわむれる。 2 ********************************************************************************1日目 透明(笑)色のつぼみを育てます。 [1] 無理矢理開こうとする。 [2] 水を飲ませてあげる。 [3] 一緒にたわむれる。 3 ********************************************************************************2日目 透明(笑)色のつぼみはくぼたっちになりました (例2として最初:[3]、0日目:[2]、1日目[1]、2日目[1]) pan{c109001}% ./def_rollplaying_a.rb [~/Ruby] つぼみをみつけた。 何色にする? 透明(笑)色のつぼみを育てます。 透明(笑)色のつぼみを育てます。 [1] 無理矢理開こうとする。 [2] 水を飲ませてあげる。 [3] 一緒にたわむれる。 3 ********************************************************************************0日目 透明(笑)色のつぼみを育てます。 [1] 無理矢理開こうとする。 [2] 水を飲ませてあげる。 [3] 一緒にたわむれる。 2 ********************************************************************************1日目 透明(笑)色のつぼみを育てます。 [1] 無理矢理開こうとする。 [2] 水を飲ませてあげる。 [3] 一緒にたわむれる。 1 ********************************************************************************2日目 透明(笑)色のつぼみを育てます。 [1] 無理矢理開こうとする。 [2] 水を飲ませてあげる。 [3] 一緒にたわむれる。 1 ********************************************************************************3日目 透明(笑)色のつぼみはチューリップマンになりました e 考察 計算を行なったが、正しく計算されているか分からない。 そこで、例1と2をbc -lで確かめ算を行なった。 (例1として最初:[1]、0日目:[2]、1日目:[3]) pan{c109001}% bc -l [~/Ruby] 3 * 0 - 1 -1 3 * 1 - 2 1 3 * 2 - 3 3 -1 + 1 +3 3 quit 計算の答えは、3 である。 実行結果はそれ以外の「くぼたっち」になった。 (例2として最初:[3]、0日目:[2]、1日目[1]、2日目[1]) pan{c109001}% bc -l [~/Ruby] 3 * 0 - 3 -3 3 * 1 - 2 1 3 * 2 - 1 5 3 * 3 - 1 8 - 3 + 1 + 5 + 8 11 quit 計算の答えは、11である。 実行結果は10より大きい場合になる「チューリップマン」になっている。 以上実行結果と確かめ算により、どちらの例もきちんと表示され、計算 も正しく行なわれていることがわかった。よって、このプログラムは正 確に機能したといえる。 3 感想 すごろくがこれに該当すると思う。 さいころを振り、数字の出た分だけ進む。ついたマスでイベントが発生するの ですごろくはメソットの考え方を使ってできるものだと考える。 4 参考文献 基礎プログラミング II 第6回 http://roy/~madoka/2010/r2/06/06_07_theme_06_ary.html 「なわとびの数」 http://roy/~madoka/2010/r2/06/06_08_theme_07_aryavg.html 「映画の星づけランキング」 http://roy/~madoka/2010/r2/06/06_10_theme_08_while.html 「while 文で入力するとき」 http://roy/~madoka/2010/r2/06/06_11_theme_09_rubiocci.html 「るびおっち」 -------------------------------------------------------------- 著者:西村まどか 5 共同学習者 小松由里 久保田瑛一郎 横山広樹 大島藍 6 添付