To: ruby-04-19@e.koeki-u.ac.jp Subject: 第2回 プログラミングの練習 Date: Fri, 19 Apr 2013 12:53:09 +0900 (JST) X-Mailer: Mew version 6.3 on Emacs 23.3 / Mule 6.0 (HANACHIRUSATO) 氏名: Lovesugar 学籍番号: C1120753 クラス: 7 1. 自分が考えた問題文 ある地区には、高齢者の人口が1000人います。 1年に50%ずつ増えていくとすると、8000人を超えるのは何年後でしょうか。 2. それを解くために作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp p=p0=1000 y=0 while p < 8*p0 p *= 1.5 printf("%3d年\t%d人\n", y+=1, p) end 3. どのように考えて改良したかの説明 まず、このプログラムはpopulation.rbを改良したものであるため、 もとのプログラムを参考にした上で、どこを改良したのかを説明していく。 もともとの問題とプログラムは、 「人口10万人の都市がある。1年に10%ずつ増加するとした場合、 人口が20万人になるのは何年後か。」 #!/usr/koeki/bin/ruby # coding: euc-jp p=p0=100000 y=0 while p < 2*p0 p *= 1.1 printf("%3d年\t%d人\n", y+=1, p) end まず、もとの人口である10万人を表している部分は p=p0=100000の100000の数字である。 オリジナルの問題にある、もともとの高齢者の人口の1000人が それに相当する部分であるため、この部分を p=p0=1000に書き換える。 次に、1年に10%ずつ増加する、という部分は p *= 1.1の1.1の数字で表されている。 なぜ、1.1で10%なのかというと、 1.1を100倍すると110になり、 100にたいして10%加わるという意味になるからである。 オリジナルの問題にある、 1年に50%増えていくという部分がそれに相当する部分である。 50%増加することをあらわすためには、100に対して50をたす。 150を100で割ると、1.5になる。 p *= 1.5に書き換える。 最後に、人口が20万人になるのはいつか、という部分は、 while p < 2*p0の部分で表されている。 これは、もともとの人口が1万人であるのに対し、 1万人に2倍にする、ということを数字の2が表している。 オリジナルの問題にある、8000人になるのはいつかという部分は、 オリジナルの問題のもともとの人口が1000人であることから、 1000人に8倍することをプログラムで表せばいい。 そのために、while p < 8*p0に書き換える。 4. プログラムを実行した結果画面 pan{c112075}% ./population.rb [~/Ruby] 1年 1500人 2年 2250人 3年 3375人 4年 5062人 5年 7593人 6年 11390人 5.感想 自分なりに意味を考えて説明するのはとても難しかったです。 特に今回はとても文章が長くなってしまい、簡潔に説明する難しさも感じました。 読みづらいかもしれませんが一生懸命かいたのでよろしくお願いします。