第 1 回 前期の復習 レポート課題 氏名:高田美咲 学籍番号:C1110909 語学クラス:英語1 コース:政策マネジメントコース 1 筆記問題 A.前期学んだことについての復習 < ウィンドウの切り替え > ctrl + 1 emacs が表示され操作ができる。 ctrl + 2 kterm が表示され操作ができる。 ctrl + 3 console が表示され操作ができる。 ctrl + 4 firefox が表示され操作ができる。 < emacsについて > 主にmewやプログラム作成などに使用する。 Esc + x mew mewの操作 ctrl + x 5 2 emacs画面が増える ctrl + x 5 0 emacs画面が消える ctrl + x ctrl + f ファイルを開くための動作 ctrl + x ctrl + s ファイルの保存/メールの保存 < ktermについて > 作成プログラムの実行やファイルの移動、コピー、削除などに使用する。 cd ディレクトリ名 指定ディレクトリに移動 ls ファイルやディレクトリの表示 chmod +x プログラムを実行できるようにする rm ファイルの削除 cp ファイルのコピー mv ファイルを他のディレクトリに移動 bc -l 計算機能 ls -l 存在するファイルの詳細表示 < consoleについて > UNIXを終了する時に使用する。 また、ktermが文字化けなどで使用不可能になったときの 代用としての利用も可能である。 exit 終了 < firefoxについて > ctrl + r 開いているページの情報を更新 < プログラムについて > 1行目 #!/usr/koeki/bin/ruby を書く。 2行目 #coding: euc-jp を書く。 print("あいうえお") ""内の文が実行した時に表示 この場合は あいうえお が表示 printf("") 変数を含めた文を作成する時に使用 gets 入力された内容を取りこむ STDERR 入力を促す # #の後に入力した文字はプログラムに反映されない \n 改行 while end 条件を満たすまで繰り返し break 繰り返し中止 if end もし~ならば(条件を指定できる) 2 プログラム問題 Cを選択 最終的には時期を入力することで指定されている計画が表示されるプログラムを 完成させようと考えた。 < 設定 > 時期を入力してもらうと計画が表示される設定を考え、 このためにプログラム本体とデータのみのファイル life_open.rb と mydata_c111090.dat の2つを作成した。 < データ > 2012年10月 2012年11月 2年後期授業開始 単位落とさない!! サークル参加!! バイト!! 2012年12月 2013年01月 お正月 飲み会☆ 地元に集合♪ --- 2013年02月 2013年03月 春休み 旅にでる♪ --- --- 2013年04月 2013年07月 3年前期授業開始 どこのゼミだろ!? 単位落とさない サークル! 2013年10月 2014年01月 3年後期授業開始 就職活動! バイト控えめ! --- 2014年02月 2014年03月 春休み 休みあるかな。 --- --- 2014年04月 2014年07月 4年なったよ! 就職活動! 卒論の作成 --- 2014年10月 2015年03月 4年後期 卒論完成♪ 卒業!!。。 できてるかな??。。 < プログラム > #!/usr/koeki/bin/ruby #coding: euc-jp print("2012年10月から2015年3月の卒業までの予定を表示します。\n\n") print("見たい時期を選択して下さい。\n\n") #print文で表示される文章を作成 print("**********************************\n") print("2012年10月から2012年11月まで\n\n") print("2012年12月から2013年1月まで\n\n") print("2013年2月から2013年3月まで\n\n") print("2013年4月から1013年7月まで\n\n") print("2013年10月から2014年1月まで\n\n") print("2014年2月から2014年3月まで\n\n") print("2014年4月から2014年7月まで\n\n") print("2014年10月から2015年3月まで\n\n") print("**********************************\n\n") print("時期を入力して下さい。\n") print("( 入力の例 )\n") print("2012年10月から2012年11月までを見たい場合 → 2012年10月 と入力して「Enter」\n") STDERR.print("入力 : ") #STDERRでエラー時にメッセージを端末に出力 tt = STDIN.gets.chomp #STDINで標準入力 re = Regexp.new(tt, true) #Regexpで文字列を正規表現に変換 open("mydata_c111090.dat","r") do |data| #open do でデータファイル読み込み while ddd = data.gets #while文で繰り返し if re =~ ddd #if文でもし~ならば if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ ddd #データ正規表現 printf("%sから%sまで\n\n",$1,$2) #print文なのでここから表示される sleep 2 #sleepで間をおく printf("* %s *\n\n",$3) sleep 2 printf("%s\n",$4) sleep 1 printf("%s\n",$5) sleep 1 printf("%s\n\n",$6) sleep 2 printf("---- E N D ----\n\n") end end end end #endで終了 < もとにしたプログラムから変更、改良した点 > このプログラムを作成するためにまずlife_print.rbで卒業までの計画を 表示するプログラムを作成した。 #!/usr/koeki/bin/ruby #coding: euc-jp print("2012年10月から2015年3月の卒業までの予定を表示します。\n") print("↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ \n\n") #print文で表示させる文を作成 sleep 2 #sleepで間をおく print("2012年 === 10月 === === 11月 ===\n\n") sleep 2 print("* 2年後期授業開始 *\n\n") sleep 2 print("サークル参加!! なるべく。。\n") print("バイト頑張る!\n\n") sleep 2 print("2012年 === 12月 === 2013年 === 1月 ===\n\n") sleep 2 print("* お正月 *\n\n") sleep 2 print("飲み会☆\n") print("みんな地元に帰ってこれたらいいな♪\n\n") sleep 2 print("2013年 === 2月 === === 3月 ===\n\n") sleep 2 print("* 春休み *\n\n") sleep 2 print("いろんな所に旅にでる!\n\n") sleep 2 print("2013年 === 4月から ===\n\n") sleep 2 print("* 3年 授業開始 *\n\n") sleep 2 print("そろそろ就職活動を始める!\n") print("引続きサークル活動。頑張りたい!\n") print("バイトは少し控えめに。\n\n") sleep 2 print("2014年 === 4月から ===\n\n") sleep 2 print("卒業論文の準備、作成を始める。\n\n") sleep 2 print("2015年 === 3月 ===\n\n") sleep 2 print("卒業...できたらいいな!\n\n") sleep 2 print("---- END ----\n") その後、入力部分の機能を加えたlife_stderr.rbを作成した。 #!/usr/koeki/bin/ruby #coding: euc-jp print("2012年10月から2015年3月の卒業までの予定を表示します。\n\n") print("見たい時期を選択して下さい。\n\n") #print文で表示させる文を作成 print("*********************************************\n") print(" 1 :2012年10月から2013年3月まで\n\n") print(" 2 :2013年4月から2014年3月まで\n\n") print(" 3 :2014年4月から2015年3月まで\n\n") print(" 4 :終了する\n") print("*********************************************\n\n") while true #whileで繰り返し STDERR.print("3つから選択して下さい:") #STDERRでエラー時にメッセージ表示 ziki = gets.chomp.to_i #getsで入力文字取りこむ to_iで整数 if ziki == 1 #if文でもし~ならば print("2012年 === 10月 === === 11月 ===\n\n") sleep 2 #sleepで間をおく print("* 2年後期授業開始 *\n\n") sleep 2 print("単位落とさないように!!なるべく。。\n") print("サークル参加!! なるべく。。\n") print("バイト頑張る!\n\n") sleep 2 print("2012年 === 12月 === 2013年 === 1月 ===\n\n") sleep 2 print("* お正月 *\n\n") sleep 2 print("飲み会☆\n") print("みんな地元に帰ってこれたらいいな♪\n\n") sleep 2 print("2013年 === 2月 === === 3月 ===\n\n") sleep 2 print("* 春休み *\n\n") sleep 2 print("いろんな所に旅にでる!\n\n") sleep 2 print("------- E N D -------\n\n") elsif ziki == 2 print("2013年 === 4月 === から 2014年 === 3月 === まで\n\n") sleep 2 print("* 3年 授業開始 *\n\n") sleep 2 print("どこのゼミに入ってるんだろ。。\n\n") sleep 2 print("そろそろ就職活動を始める!\n") print("引続きサークル活動。頑張りたい!\n") print("バイトは少し控えめに。\n\n") sleep 2 print("------ E N D -------\n\n") elsif ziki == 3 print("2014年 === 4月から ===\n\n") sleep 2 print("* 4年生になったよ!! *\n\n") sleep 2 print("単位はほとんど全部取り終わってる。。はず!\n\n") sleep 2 print("卒業論文の準備、作成を始める。\n\n") sleep 2 print("引続き就職活動。。。めざせ内定!!\n\n") sleep 2 print("2015年 === 3月 ===\n\n") sleep 2 print("卒業...できたらいいな!\n\n") sleep 2 print("---- E N D ----\n\n") elsif ziki == 4 print("終了します。\n") break end end この2つのプログラムを利用して、さらにプログラム本体がわかりやすいように データとプログラムを分離させたlife_open.rbを作成した。 < 実行結果 > pan{c111090}% ./life_open.rb [~/Ruby] 2012年10月から2015年3月の卒業までの予定を表示します。 見たい時期を選択して下さい。 ********************************** 2012年10月から2012年11月まで 2012年12月から2013年1月まで 2013年2月から2013年3月まで 2013年4月から1013年7月まで 2013年10月から2014年1月まで 2014年2月から2014年3月まで 2014年4月から2014年7月まで 2014年10月から2015年3月まで ********************************** 時期を入力して下さい。 ( 入力の例 ) 2012年10月から2012年11月までを見たい場合 → 2012年10月 と入力して「Enter」 入力 : 2012年10月 2012年10月から2012年11月まで * 2年後期授業開始 * 単位落とさない!! サークル参加!! バイト!! ---- E N D ---- < 考察 > 正確に機能しているか確かめるためにこのプログラムの前の段階の life_print.rbとlife_stderr.rbも実行し確認する。 pan{c111090}% ./life_print.rb [~/Ruby] 2012年10月から2015年3月の卒業までの予定を表示します。 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 2012年 === 10月 === === 11月 === * 2年後期授業開始 * サークル参加!! なるべく。。 バイト頑張る! 2012年 === 12月 === 2013年 === 1月 === * お正月 * 飲み会☆ みんな地元に帰ってこれたらいいな♪ 2013年 === 2月 === === 3月 === * 春休み * いろんな所に旅にでる! 2013年 === 4月から === * 3年 授業開始 * そろそろ就職活動を始める! 引続きサークル活動。頑張りたい! バイトは少し控えめに。 2014年 === 4月から === 卒業論文の準備、作成を始める。 2015年 === 3月 === 卒業...できたらいいな! ---- END ---- pan{c111090}% ./life_stderr.rb [~/Ruby] 2012年10月から2015年3月の卒業までの予定を表示します。 見たい時期を選択して下さい。 ********************************************* 1 :2012年10月から2013年3月まで 2 :2013年4月から2014年3月まで 3 :2014年4月から2015年3月まで 4 :終了する ********************************************* 3つから選択して下さい:2 2013年 === 4月 === から 2014年 === 3月 === まで * 3年 授業開始 * どこのゼミに入ってるんだろ。。 そろそろ就職活動を始める! 引続きサークル活動。頑張りたい! バイトは少し控えめに。 ------ E N D ------- 3つから選択して下さい:4 終了します。 ともに正しく機能していた。 さらにlife_open.rbでは違う時期を入力して確認する。 pan{c111090}% ./life_open.rb [~/Ruby] 2012年10月から2015年3月の卒業までの予定を表示します。 見たい時期を選択して下さい。 ********************************** 2012年10月から2012年11月まで 2012年12月から2013年1月まで 2013年2月から2013年3月まで 2013年4月から1013年7月まで 2013年10月から2014年1月まで 2014年2月から2014年3月まで 2014年4月から2014年7月まで 2014年10月から2015年3月まで ********************************** 時期を入力して下さい。 ( 入力の例 ) 2012年10月から2012年11月までを見たい場合 → 2012年10月 と入力して「Enter」 入力 : 2014年10月 2014年10月から2015年03月まで * 4年後期 * 卒論完成♪ 卒業!!。。 できてるかな??。。 ---- E N D ---- この入力でも正しく表示された。 結果、前の段階もエラーがなくlife_print.rbで時期を変えても 不具合がなかったことからこのプログラムは正しく機能している。 < 参考資料 > 西村まどか 基礎プログラミングI 第7回 正規表現と Ruby 言語でのプログラミング 「データを読み込むようにするには」 http://roy/~madoka/2012/r1/07/r1_07_10_theme_08_fileread.html 基礎プログラミングI 第9回 Rubyであそぼ/広告ページの作成 「少し間を空ける」 http://roy/~madoka/2012/r1/09/r1_09_09_theme_06_sleep.html 3 感想 今回の課題は2ヶ月ぶりのプログラミングの講義のあとだったので忘れてしまっ た部分は多少あったが、プログラムを作成する基礎的な部分はさほど忘れないな かった。作成する時には西村先生のプログラミング1の講義ノートやページを確 認しながら行った。今回は1人でも完成できたので良かったが迷ったときは友達 に教えてもらわなければと思う。次回の講義や課題も頑張りたい。