第3回 情報の構造を分析しよう レポート課題 氏名:伊藤桜子 学籍番号:c1100265 語学クラス:英語6 コース:政策マネジメント 1、筆記問題 A i 0x69 t 0x74 o 0x6f u 0x75 s 0x73 a 0x61 k 0x6b u 0x75 r 0x72 a 0x61 k 0x6b o 0x6f 10進数にすると i 0d105 t 0d116 o 0d111 u 0d117 s 0d115 a 0d97 k 0d107 u 0d117 r 0d114 a 0d97 k 0d107 o 0d111 B "わたしがようしをかう" わたしが ようしを かう (私が用紙を買う) わたし がようしを かう (私画用紙を買う) わたしが ようしを かう (私が洋紙を買う) C 陰暦をhash配列のinrekiとした。 inrekiのkeyは1月から5月、valueは陰暦、英語読み、東京の平均最高気温(℃)とした その1:key 「1月」に対してvalueは「睦月、january、9.8」 その2:key 「2月」に対してvalueは「如月、february、10」 その3:key 「3月」に対してvalueは「弥生、march、12.9」 その4:key 「4月」に対してvalueは「卯月、april、18.4」 その5:key 「5月」に対してvalueは「皐月、may、22.7」 これに対するHashの表しかたは inreki["1月"] = "睦月","january","9.8" inreki["2月"] = "如月","february","10" inreki["3月"] = "弥生","march","12.9" inreki["4月"] = "卯月","april","18.4" inreki["5月"] = "皐月","may","22.7" もう一つの表し方は {"1月"=>"睦月","january","9.8","2月"=>"如月","february","10","3月"=>"弥生","march","12.9","4月"=>"卯月","april","5月"=>"皐月","may","22.7"} 2、プログラム問題 A ◯考えた設定 プログラム内のデータを表示させる ◯プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' inreki = Hash.new #Hash配列をinrekiとする。 inreki["1月"] = "睦月","january","9.8" inreki["2月"] = "如月","february","10" inreki["3月"] = "弥生","march","12.9" inreki["4月"] = "卯月","april","18.4" inreki["5月"] = "皐月","may","22.7" for tsuki, koyomi in inreki # key = tsuki value = koyomi printf("%s の陰暦は %s で 英語では %s 、東京での平均最高気温は %3.1f ℃です。\n",tsuki, koyomi[0], koyomi[1], koyomi[2]) end ◯もとにしたプログラムからの変更点 第2回のレポート課題のhash_for.rbをもとにした。 陰暦に加えて英語表記と東京での平均最高気温を表示できるようにした。 ◯実行結果 pan{ITO Sakurako}% ./hash_ary_print.rb [~/Ruby] 4月 の陰暦は 卯月 で 英語では april 、東京での平均最高気温は 18.4 ℃です。 5月 の陰暦は 皐月 で 英語では may 、東京での平均最高気温は 22.7 ℃です。 1月 の陰暦は 睦月 で 英語では january 、東京での平均最高気温は 9.8 ℃です。 2月 の陰暦は 如月 で 英語では february 、東京での平均最高気温は 10.0 ℃です。 3月 の陰暦は 弥生 で 英語では march 、東京での平均最高気温は 12.9 ℃です。 ◯考察 入力したデータが正しく表示されており、少数も正しく表示されていたので このプログラムは正しいといえる。 B ◯考えた設定 平均最高気温を低い順に並べるプログラム ◯プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' inreki = Hash.new #Hash配列をinrekiとする。 inreki["1月"] = "睦月","january","09.8" inreki["2月"] = "如月","february","10" inreki["3月"] = "弥生","march","12.9" inreki["4月"] = "卯月","april","18.4" inreki["5月"] = "皐月","may","22.7" for tsuki, koyomi in inreki # key = tsuki value = koyomi printf("%s の陰暦は %s で 英語では %s 、東京での平均最高気温は %3.1f ℃です。\n",tsuki, koyomi[0], koyomi[1], koyomi[2]) end print("\n") print("東京での平均最高気温が低い順に表示します。\n\n") inreki.keys.sort{|takai,hikui| inreki[takai][2] <=> inreki[hikui][2]}.each{|tsuki| printf("%s の東京での平均最高気温は %3.1f℃です。\n",tsuki, inreki[tsuki][2])} ◯もとにしたプログラムからの変更点 問題Aのhash_ary_print.rbをもとにした。 sortメソッドとeachメソッドを使った。 ◯実行結果 pan{c110026}% ./hash_ary_sort.rb [~/Ruby] 4月 の陰暦は 卯月 で 英語では april 、東京での平均最高気温は 18.4 ℃です。 5月 の陰暦は 皐月 で 英語では may 、東京での平均最高気温は 22.7 ℃です。 1月 の陰暦は 睦月 で 英語では january 、東京での平均最高気温は 9.8 ℃です。 2月 の陰暦は 如月 で 英語では february 、東京での平均最高気温は 10.0 ℃です。 3月 の陰暦は 弥生 で 英語では march 、東京での平均最高気温は 12.9 ℃です。 東京での平均最高気温が低い順に表示します。 1月 の東京での平均最高気温は 9.8℃です。 2月 の東京での平均最高気温は 10.0℃です。 3月 の東京での平均最高気温は 12.9℃です。 4月 の東京での平均最高気温は 18.4℃です。 5月 の東京での平均最高気温は 22.7℃です。 ◯考察 気温が低い順に表示できていたのでこのプログラムは正しいといえる。 C ◯考えた設定 1〜5月の東京での平均最高気温を表示させるプログラム ◯プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' inreki = Hash.new #Hash配列をinrekiとする。 inreki["1月"] = "睦月","january","09.8" inreki["2月"] = "如月","february","10" inreki["3月"] = "弥生","march","12.9" inreki["4月"] = "卯月","april","18.4" inreki["5月"] = "皐月","may","22.7" for tsuki, koyomi in inreki # key = tsuki value = koyomi printf("%s の陰暦は %s で 英語では %s 、東京での平均最高気温は %3.1f ℃です。\n",tsuki, koyomi[0], koyomi[1], koyomi[2]) end goukei = 0 for tsuki, koyomi in inreki goukei += koyomi[2].to_f heikin = goukei.to_f/5 end print("\n") printf("1〜5月までの東京での平均最高気温は %3.1f ℃です。\n\n",heikin) ◯もとにしたプログラムからの変更点 hash_ary_sort.rbをもとにした。 平均最高気温の平均を出すために気温の合計を個数で割る計算式を入れた。 ◯実行結果 pan{c110026}% ./hash_ary_calc.rb [~/Ruby] 4月 の陰暦は 卯月 で 英語では april 、東京での平均最高気温は 18.4 ℃です。 5月 の陰暦は 皐月 で 英語では may 、東京での平均最高気温は 22.7 ℃です。 1月 の陰暦は 睦月 で 英語では january 、東京での平均最高気温は 9.8 ℃です。 2月 の陰暦は 如月 で 英語では february 、東京での平均最高気温は 10.0 ℃です。 3月 の陰暦は 弥生 で 英語では march 、東京での平均最高気温は 12.9 ℃です。 1〜5月までの東京での平均最高気温は 14.8 ℃です。 ◯考察 全体のデータを表示したあとに平均気温を表示できた。 bc-lで計算が合っているか確認し、実行後の結果と同じことがわかったので このプログラムは正しいといえる。 D ◯考えた設定 データを別のファイルにうつし、そのファイルを読み込んでデータを表示させる プログラム ◯プログラム(データ) 1月 睦月 january 09.8 2月 如月 february 10.0 3月 弥生 march 12.9 4月 卯月 april 18.4 5月 皐月 may 22.7 ◯プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' inreki = Hash.new #Hash配列をinrekiとする。 open("hash_ary_data.dat","r") do |kion| while line = kion.gets if/(\S+)\s+(\S+)\s+(\w+)\s+(.+)/ =~line inreki[$1] = [$2, $3, $4.to_f] end end end for tsuki, koyomi in inreki # key = tsuki value = koyomi printf("%s の陰暦は %s で 英語では %s 、東京での平均最高気温は %3.1f ℃です。\n",tsuki, koyomi[0], koyomi[1], koyomi[2]) end print("\n") print("東京での平均最高気温が低い順に表示します。\n\n") inreki.keys.sort{|takai,hikui| inreki[takai][2] <=> inreki[hikui][2]}.each{|tsuki| printf("%s の東京での平均最高気温は %3.1f℃です。\n",tsuki, inreki[tsuki][2])} #配列.sort{|変数A, 変数B| #変数A(並べ替えに使用する部分) <=> 変数B(並べ替えに使用する部分)} #配列.each{|配列の要素を代入する内部変数|実行したい操作} goukei = 0 #goukeiの初期値 heikin = 0 #heikinの初期値 for tsuki, koyomi in inreki goukei += koyomi[2].to_f #気温を足していく計算式 end heikin = goukei.to_f/5 #平均を求める計算式 print("\n") printf("1〜5月までの東京での平均最高気温は %3.1f ℃です。\n\n",heikin) ◯もとにしたプログラムからの変更点 hash_ary_calc.rbをもとにした。 openメソッドを使って、データを読み込み、そのデータをもとに 表示できるようにした。 ◯実行結果 pan{c110026}% ./hash_ary_read.rb [~/Ruby] 4月 の陰暦は 卯月 で 英語では april 、東京での平均最高気温は 18.4 ℃です。 5月 の陰暦は 皐月 で 英語では may 、東京での平均最高気温は 22.7 ℃です。 1月 の陰暦は 睦月 で 英語では january 、東京での平均最高気温は 9.8 ℃です。 2月 の陰暦は 如月 で 英語では february 、東京での平均最高気温は 10.0 ℃です。 3月 の陰暦は 弥生 で 英語では march 、東京での平均最高気温は 12.9 ℃です。 東京での平均最高気温が低い順に表示します。 1月 の東京での平均最高気温は 9.8℃です。 2月 の東京での平均最高気温は 10.0℃です。 3月 の東京での平均最高気温は 12.9℃です。 4月 の東京での平均最高気温は 18.4℃です。 5月 の東京での平均最高気温は 22.7℃です。 1〜5月までの東京での平均最高気温は 14.8 ℃です。 ◯考察 データが正しく表示されていたのでhash_ary_data.datが正しく読み込まれ ていることがわかる。計算も合っていたのでこのプログラムは正しいといえる。 3、感想 ◯「三匹のこぶた」を考えた。 一番上の子豚はわらで家を作った。 → 子豚をねらっていた狼に吹き飛ば されてしまう。 二番目の子豚は木で家を作った。 → 子豚をねらっていた狼に吹き飛ば されてしまう。 三番目の子豚はレンガで家を作った。→ 狼は家を吹き飛ばすことができない。 このように「家を作るが吹き飛ばされる」という表現を繰り返している。 ◯桃太朗 旅の途中で出会った犬にきび団子をあげる → 仲間に加わる 旅の途中で出会ったサルにきび団子をあげる → 仲間に加わる 旅の途中で出会ったキジにきび団子をあげる → 仲間に加わる このように「きび団子をあげるかわりに仲間に加わる」という表現が繰り返され ている。 今回のプログラム課題もsortメソッドやeachメソッドやforメソッドなど、 使うメソッドが増えてきて難しいと思った。しかし、コンパクトなプログラムが 作れるので他にも使えるメソッドを学んでいきたい。 Dの問題で正規表現を使ったとき、少数を度のように表すかにとまどったが、 (.+)で表せることが分かった。 4、参考文献 ◯東京の月別平均最高気温 http://www2m.biglobe.ne.jp/%257EZenTech/world/kion/Japan/Japan_Tokyo.htm ◯西村先生の授業ページ(講義ノート) http://roy/~madoka/2011/r2/03/lec/resume.html ◯神田先生の第7回目授業ページ http://roy/~naoya/ruby/7.html ◯三匹の子豚 http://www.brother.co.jp/jp/mymio/special/download/craft/story/3kobuta/story.html ◯共同学習者 畠山貴衣 東北公益文科大学 公益学部 公益学科 2年 伊藤桜子 c110026@f.koeki-u.ac.jp