第2回 基礎プログラミング I レポート課題 氏名:伊藤 彩 学籍番号:c1090207 語学クラス:中国語1 コース(系):政策 1. 筆記問題 1-A 1日目に1個の卵が孵化している。 翌日には前日の4倍孵化するということから (前日に孵化した卵の個数)*4 という式が成り立つと考えられる。 この式に当てはめて計算すると 2日目は4個の卵が孵化する。(1 * 4 = 4) 3日目は16個の卵が孵化する。(4 * 4 = 16) 4日目は64個の卵が孵化する。(16 * 4 = 64) 5日目は256個の卵が孵化する。(64 * 4 =256) 以上の結果から、200個の卵が全て孵化するのには5日間かかる。 2. プログラム問題 2-A 上限があり、初期値が与えられてる問題であることから 授業中に使用したwhile_meta.rbを参考にして while -- endを使用してプログラムを作成できると考えた。 1.Aの筆記問題を考察とし、プログラムを作成した。 作成したプログラム #!/usr/koeki/bin/ruby day = 1 # 日にち(2日目から計算) egg = egg0 = 1 # 初日に孵化した卵の個数 eggmax = 200 # 孵化する卵の上限 while egg < eggmax printf("%d 日後 \t %1.04f [個]\n", day += 1, egg *= 4) end printf("%d 日後には 200 [個] を 越えます。\n", day, egg - 200) プログラム実行結果 2 日後 4.0000 [個] 3 日後 16.0000 [個] 4 日後 64.0000 [個] 5 日後 256.0000 [個] 5 日後には 200 [個] を 越えます。 答えの確認 pan{c109020}% bc -l [~] 1 * 4 4 4 * 4 16 16 * 4 64 64 * 4 256 quit プログラム作成において参考にしたwhile_meta.rbからの変更点 yearを日にちを表すdayに変更。 waistを卵を表すeggに変更。 waistmaxを卵の上限数を表すeggmaxに変更。 "年後"を"日後"に変更。 [cm]を[個]に変更。 数値を問題文に適した値に変更。 2-B Aと同様、上限があり、初期設定が定められている問題なので 授業で扱ったwhile_meta.rbを参考にして while -- endを使用してプログラムを作成できると考えた。 考察 Aの問題と同様に考えと、 (前日に献上した宝石の数)*2 という式が成り立つと考えられる。 [前日の倍献上するようなので、*2となる] この式を当てはめて計算すると 1日目1個献上。(問題文より) 2日め2個献上。 (1 * 2 = 2) 3日目4個献上。 (2 * 2 = 4) 4日目8個献上。 (4 * 2 = 8) 5日目16個献上。(8 * 2 = 16) 6日目32個献上。(16 * 2 = 32) 7日目64個献上。(32 * 2 = 64) 8日目128個献上。(64 * 2 = 128) 9日目256個献上。(128 * 2 = 256) 以上の結果から8日間求婚しつづけられる。 作成したプログラム #!/usr/koeki/bin/ruby day = 1 #日にち(2日目から計算) j = j0 = 1 #初日に献上した宝石の数 jmax = 200 #献上出来る宝石の上限 while j < jmax printf("%d 日後 \t %f [個]\n", day += 1, j *= 2) end printf("%d 日後には 200 [個] を %f [個] 越えます。\n", day, j - 200) プログラム実行結果 2 日後 2.000000 [個] 3 日後 4.000000 [個] 4 日後 8.000000 [個] 5 日後 16.000000 [個] 6 日後 32.000000 [個] 7 日後 64.000000 [個] 8 日後 128.000000 [個] 9 日後 256.000000 [個] 9 日後には 200 [個] を 56.000000 [個] 越えます。 答えの確認 pan{c109020}% bc -l [~] 1 * 2 2 2 * 2 4 4 * 2 8 8 * 2 16 16 * 2 32 32 * 2 64 64 * 2 128 128 * 2 256 quit プログラム作成において参考にしたwhile_meta.rbからの変更点 yearを日にちを表すdayに変更。 waistを宝石を表すアルファベットjに変更。 waistmaxを宝石の上限数を表すjmaxに変更。 "年後"を"日後"に変更。 [cm]を[個]に変更。 数値を問題文に適した値に変更。 2-C オリジナル問題 100円玉が300枚入る貯金箱を買った。 初日に1枚の100円玉を入れ、翌日から前日の倍貯金することとした。 倍々貯蓄法が成功し、貯金箱をいっぱいにするまでには何日かかるか? 考察 今回の課題の解き方と同じように考え、式を立て、while_meta.rbを参考にして while -- endを使用してプログラムを作成していけばよいと考えた。 この問題を求めるためには (前日貯金した枚数)*2 の式が成り立つと考えられる。 [前日の倍貯金するようなので*2となる] この式を当てはめて計算すると 1日目1枚 (問題文より) 2日目2枚 (1 * 2 = 2) 3日目4枚 (2 * 2 = 4) 4日目8枚 (4 * 2 = 8) 5日目16枚 (8 * 2 = 16) 6日目32枚 (16 * 2 = 32) 7日目64枚 (32 * 2 = 64) 8日目128枚 (64 * 2 = 128) 9日目256枚 (128 * 2 = 256) 10日目521枚 (256 * 2 = 521) 以上の結果から10日間で貯金箱はいっぱいになる。221枚(22100円分)余る。 作成したプログラム pan{c109020}% ./put_snail.rb [~/Ruby] 2 日後 2.000000 [枚] 3 日後 4.000000 [枚] 4 日後 8.000000 [枚] 5 日後 16.000000 [枚] 6 日後 32.000000 [枚] 7 日後 64.000000 [枚] 8 日後 128.000000 [枚] 9 日後 256.000000 [枚] 10 日後 512.000000 [枚] 10 日後には 300 [枚] を 212.000000 [枚] 越えます。 答えの確認 pan{c109020}% bc -l [~] 1 * 2 2 2 * 2 4 4 * 2 8 8 * 2 16 16 * 2 32 32 * 2 64 64 * 2 128 128 * 2 256 256 * 2 512 quit プログラム作成において参考にしたwhile_meta.rbからの変更点 yearを日にちを表すdayに変更。 waistをお金(100円)を表すアルファベットmに変更。 waistmaxをお金(100円)の枚数の上限を表すmmaxに変更。 "年後"を"日後"に変更。 [cm]を[枚]に変更。 数値を問題文に適した値に変更。 3.感想 課題を通して、内容の復習がしっかりできた。 難しかったが、1つ1つの操作を覚えていくうちに楽しくなった。 プログラミングはたいへんだと先輩方からよく聞くので、 これからの授業にも真面目に取り組んでいきたい。 手間をかけた分だけ、手順やコマンドなど、学ぶことも多かった。 タイピングも早くなった気がする。 これからも、知識を増やし、技術を習得する姿勢を持って挑んでいきたい。 できる女を目指して頑張ります。 4.参考文献 基礎プログラミング I 第2回 「Rubyの基礎/計算が終わったら止まる問題」 メタボリック症候群(講義ノート) http://roy/~madoka/2010/r1/02/02_09_theme_07_while_meta.html 西村 まどか 共同学習者 小松 由里 小松 志保 ================ 東北公益文科大学 2年 伊藤 彩 Aya Ito c109020@e.koeki-u.ac.jp