見直したところ 1.B. の文章に抜け落ちがあったので、再送信します。 第 4 回 プログラミングの方法 レポート課題 氏名:高橋岬 学籍番号:c1110973 語学クラス:英語5 コース:環境サイエンスコース 1.A.0b10101の変換 0bは2進法なので、分解すると 1 0 1 0 1 * * * * * 2^4 2^3 2^2 2^1 2^0 となる。 これを計算すると 16+4+1=21 となり、これが10進法の答えとなる。 これを16進法で表すために分解すると 21=16+5 となるので、 1 5 * * 16^1 16^0 とすることができる。 よって答えは 0b10101 = 0d21 = 0x15 B.考えた出来事 お爺さんが竹を取りに行く過程をプログラムで表します。 お爺さんは竹を5本しか背負うことができないので5本しか竹を取りません。 5本取るか、女の子を見つけたらお婆さんの待つ家に帰ります。 竹 = 0 while true if 竹 == 5 or 竹の様子 == "輝く" break end if 竹を取る 竹の様子 = gets.chomp if 竹の様子 /= "輝く" 竹 += 1 end end end お婆さんの待つ家に帰る 2.C.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp printf("2012年6月のポイント取得状況\n") # kterm上に表示させる言 葉(プログラムの名前のようなもの) STDERR.print("何日の買い物ですか?: ") # kterm上に表示させる言葉 (入力させたい文字への導入) day = gets.to_i # キーボードからの入力を受け付ける total = 0 # 合計金額 point = 0 # ポイント数 point10 = 0 #10倍のポイント d = (day + 4) % 7 # 2012 年の 6月1日 は金曜日 if d == 0 # 計算機の日曜日 wday = "日" elsif d == 1 # 計算機の月曜日 wday = "月" elsif d == 2 # 計算機の火曜日 wday = "火" elsif d == 3 # 計算機の水曜日 wday = "水" elsif d == 4 # 計算機の木曜日 wday = "木" elsif d == 5 # 計算機の金曜日 wday = "金" else # else は上記のどれにも当てはまらない場合(ここでは d == 6 つまり計算機の土曜日)を表している wday ="土" end printf("2012年6月%d日%s曜日\n", day, wday) # 日付 while true # 条件が合わない限り計算を続ける STDERR.print("いくらですか?(打ち込み終了は[q]): ") # kterm上 に表示させる言葉(入力させたい文字への導入) money = gets.chomp # キーボードからの入力を受け付ける if d == 3 # 水曜日だったら if money == "q" # "q"を入力 printf("合計 %d 円 : 取得ポイント %d (水曜日はポイント10倍)\n", total, point10) # 買い物の合計金額 : 取得ポイント (補助書き) break # 計算をやめる elsif # 入力された文字が"q"以外 money = money.to_i # 入力された文字を整数として扱う end elsif d /= 3 # 水曜日ではなかったら if money == "q" # "q"を入力 printf("合計 %d 円 : 取得ポイント %d \n", total, point # 買い物の合計金額 : 取得ポイント ) break # 計算をやめる elsif # 入力された文字が"q"以外 money = money.to_i # 入力された文字を整数として扱う end end total += money # 買い物の合計金額 point = total / 100 # 通常のポイントの計算(小数点を切り捨てる ために / で計算) point10 = point * 10 # ポイント10倍の計算(ポイントが10倍になる ので素直にポイントを10倍する) end 実行したプログラム a.水曜日以外の日 2012年6月のポイント取得状況 何日の買い物ですか?: 8 2012年6月8日金曜日 いくらですか?(打ち込み終了は[q]): 190 いくらですか?(打ち込み終了は[q]): 675 いくらですか?(打ち込み終了は[q]): 1980 いくらですか?(打ち込み終了は[q]): 134 いくらですか?(打ち込み終了は[q]): q 合計 2979 円 / 取得ポイント 29 b.水曜日 2012年6月のポイント取得状況 何日の買い物ですか?: 6 2012年6月6日水曜日 いくらですか?(打ち込み終了は[q]): 190 いくらですか?(打ち込み終了は[q]): 675 いくらですか?(打ち込み終了は[q]): 1980 いくらですか?(打ち込み終了は[q]): 134 いくらですか?(打ち込み終了は[q]): q 合計 2979 円 / 取得ポイント 290 (水曜日はポイント10倍) 考察 a.b.ともに 合計金額 190 + 675 + 1980 + 134 = 2979 通常ポイント 2979 / 100 = 29.79 10倍ポイント 29.79 * 10 = 297.9 この計算ではポイントを10倍したときに297ポイントとなってしまう。 作成したプログラムの計算で使っている / は、商の整数部分だけを表示し 小数点は切り捨てる。( total * 0.01 にしてしまうと小数点も表示されて しまう) 水曜日に total / 10 とせず point * 10 つまり (total / 100) * 10 とし ているのもこのためである。 なので実行したプログラムの取得ポイントは合っている。 よってこのプログラムは正しい数値を出している。 参考にしたプログラム 4.プログラミングの方法 の授業時に作成した Ruby/cal_cal.rb Ruby/cal_rem.rb 3.感想 前回の課題に比べて難しかった。 授業の場合は、先生の作ったプログラムを写すのに精一杯で考える余裕が無い が条件の違うときにどのように計算させるのか、曜日を正しく表示するにはど のような計算式にすれば良いのかが今回のポイントだったと思う。 また、 2. の解答していないプログラムについては、作成してみたものの、中 途半端になってしまった。 A. の16進数を2進数に変換するプログラムでは16進数を10進数に変換し、そ の10進数を2進数に変換することはできたが、a~f までの6つの文字を数字とし て計算させることが出来なかった。 B. の月の最終日の曜日が分かるとその月のカレンダーを表示するプログラム では、2012年にしか対応することが出来なかったのと、文字量が多くなってし まってこれで正しいのか自信が持てなかった。 4.その他 2.A. 参考にしたプログラム 4.プログラミングの方法 の授業時に作成した Ruby/cal_bin.rb 参考文献 2012年度授業用ページ(担当:神田直弥) 基礎プログラミング (9) 06/18の授業内容:16進数・ASCIIコード http://roy/~naoya/ruby/9.html 2.B. 参考にしたプログラム 4.プログラミングの方法 の授業時に作成した Ruby/cal_cal.rb ------------------------- 高橋 岬 東北公益文科大学 2年 c111097@g.koeki-u.ac.jp -------------------------