講評: シンプルながらよくできています。 計算の結果を確かめてあれば、もっと得点できました。 ---- 10 月 10 日 第 2 回レポート 「Hash 配列」 学籍番号: c106XXXX 氏名: XXXXXXXX 語学クラス: XXXX語 系: XXXX系 1、バイト先の料理をhash配列ryouriにして、 keyを具材にして、valueを料理名にする。 key = value 1) 「エビ、ネギ、玉葱、トマト」 = 「エビチリ」 2) 「鳥、ネギ、タマネギ、麺」 = 「鳥とネギの土鍋麺」 3) 「エビ、ホタテ、イカ、卵、ご飯」 = 「天津飯」 4)「挽肉、玉葱、ザーサイ、卵、ご飯」 = 「卵たっぷり炒飯」 5) 「豚肉、山芋、木耳、小松菜、麺」 = 「田舎焼きそば」 * 1行に1つの組み合わせ、後に次々に対を足していく方法 ryouri["エビ、ネギ、玉葱、トマト"] = エビチリ ryouri["鳥、ネギ、タマネギ、麺"] = 鳥とネギの土鍋麺 ryouri["エビ、ホタテ、イカ、卵、ご飯"] = 天津飯 ryouri["挽肉、玉葱、ザーサイ、卵、ご飯"] = 卵たっぷり炒飯 ryouri["豚肉、山芋、木耳、小松菜、麺"] = 田舎焼きそば * いくつもの1行で書き込む方法 ryouri = {"エビ、ネギ、玉葱、トマト"=>エビチリ,"鳥、ネギ、タマネギ、麺 "=>鳥とネギの土鍋麺, "エビ、ホタテ、イカ、卵、ご飯"=>天津飯, "挽肉、玉 葱、ザーサイ、卵、ご飯"=>卵たっぷり炒飯, "豚肉、山芋、木耳、小松菜、麺 "=>田舎焼きそば } 2、計算問題。 A,0d 1022 = 0x ?? od 1022 = 1022/2 = 511/2 = 255/2 = 127/2 = 63/2 = 31/2 = 15/2 = 余り = 0 = 1 = 1 = 1 = 1 = 1 = 1 = 7/2 = 3/2 = 1 1 = 1 = 1 ← A.Od 1022 = Ob1111111110 * 2進数を16進数に変換すると 1111111110 1110 = e 1111 = f 0011 = 3 ← A.0x = 3fe B,0d 1022 = 0b ?? od 1022 = 1022/2 = 511/2 = 255/2 = 127/2 = 63/2 = 31/2 = 15/2 = 余り = 0 = 1 = 1 = 1 = 1 = 1 = 1 = 7/2 = 3/2 = 1 1 = 1 = 1 ← A.Od 1022 = Ob1111111110 A,0d 1022 = Ob 1111111110 上の問題を解くときに同じことをしていたので、確認のため同様に計算してみま した。 3, プログラム A,中華プログラム1 注文した料理の値段を??人前分の値段を計算するプログラム。 #!/usr/koeki/bin/ruby $KCODE = 'e' benitora = Hash.new("非取扱い商品") benitora["ギョウザ"] = 550 benitora["エビチリ"] = 1280 benitora["ラーメン"] = 980 benitora["チャーハン"] = 780 benitora["焼きそば"] = 1180 benitora["アンニン"] = 380 print("御注文は...!?\n") for ryouri, price in benitora printf("%s\t%d\n", ryouri, price) end #p benitora STDERR.print("御注文する品物:\n") ryouri = gets.chomp STDERR.print("何人前ですか??:\n") ninzuu = gets.chomp.to_f p benitora.key?(ryouri) if benitora.key?(ryouri) == false printf("%sは%sです\n",ryouri, benitora[ryouri]) else printf("%s(%5.0f人)\t%5.0f円\n", ryouri, ninzuu, benitora[ryouri] * ninzuu) end C,変更点 item = ryouri shop = beitora weight = ninzuu D,実行結果 * 正しい商品入力した場合 irsv{c106046}% ./hash-for.rb [~/Ruby] 御注文は...!? エビチリ 1280 ラーメン 980 焼きそば 1180 チャーハン 780 ギョウザ 550 アンニン 380 御注文する品物: エビチリ 何人前ですか??: 10 true エビチリ( 10人) 12800円 * 非取扱い商品の場合 irsv{c106046}% ./hash-for.rb [~/Ruby] 御注文は...!? エビチリ 1280 ラーメン 980 焼きそば 1180 チャーハン 780 ギョウザ 550 アンニン 380 御注文する品物: 味噌汁 何人前ですか??: 10 false 味噌汁は非取扱い商品です F,参考文献 まどか先生のプログラミング2の 「なになにといえばこれこれ」からです。 a,中華プログラム2 中華料理名を記入し、値段を入力すると登録され、 ctrl-Dで登録された分を値段順に表示するプログラム。 #!/usr/koeki/bin/ruby benitora = Hash.new("非取扱い商品") print("中華料理の商品は???\n") print("** 入力は Ctrl-D\n") while true STDERR.print("取扱商品名:") ryouri = gets if ryouri == nil then break else ryouri = ryouri.chomp end STDERR.print("値段は??:") price = gets.chomp.to_i benitora[ryouri] = price end STDERR.print("入力終了 \n") $KCODE = 'e' #p benitora for ryouri, price in benitora do printf("%s\t%d\n", ryouri, price) end print("注文は???\n") benitora.keys.sort{ |prim,sorted| benitora[prim] <=> benitora[sorted] }.reverse.each{ |ryouri| printf("%s\t%d\n", ryouri, benitora[ryouri]) } c,変更点 item = ryouri shop = beitora weight = ninzuu b,実行結果 irsv{c106046}% ./hash-register.rb [~/Ruby] 中華料理の商品は??? ** 入力は Ctrl-D 取扱商品名:チャーハン 値段は??:780 取扱商品名:入力終了 チャーハン 780 注文は??? チャーハン 780 F,参考文献 まどか先生のプログラミング2の 「なになにといえばこれこれ」からです。 5,感想 今回のプログラムでは、自分がアルバイトしている中華料理屋さんを利用し てプログラムを作ってみたのですが、楽しくプログラムを作ることが出来まし た。Hash 配列は出来る間で大変だったけどできれば面白いと感じました。