第 2 回 なになにといえばこれこれ レポート課題 氏名:吉田栞 学籍番号:c1101997 語学クラス:英語クラス6 コース(系):政策マネジメントコース 1.筆記問題 A 漫画家の名前と代表作を hash 配列 manga とする。 そして、key は 作者名 value は 代表作とした。 1: key 「青山剛昌」に対して value は「名探偵コナン」 2: key 「尾田栄一郎」に対して value は「ONE PIECE」 3: key 「小畑健」に対して value は「DEATH NOTE」 4: key 「荒川弘」に対して value は「鋼の錬金術師」 5: key 「高橋留美子」に対して value は「犬夜叉」 これに対するHash の表し方は manga["青山剛昌"] = "名探偵コナン" manga["尾田栄一郎"] = "ONE PIECE" manga["小畑健"] = "DEATH NOTE" manga["荒川弘"] = "鋼の錬金術師" manga["高橋留美子"] = "犬夜叉" また、もう一つの表し方は、 { "青山剛昌" => "名探偵コナン", "尾田栄一郎" => "ONE PIECE", "小畑健" => "DEATH NOTE", "荒川弘" => "鋼の錬金術師", "高橋留美子" => "犬夜叉" } B a.0d 2010 = 0x?? 0dは10進数で0xは16進数である。 (計算方法) (1)変換したい10進数を16で割り、商を下に書き、余りを右に書く。 (2)商が0になるまで繰り返す。 16) 2010 10 ----- 16) 125 13 ----- 16) 7 7 ----- 0 (3)6進数の表記に直していく 10進数 16進数 7 → 7 13 → d 10 → a よって、0d 2010 = 0x7da となる。 b.2. 0d 2010 = 0b?? 0dは10進数、0bは2進数である。 (計算方法) 2) 2010 0 (1)変換したい10進数を2で割り、商を下に書き、 ----- 余りを右に書く。 2) 1005 1 (2)商が0になるまで繰り返す。 ----- 2) 502 0 ----- 2) 251 1 ----- 2) 125 1 ----- 2) 62 0 ----- 2) 31 1 ----- 2) 15 1 ----- 2) 7 1 ----- 2) 3 1 ----- 2) 1 1 ----- 0 (3)最後に余りを下から順に並べる。 11111011010 よって、0d 2010 = 0b11111011010となる。 さらに 16 進法に変換してみる (計算方法) 1. 4桁ごとに区切る。また、先頭が4桁に満たない場合があれば、左側に0を補う。 111 1101 1010 → 0111 1101 1010 2. それぞれ16進数に変換する。 0111 → 7 1101 → d 1010 → a よって、0b 11111011010 = 0x 7da となり、1問目と答えは同じであることが確 かめられた。 2.プログラム問題 A #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語コードを使うことを命令している manga = Hash.new manga["青山剛昌"] = "「名探偵コナン」" # Hash の中身 manga["尾田栄一郎"] = "「ONE PIECE」" manga["小畑健"] = "「DEATH NOTE」" manga["荒川弘"] = "「鋼の錬金術師」" manga["高橋留美子"] = "「犬夜叉」" print("( 有名漫画家 )\n") for name, title in manga printf("%sは%sの作者です\n",name ,title) end 実行結果 pan{c110199}% ./hash_for.rb [~/Ruby] ( 有名漫画家 ) 荒川弘は「鋼の錬金術師」の作者です 小畑健は「DEATH NOTE」の作者です 高橋留美子は「犬夜叉」の作者です 青山剛昌は「名探偵コナン」の作者です 尾田栄一郎は「ONE PIECE」の作者です 考察 結果表示はコンピュータが記録した順なので、登録した順番と違うが プログラムに問題はないといえる。 B #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語コードを使うことを命令している manga = Hash.new("登録されていません") manga["青山剛昌"] = "「名探偵コナン」" # Hash の中身 manga["尾田栄一郎"] = "「ONE PIECE」" manga["小畑健"] = "「DEATH NOTE」" manga["荒川弘"] = "「鋼の錬金術師」" manga["高橋留美子"] = "「犬夜叉」" print("「青山剛昌・尾田栄一郎・小畑健・荒川弘・高橋留美子」\n") print("上記の作者名を入力すると、その人の代表作が分かります。\n") print("作者名を入力してください:") name = gets.chomp if manga.key?(name) == false #文字列 name が Hash 内になければ表示される printf("%sは%s\n",name,manga[name]) else printf("%sの代表作は%sです\n",name,manga[name]) end 実行結果 pan{c110199}% ./hash_choice.rb [~/Ruby] 「青山剛昌・昌尾田栄一郎・小畑健・荒川弘・高橋留美子」 上記の作者名を入力すると、その人の代表作が分かります。 作者名を入力してください:青山剛昌 青山剛昌の代表作は「名探偵コナン」です pan{c110199}% ./hash_choice.rb [~/Ruby] 「青山剛昌・尾田栄一郎・小畑健・荒川弘・高橋留美子」 上記の作者名を入力すると、その人の代表作が分かります。 作者名を入力してください:尾田栄一郎 尾田栄一郎の代表作は「ONE PIECE」です pan{c110199}% ./hash_choice.rb [~/Ruby] 「青山剛昌・尾田栄一郎・小畑健・荒川弘・高橋留美子」 上記の作者名を入力すると、その人の代表作が分かります。 作者名を入力してください:小畑健 小畑健の代表作は「DEATH NOTE」です pan{c110199}% ./hash_choice.rb [~/Ruby] 「青山剛昌・尾田栄一郎・小畑健・荒川弘・高橋留美子」 上記の作者名を入力すると、その人の代表作が分かります。 作者名を入力してください:荒川弘 荒川弘の代表作は「鋼の錬金術師」です pan{YOSHIDA Shiori}% ./hash_choice.rb [~/Ruby] 「青山剛昌・尾田栄一郎・小畑健・荒川弘・高橋留美子」 上記の作者名を入力すると、その人の代表作が分かります。 作者名を入力してください:高橋留美子 高橋留美子の代表作は「犬夜叉」です pan{c110199}% ./hash_choice.rb [~/Ruby] 「青山剛昌・尾田栄一郎・小畑健・荒川弘・高橋留美子」 上記の作者名を入力すると、その人の代表作が分かります。 作者名を入力してください:尾田 尾田は登録されていません 考察 プログラム通りに結果が出たので間違いはないといえる。 また、falseの結果もきちんと出た。 感想 クレジットカードなどで登録した個人情報をまとめる際に使われていると思いま した。 今回の課題は以前に学習したことが含まれていましたが忘れていることが多かっ たのであらためて復習になりました。 次回の講義までに忘れないように復習を計画的にしていきたいと思います。 参考文献 基礎プログラミングII 第 2 回 「なになにといえばこれこれ」 西村まどか http://roy/~madoka/2011/r2/02/