第2回 基礎プログラミングII レポート課題 氏名:酒井 春香 学籍番号:c109074A クラス:英語3 コース:政策マネ 1、筆記問題 A. 岩手県にある市町村名と特産品を Hash 配列 city としました。 city の key は 市町村名、 value は 特産品 としました。 その1:key「盛岡」に対してvalueは「冷麺」 その2:key「一関」に対してvalueは「亀の子せんべい」 その3:key「八幡平」に対してvalueは「ひっつみ汁」 その4:key「雫石」に対してvalueは「銀河高原ビール」 その5:key「奥州」に対してvalueは「前沢牛」 その6:key「平泉」に対してvalueは「弁慶力餠」 これに対応する Hash配列の表し方は、以下の通りである。 city["盛岡"] = "冷麺" city["一関"] = "亀の子せんべい" city["八幡平"] = "ひっつみ汁" city["雫石"] = "銀河高原ビール" city["奥州"] = "前沢牛" city["平泉"] = "弁慶力餠" もう一つの表し方は、以下の通りである。 {"盛岡" => "冷麺" ,"一関" => "亀の子せんべい" ,"八幡平" => "ひっつみ汁" , "雫石" => "銀河高原ビール" ,"奥州 => "前沢牛" ,"平泉" => "弁慶力餠" } B. a. 0d 2010 = 0x?? 10進数 0d2010 から 16進数 0x に変換する。 2010 / 16 = 125 余り 10 125 / 16 = 7 余り 13 7 / 16 = 0 余り 7 上記の計算より、下の余りから順に並べていくと 1の位 7 10の位 13 100の位 10 対応表より、 13 = d、 10 = a となるので、0d 2010 = 0x 7da b.0d 2010 = 0b ?? 10進数 0d2010 から 16進数 0b に変換する。 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 さらに16進数に変換するために 右から4桁ごとに区切ると以下のようになる。 0111 、 1101 、 1010 これらを16進数に変換する。 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乗 + 1 × 2の0乗 = 8 + 0 + 2 + 1 = 10 足した数字を対応表に当てはめてみると 13 = d 10 = a なので、0d2010 = 0x7da したがって、a と同じ答えになった。 2、 A. a.設定 岩手県の市町村をその市町村の特産品とともに Hash配列によって表示するプロ グラムを考えた。 b.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = "e" # 日本語コード city = Hash.new # city は Hash配列 の変数 city["盛岡"] = "冷麺" city["一関"] = "亀の子せんべい" city["八幡平"] = "ひっつみ汁" city["雫石"] = "銀河高原ビール" city["奥州"] = "前沢牛" city["平泉"] = "弁慶力餠" for mono in city.keys # 値を mono とする # for 値 in Hash 配列名 で並べる printf("%s の特産品は %s です。 \n", mono, city[mono]) end c.もとにしたプログラムからの変更点 昨年の先輩のレポートのプログラムをもとにしました。 それぞれを「市町村名」「特産品」に名前を変更。 Hash 配列の変数を city に変更。 d.実行画面 pan{c109074}% ./hash_for.rb [~/Ruby] 一関 の特産品は 亀の子せんべい です。 奥州 の特産品は 前沢牛 です。 雫石 の特産品は 銀河高原ビール です。 盛岡 の特産品は 冷麺 です。 平泉 の特産品は 弁慶力餠 です。 八幡平 の特産品は ひっつみ汁 です。 e.考察 実行画面から分かるように、登録していたものが不足なく表示されていたので、 Hash の対の表示には問題ないと考えられる。よって、このプログラムは正しく 機能したといえる。 B. a.設定 ユーザーが知りたい情報だけを表示させるプログラム。 最初に知りたい市町村を入力させ、その特産品を表示させる。 b.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = "e" # 日本語コード city = Hash.new("登録されていません。上に表示された市町村から選んでください") # city は Hash配列 の変数 city["盛岡"] = "冷麺" city["一関"] = "亀の子せんべい" city["八幡平"] = "ひっつみ汁" city["雫石"] = "銀河高原ビール" city["奥州"] = "前沢牛" city["平泉"] = "弁慶力餠" print("市町村名を入力すると、その市町村の特産品が表示されます。\n") print("盛岡、一関、八幡平、雫石、奥州、平泉 の中から選んでください。\n") STDERR.print("市町村名は?") city_name = gets.chomp if city.key?(city_name) == false printf("%s は %s \n", city_name, city[city_name]) # key に該当データがなかった場合表示される else printf("%s の特産品は %s です。\n",city_name, city[city_name]) end c.もとにしたプログラムからの変更点 昨年の先輩のレポートのプログラムをもとにしました それぞれを「市町村名」「特産品」に名前を変更。 print文を適したものに変更。 Hash 配列の変数を city に変更。 d.実行画面 1) pan{c109074}% ./hash_choice.rb [~/Ruby] 市町村名を入力すると、その市町村の特産品が表示されます。 盛岡、一関、八幡平、雫石、奥州、平泉 の中から選んでください。 市町村名は?一関 一関 の特産品は 亀の子せんべい です。 2) pan{c109074}% ./hash_choice.rb [~/Ruby] 市町村名を入力すると、その市町村の特産品が表示されます。 盛岡、一関、八幡平、雫石、奥州、平泉 の中から選んでください。 市町村名は?奥州 奥州 の特産品は 前沢牛 です。 3) pan{c109074}% ./hash_choice.rb [~/Ruby] 市町村名を入力すると、その市町村の特産品が表示されます。 盛岡、一関、八幡平、雫石、奥州、平泉 の中から選んでください。 市町村名は?酒田 酒田 は 登録されていません。上に表示された市町村から選んでください e.考察 実行結果より、ユーザーが知りたい情報だけを表示することができた。 また、3)より登録されていない市町村名を入力すると、それに対応した出力画面 を出すことができている。 この結果から、このプログラムは正しく機能したといえる。 感想 Hashが使われていると思われるもの ・携帯電話の単語登録機能 ・品物管理機能 今回、授業ではあまり理解出来なかったところもレポートをやっているうちに段々 と理解することができました。今回は友だちから教えてもらうことが多く、友だ ちは大切だとすごく思いました。今度は自分が教える側になれるように頑張りた いです。 参考文献 西村まどか先生のホームページから 基礎プログラミングII 第2回 「なになにといえばこれこれ」 あるかないか http://roy/~madoka/2010/r2/02/02_04_theme_03_existrnot.html 対にないものが呼び出されたとき http://roy/~madoka/2010/r2/02/02_05_theme_04_initialize.html Hash の対を入力するには http://roy/~madoka/2010/r2/02/02_07_theme_05_hash_pair.html Hash の対を表示するには http://roy/~madoka/2010/r2/02/02_07_theme_05_forprint.html 共同学習者 伊藤 彩 / 佐竹 聡美