今までのレポートを全て再提出します。 第3回 情報の構造を分析しよう レポート課題 氏名:佐藤 咲 学籍番号:c1110772 語学クラス:英語 コース:政策 1、筆記問題 A.sato saki を ASCIIコードで表示すると、 s = 0x73 a = 0x61 t = 0x74 o = 0x6f s = 0x73 a = 0x61 k = 0x6b i = 0x69 16進数(0x)→10進数(0d) に変換すると、 <変換方法> [1]16^0から始めて、右から16^0、16^1、16^2、と変換したい16進数の桁数分だ け準備する。 [2][1]を計算した結果を記載する。 [3]変換したい16進数を記載する。 [4][2]*[3]の結果を記載する。 →最後に[4]を全て足す。 また、16進数でアルファベットが出た場合は、対応表を見て、その16進数に対応 する10進数を当てはめて計算する。 s = 0x73 なので、 [1] 16^1 16^0 [2] 16 1 [3] 7 3 [4] 112 3 →112+3 = 115 a = 0x61 [1] 16^1 16^0 [2] 16 1 [3] 6 1 [4] 96 1 →96+1 = 97 t = 0x74 [1] 16^1 16^0 [2] 16 1 [3] 7 4 [4] 112 4 →112+4 = 116 o = 0x6f ←アルファベットのfが入っているので、fには10進数の15を当てはめる。 [1] 16^1 16^0 [2] 16 1 [3] 6 15 [4] 96 15 →96+15 = 111 s = 0x73 [1] 16^1 16^0 [2] 16 1 [3] 7 3 [4] 112 3 →112+3 = 115 a = 0x61 [1] 16^1 16^0 [2] 16 1 [3] 6 1 [4] 96 1 →96+1 = 97 k = 0x6b ←アルファベットのbが入っているので、bには10進数の11を当てはめる。 [1] 16^1 16^0 [2] 16 1 [3] 6 11 [4] 96 11 →96+11= 107 i = 0x69 [1] 16^1 16^0 [2] 16 1 [3] 6 9 [4] 96 9 →96+9 = 105 B. "あいたかった" あ いたかった (あ、痛かった?) あい たかった (愛、集った。) あいた かった (相田、勝った。) あいたかった (会いたかった。) "きのうきようがすごい" きの うきよう が すごい (木野右京が凄い。) きのう きよう が すごい (昨日、今日が凄い。) き の うきよう が すごい (気の浮きようが凄い。) き のうきよう が すごい (キー農協が凄い。) "あのねこのいすかうよ" あの ねこ の いす かうよ (あの猫の椅子買うよ。) あのね この いす かうよ (あのね、この椅子買うよ) あ のねこ の いす かうよ (あ、野猫の椅子買うよ。) "そのたいへんだ" そのたい へん だ (その鯛、変だ。) そのた いへん だ (その田、異変だ。) そのた いへん だ (その他、異変だ。) "まいくしかないです" ま いく しか ない です (ま、行くしかないです。) まいく しか ない です (マイクしか無いです。) まいくし かない です (マイク氏、家内です。) "かめむしふんだ" かめ むし ふんだ (亀、虫踏んだ。) かめむし ふんだ (カメムシ踏んだ。) かめ むし ふんだ (亀、無視、糞だ。) C. 2007年〜2011年に放送された歴代NHK大河ドラマの特徴を hash 配列 nhk とした。 nhk の key と value はそれぞれドラマタイトルと 放送年、歴史上の人物名、 主役名、平均視聴率 (パーセント)とした。 1: key「江〜姫たちの戦国〜」に対して valueは「2011,江,上野樹里,17.7」 2: key「龍馬伝」に対して valueは「2010,坂本龍馬,福山雅治,18.7」 3: key「天地人」に対して valueは「2009,直江兼続,妻夫木聡,21.2」 4: key「篤姫」に対して valueは「2008,篤姫,宮崎あおい,24.5」 5: key「風林火山」に対して valueは「2007,山本勘助,内野聖陽,18.7」 これらを Hash で表すと、 nhk["江〜姫たちの戦国〜"] = [2011,"江","上野樹里",17.7] nhk["龍馬伝"] = [2010,"坂本龍馬","福山雅治",18.7] nhk["天地人"] = [2009,"直江兼続","妻夫木聡",21.2] nhk["篤姫"] = [2008,"篤姫","宮崎あおい",24.5] nhk["風林火山"] = [2007,"山本勘助","内野聖陽",18.7] また、もう一つの表し方は、 { "江〜姫たちの戦国〜"=>[2011,"江","上野樹里",17.7], "龍馬伝"=>[2010,"坂本龍馬","福山雅治",18.7], "天地人"=>[2009,"直江兼続","妻夫木聡",21.2], "篤姫"=>[2008,"篤姫","宮崎あおい",24.5], "風林火山"=>[2007,"山本勘助","内野聖陽",18.7] } 2、プログラム問題 A. i.考えた設定 登録してある対を表示するプログラム ii.作成したプログラム(hash_ary_print.rb) #!/usr/koeki/bin/ruby #coding: euc-jp print("----2007年以降に放送されたNHK大河ドラマについて紹介します----\n\n") nhk=Hash.new #Hash を新しく定義する nhk["江〜姫たちの戦国〜"] = "2011","江","女優","上野樹里" nhk["龍馬伝"] = "2010","坂本龍馬","俳優","福山雅治" nhk["天地人"] = "2009","直江兼続","俳優","妻夫木聡" nhk["篤姫"] = "2008","篤姫","女優","宮崎あおい" nhk["風林火山"] = "2007","山本勘助","俳優","内野聖陽" for taiga in nhk.keys #for文は繰り返すときに使う #for キー名, 値 in ハッシュ配列名 printf("%d 年に放送されたNHK大河ドラマ %s は歴史上の人物 %s 役を %s %s が演じています。\n\n",nhk[taiga][0],taiga,nhk[taiga][1],nhk[taiga][2],nhk[taiga][3]) end #for文のend iii.もとにしたプログラムからの変更点 前回のレポートで作成した hash_for.rb をもとにした。 今回作成したプログラム hash_ary_print.rb は配列成分を増やすので、数値成 分も加えた。前回のレポートではゴミの分別のプログラムを作成したが、今回は NHK大河ドラマについてのプログラムを作成した。 iv.実行した結果画面 pan{c111077}% ./hash_ary_print.rb [~/Ruby] ----2007年以降に放送されたNHK大河ドラマについて紹介します---- 2011 年に放送されたNHK大河ドラマ 江〜姫たちの戦国〜 は歴史上の人物 江 役を 女優 上野樹里 が演じています。 2010 年に放送されたNHK大河ドラマ 龍馬伝 は歴史上の人物 坂本龍馬 役を 俳優 福山雅治 が演じています。 2009 年に放送されたNHK大河ドラマ 天地人 は歴史上の人物 直江兼続 役を 俳優 妻夫木聡 が演じています。 2008 年に放送されたNHK大河ドラマ 篤姫 は歴史上の人物 篤姫 役を 女優 宮崎あおい が演じています。 2007 年に放送されたNHK大河ドラマ 風林火山 は歴史上の人物 山本勘助 役を 俳優 内野聖陽 が演じています。 v.考察 配列の中に平均視聴率の成分があったのだが、その成分があるとエラーメッセー ジが表示され、その平均視聴率の成分を除くときちんと表示されるのでとても悩 んだ。何が原因なのか自分なりに考えたのだが、よく分からなかったので、平均 視聴率の部分はカットした。しかし後から、printf文の中にある[%]が原因だったこと が判明した。原因に辿り着くまで時間がかかったが、自分で解決できて、とても 勉強になった。 B. i.考えた設定 ある数値について並べ替えるプログラム ii.作成したプログラム (hash_ary_sort.rb) #!/usr/koeki/bin/ruby #coding: euc-jp print("----2007年以降に放送されたNHK大河ドラマについて紹介します----\n\n") nhk=Hash.new #Hash を新しく定義する nhk["江〜姫たちの戦国〜"] = 2011,"江","女優","上野樹里",46,17.7 nhk["龍馬伝"] = 2010,"坂本龍馬","俳優","福山雅治",48,18.7 nhk["天地人"] = 2009,"直江兼続","俳優","妻夫木聡",47,21.2 nhk["篤姫"] = 2008,"篤姫","女優","宮崎あおい",50,24.5 nhk["風林火山"] = 2007,"山本勘助","俳優","内野聖陽",50,18.7 for taiga in nhk.keys #for文は繰り返すときに使う #for キー名, 値 in ハッシュ配列名 printf("%d 年に放送されたNHK大河ドラマ %s は歴史上の人物 %s 役を %s %s が演じています。\n\n",nhk[taiga][0],taiga,nhk[taiga][1],nhk[taiga][2],nhk[taiga][3]) end #for文のend print("--放送された年の古い順に表示します--\n\n") nhk.keys.sort{|new,old| nhk[new][0]<=>nhk[old][0] }.each{|taiga| printf("%s は %d 年に放送され、全 %d 話放送されました。\n",taiga,nhk[taiga][0],nhk[taiga][4]) } print("\n") print("--平均視聴率が高い順に表示します--\n\n") nhk.keys.sort{|high,law| nhk[law][5]<=>nhk[high][5] }.each{|taiga| printf("%s は %d 年に放送され、平均視聴率は %s パーセントでした\n",taiga,nhk[taiga][0],nhk[taiga][5]) } iii.もとにしたプログラムからの変更点 前問で作成した hash_ary_print.rb と授業で作成した hash_shop.rb をもとに プログラムを作成した。 hash_ary_print.rb のプログラムでは、value は放送年、歴史上の人物名、主役 の職業、主役名としたのだが、この hash_ary_sort.rb のプログラムでは、 valueの要素を増やし、放送年、歴史上の人物名、主役の職業、主役名、全放送 回数、平均視聴率とした。 また、放送された年の古い順に並び替える部分と平均視聴率が高い順に並び替え る部分の2つが入ったプログラムを作成した。 iv.実行した結果画面 pan{c111077}% ./hash_ary_sort.rb [~/Ruby] ----2007年以降に放送されたNHK大河ドラマについて紹介します---- 2011 年に放送されたNHK大河ドラマ 江〜姫たちの戦国〜 は歴史上の人物 江 役を 女優 上野樹里 が演じています。 2010 年に放送されたNHK大河ドラマ 龍馬伝 は歴史上の人物 坂本龍馬 役を 俳優 福山雅治 が演じています。 2009 年に放送されたNHK大河ドラマ 天地人 は歴史上の人物 直江兼続 役を 俳優 妻夫木聡 が演じています。 2008 年に放送されたNHK大河ドラマ 篤姫 は歴史上の人物 篤姫 役を 女優 宮崎あおい が演じています。 2007 年に放送されたNHK大河ドラマ 風林火山 は歴史上の人物 山本勘助 役を 俳優 内野聖陽 が演じています。 --放送された年の古い順に表示します-- 風林火山 は 2007 年に放送され、全 50 話放送されました。 篤姫 は 2008 年に放送され、全 50 話放送されました。 天地人 は 2009 年に放送され、全 47 話放送されました。 龍馬伝 は 2010 年に放送され、全 48 話放送されました。 江〜姫たちの戦国〜 は 2011 年に放送され、全 46 話放送されました。 --平均視聴率が高い順に表示します-- 篤姫 は 2008 年に放送され、平均視聴率は 24.5 パーセントでした 天地人 は 2009 年に放送され、平均視聴率は 21.2 パーセントでした 龍馬伝 は 2010 年に放送され、平均視聴率は 18.7 パーセントでした 風林火山 は 2007 年に放送され、平均視聴率は 18.7 パーセントでした 江〜姫たちの戦国〜 は 2011 年に放送され、平均視聴率は 17.7 パーセントでした v.考察 1つ目の並び替えである放送された年の古い順に表示される部分は、2007年〜 2011年の5年間を古い順に並び替えるという単純なものなので、value の放送年( nhk[taiga][0])と全放送回数(nhk[taiga][4])を使用して作成した。 実行してみるときちんと古い順に並び替えることができた。 2つ目の並び替えである平均視聴率が高い順に表示される部分は、2007年〜2011 年5年間の中で平均視聴率が高かったNHK大河ドラマを順に表示されるようにプロ グラムを作成した。 実行したみるときちんと平均視聴率の高い順に並び替えることができた。 C. i.考えた設定 数値の入った配列成分を計算するプログラム ii.作成したプログラム (hash_ary_calc.rb) #!/usr/koeki/bin/ruby #coding: euc-jp print("----2007年以降に放送されたNHK大河ドラマについて紹介します----\n\n") nhk=Hash.new #Hash を新しく定義する nhk["江〜姫たちの戦国〜"] = 2011,"江","女優","上野樹里",46,17.7 nhk["龍馬伝"] = 2010,"坂本龍馬","俳優","福山雅治",48,18.7 nhk["天地人"] = 2009,"直江兼続","俳優","妻夫木聡",47,21.2 nhk["篤姫"] = 2008,"篤姫","女優","宮崎あおい",50,24.5 nhk["風林火山"] = 2007,"山本勘助","俳優","内野聖陽",50,18.7 for taiga in nhk.keys #for文は繰り返すときに使う #for キー名, 値 in ハッシュ配列名 printf("%d 年に放送されたNHK大河ドラマ %s は歴史上の人物 %s 役を %s %s が演じています。\n\n",nhk[taiga][0],taiga,nhk[taiga][1],nhk[taiga][2],nhk[taiga][3]) end #for文のend print("--放送された年の古い順に表示します--\n") nhk.keys.sort{|new,old| nhk[new][0]<=>nhk[old][0] }.each{|taiga| printf("%s は %d 年に放送され、全 %d 話放送されました。\n",taiga,nhk[taiga][0],nhk[taiga][4]) } printf("\n") print("NHK大河ドラマの平均視聴率\n") total = 0 ava = 0 for taiga in nhk.keys total += nhk[taiga][5] ava = total / nhk.length end printf("平均視聴率は %2.1fパーセント です。\n",ava) iii.もとにしたプログラムからの変更点 前問で作成したプログラム hash_ary_sort.rb にプログラムを加えて作成した。 配列を増やし、平均を求める計算式を入力した。 iv.実行した結果画面 pan{c111077}% ./hash_ary_calc.rb [~/Ruby] ----2007年以降に放送されたNHK大河ドラマについて紹介します---- 2011 年に放送されたNHK大河ドラマ 江〜姫たちの戦国〜 は歴史上の人物 江 役を 女優 上野樹里 が演じています。 2010 年に放送されたNHK大河ドラマ 龍馬伝 は歴史上の人物 坂本龍馬 役を 俳優 福山雅治 が演じています。 2009 年に放送されたNHK大河ドラマ 天地人 は歴史上の人物 直江兼続 役を 俳優 妻夫木聡 が演じています。 2008 年に放送されたNHK大河ドラマ 篤姫 は歴史上の人物 篤姫 役を 女優 宮崎あおい が演じています。 2007 年に放送されたNHK大河ドラマ 風林火山 は歴史上の人物 山本勘助 役を 俳優 内野聖陽 が演じています。 --放送された年の古い順に表示します-- 風林火山 は 2007 年に放送され、全 50 話放送されました。 篤姫 は 2008 年に放送され、全 50 話放送されました。 天地人 は 2009 年に放送され、全 47 話放送されました。 龍馬伝 は 2010 年に放送され、全 48 話放送されました。 江〜姫たちの戦国〜 は 2011 年に放送され、全 46 話放送されました。 NHK大河ドラマの平均視聴率 平均視聴率は 20.2パーセント です。 v.考察 平均視聴率の単位はパーセントだが、プログラムを作成している際、計算結果を 表示させようと printf文に printf("平均視聴率は %2.1fパーセント です。 \n",ava)と記載したのだが、エラーメッセージが表示され、[%]をパーセントと 書き換えると、きちんと表示された。このことから、単位が%のときでも、パー セントと入力しないとプログラムが上手く動かないことを学んだ。 平均視聴率で出た答えが正しいか bc -l で以下検証したところ、 20.16000000000000000000となり、小数点第2位の6を繰り上げると20.2になるの で、平均視聴率の答えは正しいことが確認された。 pan{c111077}% bc -l [~/Ruby] 17.7+18.7+21.2+24.5+18.7 100.8 100.8/5 20.16000000000000000000 3、感想 Nissenのホームページで欲しい商品を検索すると、"あなたにおすすめの商品"と いうサービスが表示され、類似商品が表示される。この仕組みは、自分が検索し た商品と同じカテゴリに分類されている商品が出力される仕組みになっているの だと考察する。 今まで私は自ら進んでsortを使わなかったので、前期に習ったsortについてもう 一度復習した。今回作成したプログラムは並び替えるものが少なかったので、プ ログラムにしなくても自分で並び替えることができたが、もっと膨大な量のデー タを処理するときにsortを使うと、いろいろなものを並び変えることが出来、大 変便利なのでこれから活用していきたいと思う。 4、参考文献 SANSPO.COM 「NHK大河ドラマの歴代主役&平均視聴率」 http://www.sanspo.com/geino/data/taiga.html (閲覧日2012.10.11) 西村まどか 基礎プログラミングII 第2回(なになにといえばこれこれ)「入力し たデータを取り出そう」 http://roy/~madoka/2012/r2/02/r2_02_03_theme_02_hash_input.html (閲覧日2012.10.11) 5、共同学習者:土屋哲平