第2回 基礎プログラミング II レポート課題 氏名:伊藤 彩 学籍番号:c1090207 語学クラス:中国語 コース(系):政策 1. A. 漫画の主人公を hash 配列 manga とした。 manga の key は漫画のタイトル、 value はその漫画の主人公とした。 その1:key「NARUTO-ナルト-」 に対して value は「ナルト」 その2:key「ワンピース」 に対して value は 「ルフィ」 その3:key「BAKUMAN」 に対して value は「亜城木夢叶」 その4:key「銀魂」 に対して value は「銀時」 その5:key「BLEACH」 に対して value は「一護」 これに対応する Hash の表し方は manga["NARUTO-ナルト-"] = "ナルト" manga["ワンピース"] = "ルフィ" manga["BAKUMAN"] = "亜城木夢叶" manga["銀魂"] = "銀時" manga["BLEACH"] = "一護" となる。また、もう一つの表し方は次の通り。 {"NARUTO-ナルト-" => "ナルト", "ワンピース" => "ルフィ", "BAKUMAN" => " 亜城木夢叶", "銀魂" => "銀時", "BLEACH" => "一護"} B. 0bは2進法表示、0xは16進法表示、0dは10進法表示。 a. 0d 2010 を16進数(0x)に変換する。 まず、10進数を2進数に変換する必要がある。 10進数を2進数に変換するには、10進数の値を2で割っていく。このときに出る余 りが重要である。余りを逆から読んでいくと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 なので 0d2010 は 0b11111011010 となる。 次に、変換した2進数を16進数に変換する。 2進数を16進数に変換するには、2進数の値を右から4桁ずつ区切って考える。 0b11111011010 を 4桁ずつ区切ると 111,1101,1010 となる。 これを対応表を活用して変換すると、 111 = 7 1101 = d 1010 = a したがって、 0d 2010 = 0x 7da である。 b. 0d 2010 を2進数(0b)に変換する。 10進数を2進数に直すためには、10進数の数字を2で割っていく。このときに出る 余りが重要である。 計算で出た余りを逆から読むと2進数の値が出る。 a より、0d2010 = 0b11111011010 確かめ 0b11111011010 を右から4桁ずつ区切り、0111, 1101, 1010 にわける。 これを計算し、出た余りを足すと以下のようになる。 「0111」 0 * 2^3 = 0 1 * 2^2 = 4 1 * 2^1 = 2 1 * 2^0 = 1 0 + 4 + 2 + 1 = 7 「1101」 1 * 2^3 = 8 1 * 2^2 = 4 0 * 2^1 = 0 1 * 2^0 = 1 8 + 4 + 0 + 1 = 13 「1010」 1 * 2^3 = 8 0 * 2^2 = 0 1 * 2^1 = 2 0 * 2^0 = 0 8 + 0 + 2 + 0 = 10 足した数字を対応表にあてはめると、7 = 7 , 13 = d , 10 = a となる。 したがって、0d2010 = 0x7da であり、a と同じ答えだと証明できた。 2. A. a.設定 漫画の主人公の名前を漫画のタイトルとともに Hash配列によって表示させるプ ログラム。授業で習った Hash の対を入力する方法と表示する方法を用いれば全 ての Hash の対をきれいに表示できると考えた。 b.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = "e" # 日本語コード manga = Hash.new # manga は Hash配列 の変数 manga["NARUTO-ナルト-"] = "ナルト" manga["ワンピース"] = "ルフィ" manga["BAKUMAN"] = "亜城木夢叶" manga["銀魂"] = "銀時" manga["BLEACH"] = "一護" for chara in manga.keys # 値を chara とする # for 値 in Hash 配列名できれいに Hash 配列を並べる printf("%s の主人公は %s です。\n", chara, manga[chara]) # 行なう操作 end c.もとにしたプログラムからの変更点 昨年度の先輩のレポートのプログラムをもとにさせていただいた。 自分の設定したものにそれぞれ変更した。 Hash 配列の変数を manga に変更。 表示させる項目を漫画のタイトルと主人公の名前に変更。 d.実行画面 pan{c109020}% ./hash_for.rb [~/Ruby] ワンピース の主人公は ルフィ です。 BLEACH の主人公は 一護 です。 NARUTO-ナルト- の主人公は ナルト です。 銀魂 の主人公は 銀時 です。 BAKUMAN の主人公は 亜城木夢叶 です。 e.結果の考察 Hash 配列を用いて作成したプログラムが、登録していたもの全てを綺麗に表示 させた。よって、Hash の対の表示の仕方、出力の仕方に誤りはないと考えられ る。このプログラムは正しく機能したといえる。 B. a.設定 ユーザーが知りたい情報だけを結果表示させるプログラム。 昨年度の先輩のプログラムと授業中に作成した hash_pair.rb を参考にすればで きると考えた。 b.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = "e" # 日本語コード manga = Hash.new("ありません。上に表示された漫画を選んでください: ") # manga は Hash配列 の変数 manga["NARUTO-ナルト-"] = "ナルト" manga["ワンピース"] = "ルフィ" manga["BAKUMAN"] = "亜城木夢叶" manga["銀魂"] = "銀時" manga["BLEACH"] = "一護" print("漫画のタイトルを入力すると、その漫画の主人公の名前が表示されます。\n") print("NARUTO-ナルト-、ワンピース、BAKUMAN、銀魂、BLEACH の中から選んでください。\n") STDERR.print("タイトルは?") # 漫画のタイトルの入力を促す。 manga_name = gets.chomp if manga.key?(manga_name) == true #文字列 key があるか調べる。 printf("%sの主人公は%sです。\n", manga_name, manga[manga_name]) end c.もとにしたプログラムからの変更点 昨年度の先輩のレポートのプログラムをもとにさせていただいた。 自分の設定したものにそれぞれ変更した。 Hash 配列の変数を manga に変更。 表示させる項目を漫画のタイトルと主人公の名前に変更。 d.実行画面 an{c109020}% ./hash_choice.rb [~/Ruby] 漫画のタイトルを入力すると、その漫画の主人公の名前が表示されます。 NARUTO-ナルト-、ワンピース、BAKUMAN、銀魂、BLEACH の中から選んでください。 タイトルは?ワンピース ワンピースの主人公はルフィです。 pan{c109020}% ./hash_choice.rb [~/Ruby] 漫画のタイトルを入力すると、その漫画の主人公の名前が表示されます。 NARUTO-ナルト-、ワンピース、BAKUMAN、銀魂、BLEACH の中から選んでください。 タイトルは?銀魂 銀魂の主人公は銀時です。 e.結果の考察 実行結果より、相手が知りたい情報だけを表示することができた。よって、プロ グラムの構成と Hash の使い方に誤りはないと考えられる。このプログラムは正 確に機能したといえる。 感想 実際に使われているものとしては、レジがあると思いました。普段使っている携 帯電話にも単語登録の機能があり、この仕組みであると思います。改めて考える と、身の回りにけっこうこの仕組みが使われているものがあるのだと感じました。 今回は、授業でも初めて学ぶものが多く、プログラム作成がたいへんでした。し かし、課題を通して授業の復習ができたのでよかったです。授業でわからなかっ たところも理解できました。 今回得た知識を今後の授業に役立てていきたいと思います。 参考文献 ・http://roy/~madoka/2009/r2/02/rpt/c108172.txt 2009年度 基礎プログラミング II 第02回 なになにといえばこれこれ レポート評価 良かったレポート その10 レポート作者不明 ・http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html 2進数、16進数と10進数 作者不明 ・http://roy/~madoka/2010/r2/02/02_10_theme_09_memory.html 基礎プログラミング II 第2回 「なになにといえばこれこれ」Hash の対を表示する には (講義ノート) 西村まどか先生 ・http://roy/~madoka/2010/r2/02/02_10_theme_09_memory.html 基礎プログラミング II 第2回 「なになにといえばこれこれ」覚える順番は違う けれど正しい (講義ノート) 西村まどか先生 共同学習者 横山広樹