第 3 回 情報の構造を分析しよう レポート課題 氏名:大武 美里 学籍番号:c1110335 語学クラス:英語2 コース:地域共創コース 1.筆記問題 A.自分の名前をアルファベット表示で書き下し、そのASCIIコードを調べよ。余 力のあるものは、16進数表記を10進数表記に変換したものを記す。 ・0x は 16進数 ・0d は 10進数 ・0b は 2進数 <自分の名前をアルファベット表示し、ASCIIコードを調べたもの。> 「Otake Misato」をASCIIコードで表すと、 O = 0x4f t = 0x74 a = 0x61 k = 0x6b e = 0x65 M = 0x4d i = 0x69 s = 0x73 a = 0x61 t = 0x74 o = 0x6f <16進数表記を10進数表記に変換したもの。> 16進数(0x)を10進数(0d)にするには、16をかけていくと良い。 確かめ算をしたいときは、Kterm で bc -l と打ち込むと計算することができる。 計算が終わったら、quit と入力すると終了することができる。 「Otake Misato」 O 0x4f = 4 * 16 + 15(f) * 16 = 304 t 0x74 = 7 * 16 + 4 * 16 = 176 a 0x61 = 6 * 16 + 1 * 16 = 112 k 0x6b = 6 * 16 + 11(b) * 16 = 272 e 0x65 = 6 * 16 + 5 * 16 = 176 M 0x4d = 4 * 16 + 13(d) * 16 = 272 i 0x69 = 6 * 16 + 9 * 16 = 240 s 0x73 = 7 * 16 + 3 * 16 = 160 a 0x61 = 6 * 16 + 1 * 16 = 112 t 0x74 = 7 * 16 + 4 * 16 = 176 o 0x6f = 6 * 16 + 15(f) * 16 = 336 という結果になった。よって、10進数(0d)になおすと以下のように表示することがで きる。 O = 0d304 t = 0d176 a = 0d112 k = 0d272 e = 0d176 M = 0d272 i = 0d240 s = 0d160 a = 0d112 t = 0d176 o = 0d336 --------------------------------------------------------- B.自分で創作した文章、あるいは複数の意味をあてることができる文章を調べ、 ひらがなで書き下したあと、わかち書きせよ。少なくとも3つの文、2通り以上の 読みを含む。いくつかの分け方は、漢字を使って説明してよい。 「きょうはなをかく」 きょう はな を かく (今日鼻をかく) きょう はな を かく (今日花を描く) きょうは な を かく (今日は菜を描く) きょうはな を かく (京花を描く) --------------------------------------------------------- C.5つの対を考えよ。その対について、適切なhash配列名を与え、valueを3成分 以上の配列とせよ。先週のデータをさらに拡張してもよい。 先週作成したプログラムを使用した。 ファイル名 → hash_for.rb ・変更点 前回のレポートでは、valueのところを1つしか表示していませんでしたが、今回 は2つ増やして3つにして作成した。 果物の特徴をhash配列fruitとしました。 fruitのkeyとvalueはそれぞれ果物と果物の色と味と収穫時期にとりました。 ・key → 果物 ・value → 果物の色、味、収穫時期 1 → key「いちご」に対して、value「赤, 甘い, 5月」 2 → key「もも」に対して、value「ピンク, 甘酸っぱい, 7月」 3 → key「バナナ」に対して、value「黄色, 甘い(弱), 9月」 4 → key「マンゴー」に対して、value「オレンジ, 甘い(強), 6月」 5 → key「ぶどう」に対して、value「紫, 甘い, 8月」 これに対するHashの表し方は2つある。 <1つ目> fruit["いちご"] = ["赤","甘い","5月"] fruit["もも"] = ["ピンク","甘酸っぱい","7月"] fruit["バナナ"] = ["黄色","甘い(弱)","9月"] fruit["マンゴー"] = ["オレンジ","甘い(強)","6月"] fruit["ぶどう"] = ["紫","甘い","8月"] <2つ目> { "いちご" => ["赤","甘い","5月"] "もも" => ["ピンク","甘酸っぱい","7月"] "バナナ" => ["黄色","甘い(弱)","9月"] "マンゴー" => ["オレンジ","甘い(強)","6月"] "ぶどう" => ["紫","甘い","8月"] } --------------------------------------------------------- --------------------------------------------------------- 2.プログラム問題 以下の問題から1つ選択せよ。前問で考えた対を使ってよい。 A.あらかじめプログラムに登録してある対を表示するもの(hash_any_print.rb) ・考えた設定 それぞれの果物の色、味、収穫時期を文として表示できるプログラム。 ・変更点 前回のレポートで作成したプログラム(hash_for.rb)の配列成分(value)を増やした。 <プログラム> #!/usr/koeki/bin/ruby #coding: euc-jp fruit = Hash.new # Hash配列をfruitとする fruit["いちご"] = ["赤","甘い","5月"] fruit["もも"] = ["ピンク","甘酸っぱい","7月"] fruit["バナナ"] = ["黄","甘い(弱)","9月"] fruit["マンゴー"] = ["オレンジ","甘い(強)","6月"] fruit["ぶどう"] = ["紫","甘い","8月"] for kudamono,color in fruit # 全てのものを表示する # for key名,値 in Hash配列名 printf("%sは%s色です。あたりまえ〜 この果物の味は%sですよ!収穫時期は%sです。\n", kudamono, color[0], color[1], color[2]) end <実行結果> pan{c111033}% ./hash_any_print.rb [~/Ruby] いちごは赤色です。あたりまえ〜 この果物の味は甘いですよ!収穫時期は5月です。 ももはピンク色です。あたりまえ〜 この果物の味は甘酸っぱいですよ!収穫時期は7月です。 バナナは黄色です。あたりまえ〜 この果物の味は甘い(弱)ですよ!収穫時期は9月です。 マンゴーはオレンジ色です。あたりまえ〜 この果物の味は甘い(強)ですよ!収穫時期は6月です。 ぶどうは紫色です。あたりまえ〜 この果物の味は甘いですよ!収穫時期は8月です。 前回のレポートの課題も参考にしながら、正しく実行できたのでよかった。 --------------------------------------------------------- B.ある値について並べ替えるプログラム(hash_any_sort.rb) ・考えた設定 果物の収穫時期をはやい月から表示するようにした。 <プログラム> #!/usr/koeki/bin/ruby #coding: euc-jp fruit = Hash.new # Hash配列をfruitとする fruit["いちご"] = ["赤","甘い","5"] fruit["もも"] = ["ピンク","甘酸っぱい","7"] fruit["バナナ"] = ["黄","甘い(弱)","9"] fruit["マンゴー"] = ["オレンジ","甘い(強)","6"] fruit["ぶどう"] = ["紫","甘い","8"] fruit.keys.sort{|a,b| fruit[a][2]<=>fruit[b][2] }.each{|jiki| printf("[%s]の収穫時期は%s月です。\n", jiki, fruit[jiki][2]) } # 配列.sort{|配列の要素,並べ替え後の配列要素| # 並べ替え前の要素[key][要素番号]<=>並べ替え後の要素[key][要素番号] <実行結果> pan{OTAKE Misato}% ./hash_any_sort.rb [~/Ruby] [いちご]の収穫時期は5月です。 [マンゴー]の収穫時期は6月です。 [もも]の収穫時期は7月です。 [ぶどう]の収穫時期は8月です。 [バナナ]の収穫時期は9月です。 実行した結果、自分で考えた設定で実行できたので成功した。プログラムを作成 中に要素番号を[1][3]等を入れて実行してみたが、エラーになってしまった。エ ラーになってしまった部分が正しく実行できるまでに、きちんと理解しながら進 めることができたのでよかった。 -------------------------------------------------------- -------------------------------------------------------- 3.感想 インターネットや何か検索したいときに出力できると思う。検索したい文字の最 初の部分を入力すれば、候補として他の文も検索の対象に引っかかると思う。 今回の課題もきちんと自分で納得しながら進めることができた。筆記問題では、 前期でやった内容の問題だったので復習しながら解くことができたと思う。プロ グラムの問題では、hashの内容を中心に基本的なことから応用までいろんな設問 があったのだが、全部解けなかった。まだ、プログラムを応用する力や理解力が 自分にたりていないと思うので、今後の講義のなかで、そこの部分を少しでも改 善していけるように頑張りたい。 -------------------------------------------------------- 4.参考文献 ・基礎プログラミング II 第 3 回 (情報の構造を分析しよう) 「Hash の中の Hash」 http://roy/~madoka/2012/r2/03/r2_03_06_theme_01_hashinhash.html 西村 まどか先生 ・基礎プログラミング II 第 3 回 (情報の構造を分析しよう) 「三段論法」 http://roy/~madoka/2012/r2/03/r2_03_07_theme_02_socrates.html 西村 まどか先生 ・基礎プログラミング II 第 3 回 (情報の構造を分析しよう) 「ねずみの嫁入 り」 http://roy/~madoka/2012/r2/03/r2_03_09_theme_04_mousebride.html 西村 まどか先生 ---------------------------------------------------------- 5.共同学生者 高橋 凌太