Subject: #04 選択した問題番号 To: ruby-2-04@e.koeki-u.ac.jp Date: Mon, 17 Oct 2016 16:57:06 +0900 (JST) X-Mailer: Mew version 6.3 on Emacs 23.3 / Mule 6.0 (HANACHIRUSATO) 氏名: sugar 学籍番号: c115103 1、選択した番号 [1と2] 2、作成したプログラム [1のプログラム] #!/usr/koeki/bin/ruby # coding: utf-8 preson = Hash.new(0) preson["宇喜多秀家"] = 1655 preson["小早川秀秋"] = 1602 preson["豊臣秀頼"] = 1615 preson["羽柴秀吉"] = 1595 puts "誰の死没年を知りたい?\n" puts"宇喜多秀家、小早川秀秋、豊臣秀頼、羽柴秀吉" who = gets.chomp! f = preson[who] printf("%sは%d年に死没しました\n",who,f) if who ==0 printf("そんな奴はいない\n") end [2のプログラム] #!/usr/koeki/bin/ruby # coding: utf-8 dare = Hash.new(0) open("kadai4.txt", "r") do |a| while line = a.gets if /"(.+)"\s+(.+)/ =~ line dare[$1] = $2.to_i end end puts "誰の死没年を知りたい?\n" puts "宇喜多秀家、小早川秀秋、豊臣秀頼、羽柴秀吉\n" f = gets.chomp! start = dare[f] printf("%s は %d 年に死没しました\n", f,start) if start == 0 printf("そんな奴はいない\n",f) end end 3、実行結果 [1の実行結果] ./4kadai2.rb [~/Ruby] 誰の死没年を知りたい? 宇喜多秀家、小早川秀秋、豊臣秀頼、羽柴秀吉 小早川秀秋 小早川秀秋は1602年に死没しました [2の実行結果] ./4kadai.rb [~/Ruby] 誰の死没年を知りたい? 宇喜多秀家、小早川秀秋、豊臣秀頼、羽柴秀吉 羽柴秀吉 羽柴秀吉 は 1598 年に死没しました 4、プログラムの説明(ハッシュに関する部分のみ) [1のプログラムの説明] 前提をして、配列より多くのデータを互いに結びつけられるハッシュを使用し てプログラムを組む。 (1)プログラム中にある値のkeyとその値に結びつけられるvalueの値を設定する。 「price = Hash.new(0)」を使用する場合、「変数 = 」で変数を指定して 「Hash.new」でハッシュを使いますと宣言する。 今回のプログラムでは例)preson["宇喜多秀家"] = 1655 としている。 (2)「who = gets.chomp!」でキーボードからの入力を受け入れ改行文字を省略。 (3) 「if 変数 == 指定した値 printf"●●"」 で、もし変数が指定した値なら●●を返せとなる。 今回のプログラムでは例)if who ==0 printf("そんな奴はいない\n") end となる。 [2のプログラムの説明] プログラムに直接連想配列を書き込むよりデータを他のファイルに書き込む方 がデータを入れ替えるより便利にデータのやりとりを行えるようになる。 (1) 1のプログラムと同じように「dare = Hash.new(0)」を使ってハッシュを 使う。 (2)「 open("kadai4.txt", "r") do |a| while line = a.gets if /"(.+)"\s+(.+)/ =~ line dare[$1] = $2.to_i end end」 で、「kadai4.txt」を読み込み「 if /"(.+)"\s+(.+)/ 」の正規表現に当 てはまるものを「line」に返せとし、「 dare[$1] = $2.to_i」で txt中データと入力されたものを対応させる。 5、参考文献 広瀬雄二."ハッシュ"2016年度 基礎プログラミングII.(日本 語).http://roy/~yuuji/2016/pf2/04/hash.html(参照 2016-10-14) 広瀬雄二."ハッシュ"2016年度 基礎プログラミ ングII.(日本語).http://roy/~yuuji/2016/pf2/04/hash-ex.html (参照 2016-10-13) 6、感想 またつけ足して提出します。 7、Multipart形式で添付したRubyプログラム (2番の場合はデータファイルも)