5月30日のレポートについて 語学クラス:XXXX語XX 系:XXXX系 学籍番号c106XXXX 氏名:XXXXXXXX 1. A.0b100101=0x**は0bが2進数なので、2進数表示0b100101を16進数にする。まず、2 進数表示100101を10進数化する。計算の方法は、2進数表示から10進数表示に直 すので、2の0乗から×ていく。1×2の0乗+0×2の1乗+1×2の2乗+0×2の3乗 +0×2の4乗+1×2の5乗としていく。 そうすると、1+0+4+0+0+32=37となる。 なので0b100101=0d37になる そこから16進数にするので16で割っていく。そうすると、2余り5となるので0x25 となる。これは先生の表で答えを合わせて見てあっていました。 B.0d1111=0x**はAでやった通りの方法で、1111で16で割っている。そうすると69 の余り7になる。まだ、割れるので69を19で割る。4余り5それを合わせると0x745 となる。 2. これが元のデータです。 上原 投手 巨人 uehara 内海 投手 巨人 utsumi 豊田 投手 巨人 toyoda 門倉 投手 巨人 kadokura 野口 投手 巨人 noguchi 小笠原 野手 巨人 ogasawara 二岡 野手 巨人 nioka 阿部 捕手 巨人 abe 脇谷 野手 巨人 wakiya 矢野 野手 巨人 yano 小坂 野手 巨人 kosaka 谷 野手 巨人 tani 川越 投手 オリックス kawagoe 水口 野手 オリックス mizuguchi 清原 野手 オリックス kiyohara 下山 野手 オリックス shimoyama 日高 捕手 オリックス hidaka 北川 野手 オリックス kitagawa 山口 投手 オリックス yamaguchi 大久保 投手 オリックス okubo 大村 野手 ソフトバンク omura 松田 野手 ソフトバンク matsuda 川崎 野手 ソフトバンク kawasaki 小久保 野手 ソフトバンク kokubo 松中 野手 ソフトバンク matunaka 多村 野手 ソフトバンク tamura 柴原 野手 ソフトバンク shibahara 的場 捕手 ソフトバンク matoba 田上 捕手 ソフトバンク tanoue 新垣 投手 ソフトバンク arakaki 杉内 投手 ソフトバンク sugiuchi 和田 投手 ソフトバンク wada 馬原 投手 ソフトバンク mahara 藤岡 投手 ソフトバンク fujioka 涌井 投手 西武 wakui 小野寺 投手 西武 onodera 西口 投手 西武 nishiguchi 岸 投手 西武 kishi 銀次郎 捕手 西武 ginjiro 中村 野手 西武 nakamura 中島 野手 西武 nakajima 赤田 野手 西武 akada 細川 捕手 西武 hosokawa 福地 野手 西武 fukuchi 鉄平 野手 楽天 teppei 高須 野手 楽天 takasu 憲史 野手 楽天 kenshi 礒部 野手 楽天 isobe 山崎 野手 楽天 yamasaki 一場 投手 楽天 ichiba 岩隈 投手 楽天 iwakuma 永井 投手 楽天 nagai 有銘 投手 楽天 arime 福盛 投手 楽天 fukumori 赤星 野手 阪神 akahoshi 赤松 野手 阪神 akamatsu 矢野 捕手 阪神 yano 関本 野手 阪神 sekimoto 藤本 野手 阪神 fujimoto 今岡 野手 阪神 imaoka 鳥谷 野手 阪神 toritani 金本 野手 阪神 kanemoto 林 野手 阪神 lin 濱中 野手 阪神 hamanaka 岡崎 捕手 阪神 okazaki 福原 投手 阪神 fukuhara 安藤 投手 阪神 andou 桟原 投手 阪神 sajikihara 藤川 投手 阪神 fujikawa 久保田 投手 阪神 kubota 下柳 投手 阪神 shimoyanagi 青木 野手 ヤクルト aoki 宮本 野手 ヤクルト miyamoto 武内 野手 ヤクルト takeuchi 古田 捕手 ヤクルト furuta 米野 捕手 ヤクルト yoneno 石川 投手 ヤクルト ishikawa 高津 投手 ヤクルト takatsu 松井 投手 ヤクルト matsui 高井 投手 ヤクルト takai 栗原 野手 広島 kurihara 新井 野手 広島 arai 黒田 投手 広島 kuroda 緒方 野手 広島 ogata 前田 野手 広島 maeda A.作ったプログラムの説明 answer1.rb #!/usr/koeki/bin/ruby while bb = gets if /ヤク/e =~ bb print bb end end 解説です。カタカナで検索できるか調べました。 answer2.rb #!/usr/koeki/bin/ruby while bb = gets if /ka/e =~ bb print bb end end 解説です。ローマ字で検索できるか調べました。 answer3.rb #!/usr/koeki/bin/ruby while bb = gets if /巨|武/e =~ bb print bb end end 解説です。巨か武が入っているプログラムを探しました。 answer4.rb #!/usr/koeki/bin/ruby while bb = gets if /[b-c]/e =~ bb print bb end end 解説です。b〜cが登録名に入っている人を調べました。 answer5.rb #!/usr/koeki/bin/ruby while bb = gets if /naka[szj]ima/e =~ bb print bb end end 解説です。どの読み方でいいか調べました。 実行結果 answer1.rbです。 irsv{c106041}% ./answer1.rb date06.dat [~/Ruby] 青木 野手 ヤクルト aoki 宮本 野手 ヤクルト miyamoto 武内 野手 ヤクルト takeuchi 古田 捕手 ヤクルト furuta 米野 捕手 ヤクルト yoneno 石川 投手 ヤクルト ishikawa 高津 投手 ヤクルト takatsu 松井 投手 ヤクルト matsui 高井 投手 ヤクルト takai answer2.rbです。 irsv{c106041}% ./answer2.rb date06.dat [~/Ruby] 門倉 投手 巨人 kadokura 二岡 野手 巨人 nioka 小坂 野手 巨人 kosaka 川越 投手 オリックス kawagoe 日高 捕手 オリックス hidaka 川崎 野手 ソフトバンク kawasaki 松中 野手 ソフトバンク matunaka 新垣 投手 ソフトバンク arakaki 藤岡 投手 ソフトバンク fujioka 中村 野手 西武 nakamura 中島 野手 西武 nakajima 赤田 野手 西武 akada 細川 捕手 西武 hosokawa 高須 野手 楽天 takasu 赤星 野手 阪神 akahoshi 赤松 野手 阪神 akamatsu 今岡 野手 阪神 imaoka 金本 野手 阪神 kanemoto 濱中 野手 阪神 hamanaka 岡崎 捕手 阪神 okazaki 藤川 投手 阪神 fujikawa 石川 投手 ヤクルト ishikawa 高津 投手 ヤクルト takatsu 高井 投手 ヤクルト takai answer3.rbです。 irsv{c106041}% ./answer3.rb date06.dat [~/Ruby] 上原 投手 巨人 uehara 内海 投手 巨人 utsumi 豊田 投手 巨人 toyoda 門倉 投手 巨人 kadokura 野口 投手 巨人 noguchi 小笠原 野手 巨人 ogasawara 二岡 野手 巨人 nioka 阿部 捕手 巨人 abe 脇谷 野手 巨人 wakiya 矢野 野手 巨人 yano 小坂 野手 巨人 kosaka 谷 野手 巨人 tani 涌井 投手 西武 wakui 小野寺 投手 西武 onodera 西口 投手 西武 nishiguchi 岸 投手 西武 kishi 銀次郎 捕手 西武 ginjiro 中村 野手 西武 nakamura 中島 野手 西武 nakajima 赤田 野手 西武 akada 細川 捕手 西武 hosokawa 福地 野手 西武 fukuchi 武内 野手 ヤクルト takeuchi answer4.rbです。 irsv{c106041}% ./answer4.rb date06.dat [~/Ruby] 野口 投手 巨人 noguchi 阿部 捕手 巨人 abe 水口 野手 オリックス mizuguchi 山口 投手 オリックス yamaguchi 大久保 投手 オリックス okubo 小久保 野手 ソフトバンク kokubo 柴原 野手 ソフトバンク shibahara 的場 捕手 ソフトバンク matoba 杉内 投手 ソフトバンク sugiuchi 西口 投手 西武 nishiguchi 福地 野手 西武 fukuchi 礒部 野手 楽天 isobe 一場 投手 楽天 ichiba 久保田 投手 阪神 kubota 武内 野手 ヤクルト takeuchi answer5.rbです。 irsv{c106041}% ./answer5.rb date06.dat [~/Ruby] 中島 野手 西武 nakajima 考察 巨か武を調べた時に武内もでてきて、球団だけ出てくると思っていたので驚い たプログラムは奥深いと思った。 使った正規表現 answer3では、|を使用した answer4では〜を使用した answer5では[]を使用した。 B. 考えた設定 選手の名前をいれたり、球団名をいれるとこういう選手がいますという形にした かったです。 作成したプログラム answer_b1.rbです #!/usr/koeki/bin/ruby print("選手の所属球団を調べます。\n") STDERR.print "検索選手 : " pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") while bb = gets if request =~ bb # print bb if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ bb printf("所属球団は%sです。\n", $3) end end end answer_b2.rbです #!/usr/koeki/bin/ruby print("投手か野手を調べます。\n") STDERR.print "検索はどっち!? : " pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") while bb = gets if request =~ bb # print bb if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ bb printf("%sは%s選手です。\n",pattern, $1) end end end answer_b3.rbです #!/usr/koeki/bin/ruby print("その球団にいる選手を調べます。\n") STDERR.print "検索チーム : " pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") while bb = gets if request =~ bb # print bb if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ bb printf("%sは%sです。\n",pattern ,$1) end end end answer_b4.rbです #!/usr/koeki/bin/ruby print("選手の登録名を調べます\n") STDERR.print "検索選手 : " pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") while bb = gets if request =~ bb # print bb if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ bb printf("%sの登録名は%sです。\n",pattern, $4) end end end 元にしたプログラムからの変更点 元にしたプログラムはデータの切り出しで、中味を特に変えた と言うわけでなく変数や出したい言葉を変えたのとちょっとオリジナリティー もいれてみました。 プログラムの実行画面 answer_b1.rbです irsv{c106041}% ./answer_b1.rb date06.dat [~/Ruby] 選手の所属球団を調べます。 検索選手 : 青木 所属球団はヤクルトです。 answer_b2.rbです irsv{c106041}% ./answer_b2.rb date06.dat [~/Ruby] 投手か野手を調べます。 検索はどっち!? : 投手 投手は上原選手です。 投手は内海選手です。 投手は豊田選手です。 投手は門倉選手です。 投手は野口選手です。 投手は川越選手です。 投手は山口選手です。 投手は大久保選手です。 投手は新垣選手です。 投手は杉内選手です。 投手は和田選手です。 投手は馬原選手です。 投手は藤岡選手です。 投手は涌井選手です。 投手は小野寺選手です。 投手は西口選手です。 投手は岸選手です。 投手は一場選手です。 投手は岩隈選手です。 投手は永井選手です。 投手は有銘選手です。 投手は福盛選手です。 投手は福原選手です。 投手は安藤選手です。 投手は桟原選手です。 投手は藤川選手です。 投手は久保田選手です。 投手は下柳選手です。 投手は石川選手です。 投手は高津選手です。 投手は松井選手です。 投手は高井選手です。 answer_b3.rbです irsv{c106041}% ./answer_b3.rb date06.dat [~/Ruby] その球団にいる選手を調べます。 検索チーム : 巨人 巨人は上原です。 巨人は内海です。 巨人は豊田です。 巨人は門倉です。 巨人は野口です。 巨人は小笠原です。 巨人は二岡です。 巨人は阿部です。 巨人は脇谷です。 巨人は矢野です。 巨人は小坂です。 巨人は谷です。 /answer_b4.rbです irsv{c106041}% ./answer_r4.rb date06.dat [~/Ruby] 選手の登録名を調べます 検索選手 : 小笠原 小笠原の登録名はogasawaraです。 c 作成したプログラム #!/usr/koeki/bin/ruby print("選手を調べます。\n") STDERR.print "検索選手 : " pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") while bb = gets if request =~ bb # print bb if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ bb printf("%s選手は%sで所属球団は%sで登録名は%sです。\n",pattern,$2,$3,$4) end end end 元にしたプログラム Bと同じでデータの切り出しをモデルにしました。変更点は$2や$3などを付けて 文字を連動させた事です。 プログラムの実行結果 irsv{c106041}% ./answer_c1.rb date06.dat [~/Ruby] 選手を調べます。 検索選手 : 松中 松中選手は野手で所属球団はソフトバンクで登録名はmatunakaです。 irsv{c106041}% ./answer_c1.rb date06.dat [~/Ruby] 選手を調べます。 検索選手 : 涌井 涌井選手は投手で所属球団は西武で登録名はwakuiです。 irsv{c106041}% ./answer_c1.rb date06.dat [~/Ruby] 選手を調べます。 検索選手 : 古田 古田選手は捕手で所属球団はヤクルトで登録名はfurutaです。 E.作成したプログラム #!/usr/koeki/bin/ruby print("選手を調べます。\n") STDERR.print "検索選手 : " pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") open("date06.dat","r") do |candidate| while bb = candidate.gets if request =~ bb # print if request =~ bb # print bb if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ bb printf("%s選手は%sで所属球団は%sで登録名は%sです。\n",pattern,$2,$3,$4) end end end end 元にしたプログラムからの変更点 元にしたプログラムはデータを読み込むようにするにはを参考にしました。変更 点は変数を変えたことと、cと同じ感じにしたぐらいです プログラムの実行画面 irsv{c106041}% ./input_b.rb [~/Ruby] 選手を調べます。 検索選手 : 青木 青木選手は野手で所属球団はヤクルトで登録名はaokiです。 irsv{c106041}% ./input_b.rb [~/Ruby] 選手を調べます。 検索選手 : 新垣 新垣選手は投手で所属球団はソフトバンクで登録名はarakakiです。 irsv{c106041}% ./input_b.rb [~/Ruby] 選手を調べます。 検索選手 : 田上 田上選手は捕手で所属球団はソフトバンクで登録名はtanoueです。 考察 作ったプログラムはある程度構造が同じだったのでまだわかったが、ちょっとの ミスでもプログラムは動かないので大変だ。 参考文献 西村先生のHP データの切り出し URL:http://roy/~madoka/2007/r1/07/07-09-cutout.html データを読み込むようにするには URL:http://roy/~madoka/2007/r1/07/07-10-readdata.html 感想 一番頑張ったのはデータ作成で、どういう感じにすればいい感じの分章になるか 悩んだ。でも、毎回感じてることだが、最初の方よりプログラミングがわかるよ うになってきたのがうれしい。でも間違って同じファイルを添付したのはショッ クです