第2回Rubyの基礎/計算が終わったら止まる問題レポート課題 氏名:長谷川真亜子 学籍番号:c1111228 語学クラス:中国語3 コース:政策マネジメントコース 1 .筆記問題 A . 1日目は1個の卵が孵化した。 2日目は前日の3倍孵化したので、1個+3の1乗=4個となる。 3日目以降から9倍、27倍...というように卵が孵化していく。 まとめると、 3日目:4個+3の2乗=13個 4日目:13個+3の3乗=40個 5日目:40個+3の4乗=121個 6日目:121個+3の5乗=364個 7日目:364個+3の6乗=1093個 となり、7日目には500個全ての卵が孵化したことになる。 よって答えは7日かかる。 2 . プログラム問題 A . a )プログラムの設定 カタツムリの卵が全て孵化するには何日かかるか。 毎日3倍ずつ孵化していく。 b )作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("1日目は1個の卵が孵化した。\n") print("2日目は前日の3倍孵化したので、1個+3の1乗=4個となる。\n") print("3日目以降から9倍、27倍...というように卵が孵化していく。\n") print("\n") print("まとめると、\n") print("3日目:4個+3の2乗=13個\n") print("4日目:13個+3の3乗=40個\n") print("5日目:40個+3の4乗=121個\n") print("6日目:121個+3の5乗=364個\n") print("7日目:364個+3の6乗=1093個\n") print("\n") print("となり、7日目には500個全ての卵が孵化したことになる。\n") print("よって答えは7日かかる。\n") c )もとにしたプログラムと変更点 もとにしたプログラムは、while_meta.rbである。 変更点:printを利用して、最初に手計算でもとめたものを打ち込んだ。 d )実行の結果 pan{c111122}% ./print_snail.rb [~/Ruby] 1日目は1個の卵が孵化した。 2日目は前日の3倍孵化したので、1個+3の1乗=4個となる。 3日目以降から9倍、27倍...というように卵が孵化していく。 まとめると、 3日目:4個+3の2乗=13個 4日目:13個+3の3乗=40個 5日目:40個+3の4乗=121個 6日目:121個+3の5乗=364個 7日目:364個+3の6乗=1093個 となり、7日目には500個全ての卵が孵化したことになる。 よって答えは7日かかる。 1 日後 3 [匹] 2 日後 9 [匹] 3 日後 27 [匹] 4 日後 81 [匹] 5 日後 243 [匹] 6 日後 729 [匹] 6 日後には 500 [匹] を 229 [匹] 越えます。 e )bc-lを使って調べた結果 pan{HASEGAWA Mako}% bc -l [~/Ruby] 1*3 #1日目に孵化した卵*3 3 #2日目孵化した卵 3*3 #2日目に孵化した卵*3 9 #3日目孵化した卵 9*3 #3日目に孵化した卵*3 27 #4日目に孵化した卵 27*3 #4日目に孵化した卵*3 81 #5日目に孵化した卵 81*3 #5日目に孵化した卵*3 243 #6日目に孵化した卵 243*3 #6日目に孵化した卵*3 729 #7日目に孵化した卵 1+3 #2日目孵化した卵 4 #2日目に孵化した卵の合計 4+9 #3日目に孵化した卵 13 #3日目に孵化した卵の合計 13+27 #4日目に孵化した卵 40 #4日目に孵化した卵の合計 40+81 #5日目に孵化した卵 121 #5日目に孵化した卵の合計 121+243 #6日目に孵化した卵 364 #6日目に孵化した卵の合計 364+729 #7日目に孵化した卵 1093 #7日目に孵化した卵の合計 よって、一致している。 B . while -- end を使い、メタボリック症候群の問題(while_meta.rb)を例に、 決めた数値を超えたら終了する問題を作りたかった。 a )設定 「太郎さんはアルバイトをしている。 太郎さんの友だち450人の中から、1日目は4人アルバイトをし、 2日目以降から人手の足りないアルバイト先に毎日4倍ずつ人をよこしたら、 何日目で全員がアルバイトをしたことになるか。」といったものだ。 これについて解くプログラム while_alb.rb を作成した。 b )作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp day = 0 #アルバイトの開始日 people = people0 = 1 #アルバイトをする友だちの数 peoplemax = 450 #太郎さんの友だち全員 while people < peoplemax #友だち450人が全員アルバイトをしたら止める printf("%d 日目 \t %10.0f [人]\n", day += 1, people *= 4) #毎日人が4倍ずつ増えていくように設定 end printf("%d 日目には 450 [人] を %10.0f [人] 越えます。\n", day, people - 450) #何日目になれば450人を超えるか出す c )もとにしたプログラムと変更点 もとにしたプログラムは、while_meta.rbである。 変更点:年(year)を日にち(day)とした。ウェスト(waist)を人(people)とした。 また、アルバイトをする人数の増え方が4倍になるというところ。 d )実行の結果 pan{HASEGAWA Mako}% ./while_alb.rb [~/Ruby] 1 日目 4 [人] 2 日目 16 [人] 3 日目 64 [人] 4 日目 256 [人] 5 日目 1024 [人] 5 日目には 450 [人] を 574 [人] 越えます。 e )bc-lを使って調べた結果 pan{c111122}% bc -l [~/Ruby] 1*4 4 #2日目からの アルバイトの人数 4*4 16 #3日目からの アルバイトの人数 16*4 64 #4日目からの アルバイトの人数 64*4 256 #5日目からの アルバイトの人数 256*4 1024 #6日目からの アルバイトの人数 よって、一致している。 3 . 感想 何度も繰り返しやっていると、徐々に操作を覚えていけた。 自分で設定したものが、きちんと反映されると面白かった。 また、他の人に分かりやすく伝えるために、スッキリとしたものを作らなければ 行けないと感じた。言葉の使い方にも注意したい。 参考文献 基礎プログラミング I 第 2 回 「Ruby の基礎 / 計算が終ったら止まる問題」 講義ノート 西村まどか http://roy/~madoka/2012/r1/02/lec/resume.html 基礎プログラミング I 2012年度講義ノート 書き方のヒント 西村まどか http://roy/~madoka/2012/rpt/multipart.html 共同学習者 岡田遼 高橋真優