第3回 基礎プログラム II レポート課題 氏名: xxxxxxxx 学籍番号:c109xxx 語学クラス:英語3 コース(系):政策マネジメント ---- 1. A. Sasahara Chizuko これを16進数に直すと S = 0x53 a = 0x61 s = 0x73 a = 0x61 h = 0x68 a = 0x61 r = 0x72 a = 0x61 C = 0x43 h = 0x68 i = 0x69 z = 0x7a u = 0x75 k = 0x6b o = 0x6f 参考文献:ウェブページ 基礎プログラミング I 第5回 配列の構造 「ASCII コード表」 西村まどか http://roy/~madoka/2010/r1/05/05_01_theme_01_asciicode.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 配列の rabbit にした。 key をウサギの名前に、 value をおおよその体重[kg](メス)と、寿命[年]、原 産国(改良地も含む)にした。 1.「ライオンラビット」 に対し [1kg, 5年, ベルギー] 2.「イングリッシュ・ロップイヤー」に対し [4kg, 5年, イギリス] 3.「ピーターラビット」 に対し [1.2kg, 5年, 世界中] 4.「ジャージーウーリー」 に対し [1.3kg, 5年 , アメリカ(改良地)] 5.「ホーランド・ロップ」 に対し [1.3kg, 5年, オランダ] これを hash 配列で並べると rabbit["ライオンラビット"] = ["1", "5", "ベルギー"] rabbit["イングリッシュ・ロップイヤー"] = ["4", "5", "イギリス"] rabbit["ピーターラビット"] = ["1.2", "5", "世界中"] rabbit["ジャージーウーリー"] = ["1.3", "5", "アメリカ(改良地)"] rabbit["ホーランド・ロップ"] = ["1.3", "5", "オランダ"] もう一つが {"ライオンラビット" => ["1", "5", "ベルギー"], "イングリッシュ・ロップイヤー" =>["4", "5", "イギリス"], "ピーターラビット" => ["1.2", "5", "世界中"], "ジャージーウーリー" => ["1.3", "5", "アメリカ(改良地)"], "ホーランド・ロップ" => ["1.3", "5", "オランダ"]} 参考文献:ウェブページ うさぎの種類 http://rabbit.pelogoo.com/mamesiba1021/ 2.選んだ問題 D a.ウサギの体重順にデータを並べ替え、最後に体重の平均を出すプログラム。 プログラム名の後に続けてデータ名を入力することで、別のデータを取り入れる ようにする。 b. データ ライオンラビット 1 5 ベルギー イングリッシュ・ロップイヤー 4 5 イギリス ピーターラビット 1.2 5 世界中 ジャージーウーリー 1.3 5 アメリカ(改良地) ホーランド・ロップ 1.3 5 オランダ" プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語のコードを使う rabbit = Hash.new # hash を rabbit にする while usagi = gets # value のところを繰り返しとってくる if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ usagi #もし value のところが文字列、空白文字列、文字列、空白文字列、文字列、空白文字列、文字列だった場合 rabbit[$1] = [$2.to_f,$3.to_i,$4] # key に3つのvalue が入り、一つ目は小数点を含む数字 end end print("ウサギの体重\n") #表示される文章の説明 rabbit.keys.sort{|mae, ushiro| # key を体重の順に並び変える rabbit[mae][0] <=> rabbit[ushiro][0] # key を並べ替える前と後の value の入れ替えをする }.each{|name| printf("体重: %s %3.1f[kg]\n", name, rabbit[name][0]) # key が体重の順に並び変えられたことを文章で表示 } total = 0 # total は始め 0 である for name, usagi in rabbit # rabbit に入る value を表示 total += usagi[0] # total は value の体重部分の合計 end avg = total.to_f / rabbit.length #体重の合計を key の数で割って平均をだす printf("平均体重: %4.2f[kg]\n", avg) #結果を表示 c. 主に、hash_sesame.rb のプログラムを利用した。 hash_sesame.rb で使われているやり方でデータを読み込み、 sort を使って体重の順に key を並べ替えた。 最後に前期で使ったやり方で平均をもとめた。 参考文献:ウェブページ 基礎プログラミング II 第2回 なになにといえばこれこれ 「key を使って並び換え」 (講義ノート) 西村まどか http://roy/~madoka/2010/r2/02/02_11_theme_10_sortinkey.html 基礎プログラミング II 第2回 なになにといえばこれこれ 「要素の一部分を使って入れ替えをするには」 (講義ノート) 西村まどか http://roy/~madoka/2010/r2/02/02_15_theme_14_sorthasharraycomp.html 基礎プログラミング II 第2回 なになにといえばこれこれ 「Hash の対を表示するには」 (講義ノート) 西村まどか http://roy/~madoka/2010/r2/02/02_07_theme_06_forprint.html 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「新駅をどこにつくるか」 (講義ノート) 西村まどか http://roy/~madoka/2010/r1/07/07_16_appendix_02_analysis.html d. pan{c109080}% ./hash_ary_read.rb hash_ary_data.dat [~/Ruby] ウサギの体重 体重: ライオンラビット 1.0[kg] 体重: ピーターラビット 1.2[kg] 体重: ジャージーウーリー 1.3[kg] 体重: ホーランド・ロップ 1.3[kg] 体重: イングリッシュ・ロップイヤー 4.0[kg] 平均体重: 1.76[kg] e.考察 計算機を使って答えが合っているか計算してみる pan{c109080}% bc -l [~/Ruby] 1.0+1.2+1.3+1.3+4.0 8.8 8.8/5 1.76000000000000000000 となるので計算は合っている。 体重も重さの順で表示されているし、小数点も必要なところまで表示されたので きちんと動いたといえる。 3. 何度も繰り返す文章と聞いて「はらぺこあおむし」を思い出した。 あおむしがおなかがすいて色々なものを食べて最後には蝶になるという話だ。 月曜日から金曜日まで色々なものを食べる描写が続き物語が進むので、その部分 を表示するのに今回やったことが利用できると思った。 だんだん要素が増えてきて、プログラムを書いている途中でどの部分のことをやっ ているのかわからなくなることが何回もあった。 自分で配列の名前を決めたりするので、どの値をどの名前にしたか忘れないよう にしたい。 共同学習者:金田麻美