5 月 30 日のレポートについて 語学クラス: XXXX語 XX 系: XXXX系 学籍番号: c106XXXX 氏名: XXXXXXXX 1、A.0b100101 = 0x?? 2進数から16進数に変える。 100101を右から 4桁 ずつ区切る。 すなわち、10 と 0101 になり、表より読み取る。 よって、10 → 2 0101 → 5 0b100101 = 0x25 である。 B.0d1111 = 0x?? 10進数から16進数に変換させるために、まず初めに10進数表示を2進数表示 にかえて、計算を行なう。 1111を2で割り、出てきた答えを 0 がでるまで永遠に2で割っていく。 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 最後の余りを先頭に下から順に並べる。 0b10001010111(2進数表示) 0b10001010111 2進数から16進数を求める。 右から4桁ずつ区切っていくと… 100、 0101、 0111 となる。 これらを、西村先生のHPの表に照らし合わせてみると、 100 → 4 0101 → 5 0111 → 7 とわかる。よって、0d457(16進数表示)である。 確かめ… 4 × 16**2 =1024 5 × 16**1 = 80 7 × 16**0 = 7 1024+80+7 = 1111 参考文献: http://www.asahi-net.or.jp/~AX2S-KMTN/ref/bdh.html 2進数、16進数と10進数より。 http://roy/~madoka/2007/r1/04/04-12-binary2.html 西村まどか先生のHP"16進数のまとめ"より。 2、A ●answer1.rb について ( A )内容説明 母音、子音で a と i となる言葉について。 ( B )作成したプログラム #!/usr/koeki/bin/ruby while seiza = gets if /a.i/i =~ seiza print seiza end end *正規表現の部分を / / で表した。正規表現の中を a と i に設定した。 *while を使用しているので end が必要である。 *if を使用しているので end が必要である。 *変数を seiza と 設定したので、他の部分での入力間違いを見落さないように しなければ、結果画面でエラーが生じてしまう。 ( C )実行した結果画面 irsv{c106048}% ./answer1.rb data06.dat [~/Ruby] 蟹座 かにざ 6月22日〜7月22日 かに kaniza 山羊座 やぎざ 12月22日〜1月19日 やぎ yagiza ( D )結果の考察 蟹座だけがでてくると考えていたが、予想と異なった。 kani の aとi 、yagi の a と i が結果でた。 ● answer2.rb について ( A )プログラム内容の説明 正規表現の中の入力されたひらがなに該当する言葉を検索させる。 ( B )作成したプログラム #!/usr/koeki/bin/ruby while seiza = gets if /や?ぎ\s+/e =~ seiza print seiza end end *while endの条件を忘れない。 *if end の条件を忘れない。 *変数を seiza とし、変数にデータを1行ずつgetsさせる。 *正規表現な中、/ /にあいまいな検索言葉を入力させる。 * e は日本語入力を示す。 ( C )実行した結果画面 irsv{c106048}% ./answer2.rb data06.dat [~/Ruby] 山羊座 やぎざ 12月22日〜1月19日 やぎ yagiza ( D )結果の考察 予想通りの山羊座が検索された。 B、 ● answer_b1.rb について ( A )プログラム内容の説明 結果画面に 検索パターン : とでるように設定する。日本語で 入力した項 目を検索させ、漢字のものだけ検索させる。 ( B ) 作成したプログラム #!/usr/koeki/bin/ruby STDERR.print("検索パターン : ") pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") while seiza = gets if request =~ seiza # print seiza if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ seiza printf("%s\n" , $1) end end end *STDIN は与えられたデータを処理する時の処理の方法をする。 キーボードから入力の時。操作したい時に使える。 *Regexp.new(pattern, true, "e")は正規表現したい文字列にオプションをつけ る。 *while endの条件を忘れない。 *if end の条件を忘れない。2つある。 *変数を seiza とし、変数にデータを1行ずつgetsさせる。 *正規表現の中、/ /にあいまいな検索言葉を入力させる。 * e は漢字コードを示している。 * /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/は切り出しを行なう。 * \S+ は空白文字以外の文字列が1個以上並んでいるのを探す。 * \s+ は空白文字が1個以上並んでいるものを探す。 ( C )実行した結果画面 irsv{c106048}% ./answer_b1.rb data06.dat [~/Ruby] 検索パターン : ふたござ 双子座 ( D )結果の考察 予想通りの結果が綺麗にでてきた。 ●answer_b2.rb について ( A )プログラム内容の説明 検索パターンの時に、切り出しを行なう。 ( B )作成したプログラム #!/usr/koeki/bin/ruby STDERR.print("検索パターン : ") pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") while seiza = gets if request =~ seiza # print seiza if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ seiza printf("%s\n" , $1) end end end ( C )実行した結果画面 irsv{c106048}% ./answer_b2.rb data06.dat [~/Ruby] 検索パターン : yagi 山羊座 irsv{c106048}% ./answer_b2.rb data06.dat [~/Ruby] 検索パターン : 春 牡羊座 牡牛座 双子座 irsv{c106048}% ./answer_b2.rb data06.dat [~/Ruby] 検索パターン : おとめ 乙女座 ( D )結果の考察 data06.rb の データを多少変更させたけれど、しっかりと季節入力をした時に 季節に該当する星座がしっかり検索された。 C、●answer_c1.rb について ( A )内容説明 1つの単語だけでなく、文章ができる。入力した項目と出力さ項目が個となる。 ( B )プログラムの貼り付け #!/usr/koeki/bin/ruby STDERR.print("検索パターン : ") pattern = STDIN.gets.chomp request = Regexp.new(pattern,true,"e") while seiza = gets if request =~ seiza # print seiza if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ seiza printf("%sは%s\n" , $1 ,$2) end end end *while endの条件を忘れない。 *if end の条件を忘れない。2つある。 *変数を seiza とし、変数にデータを1行ずつgetsさせる。 *正規表現の中、/ /にあいまいな検索言葉を入力させる。 * e は漢字コードを示している。 * /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/は切り出しを行なう。 * \S+ は空白文字以外の文字列が1個以上並んでいるのを探す。 * \s+ は空白文字が1個以上並んでいるものを探す。 * printf("%sは%s\n" , $1 ,$2)で $2を追加。 ( C )実行した結果画面 irsv{c106048}% ./answer_c1.rb data06.dat [~/Ruby] 検索パターン : 射手座 射手座はいてざ irsv{c106048}% ./answer_c1.rb data06.dat [~/Ruby] 検索パターン : 秋 乙女座はおとめざ 天秤座はてんびんざ 蠍座はさそりざ 射手座はいてざ ( D )結果の考察 日本語はおかしいけれど、しっかりとプログラムは実行された。 ●answer_c2.rb について ( A )内容説明 "です"というものを追加させたので、文章に変化が現れてくる。登録された データを組み合わせて文章として表現させる。 ( B )プログラムの貼り付け #!/usr/koeki/bin/ruby STDERR.print("検索パターン : ") pattern = STDIN.gets.chomp request = Regexp.new(pattern,true,"e") while seiza = gets if request =~ seiza # print seiza if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ seiza printf("%sは%sです\n" , $1 ,$2) end end end *while endの条件を忘れない。 *if end の条件を忘れない。2つある。 *変数を seiza とし、変数にデータを1行ずつgetsさせる。 *正規表現の中、/ /にあいまいな検索言葉を入力させる。 * e は漢字コードを示している。 * /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/は切り出しを行なう。 * \S+ は空白文字以外の文字列が1個以上並んでいるのを探す。 * \s+ は空白文字が1個以上並んでいるものを探す。 * %s は %sです といった文を出力させる。 ( C ) 実行した結果画面 検索パターン : 夏 蟹座はかにざです 獅子座はししざです irsv{c106048}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン : tennbinn 天秤座はてんびんざです ( D )結果の考察 検索パターンで、キーワードをいれると、しっかりと検索され、"です" もしっ かり表示された。 E ●input_b.rb について ( A )作成したプログラム #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") open("seiza.dat","r") do |candidate| while seiza = candidate.gets if request =~ seiza # print seiza if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ seiza printf("%s座\n" , $1) end end end end *STDIN は与えられたデータを処理する時の処理の方法をする。 キーボードから入力の時。操作したい時に使える。 *Regexp.new(pattern, true, "e")は正規表現したい文字列にオプションをつけ る。 *while endの条件を忘れない。 *if end の条件を忘れない。2つある。 *変数を seiza とし、変数にデータを1行ずつgetsさせる。 *正規表現の中、/ /にあいまいな検索言葉を入力させる。 * e は漢字コードを示している。 * /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/は切り出しを行なう。 * \S+ は空白文字以外の文字列が1個以上並んでいるのを探す。 * \s+ は空白文字が1個以上並んでいるものを探す。 * open("seiza.dat","r") do |candidate|で open("ファイル名","モード") do |変数|の意味である。 そして、変数に行なう処理をさせていく。 *open end でファイルを指定させる。 * "r" は読みこむモードをしめしており、Read を示す頭文字である。 ●参考文献● http://roy/~madoka/2007/r1/07/ 西村まどか先生のHP"データから情報を取り出すには"より 3、感想 今回のプログラムでは、だいたい理解しながら作成することができた。検索 パターンの時にデータを変更してみた。ちゃんと表示されたので良かった。 正規表現というものが前回より、わかってきた。前回の時より、パターンも 幾つか考えられたし、何故ここでその表現をするのかということも、だんだ ん理解しながら作成でき、頑張れた。E の問題をしたのですが、プログラム わ作れたのですが、結果がでなくて、最後まで解読することが出来ませんで した。進数計算もわかってきたように感じるので、この調子で次回からも頑 張りたい。