講評: 4 の方針の立て方はきちんとしています。 p 文で実行することが正解のプログラムではないので、 その分減点でした。 ---- 10 月 10 日 第 2 回レポート 「Hash 配列」 学籍番号:c106XXXX 氏名:XXXXXXXX 語学クラス:XXXX語XX 系: XXXX系 1, 金属とその元素記号を hash 配列 metal としました。 metal の key と value はそれぞれ金属名と元素記号にとりました。 その 1: key 「金」に対して value は「Au」 その 2: key 「銀」に対して「Ag」 その 3: key 「銅」に対して「Cu」 その 4: key 「鉄」に対して「Fe」 その 5: key 「ニッケル」に対して「Ni」 Hash 配列 = {"金" => "Au", "銀" => "Ag","銅" => "Cu","鉄" => "Fe","ニッ ケル" => "Ni" } 2, A 0d 1022 を 0x に変換 1022/2 = 511 余り 0 511/2 = 255 余り 1 255/2 = 127 余り 1 127/2 = 63 余り 1 63/2 = 31 余り 1 31/2 = 15 余り 1 15/2 = 7 余り 1 7/2 = 3 余り 1 3/2 = 1 余り 1 1/2 = 0 余り 1 よって 0x1111111110 となる 確かめ算 0x1111111110 は 2の1乗+2の2乗+2の3乗+2の4乗+2の5乗+2の6乗+2の7乗+2の8乗+2の9乗 なので irsv{c106071}% bc -l [~] 2+4+8+16+32+64+128+256+512 1022 quit B 0d 1022 を 0b に変換 1022/16 = 63 余り 14 63/16 = 3 余り 15 3/16 = 0 余り 3 よって 14=e,15=f となり 0b3fe となる 0x1111111110を4つに区切り確かめ算 11、1111、1110 に区切られて 0b に変換すると 0b3fe となる 3, hash-for.rb a:考えた設定 金属名を入力するとその元素記号が表示されるプログラム b:作成したプログラムコードそのもの #!/usr/koeki/bin/ruby $KCODE = 'e' metal = Hash.new("未登録") # Hash 配列を metal と定義する metal["金"] = "Au" metal["銀"] = "Ag" metal["銅"] = "Cu" metal["鉄"] = "Fe" metal["ニッケル"] = "Ne" STDERR.print("知りたい元素記号の金属名を入力して下さい:\n") item = gets.chomp if metal.key?(item) == false printf("%sは%sです\n",item,metal[item]) else printf("%sの元素記号は%sです。",item,metal[item]) end c:もとにしたプログラムからの変更点 講義ノートのshop.rbを参考にしてshopをmetal,priceをkigouに変更。ハッシュ の初期値を"未登録"とした。 d:プログラムを実行した結果画面 irsv{c106071}% ./hash-for.rb [~/Ruby] 知りたい元素記号の金属名を入力して下さい: 金 金の元素記号はAuです。% irsv{c106071}% ./hash-for.rb [~/Ruby] 知りたい元素記号の金属名を入力して下さい: スズ スズは未登録です e:参考文献 (参照した本、ホームページなど) 講義ノート hash-register.rb a:考えた設定 金属名とその元素記号を入力、登録して、表示させるプログラム b:作成したプログラムコードそのもの #!/usr/koeki/bin/ruby metal = Hash.new("未登録") printf("金属と元素記号を入力してください\n") printf("** 終了は Ctrl-D\n") while true STDERR.print("金属名:") item = gets if item == nil # Ctrl-D が押されたら終了 then break else # Ctrl-D 以外の文字列はここに進む item = item.chomp # 改行文字を取れ end STDERR.print("元素記号:") kigou = gets.chomp metal[item] = kigou end STDERR.print("入力終了 \n") $KCODE = 'e' # 漢字コードは EUC で p metal # 確認のため metal に入っているデータを全て見せよ c:もとにしたプログラムからの変更点 pair.rbを参考にしてハッシュの初期値を"未登録"、shopをmetal、priceをkigou に変更した。 d:プログラムを実行した結果画面 irsv{c106071}% ./hash-register.rb [~/Ruby] 金属と元素記号を入力してください ** 終了は Ctrl-D 金属名:金 元素記号:Au 金属名:銀 元素記号:Ag 金属名:水銀 元素記号:Hg 金属名:入力終了 {"金"=>"Au", "銀"=>"Ag", "水銀"=>"Hg"} e:参考文献 (参照した本、ホームページなど) 講義ノート 4、 プログラムを組み込めなかったので思いついたことを書きます。 覚えた単語をデータファイルに書き込むという事は、プログラムで対を登録し表 示させるプログラムにopen("ファイル名","モード") do |変数| をいれれば良いのではないかと思う(講義ノートを参考) クイズに関してはデータを読み込むopen-end,当たっているか判断するif文で 構成すれば良いと思う。 このようなプログラムはレシートなど、新しく書き込むファイルを用意したい とき、追加注文も含めることのできる注文請書、銀行の ATM で出納記録を作成 するときに使えると思う。 5、感想 前期で習ったデータを読み込むopen-endやopen("ファイル名","モード") do | 変数|は、すっかり忘れていたので4、のプログラムを考える際に復習できた。ま た、講義ノートの他にもホームページのRuby逆引きも講義ノートの応用や補足説 明として参考になった。