第 2 回 なになにといえばこれこれ レポート課題 氏名:加藤恭平 学籍番号:c1100549 語学クラス:英語2 コース(系):政策マネジメント 1.筆記問題 A. 三国志に登場する五虎大将の名前をhash 配列 nameとした。 nameのkeyは人物の名前、valueは字(あざな)とした。 その1:key 「趙雲」に対して value は「子龍」 その2:key 「関羽」に対して value は「雲長」 その3:key 「張飛」に対して value は「翼徳」 その4:key 「馬超」に対して value は「孟起」 その5:key 「黄忠」に対して value は「漢升」 これに対する hash の表し方は、 name["超雲"] = "子龍" name["関羽"] = "雲長" name["張飛"] = "翼徳" name["馬超"] = "孟起" name["黄忠"] = "漢升" もう一つの表し方は {"趙雲"=>"子龍","関羽"=>"雲長","張飛"=>"翼徳","馬超"=>"孟起","黄忠"=>"漢 升"} B. a.0d 2010 = 0x ?? 0d(10進数)を0x(16進数)に変換する。 10進数を16で割り、出た答えを下から読む。 2010 / 16 = 125 …余り 10 125 / 16 = 7 …余り 13 7 / 16 = 0 …余り 7 下から読めば 7 13 10 となる。 2 進数 10 進数 16 進数 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 10 a 1011 11 b 1100 12 c 1101 13 d 1110 14 e 1111 15 f ↑の16進数の表を用いてそれぞれを変換すると、 7 は 7、13 は d、10 は aになる。 よって答えは0d 2010 = 0x 7da b.0d 2010 = 0b ?? 0d(10進数)を0b(2進数)へ変換する。 変換したい10進数を割れなくなるまで2で割り、余りを下から読む。 2010 / 2 = 1005 余り0 1005 / 2 = 502 余り1 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 余りを下から読むと、11111011010となる。 よって答えは、0d 2010 = 0b 11111011010 一問目と答えが同じになるか確かめる。 0b(2進数)を(16進数)に変換するには、 2進数を1の位から4桁ずつに区切って、その数字ごとに10進数に変換する。 0111/1101/1010 0111=0*2の3乗 + 1*2の2乗 + 1*2の1乗 + 1*2の0乗 =0+4+2+1 =7 1101=1*2の3乗 + 1*2の2乗 + 0*2の1乗 + 1*2の0乗 =8+4+0+1 =13 1010=1*2の3乗 + 0*2の2乗 + 1*2の1乗 + 0*2の0乗 =8+0+2+0 =10 計算結果である 7 13 10 を先程の表で16進数に変換すると、 0x 7daとなり一問目と同じ答えになっている。 2.プログラム問題 選択した問題 A a)考えた設定 あらかじめプログラムに登録してある対を全て表示するプログラム b)作成したプログラム(hash_for.rb) #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定。この場合は EUC コードで漢字 name = Hash.new # Hash.new で新しく Hash を作る name["超雲"] = "子龍" name["関羽"] = "雲長" # Hash の対を設定する name["張飛"] = "翼徳" name["馬超"] = "孟起" name["黄忠"] = "漢升" for azana in name.keys # for キー名,値 in ハッシュ配列 # 全ての Hash の対を入力する printf("%s の字(あざな)は %s です。\n",azana,name[azana]) end #forに対するend c)実行結果 pan{KATO Kyohei}% ./hash_for.rb\ [~/Ruby] 黄忠 の字(あざな)は 漢升 です。 超雲 の字(あざな)は 子龍 です。 馬超 の字(あざな)は 孟起 です。 張飛 の字(あざな)は 翼徳 です。 関羽 の字(あざな)は 雲長 です。 d)考察 あらかじめ登録した対のデータがprintf文の通りに表示されたので、このプログ ラムは正しいといえる。 3.hash値が実際に使われている物として券売機や電子署名などが挙げられるので はないかと考えた。 いざ課題へ取り組もうとしたとき、レポート課題の問題文の意味が解読で きず、授業中の進行に追いつくのが精一杯でhashの内容が余り理解できていな いことに気付いたので基礎プログラムを担当する3人の先生全員の授業用ページ のhashについて解説したページを読んで復習してから改めて課題に臨んだ。 すると、時間はかかったが何とか完成させることが出来たので、意味を理解し た上でプログラムを書くということの大切さを実感しました。 参考文献 基礎プログラミング II 第 2 回 「なになにといえばこれこれ」 西村まどか http://roy/~madoka/2011/r2/02/ 2011年度授業用ページ ハッシュ[1] 神田直弥 http://roy/~naoya/rubyII/3.html 2011年度 基礎プログラミングII 第4回 ハッシュ 広瀬雄二 http://roy/~yuuji/2011/pf2/04/hash.html