第6回 基礎プログラミング II レポート課題 氏名:笹木郁哉 学籍番号:c1090791 語学クラス:英語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"] 配列に入っているアルファベットをaを0として順番に数えると、 18番目は"r"になる事から、alphabet[18]は"r"となる。 同じように順番に数えてみるが、アルファベットは26個までなので、 0から数えているため、25番目に終わってしまう。 よって、alphabet[40]はないと言える。 2.A a.考えた設定 1日あたりのたばこの本数の平均を求めるプログラム。[def_statistic.rb] b.作成したプログラム #!/usr/koeki/bin/ruby def average(score) # scoreは数値がたくさんしまわれる配列 sum = 0.0 # 割り算する予定なので浮動小数点数にしておく for smoke in score # for A in B で B の中の A について sum += smoke # printf("%d 人目 途中合計 sum=%d\n", score.length + 1, sum) end sum / score.length #配列 score の要素数を数え、それで sum を割る end points = Array.new # からっぽの配列 points を作る # i=0 # i が points の添字となる(入力された行を数える添字) while true STDERR.print "1日あたりのたばこの本数を入力して下さい: " line = gets if line == nil break end points << line.to_i # 上か下かどちらかでよい # points[i] = line.to_i p points # i += 1 end printf("\n みんなの平均は %3.1f 本です。\n", average(points)) c.もとししたプログラムからの変更点 授業で作成したdef_ary_movie.rbを参考に変数をかえてプログラムを 作成していった。 d.実行結果 「1つ目」 pan{c109079}% ./def_statistic.rb [~/Ruby] 1日あたりのたばこの本数を入力して下さい: 2 [2] 1日あたりのたばこの本数を入力して下さい: 5 [2, 5] 1日あたりのたばこの本数を入力して下さい: 20 [2, 5, 20] 1日あたりのたばこの本数を入力して下さい: 12 [2, 5, 20, 12] 1日あたりのたばこの本数を入力して下さい: 15 [2, 5, 20, 12, 15] 1日あたりのたばこの本数を入力して下さい: ^D みんなの平均は 10.8 本です。 「2つ目」 pan{c109079}% ./def_statistic.rb [~/Ruby] 1日あたりのたばこの本数を入力して下さい: 60 [60] 1日あたりのたばこの本数を入力して下さい: 23 [60, 23] 1日あたりのたばこの本数を入力して下さい: 7 [60, 23, 7] 1日あたりのたばこの本数を入力して下さい: 22 [60, 23, 7, 22] 1日あたりのたばこの本数を入力して下さい: 13 [60, 23, 7, 22, 13] 1日あたりのたばこの本数を入力して下さい: ^D みんなの平均は 25.0 本です。 e.考察 「1つ目」 pan{c109079}% bc -l [~/Ruby] 2 + 5 + 20 + 12 + 15 54 54 / 5 10.80000000000000000000 quit 「2つ目」 pan{c109079}% bc -l [~/Ruby] 60 + 23 + 7 + 22 + 13 125 125 / 5 25.00000000000000000000 quit このように確かめ算を行った結果、1つ目も2つ目も計算が正しかったので、 このプログラムは正しいと言える。 2.B a.考えた設定 野球の練習に例えた育成ゲームを考えてみた。[def_rollplaying_a.rb] b.作成したプログラム #!/usr/koeki/bin/ruby def cry(ct) ct.times do print("\t") end print("\n") sleep(0.5) end def massage(name) STDERR.print("[1]\tバッティングをする?\n") STDERR.print("[2]\t筋トレをする?\n") STDERR.print("[3]\休む?\n") end def fat(perday,exercise) x = 4 * perday + exercise 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) happy = 1 power = 2 day = 0 printf("きつい練習をすると強くなるよ!\n") while true massage(name) ans = gets.chomp.to_i print "*" * 80 happy += day * ans printf("幸せ度 happy=%d\n", happy) power += fat(day,ans) printf("パワー power=%d\n", power) if happy> 5 break end if power > 4 break end cry(ans) day += 1 end cry(power) printf("%sは", name) if power > 8 print("強打者タイプ") elsif power <= 5 print("ミートタイプ") else print("ベンチ要員") end print("のようなタイプになりました\n") c.もとにしたプログラムからの変更点 授業で作成したdef_rubiocci.rbを参考に変数などを変えていき プログラムを作成した。 d.実行結果 「1つ目」 pan{c109079}% ./def_rollplaying_a.rb [~/Ruby] グラウンドに来た。 どんな名前にする? ミスターという名前になった。 きつい練習をすると強くなるよ! [1] バッティングをする? [2] 筋トレをする? [3]休む? 1 ********************************************************************************幸せ度 happy=1 0日目 能力変化度 1 パワー power=3 [1] バッティングをする? [2] 筋トレをする? [3]休む? 2 ********************************************************************************幸せ度 happy=3 1日目 能力変化度 6 パワー power=9 ミスターは強打者タイプのようなタイプになりました 「2つ目」 pan{c109079}% ./def_rollplaying_a.rb [~/Ruby] グラウンドに来た。 どんな名前にする? ミスターという名前になった。 きつい練習をすると強くなるよ! [1] バッティングをする? [2] 筋トレをする? [3]休む? 2 ********************************************************************************幸せ度 happy=1 0日目 能力変化度 2 パワー power=4 [1] バッティングをする? [2] 筋トレをする? [3]休む? 3 ********************************************************************************幸せ度 happy=4 1日目 能力変化度 7 パワー power=11 ミスターは強打者タイプのようなタイプになりました e.考察 プログラムは正常に動くようである。 今回レポートに記載した結果は2つだったが、他にも何度かやってみた所 強打者タイプになる確率が多いような気がした。 今回はこのようなプログラムを作成した訳だが、今度何か機会がある際は 練習項目や完成するタイプを増やす事でおもしろくなると思う。 3.感想 今回は野球の育成ゲームを作れたのだから、他のも作れると思った。 野球が1番好きだが、サッカーであったり、バスケなどなんでもでき るのではないか。実際にやってみないと分からないので、機会があ ればやってみてもいいかなと思った。 4.参考文献 西村まどか 基礎プログラミングII 第6回 目的に応じて使ってみよう http://roy/~madoka/2010/r2/06/