第 2 回 なになにといえばこれこれ レポート課題 氏名:高橋岬 学籍番号:c1110973 語学クラス:英語5 コース:環境サイエンスコース 1.A.世界の臭い食べ物を hash 配列 stinky としました。 stinky の key と value は 臭い食べ物の名前 と 食べられている国 にとりました。 その1: key 「シュール・ストレミング」に対して value 「スウェーデン」 その2: key 「ホンオ・フェ」に対して value 「韓国」 その3: key 「エビキュアーチーズ」に対して value 「ニュージーランド」 その4: key 「キビヤック」に対して value 「アラスカ/グリーンランド」 その5: key 「くさや」に対して value 「日本・伊豆諸島」 これに対応する Hash の表し方は また、もう一つの表し方は {"シュール・ストレミング"=>"スウェーデン", "ホンオ・フェ"=>"韓国", "エビキュアーチーズ"=>"ニュージーランド", "キビヤック"=>"アラスカ/グリーンランド", "くさや"=>"日本・伊豆諸島"} B.a.0d 2012 = 0x ?? 2012 / 16 = 125 ... 12(c) 125 / 16 = 7 ... 13(d) 7 / 16 = 0 ... 7 よって 0d2012 = 0x7dc b.0d 2012 = 0b ?? 2012 / 2 = 1006 ... 0 1006 / 2 = 503 ... 0 503 / 2 = 251 ... 1 251 / 2 = 125 ... 1 125 / 2 = 62 ... 1 62 / 2 = 31 ... 0 31 / 2 = 15 ... 1 15 / 2 = 7 ... 1 7 / 2 = 3 ... 1 3 / 2 = 1 ... 1 1 / 2 = 0 ... 1 よって 0d2012 = 0b11111011100 16進数への変換は、下の位から4桁ごと区切り16進数へ変換しいく 0111=7 1101=13 1100=12 よって 0b11111011100 = 0x7dc 2.A.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("\n世界の臭い物辞典\n\n") # kterm に表示する言葉 stinky = Hash.new # Hash 配列 stinky を準備する stinky["シュール・ストレミング"] = "スウェーデン" # シュール・ストレミング は スウェーデン で食べられている(以下同じ) stinky["ホンオ・フェ"] = "韓国" stinky["エビキュアーチーズ"] = "ニュージーランド" stinky["キビヤック"] = "アラスカ/グリーンランド" stinky["くさや"] = "日本・伊豆諸島" for item in stinky.keys # stinky 内の key を item に、value を stinky[item] にする printf("%s は %s で食べられています\n", item, stinky[item]) # 結果表示 end 実行結果 pan{c111097}% ./hash_for.rb [~/Ruby] 世界の臭い物辞典 シュール・ストレミング は スウェーデン で食べられています ホンオ・フェ は 韓国 で食べられています エビキュアーチーズ は ニュージーランド で食べられています キビヤック は アラスカ/グリーンランド で食べられています くさや は 日本・伊豆諸島 で食べられています 考察 自分でプログラムに書いた対で表示されている。 よって、このプログラムは正しく起動している。 参考にしたプログラム Ruby/hash_shop.rb B.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("\n世界の臭い物辞典検索\n\n") print("食べ物名を入力\n") stinky = Hash.new("知りません") # ( ) は検索して該当無しのときに表示する言葉 stinky["シュール・ストレミング"] = "スウェーデン" stinky["ホンオ・フェ"] = "韓国" stinky["エビキュアーチーズ"] = "ニュージーランド" stinky["キビヤック"] = "アラスカ/グリーンランド" stinky["くさや"] = "日本・伊豆諸島" STDERR.print("食べ物: ") # 検索したい食べ物を入力させる req = gets.chomp # 入力されたものを req とし、文字として扱う if stinky.key?(req) == true # もし req が key に該当したら printf("%s は %s で食べられています\n", req, stinky[req]) else # 該当しなかったら printf("%s なんて臭い食べ物は%s\n", req, stinky[req]) end 実行結果 a.pan{c111097}% ./hash_choice.rb [~/Ruby] 世界の臭い物辞典検索 食べ物名を入力 食べ物: くさや くさや は 日本・伊豆諸島 で食べられています b.pan{c111097}% ./hash_choice.rb [~/Ruby] 世界の臭い物辞典検索 食べ物名を入力 食べ物: ドリアン ドリアン なんて臭い食べ物は知りません 考察 a. は くさや がプログラムに組み込まれているので該当ありの場合の言葉の表示がされた。 b. は ドリアン がプログラムに組み込まれていないので該当無しの場合の 言葉表示がされた。 よって、このプログラムは正しく起動している。 参考にしたプログラム Ruby/hash_shop.rb C.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp stinky = Hash.new print("\n世界の臭い物辞典作成\n\n") print("食べ物名と食べられている国を入力(Ctrl-D で入力終了)\n") # 入力させたい文字への導入 while true STDERR.print("食べ物: ") item = gets # 入力された文字を item とする if item == nil # Ctrl-Dが入力されたら break # 終了 else item = item.chomp # chomp で改行を受け取る end STDERR.print("\t国: ") stinky[item] = gets.chomp # 入力された文字を stinky[item] とする end STDERR.print("入力終了\n") print("\n索引順\n") stinky.keys.each{|item| printf("%s は %s で食べられています\n", item, stinky[item]) } 実行結果 pan{c111097}% ./hash_register.rb [~/Ruby] 世界の臭い物辞典作成 食べ物名と食べられている国を入力(Ctrl-D で入力終了) 食べ物: キスラヤル・ルイド 国: ロシア 食べ物: ジャーディ 国: インド 食べ物: ブラホック 国: 東南アジア 食べ物: カース・マルツウ 国: イタリア 食べ物: 入力終了 索引順 キスラヤル・ルイド は ロシア で食べられています ジャーディ は インド で食べられています ブラホック は 東南アジア で食べられています カース・マルツウ は イタリア で食べられています 考察 入力した言葉が対になって表示されている。 よって、このプログラムは正しく起動している。 参考にしたプログラム Ruby/hash_pair.rb D.作成したデータ シュール・ストレミング スウェーデン ホンオ・フェ 韓国 エビキュアーチーズ ニュージーランド キビヤック アラスカ/グリーンランド くさや 日本・伊豆諸島 作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp print("\n世界の臭い物辞典\n\n") stinky = Hash.new open("hash_data.dat", "r") do |read| # データ(hash_data.dat)を読みこみ(r)、 read として扱う while quarter = read.gets # read を quarter に入れる if /(\S+)\s+(\S+)/ =~ quarter # quarter の中身 stinky[$1] = $2 # $1 を key、 $2 を value とする end end end stinky.keys.each{|item| printf("%s は %s で食べられています\n", item, stinky[item]) } 実行結果 pan{c111097}% ./hash_read.rb [~/Ruby] 世界の臭い物辞典 シュール・ストレミング は スウェーデン で食べられています ホンオ・フェ は 韓国 で食べられています エビキュアーチーズ は ニュージーランド で食べられています キビヤック は アラスカ/グリーンランド で食べられています くさや は 日本・伊豆諸島 で食べられています 考察 対になっているデータ通り、実行結果も対になっている。 よって、このプログラムは正しく起動している。 E.作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp stinky = Hash.new open("hash_data.dat", "a") do |write| # データ(hash_data.dat)を読みこみ(a)、 write として扱う while true STDERR.print("食べ物: ") item = gets if item == nil # Ctrl-Dが入力されたら break else item = item.chomp end STDERR.print("\t国: ") stinky[item] = gets.chomp end # item stinky[item] end print("\n世界の臭い物辞典\n\n") stinky.keys.each{|item| printf("%s は %s で食べられています\n", item, stinky[item]) } 実行結果 pan{c111097}% ./hash_write.rb [~/Ruby] 食べ物: キスラヤル・ルイド 国: ロシア 食べ物: ジャーディ 国: インド 食べ物: ブラホック 国: 東南アジア 食べ物: カース・マルツウ 国: イタリア 食べ物: ^D 世界の臭い物辞典 キスラヤル・ルイド は ロシア で食べられています ジャーディ は インド で食べられています ブラホック は 東南アジア で食べられています カース・マルツウ は イタリア で食べられています 考察 この後、データが書き足されたのか確認をしたが、書き足されていなかった。 a でデータを読みこみ、書き足すことが出来るはずなのだが、書き込むときの key と value の表示の仕方が分からず、書き込むことが出来なかった。 3.感想 実際に使われているのは、ファミリーレストランなどのハンディだと思う。 商品の名前(ボタン)を押すだけで、料金が計算できるし、追加で入力することも出来る。 今の自分の力では、上記のようなプログラムが作れないということが、とても悔しい。 後期が終わるまでには作れるようになる!!!! 4.参考URL facebook Brali 世界の臭い食べ物ランキング https://www.facebook.com/photo.php?fbid=499079623436714&set=a.275268672484478.80014.273161056028573&type=1&theater ----------------------------- 高橋 岬 東北公益文科大学 2年 c111097@g.koeki-u.ac.jp -----------------------------