第3回 基礎プログラミング II レポート課題 氏名:成澤 龍空 学籍番号:c1071658 語学クラス:英語 コース(系):経営系 1 A. NARISAWARYUSUKE N = 0x4E A = 0x41 R = 0x52 I = 0x49 S = 0x53 A = 0x41 W = 0x57 R = 0x52 Y = 0x59 U = 0x55 S = 0x53 U = 0x55 S = 0x53 U = 0x55 K = 0x4B E = 0x45 である。 B. "きょうがいしゃにあう" きょう がいしゃ に あう (今日外車に合う) きょう がいしゃ にあう (今日外車似合う) きょう がいしゃ に あう (今日が医者に会う) C. Jリーグのチームの成績をhash配列seisekiとした。 seisekiのkeyはチーム名、valueはそれぞれ勝点、得失点差、総得点と した。 key : hash 1.「名古屋グランパス」 : 「54,16,43」 2.「鹿島アントラーズ」 : 「45,17,40」 3.「セレッソ大坂」 : 「44,17,40」 4.「ガンバ大坂」 : 「43,12,46」 5.「川崎フロンターレ」 : 「41,12,46」 hash の表し方は、 seiseki["名古屋グランパス"] = 54,16,43 seiseki["鹿島アントラーズ"] = 45,17,40 seiseki["セレッソ大坂"] = 44,17,40 seiseki["ガンバ大坂"] = 43,12,46 seiseki["川崎フロンターレ"] = 41,12,46 もう一方は、 {"名古屋グランパス" => "54,16,43","鹿島アントラーズ" => "45,17,40","セレッ ソ大坂" => "44,17,40","ガンバ大坂" => "43,12,46","川崎フロンターレ"=> "41,12,46"} 2 A. 設定 先週作成したプログラムにさらに得失点差を加えて作成した。 作成したデータ(hash_ary_print.rb) #!/usr/koeki/bin/ruby seiseki = Hash.new seiseki["名古屋グランパス"] = 54,16 seiseki["鹿島アントラーズ"] = 45,17 seiseki["セレッソ大坂"] = 44,17 seiseki["ガンバ大坂"] = 43,12 seiseki["川崎フロンターレ"] = 41,12 seiseki["清水エスパルス"] = 41,6 seiseki["横浜F.マリノス"] = 39,7 seiseki["浦和レッズ"] = 38,9 seiseki["サンフレッチェ広島"] = 38,3 seiseki["アルビレックス新潟"] = 35,1 for cheam,point in seiseki printf("チーム名 : %s\t 勝点 : %d 点\t 得失点差 : %d\n\n",cheam,point[0],point[ 1]) end 実行結果 pan{c107165}% ./hash_ary_print.rb [~/Ruby] チーム名 : サンフレッチェ広島 勝点 : 38 点 得失点差 : 3 チーム名 : 川崎フロンターレ 勝点 : 41 点 得失点差 : 12 チーム名 : 鹿島アントラーズ 勝点 : 45 点 得失点差 : 17 チーム名 : 浦和レッズ 勝点 : 38 点 得失点差 : 9 チーム名 : 横浜F.マリノス 勝点 : 39 点 得失点差 : 7 チーム名 : セレッソ大坂 勝点 : 44 点 得失点差 : 17 チーム名 : 清水エスパルス 勝点 : 41 点 得失点差 : 6 チーム名 : ガンバ大坂 勝点 : 43 点 得失点差 : 12 チーム名 : 名古屋グランパス 勝点 : 54 点 得失点差 : 16 チーム名 : アルビレックス新潟 勝点 : 35 点 得失点差 : 1 考察 先週の内容と大差無いので得失点差の部分を加えるだけで作成することが出来た。 B. 設定 Aのプログラムを参考にし、ある値について並べ替えるプログラムを作成した。 作成したプログラム(hash_ary_sort.rb) #!/usr/koeki/bin/ruby seiseki = Hash.new seiseki["名古屋グランパス"] = 54,16 seiseki["鹿島アントラーズ"] = 45,17 seiseki["セレッソ大坂"] = 44,17 seiseki["ガンバ大坂"] = 43,12 seiseki["川崎フロンターレ"] = 41,12 seiseki["清水エスパルス"] = 41,6 seiseki["横浜F.マリノス"] = 39,7 seiseki["浦和レッズ"] = 38,9 seiseki["サンフレッチェ広島"] = 38,3 seiseki["アルビレックス新潟"] = 35,1 print("\n第25節終了時TOP10\n\n") seiseki.keys.sort{|winp,score| seiseki[winp][0] <=> seiseki[score][0] }.reverse.each{|cheam| printf("チーム名 : %s \t 勝点 : %d 得失点差 : %d \n\n",cheam,seiseki[cheam][0],seiseki[cheam][1])} 実行結果 pan{c107165}% ./hash_ary_sort.rb\ [~/Ruby] 第25節終了時TOP10 チーム名 : 名古屋グランパス 勝点 : 54 得失点差 : 16 チーム名 : 鹿島アントラーズ 勝点 : 45 得失点差 : 17 チーム名 : セレッソ大坂 勝点 : 44 得失点差 : 17 チーム名 : ガンバ大坂 勝点 : 43 得失点差 : 12 チーム名 : 川崎フロンターレ 勝点 : 41 得失点差 : 12 チーム名 : 清水エスパルス 勝点 : 41 得失点差 : 6 チーム名 : 横浜F.マリノス 勝点 : 39 得失点差 : 7 チーム名 : サンフレッチェ広島 勝点 : 38 得失点差 : 3 チーム名 : 浦和レッズ 勝点 : 38 得失点差 : 9 チーム名 : アルビレックス新潟 勝点 : 35 得失点差 : 1 考察 Aのプログラムはただ表示するだけなので順位がバラバラだったが、print以下の 文を加えることで順位どうりに表示できた。 C. 設定 前問までの問題では得失点差をそのまま書いていたが、得失点差を計算させるた め、得点引く失点として得失点差を計算させた。 作成したプログラム(hash_ary_calc.rb) #!/usr/koeki/bin/ruby seiseki = Hash.new seiseki["名古屋グランパス"] = 54,43,27 seiseki["鹿島アントラーズ"] = 45,40,23 seiseki["セレッソ大坂"] = 44,40,23 seiseki["ガンバ大坂"] = 43,46,34 seiseki["川崎フロンターレ"] = 41,46,34 seiseki["清水エスパルス"] = 41,45,39 seiseki["横浜F.マリノス"] = 39,32,25 seiseki["浦和レッズ"] = 38,37,28 seiseki["サンフレッチェ広島"] = 38,31,28 seiseki["アルビレックス新潟"] = 35,33,32 seiseki.keys.sort{|winp,score| seiseki[winp][0] <=> seiseki[score][0] }.reverse.each{|cheam| printf("チーム名 :%s \t 勝点 :%d\t 得点 :%d 失点 :%d 得失点差 :%d \n\n", cheam,seiseki[cheam][0],seiseki[cheam][1],seiseki[cheam][2],seiseki[cheam][1]-seiseki[cheam][2])} 実行結果 pan{c107165}% ./hash_ary_calc.rb [~/Ruby] チーム名 :名古屋グランパス 勝点 :54 得点 :43 失点 :27 得失点差 :16 チーム名 :鹿島アントラーズ 勝点 :45 得点 :40 失点 :23 得失点差 :17 チーム名 :セレッソ大坂 勝点 :44 得点 :40 失点 :23 得失点差 :17 チーム名 :ガンバ大坂 勝点 :43 得点 :46 失点 :34 得失点差 :12 チーム名 :川崎フロンターレ 勝点 :41 得点 :46 失点 :34 得失点差 :12 チーム名 :清水エスパルス 勝点 :41 得点 :45 失点 :39 得失点差 :6 チーム名 :横浜F.マリノス 勝点 :39 得点 :32 失点 :25 得失点差 :7 チーム名 :サンフレッチェ広島 勝点 :38 得点 :31 失点 :28 得失点差 :3 チーム名 :浦和レッズ 勝点 :38 得点 :37 失点 :28 得失点差 :9 チーム名 :アルビレックス新潟 勝点 :35 得点 :33 失点 :32 得失点差 :1 考察 B問題を使い得点引く失点を計算させ得失点を出すことに成功した。 D. 設定 C問題をデータを使い同じ結果を出すためのプログラムを作成した。 作成したプログラム(hash_ary_read.rb) #!/usr/koeki/bin/ruby $KCODE = "e" seiseki = Hash.new while topten = gets if /(\S+)\s+(\d+)\s+(\d+)/=~ topten seiseki[$1] = [$2.to_i,$3.to_i] end end print("\n第25節終了時TOP10\n\n") seiseki.keys.sort{|winp,score| seiseki[winp][0] <=> seiseki[score][0] }.reverse.each{|cheam| printf("チーム名 : %s \t 勝点 : %d 得失点差 : %d \n\n",cheam,seiseki[cheam][0],seiseki[cheam][1])} 作成したデータ(hash_ary_data.dat) #チーム名 #順位 #勝点 #得失点差 #得点数 名古屋グランパス 1位 54 16 43 鹿島アントラーズ 2位 45 17 40 セレッソ大坂 3位 44 17 40 ガンバ大坂 4位 43 12 46 川崎フロンターレ 5位 41 12 46 清水エスパルス 6位 41 6 45 横浜F.マリノス 7位 39 7 32 浦和レッズ 8位 38 9 37 サンフレッチェ広島 9位 38 3 31 アルビレックス新潟 10位 35 1 33 実行結果 pan{c107165}% ./hash_ary_read.rb hash_ary_data.dat [~/Ruby] 第25節終了時TOP10 チーム名 : 1位 勝点 : 54 得失点差 : 16 チーム名 : 2位 勝点 : 45 得失点差 : 17 チーム名 : 3位 勝点 : 44 得失点差 : 17 チーム名 : 4位 勝点 : 43 得失点差 : 12 チーム名 : 6位 勝点 : 41 得失点差 : 6 チーム名 : 5位 勝点 : 41 得失点差 : 12 チーム名 : 7位 勝点 : 39 得失点差 : 7 チーム名 : 8位 勝点 : 38 得失点差 : 9 チーム名 : 9位 勝点 : 38 得失点差 : 3 チーム名 : 10位 勝点 : 35 得失点差 : 1 考察 データを読みこませC問題と同じ結果を得ることが出来た。 感想 前回の続きなので割りと理解がしやすかった。少しでも理解を深められるように 頑張ります。 何度も続く文章で物語が続く例としてイソップ寓話の北風と太陽なども繰り返し の文章だと思う。 参考アドレス 基礎プログラミング I 第5回 配列の構造 「ASCII コード表」 http://roy/~madoka/2010/r1/05/05_01_theme_01_asciicode.html TA 大沼 拓海 さん