第 3 回 情報の構造を分析しよう レポート課題 氏名:名和 大翔 学籍番号:C1101678 語学クラス:英語6 コース(系):政策マネジメント 1.筆記問題 A.自分の名前をalphabet表示で書き下すと、Nawa Hirohaである。これをASCII コードで表すと N = 0x4E a = 0x61 w = 0x77 a = 0x61 H = 0x48 i = 0x69 r = 0x72 o = 0x6F h = 0x68 a = 0x61 である。これを10進数表記に変換すると N = 0x4E = 16*4 + 1*E(14) = 64 + 14 = 78 a = 0x61 = 16*6 + 1*1 = 96 + 1 = 97 w = 0x77 = 16*7 + 1*7 = 112 + 7 = 119 a = 0x61 = 16*6 + 1*1 = 96 + 1 = 97 H = 0x48 = 16*4 + 1*8 = 64 + 8 = 72 i = 0x69 = 16*6 + 1*9 = 96 + 9 = 105 r = 0x72 = 16*7 + 1*2 = 112 + 2 = 114 o = 0x6F = 16*6 + 1*F(15) = 96 + 15 = 111 h = 0x68 = 16*6 + 1*6 = 96 + 6 = 102 a = 0x61 = 16*6 + 1*1 = 96 + 1 = 97 である。 B."わたしはさんじゅうしになりたい" わたしは さんじゅうし である (私は三銃士である) わたしは さんじゅうし である (私は三十四である) わたし はさん じゅうし である (私破産重視である) C.マンガ「ONE PIECE」の特徴を hash 配列 kaizoku としました。 kaizoku の key と value はそれぞれ人物名とその通り名、懸賞金、夢にとりました。 その1: key 「モンキー・D・ルフィ」に対して valueは「"麦わらのルフィ", 400000000,"海賊王"」 その2: key 「ロロノア・ゾロ」に対して valueは「"海賊狩のゾロ", 120000000,"大剣豪"」 その3: key 「サンジ」に対して valueは「"黒足のサンジ",77000000," オールブルー"」 その4: key 「ウソップ」に対して valueは「"狙撃の王様",30000000," 勇敢なる海の戦士"」 その5: key 「チョッパー」に対して valueは「"綿アメ大好きチョッパー ",50,"万能薬"」 これに対応する Hashの表し方は kaizoku["モンキー・D・ルフィ"] = ["麦わらのルフィ",400000000,"海賊王"] kaizoku["ロロノア・ゾロ"] = ["海賊狩のゾロ",120000000,"大剣豪"] kaizoku["サンジ"] = ["黒足のサンジ",77000000,"オールブルー"] kaizoku["ウソップ"] = ["狙撃の王様",30000000,"勇敢なる海の戦士"] kaizoku["チョッパー"] = ["綿アメ大好きチョッパー",50,"万能薬"] またもう一つの表し方は kaizoku = { "モンキー・D・ルフィ" =>["麦わらのルフィ",400000000,"海賊王"], "ロロノア・ゾロ" =>["海賊狩のゾロ",120000000,"大剣豪"], "サンジ"=>["黒足のサンジ",77000000,"オールブルー"], "ウソップ"=>["狙撃の王様",30000000,"勇敢なる海の戦士"], "チョッパー" =>["綿アメ大好きチョッパー",50,"万能薬"] } 2.プログラム問題 Aを作成 1.考えた設定 hashをkaizokuとして、登録してある対をkeyといえばvalue1,value2,…とすべ て表示できるようにした。 2.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語コードで出力 kaizoku = Hash.new #Hashをkaizokuときめる kaizoku["モンキー・D・ルフィ"] = ["麦わらのルフィ",400000000,"海賊王"] kaizoku["ロロノア・ゾロ"] = ["海賊狩のゾロ",120000000,"大剣豪"] kaizoku["サンジ"] = ["黒足のサンジ",77000000,"オールブルー"] kaizoku["ウソップ"] = ["狙撃の王様",30000000,"勇敢なる海の戦士"] kaizoku["チョッパー"] = ["綿アメ大好きチョッパー",50,"万能薬"] for name, profile in kaizoku #全てのHashを出力 printf("%sの異名は%sです。この海賊の懸賞金は%dベリーで、夢は%sになる ことです 。\n",name,profile[0],profile[1],profile[2]) #valueの3つの要素を出力 end 3.もとにしたプログラムからの変更点 二回目の課題であるhash_for.rbをもとにした。配列名をkaizokuにして、key とvalueも順次変更した。またvalueの要素を3つにして、printfで出力すると きにvalue[0],value[1],value[2]としてうまく出力できるようにした。 4.プログラムを実行した結果画面 pan{c110167}% ./hash_ary_print.rb [~/Ruby] ウソップの異名は狙撃の王様です。この海賊の懸賞金は30000000ベリーで、夢は勇敢なる海の戦士になることです。 モンキー・D・ルフィの異名は麦わらのルフィです。この海賊の懸賞金は400000000ベリーで、夢は海賊王になることです。 チョッパーの異名は綿アメ大好きチョッパーです。この海賊の懸賞金は50ベリーで、夢は万能薬になることです。 ロロノア・ゾロの異名は海賊狩のゾロです。この海賊の懸賞金は120000000ベリーで、夢は大剣豪になることです。 サンジの異名は黒足のサンジです。この海賊の懸賞金は77000000ベリーで、夢はオールブルーになることです。 5.考察 ひとつのkeyに3つのvalueの対をつくり、それをprintfの中に配列の要素を指 定することで出力できる。 Bを作成 1.考えた設定 valueにさだめた要素の一つである懸賞金を安い順に並べ替えるようにした。 2.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' kaizoku = Hash.new kaizoku["モンキー・D・ルフィ"] = ["麦わらのルフィ",400000000,"海賊王"] kaizoku["ロロノア・ゾロ"] = ["海賊狩のゾロ",120000000,"大剣豪"] kaizoku["サンジ"] = ["黒足のサンジ",77000000,"オールブルー"] kaizoku["ウソップ"] = ["狙撃の王様",30000000,"勇敢なる海の戦士"] kaizoku["チョッパー"] = ["綿アメ大好きチョッパー",50,"万能薬"] print("懸賞金が低い順に整頓\n") kaizoku.keys.sort{ |a,b| kaizoku[a][1]<=>kaizoku[b][1] }.each{ |beri| printf("%sの懸賞金は%dベリーです。\n",beri,kaizoku[beri][1]) } 3.もとにしたプログラムからの変更点 基礎プログラミング第2回(なになにといえばこれこれ) 「要素の一部分を使っ て入れ替えをするには」のページのプログラムを基にした。 sesameをkaizokuに、second,lowestをそれぞれa,bに、retailをberiに変更し た。 4.プログラムを実行した結果画面 pan{c110167}% ./hash_ary_sort.rb [~/Ruby] 懸賞金が低い順に整頓 チョッパーの懸賞金は50ベリーです。 ウソップの懸賞金は30000000ベリーです。 サンジの懸賞金は77000000ベリーです。 ロロノア・ゾロの懸賞金は120000000ベリーです。 モンキー・D・ルフィの懸賞金は400000000ベリーです。 5.考察 結果、sortを使うことによって値を並び替えることが可能である。 3.感想 桃太郎ではきび団子を犬、猿、雉にあたえておともにする場面で文章が繰り返 される。Hashの使い方に慣れてきた。 4.参考文献 基礎プログラミング II 第 2 回 (なになにといえばこれこれ) 「要素の一部 分を使って入れ替えをするには」 西村まどか先生 http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/02/r2_02_15_theme_14_sorthasharraycomp.html #作成したプログラムを添付します。