第2回 基礎プログラミング I レポート課題 氏名:宮川史礼 学籍番号:C1071948 語学クラス:英語1 コース(系):社会系 1.筆記問題 A. 日数 卵 合計 ___________________________________ 1日目 1個 2日目 4個 5個 3日目 16個 21個 4日目 64個 85個 ___________________________________ 5日目 256個 341個 計算の確認 1*4 4 4*4 16 4*16 64 4*64 256 1+4 5 5+16 21 21+64 85 85+256 341 よって、計算が成立した。 2.プログラム問題 A. 1.プログラムの設定 カタツムリの産んだ卵を、引数で設定し、while文を用いて計算させる プログラムを作成した。 2、作成したプログラム #!/usr/koeki/bin/ruby day = 0 #日数を表す引数 egg = egg0 = 1 #卵を表す引数 eggmax = 200 #卵の合計数を表す引数 while egg < eggmax #卵の合計数より孵化した卵の数が上回ると繰り返しを終了する。 printf("%d日後\t%f[個]\n",day += 1 , egg *=4) end printf("%d日後には200[個]を %d[個]越えます。\n",day,egg -200) printf("200[個]を越えるのは %d日目[個]越えます。\n",day +1) #printで文字列を表示させる。 #printfで引数に対応させる文字列を表示させる。 3.プログラムの実行結果 pan{c107194}% ./print_snail.rb [~/Ruby] 1日後 4.000000[個] 2日後 16.000000[個] 3日後 64.000000[個] 4日後 256.000000[個] 4日後には200[個]を 56[個]越えます。 200[個]を越えるのは 5日目[個]越えます。 4.計算の確認 pan{c107194}% bc -l [~/Ruby] 1*4 4 4*4 16 4*16 64 4*64 256 1+4 5 5+16 21 21+64 85 85+256 341 5.考察 この問題については、数学で言うところの方程式的な要素が含まれていると考え られる。たとえばここからの応用で、関数を始めとした数学の諸問題や諸計算に 対応できるのではないかとも思った。 B. 1.プログラムの設定 while文を使用して、瑠美姫に献上する宝石の数とそれによって求婚できる日数 の期限を表示するプログラムを作成した。 2. 作成したプログラム #!/usr/koeki/bin/ruby day = 0 #日にちを表す引数 takara = takara0 = 1 #姫に献上する宝を表す引数 takaramax = 200 #持っている宝の数を表す引数 while takara < takaramax #持っている宝の数より献上する宝の数が上回ると繰り返しを終了する printf("%d日後\t%d[個]\n",day += 1 , takara *=2) end print("------------------------------------------\n") #見やすくするための仕切り printf("%d日後には200[個]を %d[個]越えます。\n",day,takara -200) printf("200[個]を越えるのは %d日目[個]越えます。\n",day +1) print("------------------------------------------\n") print("1日目時点での合計:1個。\n") print("2日目時点での合計:3個。\n") print("3日目時点での合計:7個。\n") print("4日目時点での合計:15個。\n") print("5日目時点での合計:31個\n") print("6日目時点での合計:63個。\n") print("7日目時点での合計:127個。\n") print("8日目時点での合計:255個。\n") print("------------------------------------------\n") print("\n") #改行 print("\n") print("よって、求婚出来るのは7日目まで。\n") 3.実行結果 pan{c107194}% ./while_snail.rb [~/Ruby] 1日後 2[個] 2日後 4[個] 3日後 8[個] 4日後 16[個] 5日後 32[個] 6日後 64[個] 7日後 128[個] 8日後 256[個] ------------------------------------------ 8日後には200[個]を 56[個]越えます。 200[個]を越えるのは 9日目[個]越えます。 ------------------------------------------ 1日目時点での合計:1個。 2日目時点での合計:3個。 3日目時点での合計:7個。 4日目時点での合計:15個。 5日目時点での合計:31個 6日目時点での合計:63個。 7日目時点での合計:127個。 8日目時点での合計:255個。 ------------------------------------------ よって、求婚出来るのは7日目まで。 計算の確認 pan{c107194}% bc -l [~/Ruby] 1*2 2 2*2 4 4*2 8 8*2 16 16*2 32 32*2 64 64*2 128 128*2 256 1+2 3 3+4 7 7+8 15 15+16 31 31+32 63 63+64 127 127+128 255 よって、計算とプログラミングの結果が一致した。 5.考察 これもまた、方程式の要領が組み込まれていると考えた。今回は、ひとつの式に まとめることが出来なかった。ひとつの式にまとめた方が分かりやすいのではな いかとも思っている。 3.感想 先週と違い今回は、いきなり課題の難易度があがった。それだけに、ここに来る までに結構時間がかかってしまった。自分に基本的な部分での数学の心得でもあ れば、どうにかなりそうではある問題なのだがと、内心くやしいおもいをしてい る。結局のところ、じぶんにはそういった積み重ねがないために、今後もこれ以 上の苦労をするだろうという予想が頭に浮かんできた。 4.参考文献 西村先生のページ 基礎プログラミング I 第2回 Ruby の基礎 / 計算が終ったら止まる問題 「メタ ボリック症候群」 http://roy/~madoka/2010/r1/02/02_09_theme_07_while_meta.html基礎プログラ ミング I 第2回 Ruby の基礎 / 計算が終ったら止まる問題 「よい考察を行なう には」 http://roy/~madoka/2010/r1/02/02_18_theme_10_consideration.html 協力してくれたTA 五代儀公大