第2回 基礎プログラミング II レポート課題 氏名:成澤 龍空 学籍番号:c1071658 語学クラス:英語 コース(系):経営系 1. A.hash配列名 Jリーグのチーム別勝点についての配列を考えてみる。 hash 配列 winp とする。 winpのkeyはチーム名、valueは勝点である。 key : hash 1.名古屋グランパス : 54 2.鹿島アントラーズ : 45 3.セレッソ大坂 : 44 4.ガンバ大坂 : 43 5.川崎フロンターレ : 41 hashの表し方は winp["名古屋グランパス"] = 54 winp["鹿島アントラーズ"] = 45 winp["セレッソ大坂"] = 44 winp["ガンバ大坂"] = 43 winp["川崎フロンターレ"] = 41 もう一方は、 {"名古屋グランパス" => "54","鹿島アントラーズ" => "45","セレッソ大坂 "=> "44","ガンバ大坂" => "43","川崎フロンターレ" => "41"} となる。 B.0d2010 = 2010 / 16 = 125 余り10 125 / 16 = 7 余り13 7 / 16 = 0 余り7 0d2010 = 7DA 0d2010 = 2010 / 2 = 1005 余り0 1005 / 2 = 502 1 502 / 2 = 251 0 251 / 2 = 125 1 125 / 2 = 62 1 62 / 2 = 31 0 31 / 2 = 15 1 15 / 2 = 7 1 7 / 2 = 3 1 3 / 2 = 1 1 1 / 2 = 0 1 0d2010 = 0b11111111010 0b11111011010を4桁ごとに区切り確かめる。 0111 0 = 0 * 2 ** 3 = 0 1 = 1 * 2 ** 2 = 4 1 = 1 * 2 ** 1 = 2 1 = 1 * 2 ** 0 = 1 0 + 4 + 2 + 1 = 7 1111 1 = 1 * 2 ** 3 = 8 1 = 1 * 2 ** 2 = 4 0 = 0 * 2 ** 1 = 0 1 = 1 * 2 ** 0 = 1 8 + 4 + 0 + 1 = 13 1010 1 = 1 * 2 ** 3 = 8 0 = 0 * 2 ** 2 = 0 1 = 1 * 2 ** 1 = 2 0 = 0 * 2 ** 0 = 0 8 + 0 + 2 + 0 = 10 よってbはaと同じである。 2. A 設定 筆記問題Aを参考にJリーグのチーム別勝点を表示するプログラムにした。 作成したプログラム(hash_for.rb) #!/usr/koeki/bin/ruby $KCODE = "e" winp = Hash.new print("2010J1リーグ25節終了時チーム別勝点トップ10\n") winp["名古屋グランパス"] = "54" winp["鹿島アントラーズ"] = "45" winp["セレッソ大坂"] = "44" winp["ガンバ大坂"] = "43" winp["川崎フロンターレ"] = "41" winp["清水エスパルス"] = "41" winp["横浜F.マリノス"] = "39" winp["浦和レッズ"] = "38" winp["サンフレッチェ広島"] = "38" winp["アルビレックス新潟"] = "35" for cheam,point in winp printf("チーム名 : %s \t 勝点 : %s \n",cheam,point) end 実行結果 pan{c107165}% ./hash_for.rb [~/Ruby] 2010J1リーグ25節終了時チーム別勝点トップ10 チーム名 : サンフレッチェ広島 勝点 : 38 チーム名 : 川崎フロンターレ 勝点 : 41 チーム名 : 鹿島アントラーズ 勝点 : 45 チーム名 : 浦和レッズ 勝点 : 38 チーム名 : 横浜F.マリノス 勝点 : 39 チーム名 : セレッソ大坂 勝点 : 44 チーム名 : 清水エスパルス 勝点 : 41 チーム名 : ガンバ大坂 勝点 : 43 チーム名 : 名古屋グランパス 勝点 : 54 チーム名 : アルビレックス新潟 勝点 : 35 考察 勝点の欄を揃えようとしたがどうしてもできなかった。 B 設定 Aのプログラムにユーザが知りたい情報だけを結果表示させるよう改良した。 作成したプログラム(hash_choice.rb) #!/usr/koeki/bin/ruby $KCODE = "e" winp = Hash.new print("2010J1リーグ25節終了時チーム別勝点トップ10\n") winp["名古屋グランパス"] = "54" winp["鹿島アントラーズ"] = "45" winp["セレッソ大坂"] = "44" winp["ガンバ大坂"] = "43" winp["川崎フロンターレ"] = "41" winp["清水エスパルス"] = "41" winp["横浜F.マリノス"] = "39" winp["浦和レッズ"] = "38" winp["サンフレッチェ広島"] = "38" winp["アルビレックス新潟"] = "35" STDERR.print("チーム名入力 :\n") cheam = gets.chomp if winp.key?(cheam) == false printf("%sは入っていません。\n",cheam) exit end printf("チーム名:%s \t 勝点:%d 点 \n",cheam,winp[cheam]) 実行結果 pan{c107165}% ./hash_choice.rb [~/Ruby] 2010J1リーグ25節終了時チーム別勝点トップ10 チーム名入力 : セレッソ大坂 チーム名:セレッソ大坂 勝点:44 点 2010J1リーグ25節終了時チーム別勝点トップ10 チーム名入力 : 湘南ベルマーレ 湘南ベルマーレは入っていません。 考察 Aのプログラムにif以下の文章を加えることにより完成した。 C 設定 情報を登録し、その結果を出力するプログラムにした。 作成したプログラム(hash_register.rb) #!/usr/koeki/bin/ruby $KCODE = "e" winp = Hash.new print("チーム名、勝点を入力して下さい\n") while true print("チーム名を入力 :\n") cheam = gets if cheam == nil break else cheam = cheam.chomp end print("勝点を入力 :\n") winp[cheam] = gets end for cheam,point in winp printf("チーム名 : %s\t 勝点 : %d 点\n",cheam,point) end 実行結果 pan{c107165}% ./hash_register.rb [~/Ruby] チーム名、勝点を入力して下さい チーム名を入力 : 鹿島アントラーズ 勝点を入力 : 45 チーム名を入力 : チーム名鹿島アントラーズ 勝点:45 点 考察 新しく学んだ内容ではなかったので前期の知識で作成した。 D 設定 読みこませるためのデータとそのプログラミングを作成した。 作成したデータ(hash_data.dat) 名古屋グランパス 54 鹿島アントラーズ 45 セレッソ大坂 44 ガンバ大坂" 43 川崎フロンターレ 41 清水エスパルス 41 横浜F.マリノス 39 浦和レッズ 38 サンフレッチェ広島 38 アルビレックス新潟 35 作成したプログラム(hash_read.rb) #!/usr/koeki/bin/ruby $KCODE = "e" cheam = Hash.new point = Hash.new i = 1 printf("2010j1リーグ25節終了時チーム別勝点トップ10\n") open("hash_data.dat","r") do |soccor| while winp = soccor.gets if /(\S+)\s+(\S+)/ =~winp cheam[i] = $1 point[i] = $2 printf("チーム名 : %s \t 勝点 : %s点 \n",cheam[i],point[i]) end end end 実行結果 pan{c107165}% ./hash_read.rb [~/Ruby] 2010j1リーグ25節終了時チーム別勝点トップ10 チーム名 : 名古屋グランパス 勝点 : 54点 チーム名 : 鹿島アントラーズ 勝点 : 45点 チーム名 : セレッソ大坂 勝点 : 44点 チーム名 : ガンバ大坂" 勝点 : 43点 チーム名 : 川崎フロンターレ 勝点 : 41点 チーム名 : 清水エスパルス 勝点 : 41点 チーム名 : 横浜F.マリノス 勝点 : 39点 チーム名 : 浦和レッズ 勝点 : 38点 チーム名 : サンフレッチェ広島 勝点 : 38点 チーム名 : アルビレックス新潟 勝点 : 35点 考察 データを組み込むことで予想どうりの結果を得られた。 また、やはり勝点の欄が揃わなかった。 3感想 久しぶりに授業に沿ったなプログラムを作成したので大変だった。 また、進数の計算を忘れていたのはショックだった。勉強し直そうと思う。 参考アドレス 2進数、16進数と10進数 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html TA 大沼拓海 さん