第 2 回 Ruby の基礎 / 計算が終ったら止まる問題 レポート課題 氏名:土屋哲平 学籍番号:c1111085 語学クラス:中国語3 コース:政策マネジメント 1.筆記問題 始めに1個の卵が孵化し,翌日からは前日の3倍の卵が孵化して行く。 1日目 1 2日目 1*3=3 3日目 3*3=9 4日目 9*3=27 5日目 27*3=81 6日目 81*3=243 7日目 243*3=729 7日目で500を越えるので答えは7日になる。 2.プログラム問題 A (1)プログラムの設定 カタツムリが何日目に何匹孵化するかを表示するプログラム 日にちは1日ずつ進み、1日進む毎に前日の3倍ずつ増える設定にした。 (2)作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp d = 1 #調査を開始した日(翌日) snail = snail0 = 1 #孵化した卵の数 snail1 =500 #孵化する卵の上限 while print("1日目\t 1 匹生まれた。\n") end while snail < snail1 #孵化した卵が上限を越えたら止まる。 printf("%d日目\t %d 匹生まれた。\n", d += 1, snail *=3) end printf("%d 日後には500匹を %d 匹越えた!\n", d, snail - snail1) (3)プログラムの実行結果 an{c111108}% ./print_snail.rb [~/Ruby] 1日目 1 匹生まれた。 2日目 3 匹生まれた。 3日目 9 匹生まれた。 4日目 27 匹生まれた。 5日目 81 匹生まれた。 6日目 243 匹生まれた。 7日目 729 匹生まれた。 7 日後には500匹を 229 匹越えた! (4)元のプログラムからの変更点 授業中に作成したメタボに関するプログラムを元にした。 i の部分を日にちを表す「day」の「d」に変更。初期値を1にした。 孵化した卵の数も正数でなければ不自然なので%dに変更した。 (5)bc -lを使って調べた結果 このプログラムが正しいかktermで計算してみる。 pan{TSUCHIYA Teppei}% bc -l [~] 1*3 3 3*3 9 9*3 27 27*3 81 81*3 243 243*3 729 となったのでこのプログラムは正常である。 B (1)プログラムの設定 1000円のおこづかいが1年毎に1.20に増えて行くとして,10000円に達するには何 年間かかるかを計算するプログラムを作成した。 (2)作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp money0 = 1000 money1 = 10000 money = money0 m = 0 while money < money1 money *=1.20 m += 1 printf("%d 年後\t %5.1f 円\n", m, money) end printf("%5.1f 円 に達しました。やったね!\n", money) (3)プログラムの実行結果 pan{TSUCHIYA Teppei}% ./while_snail.rb [~/Ruby] 1 年後 1200.0 円 2 年後 1440.0 円 3 年後 1728.0 円 4 年後 2073.6 円 5 年後 2488.3 円 6 年後 2986.0 円 7 年後 3583.2 円 8 年後 4299.8 円 9 年後 5159.8 円 10 年後 6191.7 円 11 年後 7430.1 円 12 年後 8916.1 円 13 年後 10699.3 円 10699.3 円 に達しました。やったね! (4)プログラムの変更点 Aの問題で作ったプログラムをもとに作成した。 snailをmoneyに変更。 dをyにし、初期値を0に変更。 年毎に1.20%ずつ増えて行くように *=1.20とした。 (5)bc -l での計算結果 pan{TSUCHIYA Teppei}% bc -l [~] 1000*1.20 1200.00 1200*1.20 1440.00 1440*1.20 1728.00 1728*1.20 2073.60 2073*1.20 2487.60 2487*1.20 2984.40 2984*1.20 3580.80 3580*1.20 4296.00 4296*1.20 5155.20 5155*1.20 6186.00 6186*1.20 7423.20 7423*1.20 8907.60 8907*1.20 10688.40 3.感想 今回の講義では設定した上限に達すると止まるプログラムを作成した. while/end は設定した条件になるまで計算を繰り返す文であり、設定にミスがあ ると永遠と計算を繰り返してしまうので注意しなければならない。実際にミスが あり、ktermが大変なことになって驚きました。不等号は計算を終らせる条件で あり、富豪の向きに注意が必要である。 授業で作成したプログラムを参考にしつつプログラムを作成したが、エラーが出 たりうまく表示できなかったり、かなり苦労しました。ですが、失敗を繰り返し ているうちに徐々に理解することが出来、課題を作成することが出来た。実際に 自分の作ったプログラムがktermで動いた時はとても嬉しかった。 これからも苦手意識に負けずに積極的に授業に臨みたい。 4参考文献 西村まどか 基礎プログラミング I 第 2 回 「Ruby の基礎 / 計算が終ったら止まる問題」 http://roy/~madoka/2012/r1/02/ 西村まどか 基礎プログラミング I 第2回 Ruby の基礎 / 計算が終ったら止まる問題 よかったレポート http://roy/~madoka/2010/r1/02/rpt/c109046.txt