第3回 情報の構造を分析しよう レポート課題 氏名:佐藤 千香 学籍番号:C1101069 語学クラス:英語6 コース(系):地域共創コース 1、筆記問題 A、 Sato Chika これを16進数に直すと、 S = 0x53 a = 0x61 t = 0x74 o = 0x6f C = 0x43 h = 0x68 i = 0x69 k = 0x6b a = 0x61 となる。 参考文献:ウェブページ 神田 直弥 基礎プログラミングI 第9回 16進数・ASCIIコード http://roy/~naoya/ruby/9.html B、 きょうは だいぶつかった (今日はだいぶ使った) きょうは だいぶつかった (今日は大分漬かった) きょうは だいぶつ かった (今日は大仏買った) わたしは かみ きった (私は髮切った) わたしは かみ きった (私は紙切った) わたしは かみきった (私は噛み切った) 参考文献:ウェブページ フリー百科事典 Wikipwdia ぎなた読み http://ja.wikipedia.org/wiki/%E3%81%8E%E3%81%AA%E3%81%9F%E8%AA%AD%E3%81%BF C、 ポケモンの特徴を Hash 配列 poke とした。 poke の key と value はそれぞれ 名前、タイプ、たかさ(m)、おもさ(kg)、進化系とした。 その1:「ピチュー」に対してvalueは「"でんき","0.3","2.0","ライチュウ"」 その2:「ヒトカゲ」に対してvalueは「"ほのお","0.6","8.5","リザ−ドン"」 その3:「ゼニガメ」に対してvalueは「"みず","0.5","9.0","カメックス"」 その4:「フシギダネ」に対してvalueは「くさ","0.7","6.9","フシギバナ"」 その5:「ポッポ」に対してvalueは「"ひこう","0.3","1.8","ピジョット"」 その6:「ププリン」に対してvalueは「"ノーマル","0.3","1.0","プクリン"」 その7:「コイル」に対してvalueは「"はがね","0.3","6.0","ジバコイル"」 その8:「キャタピー」に対してvalueは「"むし","0.3","2.9","バタフリー"」 これに対する配列の表し方は poke["ピチュー"] = "でんき","0.3","2.0","ライチュウ" poke["ヒトカゲ"] = "ほのお","0.6","8.5","リザ−ドン" poke["ゼニガメ"] = "みず","0.5","9.0","カメックス" poke["フシギダネ"] = "くさ","0.7","6.9","フシギバナ" poke["ポッポ"] = "ひこう","0.3","1.8","ピジョット" poke["ププリン"] = "ノーマル","0.3","1.0","プクリン" poke["コイル"] = "はがね","0.3","6.0","ジバコイル" poke["キャタピー"] = "むし","0.3","2.9","バタフリー" もう一つの表し方は {"ピチュー" => "でんき","0.3","2.0","ライチュウ" "ヒトカゲ" => "ほのお","0.6","8.5","リザ−ドン" "ゼニガメ" => "みず","0.5","9.0","カメックス" "フシギダネ" => "くさ","0.7","6.9","フシギバナ" "ポッポ" => "ひこう","0.3","1.8","ピジョット" "ププリン" => "ノーマル","0.3","1.0","プクリン" "コイル" => "はがね","0.3","6.0","ジバコイル" "キャタピー" => "むし","0.3","2.9","バタフリー"} 2、プログラム問題 A a、考えた設定 あらかじめ入力してあるデータをHash配列を使って表示させるプログラム。 b、プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コード EUC で出力する。 poke = Hash.new # Hash 配列を poke とする。 poke["ピチュー"] = "でんき","0.3","2.0","ライチュウ" poke["ヒトカゲ"] = "ほのお","0.6","8.5","リザ−ドン" poke["ゼニガメ"] = "みず","0.5","9.0","カメックス" poke["フシギダネ"] = "くさ","0.7","6.9","フシギバナ" poke["ポッポ"] = "ひこう","0.3","1.8","ピジョット" poke["ププリン"] = "ノーマル","0.3","1.0","プクリン" poke["コイル"] = "はがね","0.3","6.0","ジバコイル" poke["キャタピー"] = "むし","0.3","2.9","バタフリー" # poke の key と value は 名前、タイプ、たかさ[m]、おもさ[kg]、進化系とした。 for type , koumoku in poke # for キー名 値 in ハッシュ配列 printf("------名前:%s------\n タイプ:%s/たかさ:%3.1fm/おもさ:%3.1fkg/進化系:%s \n\n",type,koumoku[0],koumoku[1],koumoku[2],koumoku[3]) # printf で結果を表示した。%sは文字列を%fは少数を扱うときに使用する。 #%fを指定するとデフォルトで少数点以下第6位まで出力される。 #そのため%fの間を3.1とする。3が全体の桁数、1が少数点以下の桁数をあらわす。 end # for に対応する end c、実行結果 pan{c110106}% ./hash_ary_print.rb [~/Ruby] ------名前:キャタピー------ タイプ:むし/たかさ:0.3m/おもさ:2.9kg/進化系:バタフリー ------名前:コイル------ タイプ:はがね/たかさ:0.3m/おもさ:6.0kg/進化系:ジバコイル ------名前:ププリン------ タイプ:ノーマル/たかさ:0.3m/おもさ:1.0kg/進化系:プクリン ------名前:ポッポ------ タイプ:ひこう/たかさ:0.3m/おもさ:1.8kg/進化系:ピジョット ------名前:フシギダネ------ タイプ:くさ/たかさ:0.7m/おもさ:6.9kg/進化系:フシギバナ ------名前:ヒトカゲ------ タイプ:ほのお/たかさ:0.6m/おもさ:8.5kg/進化系:リザ−ドン ------名前:ピチュー------ タイプ:でんき/たかさ:0.3m/おもさ:2.0kg/進化系:ライチュウ ------名前:ゼニガメ------ タイプ:みず/たかさ:0.5m/おもさ:9.0kg/進化系:カメックス d、もとにしたプログラムからの変更点 前回の授業で作ったプログラムを参考に作成した。 ・value増やした ・変数を内容に合うように変更 e、考察 実行結果が正しく表示されているので、このプログラムは正しいと言える。 B a、考えた設定 あらかじめ入力してあるデータをHash配列を使って表示し、そのデータの おもさ、たかさを昇順に並べるプログラム。 b、プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コード EUC で出力する。 poke = Hash.new # Hash配列 poke["ピチュー"] = "でんき","0.3","2.0","ライチュウ" poke["ヒトカゲ"] = "ほのお","0.6","8.5","リザ−ドン" poke["ゼニガメ"] = "みず","0.5","9.0","カメックス" poke["フシギダネ"] = "くさ","0.7","6.9","フシギバナ" poke["ポッポ"] = "ひこう","0.3","1.8","ピジョット" poke["ププリン"] = "ノーマル","0.3","1.0","プクリン" poke["コイル"] = "はがね","0.3","6.0","ジバコイル" poke["キャタピー"] = "むし","0.3","2.9","バタフリー" for type , en in poke # 全ての Hash を出力し、項目の一覧表を作る。 printf("------名前:%s------\n タイプ:%s/おもさ:%3.1fkg/たかさ:%3.1fcm/進化系:%s \n\n",type,en[0],en[1],en[2],en[3]) end print"このポケモンたちをたかさ順に並べると…\n\n" poke.keys.sort{|a,b| poke[a][1] <=> poke[b][1]}.each{|en| printf("『%s』のたかさは %3.1fcm\n",en,poke[en][1])} print"\n" print"このポケモンたちをおもさ順に並べると…\n\n" poke.keys.sort{|a,b| poke[a][2] <=> poke[b][2]}.each{|en| printf("『%s』のおもさは%3.1fkg\n",en,poke[en][2])} c、実行結果 pan{c110106}% ./hash_ary_sort.rb [~/Ruby] ------名前:キャタピー------ タイプ:むし/たかさ:0.3m/おもさ:2.9kg/進化系:バタフリー ------名前:コイル------ タイプ:はがね/たかさ:0.3m/おもさ:6.0kg/進化系:ジバコイル ------名前:ププリン------ タイプ:ノーマル/たかさ:0.3m/おもさ:1.0kg/進化系:プクリン ------名前:ポッポ------ タイプ:ひこう/たかさ:0.3m/おもさ:1.8kg/進化系:ピジョット ------名前:フシギダネ------ タイプ:くさ/たかさ:0.7m/おもさ:6.9kg/進化系:フシギバナ ------名前:ヒトカゲ------ タイプ:ほのお/たかさ:0.6m/おもさ:8.5kg/進化系:リザ−ドン ------名前:ピチュー------ タイプ:でんき/たかさ:0.3m/おもさ:2.0kg/進化系:ライチュウ ------名前:ゼニガメ------ タイプ:みず/たかさ:0.5m/おもさ:9.0kg/進化系:カメックス このポケモンたちをたかさ順に並べると… 『キャタピー』のたかさは 0.3m 『コイル』のたかさは 0.3m 『ププリン』のたかさは 0.3m 『ポッポ』のたかさは 0.3m 『ピチュー』のたかさは 0.3m 『ゼニガメ』のたかさは 0.5m 『ヒトカゲ』のたかさは 0.6m 『フシギダネ』のたかさは 0.7m このポケモンたちをおもさ順に並べると… 『ププリン』のおもさは1.0kg 『ポッポ』のおもさは1.8kg 『ピチュー』のおもさは2.0kg 『キャタピー』のおもさは2.9kg 『コイル』のおもさは6.0kg 『フシギダネ』のおもさは6.9kg 『ヒトカゲ』のおもさは8.5kg 『ゼニガメ』のおもさは9.0kg d、もとにしたプログラムからの変更点 Aのプログラムをもとに作成した。 ・sortメゾットを使用 e、考察 たかさ、おもさ共に昇順に並んでいるのでこのプログラムは正しいといえる。 C a、考えた設定 あらかじめ入力してあるデータをHash配列を使って表示し、そのデータの合計 と平均を表示するプログラム。 b、プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コード EUC で出力する。 total1 = 0 # total1 の初期値を0とした。 total2 = 0 # total2 の初期値を0とした。 poke = Hash.new # Hash 配列を poke とする。 poke["ピチュー"] = "でんき","0.3","2.0","ライチュウ" poke["ヒトカゲ"] = "ほのお","0.6","8.5","リザ−ドン" poke["ゼニガメ"] = "みず","0.5","9.0","カメックス" poke["フシギダネ"] = "くさ","0.7","6.9","フシギバナ" poke["ポッポ"] = "ひこう","0.3","1.8","ピジョット" poke["ププリン"] = "ノーマル","0.3","1.0","プクリン" poke["コイル"] = "はがね","0.3","6.0","ジバコイル" poke["キャタピー"] = "むし","0.3","2.9","バタフリー" # poke の key と value は 名前、タイプ、たかさ[m]、おもさ[kg]、進化系とした。 for type , koumoku in poke # for キー名 値 in ハッシュ配列 printf("------名前:%s------\n タイプ:%s/たかさ:%3.1fm/おもさ:%3.1fkg/進化系:%s \n\n",type,koumoku[0],koumoku[1],koumoku[2],koumoku[3]) # 行う操作 end # for に対応する end for type ,koumoku in poke # for キー名 値 in ハッシュ配列 total1 += koumoku[1].to_f #たかさの合計をだす。to_fで少数点を取扱えるようにした。 average1 = total1 / 8 #たかさの合計をデータに入っているポケモンの数で割ってたかさの平均をだした end # for に対応する end printf"このポケモンたちのたかさの合計は%3.1fm,平均は%3.1fm\n",total1,average1 #printf で結果を表示した。%sは文字列を%fは少数を扱うときに使用する。 #%fを指定するとデフォルトで少数点以下第6位まで出力される。 #そのため%fの間を3.1とする。3が全体の桁数、1が少数点以下の桁数をあらわす。 print"\n" for type ,koumoku in poke # for キー名 値 in ハッシュ配列 total2 += koumoku[2].to_f #おもさの合計をだす。to_fで少数点を取扱えるようにした。 average2 = total2 / 8 #おもさの合計をデータに入っているポケモンの数で割ってたかさの平均をだした end # for に対応する end printf"このポケモンたちのおもさの合計は%3.1fkg,平均は%3.1fkg\n",total2,average2 #printf で結果を表示した。%sは文字列を%fは少数を扱うときに使用する。 #%fを指定するとデフォルトで少数点以下第6位まで出力される。 #そのため%fの間を3.1とする。3が全体の桁数、1が少数点以下の桁数をあらわす。 c、実行結果 pan{c110106}% ./hash_ary_calc.rb [~/Ruby] ------名前:キャタピー------ タイプ:むし/たかさ:0.3m/おもさ:2.9kg/進化系:バタフリー ------名前:コイル------ タイプ:はがね/たかさ:0.3m/おもさ:6.0kg/進化系:ジバコイル ------名前:ププリン------ タイプ:ノーマル/たかさ:0.3m/おもさ:1.0kg/進化系:プクリン ------名前:ポッポ------ タイプ:ひこう/たかさ:0.3m/おもさ:1.8kg/進化系:ピジョット ------名前:フシギダネ------ タイプ:くさ/たかさ:0.7m/おもさ:6.9kg/進化系:フシギバナ ------名前:ヒトカゲ------ タイプ:ほのお/たかさ:0.6m/おもさ:8.5kg/進化系:リザ−ドン ------名前:ピチュー------ タイプ:でんき/たかさ:0.3m/おもさ:2.0kg/進化系:ライチュウ ------名前:ゼニガメ------ タイプ:みず/たかさ:0.5m/おもさ:9.0kg/進化系:カメックス このポケモンたちのたかさの合計は3.3m,平均は0.4m このポケモンたちのおもさの合計は38.1kg,平均は4.8kg d、もとにしたプログラム、変更点 Bのプログラムをもとに作成した。 ・合計と平均をもとめる操作を追加 e、考察 bc -lでたかさの合計と平均を計算すると pan{c110106}% bc -l [~/Ruby] 0.3+0.3+0.3+0.3+0.7+0.6+0.3+0.5 3.3 3.3/8 .41250000000000000000 となる。 bc -lでおもさの合計と平均を計算すると pan{c110106}% bc -l [~/Ruby] 1.0+1.8+2.0+2.9+6.0+6.9+8.5+9.0 38.1 38.1/8 4.76250000000000000000 となるのでこの計算は正しいといえる。 3、感想 前回の授業でわからなかったsortメゾットについて理解できたのでよかった。 昔話の例:『寿限無』(じゅげむ) 生まれた子にめでたい名前を付けたいということから付けたしいき、結局 とても長い名前になってしまったという話。 寿限無、寿限無 (じゅげむじゅげむ)→ 五劫の擦り切れ (こうのすりきれ )→ 海砂利水魚の (かいじゃりすいぎょの)→ 水行末 雲来末 風来末 (うんらいまつ ふうらいまつ)→ 食う寝る処に住む処 (くうねるところにすむところ)→ やぶら小路の藪柑子 (やぶらこうじのぶらこうじ)→ パイポパイポ パイポのシューリンガン→ シューリンガンのグーリンダイ→ グーリンダイのポンポコピーのポンポコナーの→ 長久命の長助 (ちょうきゅうめいのちょうすけ) 4、参考文献ウェブページ 西村 まどか 基礎プログラミングII 第3回 keys や values のデータ表現 http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/03/03_01_review_01_arysort.html 基礎プログラミングII 第3回 Hash の作りかた http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/03/03_02_review_02_hash.html 神田 直弥 基礎プログラミングII 第4回 ハッシュ[2] http://roy/~naoya/rubyII/4.html ポケモン http://www.pokemon.co.jp/zukan/ 5、添付 Cのプログラムだけ添付します。