第2回 基礎プログラミング II レポート課題 氏名:遠藤達也 学籍番号:c1090271 語学クラス:中国語 コース(系):政策 1、筆記問題 A、プロ野球のセリーグの有名選手を hash 配列 sensyu としました。 team の key と sensyu はそれぞれのチーム、そのチームの有名選手にとりました。 その 1: key「巨人」に対して value は「坂本」 その 2: key「阪神」に対して value は「藤川」 その 3: key「中日」に対して value は「岩瀬」 その 4: key「ヤクルト」に対して value は「青木」 その 5: key「横浜」に対して value は「村田」 その 6: key「広島」に対して value は「前田」 これに対応する Hash の表し方は team["巨人"] = "坂本" team["阪神"] = "藤川" team["中日"] = "岩瀬" team["ヤクルト"] = "青木" team["横浜"] = "村田" team["広島"] = "前田" となる。 また、もう一つの表し方は {"巨人" => "坂本", "阪神" => "藤川", "中日" => "岩瀬", "ヤクルト" => "青木", "横浜", => "村田","広島" => "前田"} となる。 B、 a、10進数 Od 2009 を 16進数 Ox に変換。 2009 / 16 = 125 余り 9 125 / 16 = 7 余り 13 7 / 16 = 0 余り 7 上の計算より、下の余りから並べていくと 1の位 7 10の位 13 → d 100の位 9 となる。 よって、Od 2009 = Ox 7d9 となる。 b、10進数 Od 2009 を 2進数 Ob に変換する。 2009 / 2 = 1004 余り 1 1004 / 2 = 502 余り 0 502 / 2 = 251 余り 0 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 上記の計算より、下の余りから順に並べていくと 11111011001 。 よって、Od 2009 = Ob 11111011001 。 2、プログラム問題 D、a)考えた設定 データ (hash_data.dat) を読み込ませ、登録してあるセリーグのチームとそ のチームの有名選手の一覧をすべて表示するようにした。 b)作成したプログラム データ(hash_data.dat) 巨人 坂本 阪神 藤川 中日 岩瀬 ヤクルト 青木 横浜 村田 広島 前田 プログラム (hash_read.rb) #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コードEUCで出力する print("セリーグのチームの有名選手の一覧です。\n") team = Hash.new # Hash 配列を team と定義する STDERR.print("好きなチームを検索してください。 : ") name = gets.chomp open("hash_data.dat", "r")do |sensyu| # 自動的に hash_data.dat を読み込ませる while team = sensyu.gets if /(\S+)\s+(\S+)/ =~ team key = $1 sensyu = $2 printf("%s の有名選手は %s です。\n", key, sensyu) end # open を閉じる end end # while を閉じる end end # if を閉じる end 実行結果 好きなチームを検索してください。 : 巨人 team の有名選手は sensyu です。 ./hash_read.rb:15: private method `gets' called for "sensyu":String (NoMethodError) from ./hash_read.rb:13:in `open' from ./hash_read.rb:13 pan{c109027}% ./hash_read.rb [~/Ruby] セリーグのチームの有名選手の一覧です。 好きなチームを検索してください。 : 巨人 ./hash_read.rb:15: private method `gets' called for "巨\277\315":String (NoMethodError) from ./hash_read.rb:13:in `open' from ./hash_read.rb:13 pan{c109027}% ./hash_read.rb [~/Ruby] セリーグのチームの有名選手の一覧です。 好きなチームを検索してください。 : ヤクルト team の有名選手は sensyu です。 ./hash_read.rb:15: private method `gets' called for "sensyu":String (NoMethodError) from ./hash_read.rb:13:in `open' from ./hash_read.rb:13 考察 実行結果によりプログラムの14、15行目に間違いがあることがわかりました。 何度も繰り返し書き直してみましたがうまくいきませんでした。 参考文献 過去の講評レポート http://roy/~madoka/2009/r2/02/rpt/c108129.txt http://roy/~madoka/2009/r2/02/rpt/c108182.txt 1. 唯一のキーワードをヒントに連想しようhttp://roy/~madoka/2010/r2/02/02_02_theme_01_chainwords.html 2. 入力したデータを取り出そうhttp://roy/~madoka/2010/r2/02/02_03_theme_02_hash_input.html 3. あるかないかhttp://roy/~madoka/2010/r2/02/02_04_theme_03_existornot.html 4. 対にないものが呼び出されたときhttp://roy/~madoka/2010/r2/02/02_05_theme_04_initialize.html 5. Hash の対を入力するにはhttp://roy/~madoka/2010/r2/02/02_06_theme_05_hash_pair.html 6. Hash の対を表示するにはhttp://roy/~madoka/2010/r2/02/02_07_theme_06_forprint.html 7. 対の情報を使って並び換えhttp://roy/~madoka/2010/r2/02/02_08_theme_07_each.html 8. 何が入っているのかhttp://roy/~madoka/2010/r2/02/02_09_theme_08_prints.html 9. 覚える順番は違うけれど答えは正しいhttp://roy/~madoka/2010/r2/02/02_10_theme_09_memory.html 10. key を使って並び換えhttp://roy/~madoka/2010/r2/02/02_11_theme_10_sortinkey.html 11. Hash にしまえるものhttp://roy/~madoka/2010/r2/02/02_12_theme_11_aryinhash.html 12. key を叩いて value の一部を取り出すにはhttp://roy/~madoka/2010/r2/02/02_13_theme_12_valueasary.html 13. value の一部を使ってデータを入れ替えるにはhttp://roy/~madoka/2010/r2/02/02_14_theme_13_hasharysort.html 14. 要素の一部分を使って入れ替えをするにはhttp://roy/~madoka/2010/r2/02/02_15_theme_14_sorthasharraycomp.html 共同学習者 なし 感想 今回は今までで一番時間をかけて、さらに前回のレポートの採点にあったように 他者に教えられるぐらい理解しようとしたのですが、プログラムの実行すらでき ない作品になってしまいました。 どこに原因があるのかまではわかるのですが、それ以降何をしていいのかが分か らず、先に進めませんでした。 次回からはなるべく誰かと一緒に作業をして、少しでも理解する量を増やしてい きたいです。