第7回 基礎プログラミング II レポート課題 氏名: 金田麻美 学籍番号: C1090466 語学クラス: 英語3 コース(系): 政策マネジメント 添付したファイルは仕様書と最高傑作のプログラム、データファイルの3つ。 1-A.a 仕様書 資源検索プログラム ====================== 資源検索プログラム は、全22種の代表的な化石燃料・鉱物資源に 関するデータを検索することができるプログラムです。 検索は資源名を入力してください。 作成の経緯 ============= 改良前のプログラムでは Hash を使って、資源のデータをずらずらと 表示させるだけでしたが、欲しい情報だけをピンポイントで表示できたらと思い、 検索プログラムに改良しました。 また、データをひとまとめにできる Hash をつかって、検索プログラムを 作ってみたいという気持ちもあり、作成しました。 細かい点では、実行時の入力の手間を省くため、open--end文に変更しました。 Download Files =================== ダウンロードしていただきたいファイルは spec.txt この説明書 resource.rb プログラムファイル resource.dat データファイル の 3 つです。データファイルをダウンロードしないと、検索することができません。 同じディレクトリに保存して下さい。 検索方法について ====================== kterm で % chmod +x resource.rb と入力して準備をします。開始するには % ./resource.rb と入力してください。 プログラムが開始したら、検索したい資源名を日本語で入力してください。 おまけ) もとにしたプログラムとレポート ======================================= 改良前のプログラムとプログラムデータ、提出したレポートも用意しました。 よろしければご自由にお使いください。 なお、改良前のプログラムを実行する際は % chmod +x hash_ary_read.rb と入力して準備をおこない、お手数ですが % ./hash_ary_read.rb hash_ary_data.dat のように、プログラムとデータをセットにして入力してください。 Copyright 2010 ============= このプログラムは東北公益文科大学2009年度生 金田麻美 が著作権を保有しています。 このプログラムの入手・実行・改変・再配布は、いずれも無料で自由に行なうことができます。 ただしこのプログラムを取り扱うことで生じたいかなる結果に対しても著作権者は責任を負いません。 このプログラムに対する、感想・助言・要望などがありましたら、以下のメールアドレスまでお寄せいただけると嬉しいです。 c109046@e.koeki-u.ac.jp 金田麻美 1-A.b レポート 1-A.b-a 第3回目のレポートで作成した、データを Hash として読み込み、 4つの資源の、最大の産出国と生産企業、可採年数を表示した上で、 可採年数が短い順に並べ直し、さらに可採年数の平均を演算するプログラム hash_ary_read.rb を改良し、 Hash として読み込んだデータを検索できるプログラム resource.rbを、 データファイル resource.dat と合わせて作成した。 データも量を増やし、新たな要素「主な用途」を追加した。 データを Hash として読み込むため、「金」と検索すると 主な用途の中の「合金」がひっかかり意図しない検索結果になるなどの 問題点が解決した。 1-A.b-b *データファイル 原油(石油) サウジアラビア Exxon_Mobil(アメリカ) 41 燃料 天然ガス ロシア Gazprom(ロシア) 67 燃料 ウラン カナダ Cameco(カナダ) 85 核燃料 銅 チリ CODELCO(チリ) 36 電線等のインフラ 金 中国 Barrick_Gold(カナダ) 17 宝飾・通貨・電気機器 アルミニウム 中国 Rio_Tinto(英・豪) 156 合金材料・通貨 鉛 中国 Xstrata(スイス) 24 車のバッテリー等 銀 ペルー BHP_Billiton(英・豪) 14 宝飾・通貨・歯科医療 コバルト コンゴ Sherritt_International(カナダ) 182 医療・磁石・合金・電池 クロム 南アフリカ Samancor_Chrome(南アフリカ) 123 ステンレスの材料 白金(プラチナ) 南アフリカ Anglo_Platinum(南アフリカ) 415 宝飾・自動車触媒 マンガン 南アフリカ Samancor(南アフリカ) 35 製鉄・電池 錫(スズ) 中国 ArcelorMittal(ルクセンブルグ) 26 合金材料 鉄鉱石 ブラジル Vale(ブラジル) 256 鉄鋼の原料 パラジウム ロシア Norilsk_Nickel(ロシア) 129 宝飾・自動車触媒 リチウム チリ Chemetall(ドイツ) 265 バッテリー・うつ病の治療薬 モリブデン 中国・アメリカ CODELCO(チリ) 67 半導体・液晶パネル ニオブ ブラジル CBMM(ブラジル) 171 鋼鉄原料 石炭 中国 Coal_India(インド) 155 燃料・発電 チタン オーストラリア Iluka_Resources(オーストラリア) 96 金属製品・合金材料 ニッケル ロシア Norilsk_Nickel(ロシア) 46 メッキ 亜鉛 中国 Xstrata(スイス) 23 メッキ・合金材料 ------------------------------------------------------------------ *プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語のコードを使用する指示 resource = Hash.new # Hash を resourceにしまう print("主な化石燃料・鉱物資源(原油や金など)の、最大の生産国・生産企業、\n可採年数・用途を調べることが出来ます。\n") while true # 利用者が納得行くまで検索できるように繰り返し sleep 1 # 1秒遅れさせて表示 STDERR.print "-" * 80 # Kterm の横いっぱいに点線。print文だと下の文の後に表示されてしまう。 STDERR.print"\n\n調べたい資源の名前を入力してください( q で終了):" pattern = STDIN.gets.chomp # 変数 pattern に、上の STDERR によって入力された文字をしまう if pattern == "q" # q が入力されたら print "また会う日まで…\n" break # while true から抜ける(終了) end # if の end request = Regexp.new(pattern,true,"e") # 変数 request に pattern を正規表現にして代入する。これで検索ができる。 # true は大文字小文字を区別しない、e は漢字コードを使用することを定義。 open("resource.dat","r") do |d| # open-endで()内のファイルを開き、"r"でファイルを読み込む。 # d は読み込んだデータを一時的に代入しておく変数。 while data = d.gets # data にデータファイルの配列をしまう if request =~ data # もし データの中に request(検索文字) と全く同じものがあって、 if /(\S+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\S+)/ =~ data # データが、文字列 / 空白/ 文字列 / 空白/ 数列 / 空白/ 文字列 # という構成だったら resource[$1] = [$2, $3, $4.to_i, $5] # Hash と定義するとともに構成も定義。 # keyは1要素目、valueはそれ以下。可採年数は10進数法の整数。 if request = [$1] # もし入力された文字列が資源名(Hash の1要素目)と一致したら出力。 printf("\n%s の最大の生産国は %s で、\n世界最大の生産企業は %s です。\nあと %d 年利用できるといわれています。\n%s の主な用途は %s です。\n\n", $1, $2, $3, $4, $1, $5) # Hash の中身をprint文に合わせて代入。 end # while true の end end # open の end end # while の end end # if の end end # if の end end # if の end 1-A.b-c もとにしたプログラムからの大きな変更点は、 データを一気に表示させる形式だったのを検索プログラムにしたことと、 open-end 文に変更し、実行時のコマンドラインでの入力を簡潔にしたことである。 他にも、if request = [$1] で、検索文字列が資源名だけにヒットするようにしたこと、 while-true文を使い、気が済むまで検索できるようにしたこと、 if pattern == "q" で、終了条件を設けたことなどがある。 1-A.b-d pan{c109046}% ./resource.rb [~/public_html/advertise2] 主な化石燃料・鉱物資源(原油や金など)の、最大の生産国・生産企業、 可採年数・用途を調べることが出来ます。 -------------------------------------------------------------------------------- 調べたい資源の名前を入力してください( q で終了):金 金 の最大の生産国は 中国 で、 世界最大の生産企業は Barrick_Gold(カナダ) です。 あと 17 年利用できるといわれています。 金 の主な用途は 宝飾・通貨・電気機器 です。 -------------------------------------------------------------------------------- 調べたい資源の名前を入力してください( q で終了):コバルト コバルト の最大の生産国は コンゴ で、 世界最大の生産企業は Sherritt_International(カナダ) です。 あと 182 年利用できるといわれています。 コバルト の主な用途は 医療・磁石・合金・電池 です。 -------------------------------------------------------------------------------- 調べたい資源の名前を入力してください( q で終了):鉄鉱 鉄鉱石 の最大の生産国は ブラジル で、 世界最大の生産企業は Vale(ブラジル) です。 あと 256 年利用できるといわれています。 鉄鉱石 の主な用途は 鉄鋼の原料 です。 -------------------------------------------------------------------------------- 調べたい資源の名前を入力してください( q で終了):プラチナ 白金(プラチナ) の最大の生産国は 南アフリカ で、 世界最大の生産企業は Anglo_Platinum(南アフリカ) です。 あと 415 年利用できるといわれています。 白金(プラチナ) の主な用途は 宝飾・自動車触媒 です。 -------------------------------------------------------------------------------- 調べたい資源の名前を入力してください( q で終了):石油 原油(石油) の最大の生産国は サウジアラビア で、 世界最大の生産企業は Exxon_Mobil(アメリカ) です。 あと 41 年利用できるといわれています。 原油(石油) の主な用途は 燃料 です。 -------------------------------------------------------------------------------- 調べたい資源の名前を入力してください( q で終了):チタン チタン の最大の生産国は オーストラリア で、 世界最大の生産企業は Iluka_Resources(オーストラリア) です。 あと 96 年利用できるといわれています。 チタン の主な用途は 金属製品・合金材料 です。 -------------------------------------------------------------------------------- 調べたい資源の名前を入力してください( q で終了):q また会う日まで… pan{c109046}% [~/public_html/advertise2] エラーがなく出力された。 1-A.b-e 作成していて気付いた点なのだが、終了する際は ctrl-d で終了できるよう、 if pattern == nil と書いていたのだが正しく実行されなかった。 これは上の、 pattern = STDIN.gets.chomp で改行文字を 切り取っているためだということがわかった。 .chomp を削除すれば ctrl-d で終了させられるが、通常の検索ができなく なってしまうので、q を入力することで終了できるようにした。 また、完成前に実行していた際に、「金」で検索したところ、 主な用途に「合金材料」が含まれる資源が大量にヒットしてしまった。 どうにかして資源名だけを対象に検索させる方法はないかと試行錯誤したところ、 if request = [$1] で資源名の列を指定すれば良いことがわかった。 これによって、 Hash を使わなくても作成できる検索プログラムではあるが、 Hash のひとまとめにする特性を生かせば、すっきりとしたデータ活用が 出来るのではないかと気付かされた。 1-A.c プレゼンテーション原稿はプログラムとWEBページ作成で精一杯で、作成できなかった。 1-A.d 広告ページのURL http://roy/~c109046/advertise2/index.html ---------------------------------------------------------------------- 1-B.a トップページへのリンク部分 トップページに戻る

