第1回 基礎プログラミング II レポート課題 氏名: xxxxxxxx 学籍番号: C109xxx 語学クラス: 英語3 コース(系): 政策マネジメント 1-A 第一に、UNIXではKterm,console のウィンドウからコンピュータに命令したり プログラムやソフトフェアなどを起動させたりすることと、 emacs でプログラムやHTML文章を作成することを学んだ。 また、UNIXはWindowsのようにアイコンをマウスでクリックするシステムでは ないため、ファイルの保存やメールの送信、WEBブラウザの起動などの 多くの動作を、コンピュータにコマンドを入力することによって 命令する必要があることも合わせて学んだ。 プログラムを実行させるには、きちんとルールにしたがったプログラムを 書くことと、Kterm上で"./ファイル名.rb" と入力し実行させる前に、 chmod +x ファイル名.rb で準備を行なうことが重要である。 このチェンジモードはWindowsで、ファイルのプロパティを更新することにあたる。 プログラミングの方法としては、まず文字を表示させるだけという一番簡素な ものとしてprint文、発展形として変数を代入するにはprintf文がある。 コンピュータに計算させる文の代表的なものとしてwhile--end のwhile文と 条件を満たすまで計算し続ける while true -- end文がある。 プログラムの中で条件を指定して実行させるにはif--endのif文を組み合わせる。 また、配列を利用することで、変数をその都度指定するのではなく、 データファイルから変数へ情報を自動的にしまうことが可能になり、 データファイルとプログラムファイルの分離をすることができた。 正規表現ではデータの中から条件に合う配列を、*や^などのメタキャラクターを 用いることによって検索できることを学んだ。 また、このメタキャラクターをif文と組み合わせることによって、 時刻表検索のサイトやgoogleのようにユーザーが情報をある程度自由に 検索できるプログラムを作成した。 後半に習ったものとして重要なのがopen文によるデータの読み込みや書き出し である。形としては、 open("用いるファイル","書込みはw、読み込みはr") do |しまう変数| で、 プログラムによるhtmlへの書き出しや大量のデータを用いたプログラムを 作ることが可能になった。 後半には GIMP というオープンソースの描画ソフトを使ったロゴ作成も行なった。 また、Tgifという同じくオープンソースの描図ソフトも使い、情報科目の 応援キャラクタを作成した。このようなツールを利用することで、 WEBページ作成での表現の手法をひろげることが出来た。 最初から最後まで、論理的なレポートの書き方についての指導がなされた。 自分で作成したプログラムは納得の行くように解説することや、 参考文献の正しい書き方、考察ではそのプログラムが正しいことを bc-lを使って手計算したり、プログラムを一部変更して実行することによって 実証するといった実践的な方法を学んだ。 参考文献 基礎プログラミング I 第3回 キーボードから入力して計算させるには 「カロリーメーターを作ろう」 http://roy/~madoka/2010/r1/03/03_06_theme_03_to_i_calory.html 基礎プログラミング I 第3回 キーボードから入力して計算させるには 「条件文のまとめ」 http://roy/~madoka/2010/r1/03/03_08_theme_05_if.html 基礎プログラミング I 第4回 プログラミングの方法 「ルビ緒ロボットが行動するには」 http://roy/~madoka/2010/r1/04/04_07_theme_04_rubiorobot.html 基礎プログラミング I 第5回 配列の構造 「配列 Array」 http://roy/~madoka/2010/r1/05/05_03_theme_02_array.html 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「データ取り出しプログラム」 http://roy/~madoka/2010/r1/07/07_02_theme_01_egrep.html 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「データを読み込むようにするには」 http://roy/~madoka/2010/r1/07/07_09_theme_08_fileread.html プログラミングのレポートに必要な項目 http://roy/~madoka/2010/rpt/report.html 以上すべて著者は西村まどか 2. Cを選択した。しかしまだプログラムに「7歳を検索すると17歳も 表示されてしまう」という解決されていない問題がある。 また、AとBのプログラムも完成したので添付する。 A 前期の第9回目のレポート課題で作成した、世界の消費税率を検索する プログラム vat.rb を参考に、小学校入学の7歳から20歳までの 夏の思い出を検索できるプログラム summer_c.rb を作成した。 また、データファイル summer_c.dat を作成し、 データとプログラムを分離させた。 B *データファイル summer_c.dat 7 自由工作に苦しむ 8 入院明けでぐずぐずしていた。 9 鶏の世話の予定があったが、鶏が事件を起こして教頭に引き取られる。 10 初めて小岩井農場に行く。朝起きたら窓の向こうで羊が草を食べていた。羊がとても気に入る。 11 いつにも増して宿題が終わらなくて酷かった。 12 小学校最後の夏だったけどあまり覚えていない。 13 数学がわからなくてずっと友達のお世話になる。 14 静岡に行った。新幹線に初めて乗る。 15 長生きしていた金魚が死んでしまった。\n今でも思い出すと胸がつっかえる感じがする。 16 日の出前に起きることにはまる。涼しいし朝焼けがきれいだった。 17 映画をすごく見た。今思うとこのときしか見れる時間がなかったのでよかったかなと思う。 18 進路でずっと悩んでた。でも夏が終わる頃に結論が出た。あのとき悩んでよかったと思う。 19 自由研究で行った飛島で夏バテ。でも出てきた小学校の教科書を読むのに夢中になった。勉強になりました。 20 高校のパンフレットの撮影に行ったりみんなで集まったり、高校生に戻ったみたいだった。 *プログラムファイル #!/usr/koeki/bin/ruby $KCODE = 'e' # コンピュータへ漢字コードを使用するという宣言 year = Array.new # 変数にはこれから拾ってくる配列が代入される memo = Array.new # 同上 STDERR.print("7-20歳の夏の思い出を表示します。\n") STDERR.print("見たい年齢を半角数字で入力してください: ") pattern = STDIN.gets.chomp # 変数 pattern に、上の質問によって入力された数字をしまう request = Regexp.new(pattern) # 変数 request に pattern を正規表現にして代入する。 open("summer_c.dat", "r") do |list| # open-endでカッコ内のファイルを開き、"r"でファイルを読み込む。 # list は読み込んだデータを一時的に代入しておく変数。 while summer = list.gets # 変数 summer に gets でデータを代入。 if request =~summer # もし summer(データ) の中に request(検索文字) と全く同じものがあって、 if /(\d+)\s+(\S+)/ =~summer # vat(データ)が 数字/空白/文字 で成り立っていたら year = $1.to_i #year には1列目を代入 memo = $2 #memo には2列目を代入 printf("\n%s 歳の夏は%s\n",year,memo) # 検索結果を代入して表示。 end # ifのend end # ifのend end # whileのend end # openのend C 元のプログラムでは 検索文字が日本語入力されることを想定して、 request = Regexp.new(pattern)が request = Regexp.new(pattern,true,"e")となっていて、 大文字小文字を区別せず(true)、漢字コードを使用する(e)としていたが、 今回は半角数字だけの入力になるので省いた。 また、データファイルの内容に合わせて .to_i の使用や、 if /(\S+)\s+(\d+)/ =~vat となっていた箇所をデータファイルに合わせて if /(\S+)\s+(\S+)/ =~summer と変更した。 それから、細かなところでは変数や print文を設定に合ったものへ変更した。 D pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 7 7 歳の夏は自由工作に苦しむ 17 歳の夏は映画をすごく見た。今思うとこのときしか見れる時間がなかったのでよかったかなと思う。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 8 8 歳の夏は入院明けでぐずぐずしていた。 18 歳の夏は進路でずっと悩んでた。でも夏が終わる頃に結論が出た。あのとき悩んでよかったと思う。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 9 9 歳の夏は鶏の世話の予定があったが、鶏が事件を起こして教頭に引き取られる。 19 歳の夏は自由研究で行った飛島で夏バテ。でも出てきた小学校の教科書を読むのに夢中になった。勉強になりました。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 10 10 歳の夏は初めて小岩井農場に行く。朝起きたら窓の向こうで羊が草を食べていた。羊がとても気に入る。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 11 11 歳の夏はいつにも増して宿題が終わらなくて酷かった。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 12 12 歳の夏は小学校最後の夏だったけどあまり覚えていない。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 13 13 歳の夏は数学がわからなくてずっと友達のお世話になる。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 14 14 歳の夏は静岡に行った。新幹線に初めて乗る。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 15 15 歳の夏は長生きしていた金魚が死んでしまった。今でも思い出すと胸がつっかえる感じがする。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 16 16 歳の夏は日の出前に起きることにはまる。涼しいし朝焼けがきれいだった。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 17 17 歳の夏は映画をすごく見た。今思うとこのときしか見れる時間がなかったのでよかったかなと思う。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 18 18 歳の夏は進路でずっと悩んでた。でも夏が終わる頃に結論が出た。あのとき悩んでよかったと思う。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 19 19 歳の夏は自由研究で行った飛島で夏バテ。でも出てきた小学校の教科書を読むのに夢中になった。勉強になりました。 pan{c109046}% ./summer_c.rb [~/Ruby] 7-20歳の夏の思い出を表示します。 見たい年齢を半角数字で入力してください: 20 20 歳の夏は高校のパンフレットの撮影に行ったりみんなで集まったり、高校生に戻ったみたいだった。 10から20歳は正常に動作したが、7-9歳は一部含まれている年齢まで拾って 表示してしまっている。よってこのプログラムの内容は修正する必要がある。 E 修正すべき部分は if request =~summer というデータファイルの中から 検索文字と一致する配列を探す部分ではないかと思った。 =~summer の部分に^を入れたら先頭が完全に一致するものを探すように なるのではないかと思い、試してみたがエラーが出てしまった。 また別の手として、検索する際に[7] のように他では一致しないようにする 方法も考え、他の部分も /(\S+)\s+(\S+)/ のように合わせて試してみたが、 7と同じように17も表示されるのは変わらなかった。 色々試してみたが解決できなかったので、未完成だが提出する。 3 プログラミングに関することに比べて、コマンドなどの操作方法を 忘れていたのでメールを書くのにとてもまごついた。 ノートに書かれているコマンドのメモはバラバラで探すのが大変なので、 夏休み中にまとめておくべきだったと反省している。 レポート課題は前期に似たようなプログラムを作った記憶があるので、 自分の出した課題のメールを参考にした。 問題に合わせてプログラムを修正するときに、 プログラムを解説している部分が助けになった。 自分で書いたメモも思いのほか役立ったので、後期も頑張りたいと思う。 今回は友人と問題について考えているときに、前期に比べて落ち着いて 話し合うことができたと思う。「わからない」と言う回数が少なかったので この調子でいけたらいいと思う。 共同学習者: 笹原千珠子