5 月 30 日のレポートについて 語学クラス:XXXX語選択XX 系:XXXX系 学籍番号:c106XXXXX 氏名:XXXXXXXX 1.A.0b100101 = 0x25 2進数から16進数に変換するには、まず右から順に4桁ずつ区切る。 100101 → 10,0101 → 0010,0101 そして、桁の重みを掛けて足す。2進数の重みは下位桁から「1,2,4,8」であるの で以下のような計算になり、答えが出る。 0×8 + 0×4 + 1×2 + 0×1 = 2 0×8 + 1×4 + 0×2 + 1×1 = 5 B.0d1111 = 0x457 10進数から16進数に変換するには、10進数を16で割って、その商をさらに16で割ることを余りを出しながら商が0になるまで繰り返す。 そして、最後の余りを下から順に並べると答えになる。 1111 ÷ 16 = 69余り7 69 ÷ 16 = 4余り5 4 ÷ 16 = 0余り4 【参考HP】 ・「Cyber Librarian」 2進数、16進数と10進数 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html ・「ITpro」 ゼロから学ぶ2進数 http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20020626/1/ 2. 《作成したデータの内容の説明》 バンドの名前、ふりがな、CDの発売年、CDの種類、アルバム名 バンド名とアルバム名にスペースが入っていると、表示する際にスペースごと に一つの要素として見なしてしまうため、今回はやむを得ずスペースの部分を"_"に 変更したデータを新しく作成した。 《データファイル》 data06_b.dat dustbox だすとぼっくす '06 (アルバム) 13_Brilliant_Leaves Northern19 のーざん19 '06 (アルバム) EVERLASTING LAST_ALLIANCE らすとあらいあんす '06 (アルバム) Me_and_Your_Borderline NOB のぶ '05 (アルバム) TO_THE_WINDING_ROAD WRONG_SCALE ろんぐすけーる '06 (アルバム) fate_effects_the_surface RIDDLE りどる '06 (アルバム) Heart_Out STACK44 すたっく44 '07 (アルバム) CLOCKWORK S☆CREATERS えすくりえいたーず '02 (アルバム) Spiritual☆Creaters locofrank ろこふらんく '06 (アルバム) The_First_Chapter HOT_SQUALL ほっとすこーる '06 (アルバム) LIFE_IS_CARNIVAL! EGNISH いぐにっしゅ '07 (ミニアルバム) CUBE_OF_THE_RAINBOW maegashira まえがしら '06 (アルバム) unfamiliar chickenrace ちきんれーす '06 (ミニアルバム) Sunshine_Underground RUNNERS-Hi らんなーずはい '06 (ミニアルバム) jack-in-the-box SCREW★WALKER すくりゅーうぉーかー '06 (アルバム) COMEBACK_MERRY_HOME HOLSTEIN ほるすたいん '04 (アルバム) Delivered_from_the_Past Hi-STANDARD はいすたんだーど '00 (シングル) Love_is_a_Battlefield HAWAIIAN6 はわいあん6 '07 (シングル) Days OVER_ARM_THROW おーばーあーむすろー '06 (マキシシングル) Love_us,Love_our_tales TOO_CLOSE_TO_SEE とぅーくろーすとぅーしー '05 (アルバム) Good_Old_Days 選択した問題 : C a)作成したプログラム 1.answer_c1.rb #!/usr/koeki/bin/ruby while band = gets if /RIDD*LE/e =~ band # print band if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band printf("バンド名: %s\s【%s】 \n%s年に、%s「%s」をリリース。\n", $1,$2,$3,$4,$5) end end end 2.answer_c2.rb #!/usr/koeki/bin/ruby while band = gets if /^l/ei=~ band # print band if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band printf("バンド名: %s\s【%s】 \n%s年に%s「%s」をリリース。\n\n", $1,$2,$3,$4,$5) end end end 3.answer_c3.rb #!/usr/koeki/bin/ruby while band = gets if /^\w+[0-9]/e=~ band # print band if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band printf("バンド名: %s\s【%s】 \n%s年に%s「%s」をリリース。\n\n", $1,$2,$3,$4,$5) end end end 4.answer_c4.rb #!/usr/koeki/bin/ruby while band = gets if /(\d)\1/e=~ band # print band if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band printf("バンド名: %s\s【%s】 \n%s年に%s「%s」をリリース。\n\n", $1,$2,$3,$4,$5) end end end 5.answer_c5.rb #!/usr/koeki/bin/ruby while band = gets if /\bLove/e=~ band # print band if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band printf("バンド名: %s\s【%s】 \n%s年に%s「%s」をリリース。\n\n", $1,$2,$3,$4,$5) end end end b)プログラムの説明 作りは大体同じなので「answer_c1.rb」のみを説明する。 3行目 while band = gets 変数 band にデータを一行ずつgetsする。 4行目 if /RIDD*LE/ =~ band 検索パターンがデータを読み込ませた変数 bandと等しい かどうか。 c)検索パターン 1.RIDD*LE 予想 : RIDDLEのデータが検索される。 2.^l 予想 : locofrank LAST ALLIANCEのデータが検索される。 3.^\w+[0-9] 予想 : バンド名に数字が含まれるバンドのデータが検索される。 4.(\d)\1 予想 : 数字が2回繰り返されている行にヒットする。 5.\bLove 予想 : Loveという単語を含む行にヒットする。 d)実行結果 1. irsv{c106179}% ./answer_c1.rb data06_b.dat [~/Ruby] バンド名: RIDDLE 【りどる】 '06年に、(アルバム)「Heart_Out」をリリース。 2. irsv{c106179}% ./answer_c2.rb data06_b.dat [~/Ruby] バンド名: LAST_ALLIANCE 【らすとあらいあんす】 '06年に(アルバム)「Me_and_Your_Borderline」をリリース。 バンド名: locofrank 【ろこふらんく】 '06年に(アルバム)「The_First_Chapter」をリリース。 3. irsv{c106179}% ./answer_c3.rb data06.dat [~/Ruby] バンド名: Northern19 【のーざん19】 '06年に(アルバム)「EVERLASTING」をリリース。 バンド名: STACK44 【すたっく44】 '07年に(アルバム)「CLOCKWORK」をリリース。 バンド名: HAWAIIAN6 【はわいあん6】 '07年に(シングル)「Days」をリリース。 4. irsv{c106179}% ./answer_c4.rb data06_b.dat [~/Ruby] バンド名: STACK44 【すたっく44】 '07年に(アルバム)「CLOCKWORK」をリリース。 バンド名: Hi-STANDARD 【はいすたんだーど】 '00年に(シングル)「Love_is_a_Battlefield」をリリース。 5. irsv{c106179}% ./answer_c5.rb data06_b.dat [~/Ruby] バンド名: Hi-STANDARD 【はいすたんだーど】 '00年に(シングル)「Love_is_a_Battlefield」をリリース。 バンド名: OVER_ARM_THROW 【おーばーあーむすろー】 '06年に(マキシシングル)「Love_us,Love_our_tales」をリリース。 e)結果の考察 1.予想通りになった。英語の綴りが曖昧な時に使うと良いと思う。 2.文字コードの後に「i」を指定することによって、大文字小文字の区別がなく なりバンド名が"L"か"l"で始まるバンドがヒットした。 3.予想通りになった。^を付けたことで、CDの発売年にはヒットせず、先頭 = バ ンド名に数字が入っているものにだけにヒットした。 4.バンド名とCDの発売年で同じ数字が繰り返されているところにヒットした。 5.予想通りになった。後で試してみたところ、大文字小文字の区別なくヒットした。 f)利用した正規表現 1.RIDD*LE Lの前のDが出現してもしなくてもよいが、出現回数は何回でもよい。 2.^l バンド名がlから始まるものにヒットする。「i」を指定したた め、大文字小文字を区別しない。 3.^\w+[0-9] \wは1文字以上の文字列を意味する。+は直前の文字が1個以上 ある場合にマッチする。よって、バンド名に数字が含まれるも のがヒットする。 4.(\d)\1 \dは数字が含まれているものは全て探し出すという意味である。 \1は、1番目の括弧にマッチした文字列そのものに置き換えられ、 数字が含まれる行が検索される。 5.\bLove \bは単語の区切りを意味するので、「Love」という単語が入っ た行にヒットする。 選択した問題 : D a)作成したプログラム input.rb #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " search = STDIN.gets.chomp demand = Regexp.new(search, true, "e") while band = gets if demand =~ band # print band if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band printf("バンド名: %s\s【%s】 \n%s年に、%s「%s」をリリース。\n\n", $1,$2,$3,$4,$5) end end end b)元にしたプログラム及びプログラムの説明 授業で作成したcutout.rbを元にした。 「データの切り出し」 http://roy/~madoka/2007/r1/07/07-09-cutout.html 3行目 search = STDIN.gets.chomp 与えられたデータを処理する際に、処理の方法をキーボードの入力で操作する。 5行目 demand = Regexp.new(search, true, "e") 正規表現したい文字列に(変数, オプション, 文字コード)という風にオプションをつける。 c)実行結果 irsv{c106179}% ./input.rb data06_b.dat [~/Ruby] 検索パターン : box バンド名: dustbox 【だすとぼっくす】 '06年に、(アルバム)「13_Brilliant_Leaves」をリリース。 バンド名: RUNNERS-Hi 【らんなーずはい】 '06年に、(ミニアルバム)「jack-in-the-box」をリリース。 選択した問題 : E a)作成したプログラム input_b.rb #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " search = STDIN.gets.chomp demand = Regexp.new(search, true, "e") open("data06_b.dat","r") do |file| while band = file.gets if demand =~ band # print band if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band printf("バンド名: %s\s【%s】 \n%s年に、%s「%s」をリリース。\n\n", $1,$2,$3,$4,$5) end end end end b)元にしたプログラム及びプログラムの説明 授業で作成したreaddata.rbを元にした。 「データを読み込むようにするには」 http://roy/~madoka/2007/r1/07/07-10-readdata.html 7行目 open("data06_b.dat","r") do |file| データファイルを読み込む。("ファイル名","モード")と指定している。モードのrは読み込み(Read)を意味している。 c)実行結果 irsv{c106179}% ./input.rb data06_b.dat [~/Ruby] 検索パターン : maegash?ira バンド名: maegashira 【まえがしら】 '06年に、(アルバム)「unfamiliar」をリリース。 3.感想 ファイルを指定せずにプログラム内でデータを読み込むことができるのは非常に 便利だと思った。これは、特にデータ量が多いときに役立つのではないかと思う。 授業が進むにつれてプログラムは複雑になっていくが、新しく習ったことを活用 してより良いプログラムを作ることを目標に頑張っていきたい。