5 月 30 日のレポートについて 語学クラス:XXXX語 系 :XXXX 学籍番号 :c106XXXX 氏名 :XXXXXXXX 1. [A] 0b 100101 = 0x?? 2 進数表示から 16 進数表示にする過程は・・・ 第 4 回の授業「プログラミングの方法」より、「2 進数, 16 進数変換 (2)」 の表を参考にして解読する。 0d 100101は、10 と 0101 に分けることができる。 よって答えは 0b 100101 = 0x 25 [B] 0d 1111 = 0x?? 10 進数表示から 2 進数表示にすると・・・ 0d 2 ) 1111 ・・・ 余り 1 --------- 2 ) 555 ・・・ 余り 1 --------- 2 ) 277 ・・・ 余り 1 --------- 2 ) 138 ・・・ 余り 0 --------- 2 ) 69 ・・・ 余り 1 --------- 2 ) 34 ・・・ 余り 0 --------- 2 ) 17 ・・・ 余り 1 --------- 2 ) 8 ・・・ 余り 0 --------- 2 ) 4 ・・・ 余り 0 --------- 2 ) 2 ・・・ 余り 0 --------- 1 よって、 0d 1111 = 0b 10001010111 確かめ算 2の0乗×1+2の1乗×1+2の2乗×1+2の3乗×0+2の4乗×1+2の5乗×0 +2の6乗×1+2の7乗×0+2の8乗×0+2の9乗×0+2の10乗×1 = 1+2+4+0+16+0+64+0+0+0+1024 = 1111 2 進数表示から 16 進数表示にする過程は・・・ 第 4 回の授業「プログラミングの方法」より、「2 進数, 16 進数変換 (2)」 の表を参考にして解読する。 0b 10001010111 は、100 と 0101 と 0111 に分けることができる。 よって答えは 0b 10001010111 = 0x 457 2. A. a) 今までに読んだ本の著者名(漢字、ローマ字表記)と題名、発行年数について。 b) 前回のレポートで作成したデータ data06.dat 夜明けまで1マイル 村山由佳 murayamayuka 1998 1ポンドの悲しみ 石田衣良 ishidaira 2004 プラナリア 山本文緒 yamamotohumio 2005 ふたり 赤川次郎 akagawajirou 1989 冷静と情熱のあいだRosso 江國香織 ekunikaori 2001 冷静と情熱のあいだBlu 辻仁成 tujihitonari 1999 ネバーランド 奥田陸 onndariku 2000 世界の中心で愛をさけぶ 片山恭一 katayamakyouichi 2001 とかげ よしもとばなな yoshimotobanana 1996 いちご同盟 三田誠広 mitamasahiro 1990 c) 検索によって該当したデータを一行を表示させる。 d) 該当するデータを一行表示させるプログラムのパターンについて [1] answer1.rb #!/usr/koeki/bin/ruby while honn = gets # while --- end の条件 # "変数 = gets" : 変数にデータを 1 行ずつ getsする if /a.a/i =~ honn # if --- end の条件 # "/あいまい検索/i =~ 変数" # /A/ =~ B : 検索したいぱたーん A がテーマを読み こませた変数 B と等しいかどうか # / /i : 大文字、小文字は問わないで検索 print honn end end ☆実行結果☆ irsv{c106110}% ./answer1.rb data06.dat [~/Ruby] 夜明けまで1マイル 村山由佳 murayamayuka 1998 プラナリア 山本文緒 yamamotohumio 2005 ふたり 赤川次郎 akagawajirou 1989 世界の中心で愛をさけぶ 片山恭一 katayamakyouichi 2001 とかげ よしもとばなな yoshimotobanana 1996 いちご同盟 三田誠広 mitamasahiro 1990 ★結果の考察★ プログラムの中にある検索条件 /a.a/ は、何か1文字の両端に a がある場合の データが該当し表示されるということである。この場合、. は挟む文字の数を 表す。 [2] answer2.rb #!/usr/koeki/bin/ruby while honn = gets # while --- end の条件 # "変数 = gets" : 変数にデータを 1 行ずつ getsする if /i..i/i =~ honn # if --- end の条件 # "/あいまい検索/i =~ 変数" # /A/ =~ B : 検索したいぱたーん A がテーマを読み こませた変数 B と等しいかどうか # / /i : 大文字、小文字は問わないで検索 print honn end end ☆実行結果☆ irsv{c106110}% ./answer2.rb data06.dat [~/Ruby] 1ポンドの悲しみ 石田衣良 ishidaira 2004 世界の中心で愛をさけぶ 片山恭一 katayamakyouichi 2001 ★結果の考察★ [1]の応用として、検索条件の挟む文字数を増やしてみた。正確に実行可能なこ とを証明できた。 [3] answer3.rb #!/usr/koeki/bin/ruby while honn = gets # while --- end の条件 # "変数 = gets" : 変数にデータを 1 行ずつ getsする if /^[ァ-ン]/e =~ honn # if --- end の条件 # "/ /e" # if --- end の条件 # /( | )/ の" | "は、"または" の意味 # /A/ =~ B : 検索したいぱたーん A がテーマを読み こませた変数 B と等しいかどう # "/ /e" で EUC で探すという意味 print honn end end ☆実行結果☆ irsv{c106110}% ./answer3.rb data06.dat [~/Ruby] プラナリア 山本文緒 yamamotohumio 2005 ネバーランド 奥田陸 onndariku 2000 ★結果の考察★ 本の題名の最初の文字がカタカナだったことだけを覚えていた場合の検索方法 である。先頭の文字列のみで探すときは、" ^ " を使用する。 [4] answer4.rb #!/usr/koeki/bin/ruby while honn = gets # while --- end の条件 # "変数 = gets" : 変数にデータを 1 行ずつ getsする if /(0|1)$/ =~ honn # if --- end の条件 # /( | )/ の" | "は、"または" の意味 # /A/ =~ B : 検索したいぱたーん A がテーマを読み こませた変数 B と等しいかどうか print honn end end ☆実行結果☆ irsv{c106110}% ./answer4.rb data06.dat [~/Ruby] 冷静と情熱のあいだRosso 江國香織 ekunikaori 2001 ネバーランド 奥田陸 onndariku 2000 世界の中心で愛をさけぶ 片山恭一 katayamakyouichi 2001 いちご同盟 三田誠広 mitamasahiro 1990 ★結果の考察★ " | " で表すことのできる "または" と、" $ " を組み合わせた。 発行年数の末尾が 0 または 1 であることのみ分かっている時の検索 で使用可能である。 [5] amswer5.rb #!/usr/koeki/bin/ruby while honn = gets # while --- end の条件 # "変数 = gets" : 変数にデータを 1 行ずつ getsする if /(o|a)ri/e =~ honn # if --- end の条件 # /( | )/ の" | "は、"または" の意味 # /A/ =~ B : 検索したいぱたーん A がテーマを読み こませた変数 B と等しいかどうか # "/ /e" で EUC で探すという意味 print honn end end ☆実行結果☆ irsv{c106110}% ./answer5.rb data06.dat [~/Ruby] 冷静と情熱のあいだRosso 江國香織 ekunikaori 2001 冷静と情熱のあいだBlu 辻仁成 tujihitonari 1999 ネバーランド 奥田陸 onndariku 2000 ★結果の考察★ ori または ari が含まれる著者名を探すときに活用できる。ori または ari が末尾に来るものだけを検索したい場合は、" $ " をつけると可能になる。 [6] answer6.rb #!/usr/koeki/bin/ruby while honn = gets # while --- end の条件 # "変数 = gets" : 変数にデータを 1 行ずつ getsする if /[山|川]/e =~ honn # if --- end の条件 # /( | )/ の" | "は、"または" の意味 # /A/ =~ B : 検索したいぱたーん A がテーマを読み こませた変数 B と等しいかどうか # "/ /e" で EUC で探すという意味 print honn end end ☆実行結果☆ irsv{c106110}% ./answer6.rb data06.dat [~/Ruby] 夜明けまで1マイル 村山由佳 murayamayuka 1998 プラナリア 山本文緒 yamamotohumio 2005 ふたり 赤川次郎 akagawajirou 1989 世界の中心で愛をさけぶ 片山恭一 katayamakyouichi 2001 ★結果の考察★ 山 または 川 が著者名に含まれているものが該当し、検索の対象になる。 E. 作成したプログラム input_b.rb #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " # 標準エラー出力で printf を実行する pattern = STDIN.gets.chomp # chomp は改行文字の有無を調べる意 request = Regexp.new(pattern, true, "e") while honn = gets # while --- end の条件 # "変数 = gets" : 変数にデータを 1 行ずつ getsする if request =~ honn # if --- end の条件 # print honn # print 文という実行文 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ honn # if --- end の条件 # \S+ は空白文字以外の文字列が 1 個 以上並んでいるものを探すの意 # \S+ は空白文字が 1個以上並んで いるものを探すの意 printf("%s \n", $1) # printf("変換指定子",変数) # ("") の中に表示する文を書く。 # 改行。 \n は backslash と呼ぶ。 end end end ☆実行結果☆ [1] irsv{c106110}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : a.a 夜明けまで1マイル プラナリア ふたり 世界の中心で愛をさけぶ とかげ いちご同盟 [2] irsv{c106110}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : i..i 1ポンドの悲しみ 世界の中心で愛をさけぶ [3] irsv{c106110}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : ^[ァ-ン] プラナリア ネバーランド [4] irsv{c106110}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : (0|1)$ 冷静と情熱のあいだRosso ネバーランド 世界の中心で愛をさけぶ いちご同盟 [5] irsv{c106110}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : (o|a)ri 冷静と情熱のあいだRosso 冷静と情熱のあいだBlu ネバーランド [6] irsv{c106110}% ./input_b.rb data06.dat [~/Ruby] 検索パターン : [山|川] 夜明けまで1マイル プラナリア ふたり 世界の中心で愛をさけぶ ★結果の考察★ 各検索パターンによって導きだされた検索結果は、B の問題の [1]〜[6] の検索結果に一致した。 3. 感想 応用を自分で考えてプログラムを作り、実行にうつせたことは自分自身の 自身に繋がった。プログラムに細かく説明を加えることで、今までの復習を することが出来た。手間はかかるが確実に実力となってきていると考える。