第7回 ゼミ紹介 レポート課題 氏名:伊藤桜子 学籍番号:c1100265 語学クラス:英語6 コース:政策マネジメント 1、 A a, 仕様書 ◯企画意図 友だちとご飯を食べに行ったとき、お店の仕組みをプログラムに 取り入れることはできないかと考え、今回のプログラムを企画した。 今まで習ってきたプログラムの機能を最大限に活かせるような プログラムを作ろうと考えた。 ◯遊び方 ●実行方法 プログラムを保存したディレクトリに移動し、プログラムを実行します。例えばカレントディレクトリにあるrubyというディレクトリにプログラムを保存した場合 pan{c10xxxx}% でrubyディレクトリに移動し pan{c10xxxx}% ruby five.rb で実行できます。 ●遊び方 プログラムを起動するとこんなメッセージが出てきます。 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 まず、注文したいメニューを番号で入力します。 次に何人分注文するのかを入力します。 最後に合計が出てきます。 ◯連絡先 c110026@f.koeki-u.ac.jp b プログラム ◯考えた設定 イタリアンレストランに行った設定。メニューを表示し、番号で入力してもらい、 価格を足していく。そして最後に合計を表示する。赤ワインを選んだ場合は年齢 確認を行う。また、合計が3000円以上の場合は全体を3割引きにする。 ◯プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' def itaria(nedan,goukei) # 変数名 itaria 仮引数 nedan とgoukeiとする if goukei > 3000 # もし合計が3000円より大きかったら print("3割引きになります!!\n") nedan = goukei * 0.7 # 合計を3割引き else # それ以外の場合は nedan = goukei # 合計を表示する end end menu = Hash.new # Hash配列をmenuとする menu[1] = 820 menu[2] = 800 menu[3] = 750 menu[4] = 750 menu[5] = 680 menu[6] = 1000 menu[7] = 600 menu[8] = 550 menu[9] = 400 menu[10] = 450 goukei = 0 #合計の初期値 chumon = 0 #注文数の初期値 kakaku = [] #値段の配列 n = 0 # 配列の初期値 while true # 繰り返しメソッド STDERR.print("どのメニューが食べたいですか?(ご注文終了時は0)\n") print("\n") STDERR.print("3000円以上ご注文して頂きますと、3割引きになります。\n") print("\n") print("1、ナスとベーコンのスパゲッティ 820円\n") print("2、ナポリタン 800円\n") print("3、キノコとベーコンのトマトスパゲッティ 750円\n") print("4、ペスカトーレ 750円\n") print("5、アサリとバジルのリゾット 680円\n") print("6、赤ワイン 1000円\n") print("7、魚介類のサラダ 600円\n") print("8、モッツァレラチーズと季節の野菜のサラダ 550円\n") print("9、ティラミス 400円\n") print("10、パンナコッタ 450円\n") bango = gets.to_i # 注文は番号で入力してもらう kakaku[n] = menu[bango] # 入力してもらった番号の価格を表示 if bango == 0 # 入力した番号が0だったら break # while trueから抜ける elsif kakaku[n] == nil # 入力した番号がデータ以外の番号だったら printf("\n申し訳ありませんがそのようなものは取り扱っておりません\n", bango) break else # それ以外の場合 print("\n何人前ご注文なさいますか?\n") # 何人分かを聞く chumon = gets.to_i # 何人分かを入力してもらう end goukei += kakaku[n] * chumon # 合計に入力された番号の価格とx人分をかけたも # のを足す chumon = +1 # 注文数が1ずつ増える if bango == 6 # もし入力してもらった番号が6だったら print("年齢確認をします。あなたの年齢を教えて下さい。\n") nenrei = gets.to_i # 年齢を入力してもらう if nenrei >= 20 # 年齢が20以上だったら print("わかりました。\n") else # それ以外だったら sleep(0.5) print("未成年の方はご遠慮ください!!!!!!!!!!!!!!\n") goukei = 0 # 合計を0にする end end end sleep(0.5) print("\n") printf("ありがとうございます!お会計%d円です\n",itaria(goukei,goukei)) ◯変更点 後期の授業で学んだ ハッシュ配列とwhile trueメソッドを取り入れた。 ◯実行結果 ●普通に注文した場合 pan{ITO Sakurako}% ./kessaku.rb [~/Ruby] どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 1 何人前ご注文なさいますか? 1 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 5 何人前ご注文なさいますか? 1 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 9 何人前ご注文なさいますか? 1 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 0 ありがとうございます!お会計1900円です ●合計が3000円より高い場合 pan{ITO Sakurako}% ./kessaku.rb [~/Ruby] どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 1 何人前ご注文なさいますか? 4 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 7 何人前ご注文なさいますか? 1 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 0 3割引きになります!! ありがとうございます!お会計2716円です ●赤ワインを注文した場合(成年) pan{ITO Sakurako}% ./kessaku.rb [~/Ruby] どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 6 何人前ご注文なさいますか? 2 年齢確認をします。あなたの年齢を教えて下さい。 22 わかりました。 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 0 ありがとうございます!お会計2000円です ●赤ワインを注文した場合(未成年) pan{c110026}% ./kessaku.rb [~/Ruby] どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 6 何人前ご注文なさいますか? 3 年齢確認をします。あなたの年齢を教えて下さい。 19 未成年の方はご遠慮ください!!!!!!!!!!!!!! どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 2 何人前ご注文なさいますか? 1 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 0 ありがとうございます!お会計800円です ●データにないものを入力した場合 pan{c110026}% ./kessaku.rb [~/Ruby] どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 3 何人前ご注文なさいますか? 2 どのメニューが食べたいですか?(ご注文終了時は0) 3000円以上ご注文して頂きますと、3割引きになります。 1、ナスとベーコンのスパゲッティ 820円 2、ナポリタン 800円 3、キノコとベーコンのトマトスパゲッティ 750円 4、ペスカトーレ 750円 5、アサリとバジルのリゾット 680円 6、赤ワイン 1000円 7、魚介類のサラダ 600円 8、モッツァレラチーズと季節の野菜のサラダ 550円 9、ティラミス 400円 10、パンナコッタ 450円 123 申し訳ありませんがそのようなものは取り扱っておりません ありがとうございます!お会計1500円です ◯考察 ●普通に注文した場合 計算が合っているかbc -lで確かめてみると pan{c110026}% bc -l [~/Ruby] 820+680+400 1900 quit となり、実行結果と一致していることがわかる。 ●合計が3000円より高い場合 計算が合っているかbc -lで確かめてみると pan{c110026}% bc -l [~/Ruby] 820*4+600 3880 3880*0.7 2716.0 quit となり、実行結果と一致していることがわかる。 ●赤ワインを注文した場合(成年) 注文時に「6」を入力すると年齢確認をする文章が表示されるように print文で設定した。 入力してもらった年齢をnenrei = gets.to_iとして20歳以上だったら そのまま赤ワインの値段を合計に足すようにif文で設定した。 実行してみると正しい値段が表示されたのでこのプログラムは正しいといえる。 ●赤ワインを注文した場合(未成年) 上記と同様に注文時に「6」を入力すると年齢確認をする文章が表示されるように print文で設定した。 そして、入力してもらった年齢が20歳以上でなかったら合計を0円にするように if文で設定した。 実行時に赤ワインとナポリタンを注文すると赤ワインの分は合計に含まれず、 ナポリタンの値段だけが表示されていることが分かる。 よって、このプログラムは正しいと言える。 ●データにないものを入力した場合 注文時にキノコとベーコンのトマトスパゲッティを2人分入力し、データにはない「123」 を入力するとprint文で設定した通りの"申し訳ありませんがそのようなものは取 り扱っておりません"という文章が表示された。 会計もキノコとベーコンのトマトスパゲッティ分の値段しか表示されていないの でこのプログラムは正しいことがわかる。 計算をbc -lで確かめてみると pan{c110026}% bc -l [~/Ruby] 750*2 1500 quit となり、実行結果と一致していることがわかる。 d 広告ページ(リンク先) http://roy/~c110026/advertise2/ 2、感想 プログラムは最高傑作を作るということで後期の授業を通して学んだことを最大限に 活かそうと努力した。しかし、なかなかdefメソッドがうまく表示されないこと もあり、仕上げるまで時間もかかった。個人的に納得のいくプログラムができて 良かった。 htmlを作るのは苦手で今回は失敗が多かった。しかし新しく発見できたこよもあっ たので次に活かしたい。 3、参考文献 ◯イタリア料理 http://www.irecipes.mimoza.jp/recipes.html ◯西村先生の後期の授業第2回「覚える順番はちがうけれど答えは正しい」 http://roy/~madoka/2011/r2/02/r2_02_10_theme_09_memory.html ◯西村先生の後期の授業第2回「Hashにしまえるもの」 http://roy/~madoka/2011/r2/02/r2_02_12_theme_11_aryinhash.html ◯神田先生の前期の授業ページ第10回 http://roy/~naoya/ruby/10.html ●協同作成者 畠山貴衣さん、齋藤陽香さんとdefメソッドの確認を行った。 東北公益文科大学 公益学部 公益学科 2年 伊藤桜子 c110026@f.koeki-u.ac.jp