1-B.b 仕様書へのリンク部分

仕様書 (spec.txt)
1-B.c プログラムとデータへのリンク部分 プログラム本体 (resource.rb)
プログラムデータ (resource.dat)
1-B.d もとにしたプログラムとデータ、提出したレポートへのリンク部分 〜もとにしたプログラムと、そのプログラムについてのレポート〜
もとにしたプログラム (hash_ary_read.rb)
プログラムデータ (hash_ary_data.dat)
それについてのレポート (report.txt)
1-B.e プレゼンテーション原稿は作成していないので、リンクもなし。 製作者の氏名と連絡先の部分

このプログラムは東北公益文科大学2009年度生 金田麻美 が著作権を保有しています。
このプログラムの入手・実行・改変・再配布は、いずれも無料で自由に行なうことができます。
ただしこのプログラムを取り扱うことで生じたいかなる結果に対しても著作権者は責任を負いません。

このプログラムに対する、感想・助言・要望などがありましたら、以下のメールアドレスまでお寄せいただけると嬉しいです。
c109046@e.koeki-u.ac.jp

トップページに戻る


© C1090466 金田麻美

---------------------------------------------------------------- 2 今回は前回のIで作成したプログラムよりも工夫ができたことがよかったと思う。 広告ページも前回の白黒の最低限のものから、少しはデザイン性のある 見られるものになったのではないかと思う。 しかしCSSを使えればもっと良かった。 反省点としては、やはり今回も時間配分を上手くできなかったことで、 プレゼン原稿を作成できなかったことである。 もっと身を引き締めて行こうと思う。 今回でプログラミングの方は一通り終わったということだが、 たしかに最高傑作を作る上で、使えるスキルが揃っているように感じた。 自信もついたのでもっと磨いていきたいと思っている。 来週からのCGIも、モチベーションを高く、頑張っていきたいと思う。 3 〜プログラムの参考文献〜 基礎プログラミング II 第3回 情報の構造を分析しよう 「データの切り取りかた」 http://roy/~madoka/2010/r2/03/03_03_review_03_regularexp.html 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「キーボードから検索文字を入力したい」 http://roy/~madoka/2010/r1/07/07_04_theme_03_stdin.html 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「データを読み込むようにするには」 http://roy/~madoka/2010/r1/07/07_09_theme_08_fileread.html 作者はすべて 西村まどか 〜データの参考文献〜 資源一覧 - 資源について http://resource.ashigaru.jp/top.html 作者: DGX100. 金属資源 http://www.s-yamaga.jp/kankyo/kankyo-shigen-1.htm 作者: 山賀 進 〜広告ページ作成の参考文献〜 基本的なHTMLタグ (ダイジェスト) http://roy/~yamamoto/text09/k0htmltag.html 作者: 山本直美 WEB色見本 原色大辞典 http://www.colordic.org/ 作者: colordic.org 共同学習者: 笹原千珠子