第 3 回 情報の構造を分析しよう レポート課題 吉住 貴則 C1101980 英語2 地域共創コース 1A、私の名前をアルファベットで表すと YOSHIZUMI TAKANORI <16進数の場合> 0x79 … Y 0x6f … O 0x73 … S 0x68 … H 0x69 … I 0x7a … Z 0x75 … U 0x6d … M 0x69 … I 0x74 … T 0x61 … A 0x6b … K 0x61 … A 0x6e … N 0x6f … O 0x72 … R 0x69 … I <10進数の場合> (Y)0x79 = 121 16*7 = 112 1*9 = 9 112+9 = 121 (O)0x6f = 111 16*6 = 96 1*f(15) = 15 96+15 = 111 (S)0x73 = 115 16*7 = 112 1*3 = 3 112+3 =115 (H)0x68 = 104 16*6 = 96 1*8 = 8 96+8 = 104 (I)0x69 = 105 16*6 = 96 1*9 = 9 96+9 = 105 (Z)0x7a = 122 16*7 = 112 1*10 = 10 112+10 = 122 (U)0x75 = 117 16*7 = 112 1*5 = 5 112+5 = 117 (M)0x6d = 109 16*6 = 96 1*d(13) = 13 96+13 = 109 (I)0x69 = 105 16*6 = 96 1*9 = 9 96+9 = 105 (T)0x74 = 116 16*7 = 112 1*4 = 4 112+4 = 116 (A)0x61 = 97 16*6 = 96 1*1 = 1 96+1 = 97 (K)0x6b = 107 16*6 = 96 1*b(11) = 11 96+11 = 107 (A)0x61 = 97 16*6 = 96 1*1 = 1 96+1 = 97 (N)0x6e = 110 16*6 = 96 1*e(14) = 14 96+14 = 110 (O)0x6f = 111 16*6 = 96 1*f(15) = 15 96+15 = 111 (R)0x72 = 114 16*7 = 112 1*2 = 2 112+2 = 114 (I)0x69 = 105 16*6 = 96 1*9 = 9 96+9 = 105 1B、 1) きょうはうたのけいこだ(3例) きょうは うたの けいこだ (今日は歌の稽古だ) きょう はうたの けいこだ (今日端唄の稽古だ) きょうは うたの けいこだ (今日は宇多野景子だ) 2) とてもいいきぶんである(4例) とても いいきぶん である (とても良い気分である) とてもいい きぶん である (とてもいい紀文である) とてもいい きぶん である (とてもいい起文である) とてもいい きぶん である (とてもいい奇文である) 3) あきのゆうぐれはさむい(5例) あきの ゆうぐれは さむい (秋の夕暮は寒い) あきの ゆうぐれは さむい (亜紀の夕暮は寒い) あきのゆう ぐれは さむい (秋野裕愚れは寒い) 1C、前回のものを適用しました 設定 私の大好きな「演歌」を用いて、歌手を「key」に その歌手のヒット曲を「value」にしました。 "hash 配列 kyoku,sakusi,sakkyoku,hatubai"になります。 ちなみにhash名は「enka」にしました。。 KEYは女性演歌歌手、 VALUEはヒット曲に加え、 作詩・作曲者名、発売年を付け加えました。 その1 key "伍代夏子" に対して value は "ひとり酒、たかたかし、水森 英夫、1994" その2 key "坂本冬美" に対して value は "夜桜お七、林あまり、三木た かし、1994" その3 key "香西かおり"に対して value は "無言坂、市川睦月、玉置浩 二、1993" その4 key "藤あや子" に対して value は "むらさき雨情、三浦康照、山 口ひろし、1993" その5 key "長山洋子" に対して value は "じょんから女節、鈴木紀代、 西つよし、2003" これに対応する hash の表し方は 1、enka["伍代夏子"] = "ひとり酒,たかたかし,水森英夫,1994" 2、enka["坂本冬美"] = "夜桜お七,林あまり,三木たかし,1994" 3、enka["香西かおり"] = "無言坂,市川睦月,玉置浩二,1993" 4、enka["藤あや子"] = "むらさき雨情,三浦康照,山口ひろし,1993" 5、enka["長山洋子"] = "じょんから女節,鈴木紀代,西つよし,2003" また、もう一つの表し方は {"伍代夏子" => ["ひとり酒",たかたかし,水森英夫,1994],"坂本冬美" => [" 夜桜お七",林あまり,三木たかし,1994],"香西かおり" => ["無言坂",市川睦月,玉 置浩二,1993],"藤あや子" => ["むらさき雨情",三浦康照,山口ひろ し,1993],"長山洋子" => ["じょんから女節,鈴木紀代,西つよし,2003"} となります。 2、Bを選択した。(Aを完成させてからBを作成したのでAも添付します) 1) 前回同様、演歌歌手の名前、その方々のヒット曲に加え、そのヒット曲の 作詩、作曲者の名前と発売年数を登録し、全て表示するようにした。 2)作成したプログラム #!/usr/koeki/bin/ruby # rubyを使うときに必ず頭につける約束。 kasyu = Hash.new # Hash配列 # kasyuは連想変数(HASH変数)だと言っている。 # Hash … あるものとあるものをセットにして保存ができる変数。 kasyu["伍代夏子"] = "ひとり酒","たかたかし","水森英夫",1994 #key名は"伍代夏子"、value名は"ひとり酒", "たかたかし","水森英夫",1994。 # Hashの中身 "伍代夏子"は(KEY)キー名で # "ひとり酒"は(VALUE)バリューと言う。 # hash名["key名"] = "value名"で「対」を表す。 # この他にも"key名" => "value名"で表すことも出来る。 kasyu["坂本冬美"] = "夜桜お七","林あまり","三木たかし",1994 #key名は"坂本冬美"、value名は"夜桜お七", "林あまり","三木たかし",1994。 kasyu["香西かおり"] = "無言坂","市川無月","玉置浩二",1993 #key名は"香西かおり"、value名は"無言坂", "市川無月","玉置浩二",1993。 kasyu["藤あや子"] = "むらさき雨情","三浦康照","山口ひろし",1993 #key名は"藤あや子"、value名は"むらさき雨情", "三浦康照","山口ひろし",1993。 kasyu["長山洋子"] = "じょんから女節","鈴木紀代","西つよし",2003 #key名は"長山洋子"、value名は"じょんから女節", "鈴木紀代","西つよし",2003。 # ここからは、forによって2つの変数を使い、Hashの中身を取り出します。 for utaite ,kyoku in kasyu # for キー名の変数, バリュー名の変数 in hash名 # forは、横の変数にinより右にhash名を入れることで、 Hashの中身を代入しながらその下に書かれた処理を繰り返す。 printf("歌手:%s\n 曲名:%s\n 作詩:%s\n 作曲:%s\n 発売:%d年\n\n", utaite, kyoku[0],kyoku[1],kyoku[2],kyoku[3]) # printf … 変数に代入されたものを表示 、%sは文字列に置き換える # utaite キー名の変数 # kyoku バリュー名の変数 # kyoku [0] バリューの中の0番目の要素 例) キーが伍代夏子なら「ひとり酒」 # [1] 、、 1番目の要素 例) 「たかたかし」 # [2] 、、 2番目の要素 例) 「水森英夫」 # [3] 、、 3番目の要素 例) 「1994」 end # forのためのend kasyu.keys.sort{|name,hatubai| #※1 kasyu[name][3]<=>kasyu[hatubai][3]}.each{|yake| #※2 #※1 HASH名.keys.sort{|変更する前の key 変数, 変更した後の key 変数| #※2 Hash 名[変更前の key 変数][要素番号] <=> Hash 名[変更後の key 変数][要素番号]} printf("発売が若い順\n 曲名: %s 発売: %d \n",yake,kasyu[yake][3])} 3)、前回のレポート課題をもとに作成した。 本当は、キー名や FORの中のバリュー名を変更するつもりは無かったが、 本当に自分が HASH のことを理解しているか確認のためあえて変更した。 まずはじめに、バリューの中身をどういう風に増やせば良いか悩んだ。 そこで、カラオケに行くと題名のしたに作詩、作曲者名が書いてあることを 思い出してそれをヒントに作成した。 前半は、難なく進んだが、PRINTFで表示する際、バリューの中身をどういう 風に表示した良いか分からなくなり、二次元配列と気付くまで時間が 掛かった。 そのため、自分がわからなかったと言うこともあり、バリューの要素の中 身を詳しく説明した。 その後、SORT を使って、発売年数順に並べ替えようとした。その際、西村 先生のヒントを作成したが、うまくいかなかった。それは、PRINTF の後に }をつけるのを忘れており、そこで迷った。 4)、結果 pan{c110198}% ./hash_ary_sort.rb 歌手:坂本冬美 曲名:夜桜お七 作詩:林あまり 作曲:三木たかし 発売:1994年 歌手:伍代夏子 曲名:ひとり酒 作詩:たかたかし 作曲:水森英夫 発売:1994年 歌手:長山洋子 曲名:じょんから女節 作詩:鈴木紀代 作曲:西つよし 発売:2003年 歌手:香西かおり 曲名:無言坂 作詩:市川無月 作曲:玉置浩二 発売:1993年 歌手:藤あや子 曲名:むらさき雨情 作詩:三浦康照 作曲:山口ひろし 発売:1993年 発売が若い順 曲名: 藤あや子 発売: 1993 発売が若い順 曲名: 香西かおり 発売: 1993 発売が若い順 曲名: 伍代夏子 発売: 1994 発売が若い順 曲名: 坂本冬美 発売: 1994 発売が若い順 曲名: 長山洋子 発売: 2003 5)、考察 先程も書いたように、SORT を して、PRINTF で 表示する際に } をつけ忘れたため最初エラーしかでなかった が完成した。 完成型には、P を使って表示したものを削除したが、P METHODで確認しながら 作成した。 3、感想 何も物語を思いつかなかったので、「桃太郎」で作った。 桃太郎、きびだんごをもっている → 犬が現われ、きびだんごに興味をもつ 犬が現われ、きびだんごに興味をもつ → 桃太郎、きびだんごを与え犬を仲間 にする 桃太郎、きびだんごを与え犬を仲間にする → 猿が現われ、きびだんごに興味 をもつ 猿が現われ、きびだんごに興味をもつ → 桃太郎、きびだんごを与え猿を仲間 にする 桃太郎、きびだんごを与え猿を仲間にする → キジが現われ、きびたんごに興 味をもつ キジが現われ、きびたんごに興味をもつ → 桃太郎、きびだんごを与えキジを なかまにする 桃太郎、きびだんごを与えキジをなかまにする → 桃太郎と犬、猿、キジは鬼ヶ 島に到着 桃太郎と犬、猿、キジは鬼ヶ島に到着 → 鬼と対決 鬼と対決 → 桃太郎と犬、猿、キジが勝利 本当はプログラム問題でCまで取り組もうと思っていたのだが、 計算する問題だと知らずに計算が出来ないものを作ってしまい 諦めてしまった。 次回はこの無念をはらして、ぜひC以降にも挑戦したい。 4、参考文献 WEBサイト 西村まどか 先生 ホームページ 2011 年度 基礎プログラミング II 講義ノート(シラバス) 第 3 回 (情報の構造を分析しよう) (http://roy/~madoka/2011/r2/03/) 自分のノート(主に、進数計算) 5、添付