5 月 30 日のレポートについて 語学クラス: XXXX語 XX 系: XXXX系 学籍番号: C106XXXX 氏名: XXXXXXXX 1、 A 0b100101 = 0x?? 0b100101を右から4桁に分ける。 すると、 10 と 0101 に分けることが出来る。 それを西村先生のHPを参考に16進数に当てはめると 10 は 2 0101 は 5 に当てはめることが出来る。 すなわち、答えは 0b100101 = 0x25 となる。 B 0d1111 = 0x?? まず、0d1111を2進数にする。 2進数にするには、商を2で割り、余りを出しながら商が0になるまで求める。 1111÷2=555余り1 555÷2 =277余り1 277÷2 =138余り1 138÷2 = 69余り0 69÷2 = 34余り1 34÷2 = 17余り0 17÷2 = 8余り1 8÷2 = 4余り0 4÷2 = 2余り0 2÷2 = 1余り0 1÷2 = 0余り1 求めた余りを先頭に下から順に並べる。 10001010111 となる。 すなわち 0b=10001010111 求めた2進数を16進数にするために、右から4桁にわける。 すると100 と 0101 と 0111 に分けることができる。 分けたそれぞれの数を西村先生のHPを参考に、16進数に当てはめる。 100 は 4 0101は 5 0111は 7 に当てはめることが出来る。 すなわち 0d1111 = 0x457 となる。 確かめるために、16進数を10進数になおす。 4×16**2=1024 5×16**1=80 7×16**=7 それぞれで求めた値を足すと 1024+80+7=1111 0d=1111になるので正しい。 参考文献 西村先生のHP http://roy/~madoka/2007/r1/04/04-12-binary2.html 16進数のまとめより http://www.asahi-net.or.jp/~AX2S-KMTN/ref/bdh.html 2進数、16進数と10進数より 2、 使用したデータ 桜桃 山形県 さくらんぼ sakuranbo 蜜柑 愛媛県 みかん mikan マンゴー 宮崎県 まんごー mango 砂糖黍 沖縄県 さとうきび satokibi タコ焼き 大阪府 たこやき takoyaki 蟹 福井県 かに kani じゃが芋 北海道 じゃがいも zyagaimo 桃 宮城県 もも momo 胡瓜 栃木県 きゅうり kyuri 松茸 広島県 まつたけ matutake キャベツ 岩手県 きゃべつ kyabetu 米 秋田県 こめ kome 林檎 青森県 りんご ringo A answer1.rb A)作成した内容の説明 o.oという文字がある食べ物だけ、検索されるようにした。 B)作成したプログラム #!/usr/koeki/bin/ruby while fruit = gets if /o.o/i =~ fruit #/ /i 大文字、小文字を問わないで検索 print fruit end end C)検索パターンについて o.oという文字があるのは、桃しかないので桃しか検索されない。 D)実行した結果 irsv{c106145}% ./answer1.rb data06.dat [~/Ruby] 桃 宮城県 もも momo E)結果の考察 予想どおり、桃しか検索されなかった。 answer2.rb A)作成した内容の説明 「も」という文字が、文字の前後にあるものだけが検索されるようにした。 B)作成したプログラム #!/usr/koeki/bin/ruby while fruit = gets if/も?も\s+/e =~ fruit print fruit end end C)検索パターンについて 「も」という文字が文字の前後にあるものは、桃とじゃが芋なので、この2つが検 索される。 D)実行した結果 irsv{c106145}% ./answer2.rb data06.dat [~/Ruby] じゃが芋 北海道 じゃがいも zyagaimo 桃 宮城県 もも momo E)結果の考察 予想どおり、じゃが芋と桃が検索された。 B answer_b1.rb A)作成した内容の説明 入力された項目と、出力された項目が異なるプログラムを作った。$1に入っ ているのは食べ物の名前なので、都道府県やローマ字で入力しても$1に入ってい る食べ物が検索される。 B)作成したプログラム #!/usr/koeki/bin/ruby STDERR.print"検索パターン:" pattern = STDIN.gets.chomp request = Regexp.new(pattern,true,"e") #"e"日本語 while fruit = gets if request =~ fruit # print fruit if/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ fruit printf("%sフルーツ\n",$1) end end end C)検索パターンについて 自分の作ったプログラムが都道府県やローマ字で入力しても、$1に入っている食 べ物が検索されるか、それぞれ調べてみる。 また、[ ]内に2つの文字を入力して検索結果がでるかも調べる。 また、+ の直前の文字が sa の場合、桜桃と砂糖黍が検索されるか調べる。 D)実行した結果 irsv{c106145}% ./answer_b1.rb data06.dat [~/Ruby] 検索パターン:momo 桃フルーツ irsv{c106145}% ./answer_b1.rb data06.dat [~/Ruby] 検索パターン:みかん 蜜柑フルーツ irsv{c106145}% ./answer_b1.rb data06.dat [~/Ruby] 検索パターン:山形県 桜桃フルーツ irsv{c106145}% ./answer_b1.rb data06.dat [~/Ruby] 検索パターン:桃 桜桃フルーツ 桃フルーツ irsv{c106145}% ./answer_b1.rb data06.dat [~/Ruby] 検索パターン:林檎 林檎フルーツ irsv{c106145}% ./answer_b1.rb data06.dat 検索パターン:ma[nm]go マンゴーフルーツ irsv{c106145}% ./answer_b1.rb data06.dat 検索パターン:sato+k 砂糖黍フルーツ irsv{c106145}% ./answer_b1.rb data06.dat 検索パターン:sa+k 桜桃フルーツ E)結果の考察 都道府県やローマ字で入力しても、$1に入っている食べ物が検索された。 また、桃という字は桜桃にも当てはまるので、桃と入力すると桜桃も検索されたの は予想外だった。 また、$1に入っている文字を入力しても検索されることが分かった。 また、[ ]の中の文字がどちらか1つあっていれば検索された。 また、+ の直前の文字が sa の場合、桜桃と砂糖黍が検索されるはずだが桜桃し か検索されなかった。 answer_b2.rb A)作成した内容の説明 入力された項目と、出力された項目が異なるプログラムを作った。$3に入ってい る内容が、都道府県やローマ字で入力しても$3に入っている食べ物が検索される。 B)作成したプログラム #!/usr/koeki/bin/ruby STDERR.print"検索パターン:" pattern = STDIN.gets.chomp request = Regexp.new(pattern,true,"e") while fruit = gets if request =~ fruit # print fruit if/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ fruit printf("%sfruit\n",$3) end end end C)検索したプログラム 自分の検索したプログラムが都道府県やローマ字入力しても、$3に入っているプ ログラムが検索されるか、それぞれ調べてみる。 D)実行した結果 irsv{c106145}% ./answer_b2.rb data06.dat [~/Ruby] 検索パターン:山形県 さくらんぼfruit irsv{c106145}% ./answer_b2.rb data06.dat [~/Ruby] 検索パターン:桃 さくらんぼfruit ももfruit irsv{c106145}% ./answer_b2.rb data06.dat [~/Ruby] 検索パターン:ringo りんごfruit E)結果の考察 都道府県やローマ字で入力しても、$3に入っている食べ物が検索された。 C answer_c1.rb A)作成した内容の説明 検索する文字を入力すると、文章になって検索されるように作った。 B)作成したプログラム #!/usr/koeki/bin/ruby STDERR.print"検索パターン:" pattern = STDIN.gets.chomp request = Regexp.new(pattern,true,"e") while fruit = gets if request =~ fruit # print fruit if/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ fruit printf("%sは%sフルーツ\n",$2 ,$1) end end end C)検索したプログラム 都道府県、ローマ字、ひらがなを入力しても文章になって検索されるか、それぞ れ調べる。 D)実行した結果 irsv{c106145}% ./answer_c1.rb data06.dat [~/Ruby] 検索パターン:愛媛県 愛媛県は蜜柑フルーツ irsv{c106145}% ./answer_c1.rb data06.dat [~/Ruby] 検索パターン:みかん 愛媛県は蜜柑フルーツ irsv{c106145}% ./answer_c1.rb data06.dat [~/Ruby] 検索パターン:sakuranbo 山形県は桜桃フルーツ E)都道府県、ローマ字、ひらがなを入力しても文章になって検索されるが、文章 がおかしいので、次のプログラムを作るときは解り易い文章にする。 answer_c2.rb A)作成した内容の説明 都道府県、ローマ字、ひらがなを入力すると文章になって検索される。 B)作成したプログラム #!/usr/koeki/bin/ruby STDERR.print"検索パターン:" pattern = STDIN.gets.chomp request = Regexp.new(pattern,true,"e") while fruit = gets if request =~ fruit # print fruit if/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ fruit printf("%sは%sが有名です。\n",$2 ,$1) end end end C)検索したプログラム 「m」がつく食べ物は全て文章になって検索されるか検索する。また、都道府県、 ローマ字で検索するだけでなく、北海道の北だけを入力するだけでも文章になっ て検索されるか調べる。また、先程作ったプログラムと同様に桃を入力すると、 桜桃も文章になって検索されるか調べる。 D)実行した結果 irsv{c106145}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン:mo? 愛媛県は蜜柑が有名です。 宮崎県はマンゴーが有名です。 北海道はじゃが芋が有名です。 宮城県は桃が有名です。 広島県は松茸が有名です。 秋田県は米が有名です。 irsv{c106145}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン:matutake 広島県は松茸が有名です。 irsv{c106145}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン:mat 広島県は松茸が有名です。 irsv{c106145}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン:米 秋田県は米が有名です。 irsv{c106145}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン:栃木県 栃木県は胡瓜が有名です。 irsv{c106145}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン:北 北海道はじゃが芋が有名です。 irsv{c106145}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン:桃 山形県は桜桃が有名です。 宮城県は桃が有名です。 E)結果の考察 都道府県、ローマ字で入力してもそれぞれ文章になって検索された。また、文字 を最期まで入力しなくとも、それぞれきちんと検索された。answer_c1.rbで作っ たプログラムより解り易い文章になった。 参考文献 西村先生のHP http://roy/~madoka/2007/r1/07/07-02-egrep.html Rubyでの正規表現 http://roy/~madoka/2007/r1/07/07-05-regexp.html キーボードで検索文字を入力して探したい http://roy/~madoka/2007/r1/07/07-09-cutout.html 駅名だけを切り出そう 3、 私は今回のレポートで、プログラミング作りを本当に頑張った。都道府県やロー マ字で入力しても検索され、目的にあった結果が出るように何度も試行錯誤を重 ねた。今回のレポートでは、前回よりも時間はかかったがたくさんプログラムを 作ることができた。たくさんプログラムを作ることで、内容を前回よりも理解す ることが出来たので良かった。