第 9 回 Ruby であそぼ / 広告ページの作成 レポート課題 氏名:樋口千穂 学籍番号:c1111240 語学クラス:中国語3 コース:政策マネジメント 1.筆記問題 A. a. 0x32 + 0x24 = 0x?? そのまま数字を足せばよいので 32 + 24 = 56 となり、答えは 0x56 b. 0x15 + 0x2d = 0x?? 16進数を10進数に変換して考える。 d は 10進数で表すと、13 になる。 一の位から順に16の倍数を掛けていく。 0x15 (1*16^1) + (5*16^0) = 0d21 0x2d (2*16^1) + (13*16^0) = 0d45 0d21 + 0d45 = 0d66 16進数に直す。 0d66 を 16 で割っていき、答えが 0 になるまで繰り返す。 そして出てきた余りを下から順に読めばよい。 66 / 16 = 4 余り 2 4 / 16 = 0 余り 4 よって答えは 0x42 c. 0xed - 0x12 = 0x?? 16進数を10進数に変換して考える。 e は 10進数で表すと 14 、 d は 10進数で表すと 13 になる。 やり方は b と同様。 0xed (14*16^1) + (13*16^0) = 0d237 0x12 (1*16^1) + (2*16^0) = 0d18 0d237 - 0d18 = 0d219 219 / 16 = 13 余り 11 13 / 16 = 0 余り 13 11 は16進数で表すと b 、13 は16進数で表すと d である。 よって答えは 0xdb B. 1 から 31 までの整数で、7 で割るとあまりが 2 であるような数は 7の倍数に 2 を足した数であるので、 9、16、23、30 が挙げられる。 2.プログラム問題 実用部門にエントリーします。 公開先 : http://roy/~c111124/adv/ ○設定○ 国の首都を誰でも簡単に検索できるプログラムを作成した。 ○作成したデータ○ # 国名 # 首都名 # 地域名 # 番号 アイスランド レイキャヴィーク ヨーロッパ 6 アイルランド ダブリン ヨーロッパ 6 アゼルバイジャン バクー ヨーロッパ 6 アフガニスタン カブール 中東 5 アメリカ合衆国 ワシントンD.C. 北米 1 アラブ首長国連邦 アブダビ 中東 5 アルジェリア アルジェ アフリカ 7 アルゼンチン ブエノスアイレス 中南米 2 アルバニア ティラナ ヨーロッパ 6 アルメニア エレバン ヨーロッパ 6 アンティグア・バーブーダ セントジョンズ 中南米 2 アンゴラ ルアンダ アフリカ 7 アンドラ アンドララベリャ ヨーロッパ 6 イエメン サヌア 中東 5 イギリス ロンドン ヨーロッパ 6 イスラエル エルサレム 中東 5 イタリア ローマ ヨーロッパ 6 イラク バグダッド 中東 5 イラン テヘラン 中東 5 インド ニューデリー アジア 3 インドネシア ジャカルタ アジア 3 ウガンダ カンパラ アフリカ 7 ウクライナ キエフ ヨーロッパ 6 ウズベキスタン タシケント ヨーロッパ 6 ウルグアイ モンテビデオ 中南米 2 エクアドル キト 中南米 2 エジプト カイロ アフリカ 7 エストニア タリン ヨーロッパ 6 エチオピア アディスアベバ アフリカ 7 エリトリア アスマラ アフリカ 7 エルサルバドル サンサルバドル 中南米 2 オーストラリア キャンベラ 大洋州 4 オーストリア ウィーン ヨーロッパ 6 オマーン マスカット 中東 5 オランダ アムステルダム ヨーロッパ 6 ガイアナ ジョージタウン 中南米 2 ガーナ アクラ アフリカ 7 カーボベルデ プライア アフリカ 7 カザフスタン アスタナ ヨーロッパ 6 カタール ドーハ 中東 5 カナダ オタワ 北米 1 ガボン リーブルヴィル アフリカ 7 カメルーン ヤウンデ アフリカ 7 ガンビア バンジュール アフリカ 7 カンボジア プノンペン アジア 3 ギニア コナクリ アフリカ 7 ギニアビサウ ビサウ アフリカ 7 キプロス ニコシア ヨーロッパ 6 キューバ ハバナ 中南米 2 ギリシャ アテネ ヨーロッパ 6 キリバス タワラ 大洋州 4 キルギス ビシュケク ヨーロッパ 6 グアテマラ グアテマラシティ 中南米 2 クウェート クウェート 中東 5 グルジア トビリシ ヨーロッパ 6 グレナダ セントジョージズ 中南米 2 クロアチア ザグレブ ヨーロッパ 6 ケニア ナイロビ アフリカ 7 コートジボワール ヤムスクロ アフリカ 7 コスタリカ サンホセ 中南米 2 コモロ モロニ アフリカ 7 コロンビア ボゴタ 中南米 2 コンゴ共和国 ブラザヴィル アフリカ 7 コンゴ民主共和国 キンシャサ アフリカ 7 サウジアラビア リヤド 中東 5 サモア アピア 大洋州 4 サントメ・プリンシペ サントメ アフリカ 7 ザンビア ルサカ アフリカ 7 サンマリノ サンマリノ ヨーロッパ 6 シエラレオネ フリータウン アフリカ 7 ジブチ ジブチ アフリカ 7 ジャマイカ キングストン 中南米 2 シリア ダマスカス 中東 5 シンガポール シンガポール アジア 3 ジンバブエ ハラレ アフリカ 7 スイス ベルン ヨーロッパ 6 スウェーデン ストックホルム ヨーロッパ 6 スーダン ハルツーム アフリカ 7 スペイン マドリード ヨーロッパ 6 スリナム パラマリボ 中南米 2 スリランカ スリジャヤワルダナプラコッテ アジア 3 スロバキア ブラチスラバ ヨーロッパ 6 スロベニア リュブリャナ ヨーロッパ 6 スワジランド 厶ババーネ アフリカ 7 赤道ギニア マラボ アフリカ 7 セーシェル ビクトリア アフリカ 7 セネガル ダカール アフリカ 7 セルビア ベオグラード ヨーロッパ 6 セントクリストファー・ネイビス バセテール 中南米 2 セントビンセント・グレナディーン キングスタウン 中南米 2 セントルシア カストリーズ 中南米 2 ソマリア モガディシオ アフリカ 7 ソロモン諸島 ホニアラ 大洋州 4 タイ バンコク アジア 3 大韓民国 ソウル アジア 3 タジキスタン ドゥシャンベ ヨーロッパ 6 タンザニア ドドマ アフリカ 7 チェコ プラハ ヨーロッパ 6 チャド ヌジャメナ アフリカ 7 中央アフリカ共和国 バンギ アフリカ 7 中華人民共和国 北京 アジア 3 チュニジア チュニス アフリカ 7 朝鮮民主主義人民共和国 平壌 アジア 3 チリ サンティアゴ 中南米 2 ツバル フナフティ 大洋州 4 デンマーク コペンハーゲン ヨーロッパ 6 ドイツ ベルリン ヨーロッパ 6 トーゴ ロメ アフリカ 7 ドミニカ共和国 サントドミンゴ 中南米 2 ドミニカ国 ロゾー 中南米 2 トリニダード・トバゴ ポートオブスペイン 中南米 2 トルクメニスタン アシガバート ヨーロッパ 6 トルコ アンカラ 中東 5 トンガ ヌクアロファ 大洋州 4 ナイジェリア アブジャ アフリカ 7 ナウル ヤレン 大洋州 4 ナミビア ウィントフック アフリカ 7 ニカラグア マナグア 中南米 2 ニジェール ニアメ アフリカ 7 日本 東京 アジア 3 ニュージーランド ウェリントン 大洋州 4 ネパール カトマンズ アジア 3 ノルウェー オスロ ヨーロッパ 6 ハイチ ポルトープランス 中南米 2 パキスタン イスラマバード アジア 3 バチカン市国 バチカン ヨーロッパ 6 パナマ パナマシティ 中南米 2 バヌアツ ポートビラ 大洋州 4 バハマ ナッソー 中南米 2 パプアニューギニア ポートモレスビー 大洋州 4 パラオ マルキョク 大洋州 4 パラグアイ アスンシオン 中南米 2 バルバドス ブリッジタウン 中南米 2 バーレーン マナーマ 中東 5 ハンガリー ブダペスト ヨーロッパ 6 バングラデシュ ダッカ アジア 3 東ティモール ディリ アジア 3 フィジー スバ 大洋州 4 フィリピン マニラ アジア 3 フィンランド ヘルシンキ ヨーロッパ 6 ブータン ティンプー アジア 3 ブラジル ブラジリア 中南米 2 フランス パリ ヨーロッパ 6 ブルガリア ソフィア ヨーロッパ 6 ブルキナファソ ワガドゥグー アフリカ 7 ブルネイ バンダルスリブガワン アジア 3 ブルンジ ブジュンブラ アフリカ 7 ベトナム ハノイ アジア 3 ベナン ポルトノボ アフリカ 7 ベネズエラ カラカス 中南米 2 ベラルーシ ミンスク ヨーロッパ 6 ベリーズ ベルモパン 中南米 2 ペルー リマ 中南米 2 ベルギー ブリュッセル ヨーロッパ 6 ポーランド ワルシャワ ヨーロッパ 6 ボスニア・ヘルツェゴビナ サラエボ ヨーロッパ 6 ボツワナ ハボローネ アフリカ 7 ボリビア スクレ 中南米 2 ポルトガル リスボン ヨーロッパ 6 ホンジュラス テグシガルパ 中南米 2 マーシャル諸島 マジュロ 大洋州 4 マケドニア スコピエ ヨーロッパ 6 マダガスカル アンタナナリボ アフリカ 7 マラウイ リロングウェ アフリカ 7 マリ バマコ アフリカ 7 マルタ ヴァレッタ ヨーロッパ 6 マレーシア クアラルンプール アジア 3 ミクロネシア連邦 パリキール 大洋州 4 南アフリカ共和国 ケープタウン アフリカ 7 南スーダン ジュバ アフリカ 7 ミャンマー ネピドー アジア 3 メキシコ メキシコシティ 中南米 2 モーリシャス ポートルイス アフリカ 7 モーリタニア ヌアクショット アフリカ 7 モザンビーク マプト アフリカ 7 モナコ モナコ ヨーロッパ 6 モルドバ キシナウ ヨーロッパ 6 モルディブ マレ アジア 3 モロッコ ラバト アフリカ 7 モンゴル ウランバートル アジア 3 モンテネグロ ツェティニエ ヨーロッパ 6 ヨルダン アンマン 中東 5 ラオス ヴィエンチャン アジア 3 ラトビア リガ ヨーロッパ 6 リトアニア ビリニュス ヨーロッパ 6 リヒテンシュタイン ファドゥーツ ヨーロッパ 6 リビア トリポリ アフリカ 7 リベリア モンロビア アフリカ 7 ルーマニア ブカレスト ヨーロッパ 6 ルクセンブルク ルクセンブルク ヨーロッパ 6 ルワンダ キガリ アフリカ 7 レソト マセル アフリカ 7 レバノン ベイルート 中東 5 ロシア モスクワ ヨーロッパ 6 ○作成したプログラム - toshi.rb - ○ #!/usr/koeki/bin/ruby kuni = Array.new # 国名 syuto = Array.new # 首都名 tiiki = Array.new # 地域名 i = 0 # 配列番号 print("国の首都名を検索します!\n") print("地域名を選択して下さい\n") print("1:北米 2:中南米 3:アジア 4:大洋州 5:中東 6:ヨーロッパ 7:アフリカ\n") STDERR.print("番号:") pattern = STDIN.gets.chomp # 与えられた 番号 を1行ずつ読み込む。 request = Regexp.new(pattern, true) # 前の行で読み込んだものを正規表現に変える。 # true…大文字・小文字を区別しない。 open("toshi.dat","r") do |to| # toshi.dat を読み取り、to という名前に置き換える while toshi = to.gets # 繰り返し、to の中身がなくなったら終わる。 if request =~ toshi if /(\S+)\s+(\S+)\s+(\S+)/ =~ toshi kuni[i] = $1 syuto[i] = $2 tiiki[i] = $3 printf("%d : %s\n",i,kuni[i]) end end i += 1 # 次のものを読み込むために +1 をする end end print(" ------------------------ \n") STDERR.print("国の番号を選択して入力して下さい\n") w = gets.chomp.to_i # ユーザーが打ち込んだものを整数に変換 # して w に入れる printf("国名 : %s \n",kuni[w]) print("\n") printf("首都名 : %s \n",syuto[w]) print("\n") printf("地域名 : %s \n",tiiki[w]) ○もとにしたプログラム○ regexp_stdin.rb ○実行結果○ <パターン1> pan{c111124}% ./toshi.rb [~/public_html/adv] 国の首都名を検索します! 地域名を選択して下さい 1:北米 2:中南米 3:アジア 4:大洋州 5:中東 6:ヨーロッパ 7:アフリカ 番号:3 20 : インド 21 : インドネシア 45 : カンボジア 74 : シンガポール 81 : スリランカ 94 : タイ 95 : 大韓民国 101 : 中華人民共和国 103 : 朝鮮民主主義人民共和国 120 : 日本 122 : ネパール 125 : パキスタン 136 : バングラデシュ 137 : 東ティモール 139 : フィリピン 141 : ブータン 146 : ブルネイ 148 : ベトナム 167 : マレーシア 171 : ミャンマー 178 : モルディブ 180 : モンゴル 183 : ラオス ------------------------ 国の番号を選択して入力して下さい 74 国名 : シンガポール 首都名 : シンガポール 地域名 : アジア <パターン2> pan{c111124}% ./toshi.rb [~/public_html/adv] 国の首都名を検索します! 地域名を選択して下さい 1:北米 2:中南米 3:アジア 4:大洋州 5:中東 6:ヨーロッパ 7:アフリカ 番号:5 4 : アフガニスタン 6 : アラブ首長国連邦 14 : イエメン 16 : イスラエル 18 : イラク 19 : イラン 34 : オマーン 40 : カタール 54 : クウェート 65 : サウジアラビア 73 : シリア 113 : トルコ 134 : バーレーン 182 : ヨルダン 193 : レバノン ------------------------ 国の番号を選択して入力して下さい 6 国名 : アラブ首長国連邦 首都名 : アブダビ 地域名 : 中東 <パターン3> pan{c111124}% ./toshi.rb [~/public_html/adv] 国の首都名を検索します! 地域名を選択して下さい 1:北米 2:中南米 3:アジア 4:大洋州 5:中東 6:ヨーロッパ 7:アフリカ 番号:6 1 : アイスランド 2 : アイルランド 3 : アゼルバイジャン 9 : アルバニア 10 : アルメニア 13 : アンドラ 15 : イギリス 17 : イタリア 23 : ウクライナ 24 : ウズベキスタン 28 : エストニア 33 : オーストリア 35 : オランダ 39 : カザフスタン 48 : キプロス 50 : ギリシャ 52 : キルギス 55 : グルジア 57 : クロアチア 69 : サンマリノ 76 : スイス 77 : スウェーデン 79 : スペイン 82 : スロバキア 83 : スロベニア 88 : セルビア 96 : タジキスタン 98 : チェコ 106 : デンマーク 107 : ドイツ 112 : トルクメニスタン 123 : ノルウェー 126 : バチカン市国 135 : ハンガリー 140 : フィンランド 143 : フランス 144 : ブルガリア 151 : ベラルーシ 154 : ベルギー 155 : ポーランド 156 : ボスニア・ヘルツェゴビナ 159 : ポルトガル 162 : マケドニア 166 : マルタ 176 : モナコ 177 : モルドバ 181 : モンテネグロ 184 : ラトビア 185 : リトアニア 186 : リヒテンシュタイン 189 : ルーマニア 190 : ルクセンブルク 194 : ロシア ------------------------ 国の番号を選択して入力して下さい 194 国名 : ロシア 首都名 : モスクワ 地域名 : ヨーロッパ ○考察○ <パターン1>では 3 のアジアを選択するとアジアの国一覧が表示された。74 のシ ンガポールを選択すると作成したデータ通りに首都名のシンガポールを表示し正 しく検索することができたので、このプログラムは正常であるといえる。 <パターン2>では 5 の中東を選択すると中東の国一覧が表示された。6 のアラブ 首長国連邦を選択すると作成したデータ通りに首都名のアブダビを表示し正 しく検索することができたので、このプログラムは正常であるといえる。 <パターン3>では 6 のヨーロッパを選択するとヨーロッパの国一覧が表示された。 194 のロシアを選択すると作成したデータ通りに首都名のモスクアを表示し正 しく検索することができたので、このプログラムは正常であるといえる。 何回もプログラムの実行に失敗したが、原因としては request = Regexp.new(pattern, true) の true の後に日本語で検索する場合に使用する "e" を入れていたことが挙げられる。今回自分が作成したプログラムは検索する 場合に数字しか入力しなくてよいものだった。元にしたプログラムに縛られすぎ て余計な情報まで入れてしまった。 3.感想 今回のレポートは最高傑作を作成するということで、とにかくデータ量を増やし 世界のどの国の首都でも検索できるプログラムにしました。また、 kterm での キーボード操作を簡単にし、誰でも簡単に使えるプログラムにするにはどうしたら よいかという点で一番苦労しました。ほぼ自分の思い通りにプログラムを作成で きたのでよかったです。 ページを公開するということで見やすさを考えてシンプルなページを作成しまし た。文字の色を変化させたりリンクをはったりという作業のやり方があやふやだっ たため、復習しながら作成できたのでよかったです。 次回の課題も一所懸命取り組みたいと思います。 4.参考文献 webサイト:http://www1.coralnet.or.jp/ravel/world.html 作者不明、世界の国と首都 webサイト:http://www.mofa.go.jp/mofaj/world/ichiran/index.html 外務省、世界の国々 webサイト:http://roy/~madoka/2012/r1/07/r1_07_12_theme_09_candidate.html 西村まどか先生、基礎プログラミング I 第 7 回 (正規表現と Ruby 言語でのプ ログラミング) 「候補駅を選べるようにするには」 webサイト:http://roy/~madoka/2012/r1/08/r1_08_12_appendix_02_safecolor.html 西村まどか先生、基礎プログラミング I 第 8 回 (電子チケットを作ろう) 「CSS の色見本」 5.共同学習者 : 佐藤美咲