5 月 30 日のレポートについて 氏名 : XXXXXXXX 学籍番号 : c106XXXX 語学選択 : XXXX語XX 1. ●Ob100101 = Ox??● Ob は2進数のことで、Oxは16進数のことである。 まず、2進数を10進数に変換する。100101という数字を10進数に変換する場合、 次のように計算する。 1*2 の 5乗 + 0*2 の4乗 + 0*2 の3乗 + 1*2 の2乗 + 0*2 の1乗 + 1*2 の0乗 1*2 の 5乗 = 32 0*2 の 4乗 = 0 0*2 の 3乗 = 0 1*2 の 2乗 = 4 0*2 の 1乗 = 0 1*2 の 0乗 = 1 出た値を全て足し、Od37 となる。ここで求めた10進数を16進数へ変換する。 16進数は、10進数の値を16で割っていき、出てきた余りの値を下の位から並べ ていくことで求められる。 37 / 16 = 2 余り 5 2 / 16 = 0 余り 2 よって Ob100101 = Ox25 となる。 ●Od1111 = Ox??● Od は10進数のことで、Ox は16進数のことである。 上記と同様に 10進数の値を 16 で割っていく。 1111 / 16 = 63 余り 3 63 / 16 = 3 余り 15 3 / 16 = 0 余り 3 余りを並べ替える。このとき、 15 は16進数表示では F となるため、 Od1111 = Ox3F3 となる。 参考文献 : http://www.asahi-net.or.jp/~AX2S-KMTN/ref/bdh.html 2. A.a ●作成したプログラム● #!/usr/koeki/bin/ruby while data06 = gets ☆1 if /a.a/i =~ data06 ☆2 print data06 end end ●プログラムの説明● ☆1→→ data06.datのデータファイルから取り出す。 ☆2→→ "a"の後ろに何でもいいので1文字が来て、その後再び"a"がくるものを検索させる。 "i"で入力したローマ字の大文字小文字を問わないで検索させる。 ●結果● irsv{c106052}% ./answer1.rb data06.dat [~/Ruby] アメリカ カナダ国 kanada オタワ 英語 アメリカ バハマ国 bahama ナッソー 英語 オセアニア パラオ共和国 parao コロール パラオ語 ●考察● 予想通りに結果が出た。データ量が多いと有効な手段だと思う。 b. ●作成したプログラム● #!/usr/koeki/bin/ruby while data06 = gets ☆1 if /a[nh]a/i =~ data06 ☆2 print data06 end end ●プログラムの説明● ☆1→→ data06.datのデータファイルから取り出す。 ☆2→→ "aha"か"ana"を含むデータを検索させる。 ●結果● irsv{c106052}% ./answer2.rb data06.dat [~/Ruby] アメリカ カナダ国 kanada オタワ 英語 アメリカ バハマ国 bahama ナッソー 英語 ●考察● 予想通りの結果が出た。この検索方法なら、どちらの文字かわからない時に有 効であり、絞り込むことに適している。 c. ●作成したプログラム● #!/usr/koeki/bin/ruby while data06 = gets ☆1 if /^[ァ-ウ]/e =~ data06 ☆2 print data06 end end ●プログラムの説明● ☆1→→ data06.datのデータファイルから取り出す。 ☆2→→ 頭文字に"ア〜ウ"を含むデータを検索する。 ●結果● irsv{c106052}% ./answer3.rb data06.dat [~/Ruby] アジア 日本国 nippon 東京 日本語 アジア モンゴル国 monngoru ウランバートル モンゴル語 アジア インド indo ニューデリー ヒンディー語 アジア フィリピン共和国 firipin マニラ ビリビーノ語 アジア タイ王国 tai バンコク バーツ語 アジア バングラディッシュ banguradesyu ダッカ ベンガル語 アジア イスラエル国 isuraeru エルサレム ヘブライアラビア語 アフリカ エチオピア etiopia アジスアベベ アムハラ語 アフリカ コンゴ共和国 kongo ブラザビル フランス語 アフリカ マリ共和国 mari バマコ バンバラ語 アフリカ ギニア共和国 ginia コナクリ フランス語 アフリカ セネガル共和国 senegaru ダカール フランス語 アフリカ モロッコ王国 morokko ラバト アラビア語 アフリカ エリトリア eritoria アスマラ ティグリニア語 アメリカ カナダ国 kanada オタワ 英語 アメリカ アメリカ合衆国 amerika ワシントン 英語 アメリカ バハマ国 bahama ナッソー 英語 アメリカ エクアドル共和国 ekuadoru キト スペイン語 アメリカ チリ共和国 tiri サンチアゴ スペイン語 アメリカ ボリビア共和国 boribia ラパス スペイン語 アメリカ アルゼンチン共和国 aruzentin ブエノスアイレス スペイン語 ●考察● 頭文字を入れることで大陸を絞り込むことは出来るが多くのデータが出てき てしまう。 d. ●作成したプログラム● #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " ☆1 kensaku = STDIN.gets.chomp ☆2 kuni = Regexp.new(kensaku, true, "e") ☆3 while data06 = gets ☆4 if kuni =~data06 print data06 end end ●プログラムの説明● ☆1→→ 始めに問い掛けるプログラムを入れておく。 ☆2→→ "chomp" は、文字列を切り取る method である。 STDIN はデータの処理の方法をキーボードからの入力で操作させる。 kensaku は探す文字列をしまう変数。 ☆3→→ kuni はオプションと文字コードを指定した検索パターンにしまう 変数。 true は大文字小文字を区別しない。 "e" は漢字コードの指定。 ☆4→→ data06.datのデータファイルから取り出す。 ●結果● irsv{c106052}% ./answer4.rb data06.dat [~/Ruby] 検索パターン : go アジア モンゴル国 monngoru ウランバートル モンゴル語 アフリカ コンゴ共和国 kongo ブラザビル フランス語 irsv{c106052}% ./answer4.rb data06.dat [~/Ruby] 検索パターン : (\S)\1 アジア 日本国 nippon 東京 日本語 アジア モンゴル国 monngoru ウランバートル モンゴル語 アフリカ エチオピア etiopia アジスアベベ アムハラ語 アフリカ モロッコ王国 morokko ラバト アラビア語 ●考察● この方法が一番検索らしいと思った。同じ文字を繰り返す検索も出来た。 B. a. ●作成したプログラム● #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " ☆1 kensaku = STDIN.gets.chomp ☆2 kuni = Regexp.new(kensaku, true, "e") ☆3 while data06 = gets ☆4 if kuni =~ data06 # print data06 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ data06 ☆5 printf("%s大陸\n", $1) ☆6 end end end ●プログラムの説明● ☆1→→ 始めに問い掛けるプログラムを入れておく。 ☆2→→ "chomp" は、文字列を切り取る method である。 STDIN はデータの処理の方法をキーボードからの入力で操作させる。 kensaku は探す文字列をしまう変数。 ☆3→→ kuni はオプションと文字コードを指定した検索パターンにしまう 変数。 true は大文字小文字を区別しない。 "e" は漢字コードの指定。 ☆4→→ data06.datのデータファイルから取り出す。 ☆5→→ "\S+"が文字列を表し、"\s+"が空白文字を表す。 これを組み合わせることで、遠い位置にあるデータの条件とを組み合 わせての検索が可能となる。 ☆6→→ "$"で切り出すデータを決める。ここで"$1"にしておくと結果のように、 データの最初にある大陸名だけが表示される。 ●結果● irsv{c106052}% ./answer_b1.rb data06.dat[~/Ruby] 検索パターン : カナダ アメリカ大陸 ●考察● 欲しい情報だけが表示されるためわかりやすい。"%s" の後ろの文字を変える ことによって単位なども付けることが出来ることがわかった。 b. ●作成したプログラム● #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " ☆1 kensaku = STDIN.gets.chomp ☆2 kuni = Regexp.new(kensaku, true, "e") ☆3 while data06 = gets ☆4 if kuni =~ data06 # print data06 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ data06 ☆5 printf("%s\n", $2) ☆6 end end end ●プログラムの説明● ☆1→→ 始めに問い掛けるプログラムを入れておく。 ☆2→→ "chomp" は、文字列を切り取る method である。 STDIN はデータの処理の方法をキーボードからの入力で操作させる。 kensaku は探す文字列をしまう変数。 ☆3→→ kuni はオプションと文字コードを指定した検索パターンにしまう 変数。 true は大文字小文字を区別しない。 "e" は漢字コードの指定。 ☆4→→ data06.datのデータファイルから取り出す。 ☆5→→ "\S+"が文字列を表し、"\s+"が空白文字を表す。 これを組み合わせることで、遠い位置にあるデータの条件とを組み合 わせての検索が可能となる。 ☆6→→ "$"で切り出すデータを決める。ここで"$2"にしておくと結果のように、 データの2番目にある国名だけが表示される。 ●結果● irsv{c106052}% ./answer_b2.rb data06.dat [~/Ruby] 検索パターン : アメリカ カナダ国 アメリカ合衆国 バハマ国 エクアドル共和国 チリ共和国 ボリビア共和国 アルゼンチン共和国 ●考察● 予想通り "$" の後ろの数字を変えると表示されるデータの種類が変わった。 C. a. ●作成したプログラム● #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " ☆1 kensaku = STDIN.gets.chomp ☆2 kuni = Regexp.new(kensaku, true, "e") ☆3 a = Array.new ☆4 n = 0 ☆5 while data06 = gets ☆6 if kuni =~data06 # print data06 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ data06 ☆7 a[0] = $1 ☆8 a[1] = $2 a[2] = $3 a[3] = $4 a[4] = $5 end printf("%s大陸\n", n+1) printf(" %s 大陸があり %s という国がある。ローマ字では %s と書き、首 都は %s で言語は %s である \n", a[0],a[1],a[2],a[3],a[4],a[5]) ☆9 n +=1 end end ●プログラムの説明● ☆1→→ 始めに問い掛けるプログラムを入れておく。 ☆2→→ "chomp" は、文字列を切り取る method である。 STDIN はデータの処理の方法をキーボードからの入力で操作させる。 kensaku は探す文字列をしまう変数。 ☆3→→ kuni はオプションと文字コードを指定した検索パターンにしまう 変数。 true は大文字小文字を区別しない。 "e" は漢字コードの指定。 ☆4→→ 配列を与える method ☆5→→ 大陸を与えるラベル ☆6→→ data06.datのデータファイルから取り出す。 ☆7→→ "\S+"が文字列を表し、"\s+"が空白文字を表す。 これを組み合わせることで、遠い位置にあるデータの条件とを組み合 わせての検索が可能となる。 ☆8→→ ( )で優先された文字列は $1、$2、と順番に名前がつけられ、配列の 各成分として代入される。 ☆9→→ 順番に配列を入れ、表示させる文字列。 ●結果● irsv{c106052}% ./answer_c1.rb data06.dat [~/Ruby] 検索パターン : フランス 1大陸 アフリカ 大陸があり コンゴ共和国 という国がある。ローマ字では kongo と 書き、首都は ブラザビル で言語は フランス語 である 2大陸 アフリカ 大陸があり ギニア共和国 という国がある。ローマ字では ginia と 書き、首都は コナクリ で言語は フランス語 である 3大陸 アフリカ 大陸があり セネガル共和国 という国がある。ローマ字では senegaru と書き、首都は ダカール で言語は フランス語 である 4大陸 ヨーロッパ 大陸があり フランス共和国 という国がある。ローマ字では furansu と書き、首都は パリ で言語は フランス語 である ●考察● 前に勉強した配列を組み込んでみたら動いてくれた。 b. ●作成したプログラム● #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " ☆1 kensaku = STDIN.gets.chomp ☆2 kuni = Regexp.new(kensaku, true, "e") ☆3 while data06 = gets ☆4 if kuni =~data06 # print data06 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ data06 ☆5 end printf(" %s 大陸があり %s という国がある。ローマ字では %s と書き、首 都は %s で言語は %s である \n", $1,$2,$3,$4,$5) ☆6 end end ●プログラムの説明● ☆1→→ 始めに問い掛けるプログラムを入れておく。 ☆2→→ "chomp" は、文字列を切り取る method である。 STDIN はデータの処理の方法をキーボードからの入力で操作させる。 kensaku は探す文字列をしまう変数。 ☆3→→ kuni はオプションと文字コードを指定した検索パターンにしまう 変数。 true は大文字小文字を区別しない。 "e" は漢字コードの指定。 ☆4→→ data06.datのデータファイルから取り出す。 ☆5→→ "\S+"が文字列を表し、"\s+"が空白文字を表す。 これを組み合わせることで、遠い位置にあるデータの条件とを組み合 わせての検索が可能となる。 ☆6→→ ( )で優先された文字列は $1、$2、と順番に名前がつけられ、配列の 各成分として代入される。 順番に配列を入れ、表示させる文字列。 ●結果● irsv{c106052}% ./answer_c2.rb data06.dat [~/Ruby] 検索パターン : フランス アフリカ 大陸があり コンゴ共和国 という国がある。ローマ字では kongo と 書き、首都は ブラザビル で言語は フランス語 である アフリカ 大陸があり ギニア共和国 という国がある。ローマ字では ginia と 書き、首都は コナクリ で言語は フランス語 である アフリカ 大陸があり セネガル共和国 という国がある。ローマ字では senegaru と書き、首都は ダカール で言語は フランス語 である ヨーロッパ 大陸があり フランス共和国 という国がある。ローマ字では furansu と書き、首都は パリ で言語は フランス語 である ●考察● プログラムの内容を answer_c1.rb とは変えたので上手くいくか分からなかっ たが、同じ文字を入力いた結果、同じ結果が出たので成功したと思われる。 D. ●作成したプログラム● #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " ☆1 pattern = STDIN.gets.chomp ☆2 request = Regexp.new(pattern, true, "e") ☆3 while data06 = gets ☆4 if request =~data06 # print data06 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ data06 ☆5 printf(" %s 大陸があり %s という国がある。\n", $1,$2) ☆6 end end end ●プログラムの説明● ☆1→→ 始めに問い掛けるプログラムを入れておく。 ☆2→→ "chomp" は、文字列を切り取る method である。 STDIN はデータの処理の方法をキーボードからの入力で操作させる。 kensaku は探す文字列をしまう変数。 ☆3→→ kuni はオプションと文字コードを指定した検索パターンにしまう 変数。 true は大文字小文字を区別しない。 "e" は漢字コードの指定。 ☆4→→ data06.datのデータファイルから取り出す。 ☆5→→ "\S+"が文字列を表し、"\s+"が空白文字を表す。 これを組み合わせることで、遠い位置にあるデータの条件とを組み合 わせての検索が可能となる。 ☆6→→ ( )で優先された文字列は $1、$2、と順番に名前がつけられ、配列の 各成分として代入される。 順番に配列を入れ、表示させる文字列。 ここでは表示するデータを $1 と $2 だけに限定した。 ●結果● irsv{c106052}% ./input.rb data06.dat [~/Ruby] 検索パターン : a.a アメリカ 大陸があり カナダ国 という国がある。 アメリカ 大陸があり バハマ国 という国がある。 オセアニア 大陸があり パラオ共和国 という国がある。 irsv{c106052}% ./input.rb data06.dat [~/Ruby] 検索パターン : アメリカ アメリカ 大陸があり カナダ国 という国がある。 アメリカ 大陸があり アメリカ合衆国 という国がある。 アメリカ 大陸があり バハマ国 という国がある。 アメリカ 大陸があり エクアドル共和国 という国がある。 アメリカ 大陸があり チリ共和国 という国がある。 アメリカ 大陸があり ボリビア共和国 という国がある。 アメリカ 大陸があり アルゼンチン共和国 という国がある。 ●考察● 文字列を限定することで、欲しいデータだけを取り出すことが出来る。 "$" の数値を変更することによって出てくるデータを変えることが可能である。 この時、出すデータに合わせて文章も変える必要がある。 E. ●作成したプログラム● #!/usr/koeki/bin/ruby STDERR.print "検索パターン : " ☆1 kensaku = STDIN.gets.chomp ☆2 kuni = Regexp.new(kensaku, true, "e") ☆3 open("data06.dat","r") do |sekai| ☆4 while data06 = sekai.gets ☆5 if kuni =~data06 # print data06 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~data06 ☆6 printf("%s\n", $2) ☆7 end end end end ●プログラムの説明● ☆1→→ 始めに問い掛けるプログラムを入れておく。 ☆2→→ "chomp" は、文字列を切り取る method である。 STDIN はデータの処理の方法をキーボードからの入力で操作させる。 kensaku は探す文字列をしまう変数。 ☆3→→ kuni はオプションと文字コードを指定した検索パターンにしまう 変数。 true は大文字小文字を区別しない。 "e" は漢字コードの指定。 ☆4→→ 変数を"sekai"にした。 open("ファイル名","モード") do |変数| というつくりになっている。 ここで読みこむファイルを指定するため、プログラム実行時にデータ ファイル名を入れなくて済む。 "r" の 「r」は read の 「r」である。 ☆5→→ data06.datのデータファイルから取り出す。 ☆6→→ "\S+"が文字列を表し、"\s+"が空白文字を表す。 これを組み合わせることで、遠い位置にあるデータの条件とを組み合 わせての検索が可能となる。 ☆7→→ 表示するデータの列の指定 ●結果● irsv{c106052}% ./input_b.rb [~/Ruby] 検索パターン : フランス語 コンゴ共和国 ギニア共和国 セネガル共和国 フランス共和国 ●考察● "$" のあとの数字を変えると検索する列が変わる。私のデータは2列目を表示 した方が分かりやすいためそのようにした。 ● 2 の参考文献● 西村まどか先生の 5月30日 のページ 「http://roy/~madoka/2007/r1/07/」 3.感想 今回は本当に難しかったです。でも、自分なりにプログラムを変えることが出来た し、全てに挑戦出来たので嬉しかったです。ひとつのプログラムでいろいろな検索 が出来るので自分でも楽しめました。今まで以上にプログラムの説明が出来たので はないかと思います。教えてくれた TA の春香先輩に感謝してます!! 次回の授業はもっと食いついて行きたいです。