第2回 なになにといえばこれこれ レポート課題 氏名: 渡辺 龍 学籍番号:c1102057 語学クラス:中国語 3クラス コース(系):地域共創コース 1.筆記問題 A. 犬の種類の特徴を hash 配列 inu としました。 inu の key と value はそれぞれの名前と特徴にとりました。 1.key 「ポメラニアン」 に対して value は 「もこもこ」 2.key 「ブルドック」 に対して value は 「しわしわ」 3.key 「チワワ」 に対して value は 「小さい」 4.key 「プードル」 に対して value は 「くるくる」 5.key 「ゴールデンレトリバー」に対して value は 「でかい」 inu["ポメラニアン"] = "もこもこ" inu["ブルドック"] = "しわしわ" inu["チワワ"] = "小さい" inu["プードル"] = "くるくる" inu["ゴールデンレトリバー"] = "でかい" B. a.0d 2010 = 0x ?? 0d は10進数、0x は16進数。 10進数を16進数に変換する場合は、10進数を割れなくなるまで16で割る。 割った時の余りを逆から読んでいき、10進数に直す。 2010 / 16 = 125 余り10 125 / 16 = 7 余り13 7 / 16 = 0 余り 7 10進数 16進数 7 → 7 13 → d 10 → a よって、0d 2010 = 0x 7da となる。 b.0d 2010 = 0b ?? 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 となる。 1問目の答えと同じになるか確かめてみる。 2進数を16進数に変換する場合、2進数を1の位から4桁ごとに区切り、 16進数に変換していく。 区切って2桁や3桁になったものは、0 が省略されている。 111 1101 1010 → 0111 1101 1010 2進数 16進数 0111 → 7 1101 → d 1010 → a 0b 11111011010 = 0x 7da となり、1問目と答えは同じであると確認できた。 2.プログラム問題 今回は A・B・C の3に挑戦してみました。 未熟な部分もありますがよろしくお願いします。 A.「hash_for.rb」 a.考えた設定(A) 犬の種類と特徴が全て表示される。 hash_for.rb b.プログラムの変更点 講義で作成したプログラム「hash_date.rb」「hash_pair.rb」 の変数をそれぞれ変更した。 c.作成したプログラム(A)「hash_for.rb」 #!/usr/koeki/bin/ruby $KCODE = 'e' # 機械文字を日本語に変える働きをもつ inu = Hash.new # 配列は inu とした inu["ポメラニアン"] = "もこもこ" inu["ブルドック"] = "しわしわ" inu["チワワ"] = "小さい" inu["プードル"] = "くるくる " inu["ゴールデンレトリバー"] = "でかい" # それらの犬の特徴 for dog,tokutyo in inu # for key の名前、値 in Hshの配列名 printf("%s は%sですね\n",dog,tokutyo) end # forを閉じるためのend d.実行結果(A) pan{c110205}% ./hash_for.rb [~/Ruby] ポメラニアン はもこもこですね プードル はくるくる ですね ブルドック はしわしわですね チワワ は小さいですね ゴールデンレトリバー はでかいですね e.考察(A) 実行結果に異常・不可思議な点は無いか? pan{c110205}% ./hash_for.rb [~/Ruby] ポメラニアン はもこもこですね プードル はくるくる ですね ブルドック はしわしわですね チワワ は小さいですね ゴールデンレトリバー はでかいですね 特におかしな点やエラーも見られないため,プログラムは正しく作成できている と言える. B [hash_choice.rb] a.考えた設定(B) hash_for.rb を応用し利用者が選択した情報を表示するプログラム。 選択した犬の特徴が表示されるプログラム。もし選択肢に無い犬の名前を打つと 強制的に終了する。 b.プログラムの変更点(B) 講義の際に作成したプログラム「hash_date.rb」を基に gets.chmp で入力や選 択外の時の終了の方法など。 c.作成したプログラム(A)「hash_choice.rb」 #!/usr/koeki/bin/ruby $KCODE = 'e' # 機械文字を日本語に変える働きをもつ inu = Hash.new # Hash 配列は inu inu["ポメラニアン"] = "もこもこ" inu["ブルドック"] = "しわしわ" inu["チワワ"] = "小さい" inu["プードル"] = "くるくる " inu["ゴールデンレトリバー"] = "でかい" print("[ポメラニアン・ブルドック・チワワ・プードル・ゴールデンレトリバー]\n") print("上記から特徴の知りたい犬がいましたら入力して下さい。\n") STDERR.print("犬種名を入力して下さい :" ) name = gets.chomp # 利用者に選択してもらうため 変数 name if inu.key?(name) == true # 変数犬に打ち込まれた文字を読み込む。 # 存在すればtrueで答えをだす。 printf("\n%s は %sですよ。\n",name,inu[name]) else # if の次の条件指定のため printf("\n%sは、こちらでは扱っておりません。\n",name) end # if else を閉じるためのもの。 d.実行結果(B) i. pan{c110205}% ./hash_choice.rb [~/Ruby] [ポメラニアン・ブルドック・チワワ・プードル・ゴールデンレトリバー] 上記から特徴の知りたい犬がいましたら入力して下さい。 犬種名を入力して下さい :チワワ チワワ は 小さいですよ。 ii. pan{c110205}% ./hash_choice.rb [~/Ruby] [ポメラニアン・ブルドック・チワワ・プードル・ゴールデンレトリバー] 上記から特徴の知りたい犬がいましたら入力して下さい。 犬種名を入力して下さい :ブルドック ブルドック は しわしわですよ。 iii. pan{c110205}% ./hash_choice.rb [~/Ruby] [ポメラニアン・ブルドック・チワワ・プードル・ゴールデンレトリバー] 上記から特徴の知りたい犬がいましたら入力して下さい。 犬種名を入力して下さい :いぬ いぬは、こちらでは扱っておりません。 e.考察(B) もし選択肢以外の際はエラー表示ではなく、プログラムの中で答えられるように なっているか? pan{c110205}% ./hash_choice.rb [~/Ruby] [ポメラニアン・ブルドック・チワワ・プードル・ゴールデンレトリバー] 上記から特徴の知りたい犬がいましたら入力して下さい。 犬種名を入力して下さい :いぬ いぬは、こちらでは扱っておりません。 エラー表示にならずに正確に処理できた。 C.[hash_register.rb] a.考えた設定(C) 知りたい情報が出てこない場合、利用者に登録してもらい、登録した結果を出力 する。犬種と特徴を入力してもらう。 b.プログラムの変更点 講義で作成したプログラム「hash_pair」を基にそれぞれの変数を変更。 c.作成したプログラム(C) #!/usr/koeki/bin/ruby $KCODE = 'e' # 機械文字を日本語に変える働きをもつ inu = Hash.new # Hash 配列は inu print("犬の名前と特徴を入力して下さい。(終了はCtrl-D)\n") while true # 繰り返し作業 printf("犬の名前:\n") name = gets # name の入力 if name == nil # Ctrl-D while から抜ける break else name == name.chomp end printf("特徴を書いて下さい:\n") inu[name] = gets.chomp end for tokutyo in inu.keys printf("%s \t %s \n\n",tokutyo,inu[tokutyo]) # tokutyo から 引用し登録したものをすべて表示する。 end d.実行結果(C) pan{c110205}% ./hash_register.rb [~/Ruby] 犬の名前と特徴を入力して下さい。(終了はCtrl-D) 犬の名前: ポメラニアン 特徴を書いて下さい: もこもこ 犬の名前: いぬ 特徴を書いて下さい: ワン 犬の名前: ポメラニアン もこもこ いぬ ワン e.考察(C) 例え英語でも登録できるのか? pan{c110205}% ./hash_register.rb [~/Ruby] 犬の名前と特徴を入力して下さい。(終了はCtrl-D) 犬の名前: inu 特徴を書いて下さい: wan 犬の名前: inu wan 日本語だけでなく登録することに成功した。 3.感想 出来るだけ全てのプログラムに挑戦したかったが、理解に苦しみ諦めてしまった。 次回は出来るだけ全てのものに挑戦して、もっと自分を進化させたい。 これからもご指導よろしくお願いします。 4.参考文献 西村先生の講義ノート あるかないか http://roy/~madoka/2011/r2/02/r2_02_04_theme_03_existornot.html Hash の対を入力するには http://roy/~madoka/2011/r2/02/r2_02_06_theme_05_hash_pair.html 協力者 細田 洋平 松田 大輝 菊池 綾