第4回 基礎プログラミング I レポート課題 氏名:XXXXXXXX 学籍番号:C10XXXXXXX 語学クラス:英語(X) コース(系):社会 1. A.0xへの変換を(1)、0dへの変換を(2)とする。 (1) 0b10111 を 右から4桁毎に区切ると 1/0111 となる。 それぞれを10進数にする。 1=2^0*1 =1*1 =1 0111=(2^3)*0+(2^2)*1+(2^1)*1+(2^0)*1 =8*0+4*1+2*1+1*1 =7 1 も 7 も16以下で繰り上がらないので、そのまま二つの数字をつければよい。 よって0b10111=0x17 (2) 0b10111とは2^4が1、2^3が0、2^2が1、2^1が1、2^0が1 あるということなので 0b10111=0d2^4*1+2^3*0+2^2*1+2^1*1+2^0*1 =0d(16*1)+(8*0)+(4*1)+(2*1)+(1*1) 0b10111=0d23 B. 設定:今度の休日の予定を、天気別に立ててみた。 晴れたら海へ行き、12時には帰る。 くもりなら買い物に行き、15時には帰る。 そうでない天気、つまり 雨なら 部屋の掃除をすることにした。 プログラム風に表すと 天気 = weather 晴れ = fine くもり = cloud 雨 = rain 時間 = time 掃除 = clean 海へ = sea 買い物 = shopping if weather == fine then sea if time == 12 break end elsif weather == cloud shopping if time == 15 break end else clean end となる。 2.B(while_bank.rb)を選択。 a.設定 1ヶ月の金利が0.6 %のとき、ある金額が 1年間の間にどれだけ増えるか、毎月の利息を表示しながら利息の額を調べるプログラムを作成。 b.作成プログラム while_bank.rb #!/usr/koeki/bin/ruby month = 1 # 経過した月 total = 0 # 金利の合計 STDERR.printf("預金額を入力して下さい:") # 預金額の入力を促す deposit = gets.to_i #入力された預金額を depositに入れる while true # while文の開始 if month == 1 # 1ヶ月目の条件 interest = deposit * 0.006 #利子を求めるため、depositに金利の0.006をかける printf("%dヶ月目の利息は%d円です。\n",month,interest) #1ヶ月目の利息額の表示 else #それ以外 = 2ヶ月目以降 の条件 deposit *= 1.006 # 預金額+利息 interest = deposit *0.006 #利息のみを求める printf("%dヶ月目の利息は%d円です。\n",month,interest) #毎月の利息額の表示 end #if,else文 終了 total += interest # 利息年額を求めるため利息を足していく month += 1 # 月を1ヶ月ずつ足していく if month == 13 # 12ヶ月を超えたら、 break # 計算をやめるよう指示。 end # if文 終了 end # while true文 終了 printf("一年間で利息は %d 円になります。\n",total) # 結果の表示 c.変更点 授業の第三回で扱ったwhile_calory.rbを元に作成。 預金額をdeposit, 経過した月をmonth, 利息をinterest,利息の合計をtotalと設定。 今回は始めに入力された数値をそのままでなく、計算を加えたものを足していく ようにした。ifとelseを使い、1ヶ月目とそれ以降の計算を異なるものにさせた。 1ヶ月目は単純に預金額に0.006をかけたが、それ以降はまず預金額に1.006をかけた ものを計算し、その後で利息だけを求めるように計算した。 金額に端数は有り得ないので、実際の金融機関はどのように処理しているか知らないが、 今回は小数点以下は四捨五入して計算させた。 また、特定の文字を入れさせるのではなく月の数を足していき、その数が条件にあっ たときやめるようにした。今回の場合は経過月が12をこえ13になったときである。 d.実行結果 pan{c108203}% ./while_bank.rb [~/Ruby] # 預金額を入力して下さい:5000000 1ヶ月目の利息は30000円です。 2ヶ月目の利息は30180円です。 3ヶ月目の利息は30361円です。 4ヶ月目の利息は30543円です。 5ヶ月目の利息は30726円です。 6ヶ月目の利息は30910円です。 7ヶ月目の利息は31096円です。 8ヶ月目の利息は31282円です。 9ヶ月目の利息は31470円です。 10ヶ月目の利息は31659円です。 11ヶ月目の利息は31849円です。 12ヶ月目の利息は32040円です。 一年間で利息は 372120 円になります。 e.考察 bc -lを使い、月々の利息を求める。小数点以下は四捨五入し計算する。 5000000*1.006 5030000.000 5030000-5000000 30000 5030000*1.006 5060180.000 5060180-503000 4557180 5060180-5030000 30180 5060180*1.006 5090541.080 5090541-5060180 30361 5090541*1.006 5121084.246 5121084-5090541 30543 5121084*1.006 5151810.504 5151811-5121084 30727 5151811*1.006 5182721.866 5182722-5151811 30911 5182722*1.006 5213818.332 5213818-5182722 31096 5213818*1.006 5245100.908 5245101-5213818 31283 5245101*1.006 5276571.606 5276572-5245101 31471 5276571*1.006 5308230.426 5308230-5276571 31659 5308230*1.006 5340079.380 5340079-5308230 31849 5340079*1.006 5372119.474 5372119-5340079 32040 ここまでが、毎月の利息額である。 月々の利息を足すと 30000+30180+30361+30543+30727+30911+31096+31283+31471+31659+31849+32040 372120 なのでこのプログラムは正常に作動している。 f.参考文献はレポートの最後に表記。 3. while_bank.rbを作成しているとき、前の月に増えた利息のことを考慮していな かった。なので始め、毎月、1ヶ月目と同じ額ずつ利息が増えていくプログラムを作 ってしまった。 冷静に考えれば、毎月同じなら問題に「毎月の利息を表示しながら」 と書いてある意味が分からない。そうして考え、前月までの利息も考慮すべきであると気付いた。 今回は金曜日の夜から課題に取り組みはじめた。そして土曜日に勘違いに気付いた。 そのため誰かに質問できず、日曜日、丸一日悩みどうにか自分なりの解決に至った。 もっと早く課題に取り組めば早めにこの間違いに気付き、TAや先生などに質問できただろう。次回からはもっと早く取り組まなくてはと反省した。 参考文献 『西村まどかクラス プログラミング手引き』西村組TA一同 p3,4 参考WEBページ 西村まどか 製作 基礎プログラミング講義ノート > 第4回 プログラミングの方法 より 「もしもそうならば」 http://roy/~madoka/2010/r1/04/04_03_theme_01_branch.html 「数値計算の結果で使える method の紹介」 http://roy/~madoka/2010/r1/04/04_23_appendix_09_library.html > 第3回 キーボードから入力して計算させるには より 「カロリー計算プログラム」 http://roy/~madoka/2010/r1/03/03_10_theme_07_while_calory.html 協力者:妹(工業高校2年) # 問1,A