今までのレポート課題を全て再提出します。 第7回 専門演習紹介 レポート課題 氏名:佐藤 咲 学籍番号:c1110772 語学クラス:英語 コース:政策 1、広告ホームページアドレス http://roy.e.koeki-u.ac.jp/~c111077/adv2/ A. a.仕様書 (siyou.txt) http://roy.e.koeki-u.ac.jp/~c111077/adv2/siyou.txt b.プログラム (program.rb) http://roy.e.koeki-u.ac.jp/~c111077/adv2/program.rb c.未完成です d.広告ページ http://roy.e.koeki-u.ac.jp/~c111077/adv2/index.html i.考えた設定 購入した金額にポイントが加算されるプログラム ii.作成したプログラム (program.rb) #!/usr/koeki/bin/ruby #coding: euc-jp def xmas(x,y) x * y end def xmas2(z) z / 1000 end print("-~-~-Christmas Cake fair 2012-~-~-\n\n") cake = Hash.new # 新しいHashを cakeとする cake[1] = ["トリュッフルトルテ",3990] cake[2] = ["クリスマスショコラケーキ",5250] cake[3] = ["ビュシュ・ドゥ・ノエル",3990] cake[4] = ["ショコラ・ノエル",3675] cake[5] = ["モガドール",3780] cake[6] = ["ショコラ・ルージュ",3360] cake[7] = ["ガトーエスメラルダ",3990] cake[8] = ["クリスマスショートケーキ",3675] cake[9] = ["ノエルフレーズ",3675] cake[10] = ["苺のショートケーキ",4200] cake[11] = ["栗のショートケーキ",4300] cake[12] = ["フルーツタルト",3675] cake[13] = ["ピスタチオ・フレーズ・ノエル",2625] cake[14] =["スウィートハピネス",3675] cake[15] = ["クリスマス・モンブランシュタム",3675] cake[16] = ["ノエル・シャルロットフレーズ",3675] cake[17] = ["ハーモニー・キャラメルマロン",3465] cake[18] = ["クリスマス・バウムトルテ",3465] cake[19] = ["木苺のショコラノエル",3000] cake[20] = ["ニュールンベルグ",3100] for name , money in cake #cake のkey をname,value をmoney とする printf("%d: %s %s円 \n",name,money[0],money[1]) end total =0 print("-----------------------------------------------------------\n") print("\n") print("いらっしゃいませ。\n") print("お好きなケーキの番号と個数を御入力下さい。(Ctrl-Dで終了)\n") while true #繰り返しのメソッド print("\n") STDERR.printf("商品番号: ") number = gets if number == nil break end number = number.to_i #番号で注文してもらう if cake.key?(number) == true STDERR.print("個数: ") kosuu = gets.to_i # 個数を入力してもらう total += xmas(kosuu,cake[number][1]) else # cake.key?(number) == false printf("%d番 の商品はございません。もう一度、御確認の上 入力して下さい。\n",number) break # while true- end から抜ける end end printf("お会計金額は %s円 になります。\n",total) printf("%dポイントが入りました。\n\n",xmas2(total)) STDERR.print("お支払金額 [円]: ") # 入力を促す cash = gets.to_i oturi = cash - total # お釣り = 支払金額 - 購入金額 if cash > total printf("%d円 お預かり致します。%d円 のお返しです。\n",cash,oturi) elsif cash == total printf("%d円 ちょうどお預かり致します。\n",cash) else cash <= total printf("%d円 足りません。\n",oturi) end print("\nありがとうございました。") print("\n-----------------------------------------------------------\n") iii.もとにしたプログラムからの変更点 以前のレポート課題で作成した two_methods.rb をもとにプログラムを作成した。 two_methods.rb のプログラムでは、2種類のものの値段が決まっていて、個数を 入力すると合計金額が出るというものだったが、今回のプログラムは Hashを用 いて、商品の番号と個数を入力するというものにした。 iv.実行結果 <パターン1(ちょうど)>-- お会計金額 = お支払金額 -- pan{c111077}% ./adv2/program.rb [~/public_html] -~-~-Christmas Cake fair 2012-~-~- 1: トリュッフルトルテ 3990円 2: クリスマスショコラケーキ 5250円 3: ビュシュ・ドゥ・ノエル 3990円 4: ショコラ・ノエル 3675円 5: モガドール 3780円 6: ショコラ・ルージュ 3360円 7: ガトーエスメラルダ 3990円 8: クリスマスショートケーキ 3675円 9: ノエルフレーズ 3675円 10: 苺のショートケーキ 4200円 11: 栗のショートケーキ 4300円 12: フルーツタルト 3675円 13: ピスタチオ・フレーズ・ノエル 2625円 14: スウィートハピネス 3675円 15: クリスマス・モンブランシュタム 3675円 16: ノエル・シャルロットフレーズ 3675円 17: ハーモニー・キャラメルマロン 3465円 18: クリスマス・バウムトルテ 3465円 19: 木苺のショコラノエル 3000円 20: ニュールンベルグ 3100円 ----------------------------------------------------------- いらっしゃいませ。 お好きなケーキの番号と個数を御入力下さい。(Ctrl-Dで終了) 商品番号: 3 個数: 2 商品番号: 4 個数: 1 商品番号: お会計金額は 11655円 になります。 11ポイントが入りました。 お支払金額 [円]: 11655 11655円 ちょうどお預かり致します。 ありがとうございました。 ----------------------------------------------------------- <パターン2(お釣り有)>-- お会計金額 <= お支払金額 -- pan{c111077}% ./adv2/program.rb [~/public_html] -~-~-Christmas Cake fair 2012-~-~- 1: トリュッフルトルテ 3990円 2: クリスマスショコラケーキ 5250円 3: ビュシュ・ドゥ・ノエル 3990円 4: ショコラ・ノエル 3675円 5: モガドール 3780円 6: ショコラ・ルージュ 3360円 7: ガトーエスメラルダ 3990円 8: クリスマスショートケーキ 3675円 9: ノエルフレーズ 3675円 10: 苺のショートケーキ 4200円 11: 栗のショートケーキ 4300円 12: フルーツタルト 3675円 13: ピスタチオ・フレーズ・ノエル 2625円 14: スウィートハピネス 3675円 15: クリスマス・モンブランシュタム 3675円 16: ノエル・シャルロットフレーズ 3675円 17: ハーモニー・キャラメルマロン 3465円 18: クリスマス・バウムトルテ 3465円 19: 木苺のショコラノエル 3000円 20: ニュールンベルグ 3100円 ----------------------------------------------------------- いらっしゃいませ。 お好きなケーキの番号と個数を御入力下さい。(Ctrl-Dで終了) 商品番号: 3 個数: 2 商品番号: 4 個数: 1 商品番号: ^D お会計金額は 11655円 になります。 11ポイントが入りました。 お支払金額 [円]: 12000 12000円 お預かり致します。345円 のお返しです。 ありがとうございました。 ----------------------------------------------------------- <パターン3(支払不足)>-- お会計金額 >= お支払金額 -- pan{c111077}% ./adv2/program.rb [~/public_html] -~-~-Christmas Cake fair 2012-~-~- 1: トリュッフルトルテ 3990円 2: クリスマスショコラケーキ 5250円 3: ビュシュ・ドゥ・ノエル 3990円 4: ショコラ・ノエル 3675円 5: モガドール 3780円 6: ショコラ・ルージュ 3360円 7: ガトーエスメラルダ 3990円 8: クリスマスショートケーキ 3675円 9: ノエルフレーズ 3675円 10: 苺のショートケーキ 4200円 11: 栗のショートケーキ 4300円 12: フルーツタルト 3675円 13: ピスタチオ・フレーズ・ノエル 2625円 14: スウィートハピネス 3675円 15: クリスマス・モンブランシュタム 3675円 16: ノエル・シャルロットフレーズ 3675円 17: ハーモニー・キャラメルマロン 3465円 18: クリスマス・バウムトルテ 3465円 19: 木苺のショコラノエル 3000円 20: ニュールンベルグ 3100円 ----------------------------------------------------------- いらっしゃいませ。 お好きなケーキの番号と個数を御入力下さい。(Ctrl-Dで終了) 商品番号: 3 個数: 2 商品番号: 4 個数: 1 商品番号: ^D お会計金額は 11655円 になります。 11ポイントが入りました。 お支払金額 [円]: 10655 -1000円 足りません。 ありがとうございました。 ----------------------------------------------------------- v.考察 実行結果では、支払い金額によって、きちんとif,elsif,else--end が機能する かを確かめるため、購入する商品と個数は3パターンとも同じにした。 実行した結果の3つのパターンを それぞれbc -l を用いて確かめ算した。 <パターン1(ちょうど)>-- お会計金額 = お支払金額 -- pan{c111077}% bc -l [~/public_html] 3990*2 +3675*1 11655 11655 /1000 11.65500000000000000000 11655 - 11655 0 quit <パターン2(お釣り有)>-- お会計金額 <= お支払金額 -- pan{c111077}% bc -l [~/public_html] 3990*2 +3675*1 11655 11655 /1000 11.65500000000000000000 12000 - 11655 345 quit <パターン3(支払不足)>-- お会計金額 >= お支払金額 -- pan{c111077}% bc -l [~/public_html] 3990*2 +3675*1 11655 11655 /1000 11.65500000000000000000 10655 -11655 -1000 quit ポイントは1000円で1ポイント加算される仕組みである。 この場合、お会計金額11655円なので、 11655 /1000 11.65500000000000000000 となり、つまり11ポイントなので正しい。 以上のことより、プログラムの実行結果と確かめ算の数値は一致したため、プログラムは 正しい。 2、感想 今まで、Hash とdef を組み合わせたプログラムを作成したことがなかったので、 最初どこに何の関数や変数を持ってくればいいのか、戸惑い、時間がかかってし まった。 今回は1つのHashだけでだったが、これからHashの種類を増やして、ケーキ以外の食 べ物も選べるように改良するつもりだ。 また、10日に101教室で作業していたら、パソコンが何度も落ちたり、フリーズ したり、Royのトップページの表示が白黒になったり、"JavaScript Application"という表示が出て作業がしずらかった。 3、参考文献 高島屋 クリスマスケーキ www.takashimaya.co.jp/