第6回 基礎プログラミング II レポート課題 氏名:遠藤裕貴 学籍番号:c1090294 語学クラス:中国語 コース(系):政策マネ 1 筆記問題 A 始めに 0 から数える。これは配列は0から数えるからである。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n", 14 15 16 17 18 19 20 21 22 23 24 25 "o","p","q","r","s","t","u","v","w","x","y","z"] すると上のようになる。 よって、alphabet[18]は、上からわかるように、"s" である。 また、alphabet[40]は存在していないため、「空」を意味する nil の値をとる。 2 プログラム問題 A ●考えた設定 身長を入力してその平均を計算するようなプログラム ●作成したプログラム #!/usr/koeki/bin/ruby def average(takasa) # scoreは数値がたくさんしまわれる配列 sum = 0.0 # 割り算する予定なので浮動小数点数にしておく for tall in takasa # for A in B で B の中の A について sum += tall end sum / takasa.length #配列 takasa の要素数を数え、それで sum を割る end points = Array.new # からっぽの配列 points を作る i=0 # i が points の添字となる(入力された行を数える添字) while true STDERR.print "身長を入力して下さい: \n " line = STDIN.gets if line == nil break end points << line.to_i end printf("\n みんなの平均は %3.1f です\n", average(points)) ●実行結果 pan{c109029}% ./def_statistic.rb [~/Ruby] 身長を入力して下さい: 174 身長を入力して下さい: 180 身長を入力して下さい: 167 身長を入力して下さい: 182 身長を入力して下さい: 175 身長を入力して下さい: ^D みんなの平均は 175.6 です ●変更点 授業でつかった def_ary_movie.rb をもとに作った。途中合計は必要ないと思っ たのでその部分は削除した。また実行出来なかったので line = STDIN.gets へ 変更した。 ●考察 pan{c109029}% bc -l [~/Ruby] 174+180+167+182+175 878 878/5 175.60000000000000000000 bc -l で計算したところ上のような結果になり、平均が一致したので正しくプロ グラムされていると言える。 B ●考えた設定 悪魔の血をひく主人公が人間をどう殺すかでエンディングが変わるプログラム ●作成したプログラム #!/usr/koeki/bin/ruby def demon(aku) aku.times do print("▼\t") end print("\n") sleep(0.5) end def choose(name) STDERR.printf("\n%s:目の前に人間がいる。どうする?? \n",name) STDERR.print("[1]\t殺して血を飲む\n") STDERR.print("[2]\tただ殺す\n") STDERR.print("[3]\t虐殺する\n") end def blood(perday,amount) x = 4 * perday - amount printf("%d日目\n",perday) printf("体内血量分%d\n", x) x end printf("あなたは悪魔の血を持つ者です\n") STDERR.printf("名前は?") name = gets.chomp if name == "" name = "アック" #何も入力されない場合は"アック"という名前になる end printf("%sという名前になった。\n",name) cruelty = 1 # 残酷度 quantity = 1 # 血の量 day = 0 # 過ぎた日にち #printf("▼の量が主人公が変化する度合いになる\n") while true demon(cruelty) choose(name) ans = gets.chomp.to_i cruelty += day * ans #printf("残酷度 cruelty=%d\n", cruelty) quantity += blood(day,ans) #printf("血の量 quantity=%d\n", quantity) if cruelty > 4 break end if quantity > 4 break end demon(ans) day += 1 end demon(quantity) # 最終段階の血の量が▼になる printf("%sは", name) if quantity > 8 print("魔王ルシファー") elsif quantity <= 5 print("悪魔デビール") else print("人間") end print("になりました\n") ●実行結果 ・すべて1を選択した場合 pan{c109029}% ./def_rollplaying_a.rb [~/Ruby] あなたは悪魔の血を持つ者です 名前は? アックという名前になった。 ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 1 0日目 体内血量分-1 ▼ ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 1 1日目 体内血量分3 ▼ ▼ ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 1 2日目 体内血量分7 ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ アックは魔王ルシファーになりました ・すべて2を選択した場合 pan{c109029}% ./def_rollplaying_a.rb [~/Ruby] あなたは悪魔の血を持つ者です 名前は? アックという名前になった。 ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 2 0日目 体内血量分-2 ▼ ▼ ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 2 1日目 体内血量分2 ▼ ▼ ▼ ▼ ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 2 2日目 体内血量分6 ▼ ▼ ▼ ▼ ▼ ▼ ▼ アックは人間もどきになりました ・すべて3を選択した場合 pan{c109029}% ./def_rollplaying_a.rb [~/Ruby] あなたは悪魔の血を持つ者です 名前は? アックという名前になった。 ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 3 0日目 体内血量分-3 ▼ ▼ ▼ ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 3 1日目 体内血量分1 ▼ ▼ ▼ ▼ ▼ ▼ ▼ アック:目の前に人間がいる。どうする?? [1] 殺して血を飲む [2] ただ殺す [3] 虐殺する 3 2日目 体内血量分5 ▼ ▼ ▼ ▼ アックは悪魔もどきになりました ●変更点 授業で使ったdef_rubiocci.rbをmethodの名前を変えるなど多少変えた。 ●考察 プログラム上では、 quantity の値が 8 より大きい場合 = 魔王ルシファー quantity の値が 5 以下の場合 = 悪魔もどき quantity の値が 上記のもの以外の場合 = 人間もどき になる。 全ての選択肢で 1 を選んだ場合は 0日目 血の量 quantity=-1 1日目 血の量 quantity=3 2日目 血の量 quantity=7 となり、 quantity の値が 8 より大きいという場合に当てはまっているので 魔王ルシファーになっている。 また、全ての選択肢で 2 を選んだ場合は、 0日目 血の量 quantity=-2 1日目 血の量 quantity=2 2日目 血の量 quantity=6 となり、quantity の値が 5 以下という場合にも quantity の値が 8 より大 きいという場合にも当てはまっていないために人間もどきになっている。 全ての選択肢で 3 を選んだ場合も、 0日目 血の量 quantity=-3 1日目 血の量 quantity=1 2日目 血の量 quantity=5 となり、quantity の値が 5 以下という場合に当てはまっているので悪魔もど きになっている。 よって、正しくプログラムされていると言える。 ●感想 日常生活で使っているものでは携帯電話に使われているのではないかと思った。 ●参考文献 基礎プログラミング II 第6回 目的に応じて使ってみよう 「るびおっち」 http://roy/~madoka/2010/r2/06/06_11_theme_09_rubiocci.html 基礎プログラミング II 第6回 目的に応じて使ってみよう 「while 文で入力するとき」 http://roy/~madoka/2010/r2/06/06_10_theme_08_while.html ●共同研究者 横山くん 、木内くん ●プログラム本体を貼り付けます