第1回 基礎プログラミング II レポート課題 氏名:xxxxxxxx 学籍番号:C10xxxx 語学クラス:英語xx コース(系):社会 1. Emacs関連 ファイルを開くとき C-x C-f と押すと、下の細い所に Find File : ~/と表示されるので、 ~/ の次からフォルダ名、ファイル名を入力しEnter。 ファイルを保存するとき C-x C-s →下の灰色部分の -x:** が -x:--になったら保存完了。 ウィンドウを増やすとき C-x 5 2 減らすとき C-x 5 0 アクティブ以外のEmacsを全て消すとき C-x 5 1 ************************* Mew 起動方法 Emacsで M(Esc)-x mew パスワードを求められるので設定したパスワードを入力。 新着メール確認 i → 自分で決めたパスワード 新規メールを書く w ファイルの添付方法 C-c C-a → .をクリックし c Copy from: ~/と表示されたら 添付したいファイルの場所、名前を入力しEnter。 書きかけのメールをふたたび書き始める g を押すと Folder name (+inbox): + とでるので +のあとから draftと入力。書きたいメールのところで Shift-e 送信 C-c C-c とおすと本当に送信するか聞かれるので送信する場合は y ************************** kterm ディレクトリに入る cd ファイル名。右端の[~]が[~/ファイル名]になれば成功。 ディレクトリ内のファイルを表示 ls ファイル名 今いるディレクトリ内のものを表示するには ls プログラムを実行する そのファイルがあるところに cd で移動してから ./プログラム名 新しく作った/ダウンロードしたファイルを実行する前にはチェンジモードが必要。 chmod +x ファイル名 lsで見てファイル名の後に * がついていればチェンジモードが完了し実行できる。 プログラムを止める 暴走したり途中でやめたくなったりしたときは C-cで止まる。 日本語入力 C-o または Shift-Space firefoxを起動 firefox& オープンオフィスを起動 ooo3& 計算(計算プログラムの考察などで使用) bc -l quit でやめる ******************************* Ruby関連 初めの行に #!/usr/koeki/bin/ruby と入力してからプログラムを開始する。 メッセージを表示させるときはprintf("") そのメッセージに他から持ってくる文字をいれる場合などはprintf("") 改行文字は\n。これを書かないと、実行したときに % のような文字が出 てくる。 ifやwhileなどの文にはそれに対応したendを書かないとエラーになる。 Tabで行の頭を揃えると見やすくなる。 また、どのifと どのendが対応しているかなども分かりやすくなる。 ktermで実行してエラーが起こった場合、エラーメッセージに書かれた行か それより上の行をみて直す。 コンピュータは #以降の文字は読まない。 なのでその行の説明は # 以降に書く。 プログラム作成中に書いておくと、後でレポートを書くときに 「この文なんだっけ……」ということがなくなる。 2. Bを選択。 a. 設定 選択された年齢のときの夏の思い出を表示するプログラム summer_b.rb b. 作成したプログラム summer_b.rb #!/usr/koeki/bin/ruby print("夏の思い出について語りたいと思います\n\n") #プログラムの説明 printf("何歳のときの思い出を表示しますか?:") #入力をうながす。 age = gets.to_i #入力された年齢 age を数値として取り入れる。 if age <= 21 #ageが21以下の場合 print("\n") #一行空けて printf("%d歳のときですか……\n" , age) #入力された年齢とメッセージを表示 if age < 6 # 6以下の数字が入力されたら print("\n") #一行空けて print("覚えてないですね……。6歳から21歳の範囲でお願いします。\n") #「%d歳のときですか……」の次にメッセージを表示。 elsif age == 6 # 6が入力されたら print("\n") #一行空け print("広島にある母方の祖母の家でミカンの収穫を手伝いました。\n") #「%d歳のときですか……」の次に 6歳のときの思い出を表示。 elsif age == 7 print("\n") print("覚えてないですね……\n") elsif age == 8 print("\n") print("父の手伝ってくれた自由研究で校内の賞をもらいました。\n") elsif age == 9 print("\n") print("遊んでばかりの毎日でした。\n") elsif age == 10 print("\n") print("海で溺れました。監視員さんに助けられことなきを得ました。\n") elsif age == 11 print("\n") print("町内のラジオ体操で皆勤賞。賞品が黒ペン10本でがっくりしました。\n") elsif age == 12 print("\n") print("山口県に、「きらら博」という地方博覧会を見にいきました。\n") elsif age == 13 print("\n") print("中学校行事のキャンプで、友人と流れ星を見ました。\n") elsif age == 14 print("\n") print("特に何もない夏でした。\n") elsif age == 15 print("\n") print("高校受験対策に、友人達と塾の夏期講習に行きました。\n") elsif age == 16 print("\n") print("絵を売りつけるコワイお姉さんにひっかかりそうになりました。\n") elsif age == 17 print("\n") print("町内会の盆踊りに行きました。\n") elsif age == 18 print("\n") print("受験勉強ばかりの夏でした。\n") elsif age == 19 print("\n") print("自動車教習所を無事卒業しました。(免許取得はその年の冬に)\n") elsif age == 20 print("\n") print("仙台の松島でカモメにエサやり。カモメは意外と目が怖いです。\n") elsif age == 21 print("\n") print("諸事情によりMRI検査を受けました。特に異常はありませんでした。\n") else #ageが22以上の場合 print("\n") # 一行空けて print("21以下の数字を入れてください。\n") #メッセージを表示 end # 全体の終了 c. もとにしたプログラムからの変更点 基礎プログラミング I 第4回 プログラミングの方法 「もしもそうならば」 http://roy/~madoka/2010/r1/04/04_03_theme_01_branch.html (作成者 西村まどか先生) を参考に作成。 ・見やすくするために改行をいれた。 ・条件を21以下のときとそれ以上のときに分け、22以上のときエラーメッセージ が出るようにした。 ・21以下のときの中で、6歳未満は「覚えていない」メッセージを出すようにした。 ・入力された年齢を確認するようにした。 d. プログラムを実行した結果画面 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:3 3歳のときですか…… 覚えてないですね……。6歳から21歳の範囲でお願いします。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:6 6歳のときですか…… 広島にある母方の祖母の家でミカンの収穫を手伝いました。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:12 12歳のときですか…… 山口県に、「きらら博」という地方博覧会を見にいきました。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:24 21以下の数字を入れてください。 e. 考察 ・5以下の数字をいれる。 このとき 「覚えてないですね……。6歳から21歳の範囲でお願いします。」と 出るか確認する。 0を入力 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:^[[A 0歳のときですか…… 覚えてないですね……。6歳から21歳の範囲でお願いします。 1を入力 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:1 1歳のときですか…… 覚えてないですね……。6歳から21歳の範囲でお願いします。 3を入力 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:3 3歳のときですか…… 覚えてないですね……。6歳から21歳の範囲でお願いします。 5を入力 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:5 5歳のときですか…… 覚えてないですね……。6歳から21歳の範囲でお願いします。 よって5以下の数字はきちんと 「覚えてないですね……。6歳から21歳の範囲でお願いします。」 と表示されることがわかった。 ################################ ・6から21の数字を入力する。 それぞれ表示するように設定したものが出るかを確かめる。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:6 7歳のときですか…… 覚えてないですね…… pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:9 9歳のときですか…… 遊んでばかりの毎日でした。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:11 11歳のときですか…… 町内のラジオ体操で皆勤賞。賞品が黒ボールペン10本でがっくりしました。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:13 13歳のときですか…… 中学校行事のキャンプで、友人と流れ星を見ました。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:15 15歳のときですか…… 高校受験対策に、友人達と塾の夏期講習に行きました。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:17 17歳のときですか…… 町内会の盆踊りに行きました。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:19 19歳のときですか…… 自動車教習所を無事卒業しました。(免許取得はその年の冬に) pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:21 21歳のときですか…… 諸事情によりMRI検査を受けました。特に異常はありませんでした。 6から21のときは指定した文がきちんと表示された。 今回は奇数しか記述しなかったが、偶数でもきちんと表示された。 ################################ ・22以上の数字を入力 「21以下の数字を入れてください。」と表示されるか確かめる pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:22 21以下の数字を入れてください。 pan{c108203}% ./summer_b.rb [~/Ruby] 夏の思い出について語りたいと思います 何歳のときの思い出を表示しますか?:26 21以下の数字を入れてください。 22以上の数字のときには「21以下の数字を入れてください。」と表示された。 なのでこのプログラムは正常に動いていると言える。 Cを選択。 a.設定 選択された年齢のときの夏の思い出を、データから読み込み表示するプログラム summer_c.rb b.作成プログラム summer_c.rb #!/usr/koeki/bin/ruby print("6歳から21歳までの夏の思い出を語ります。\n") print("※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※\n") print("※それ以下の数字が入力されるとプログラムは終了します※\n") print("※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※\n") #ここまではプログラムの説明と注意点。 STDERR.print("何歳のときの思い出を見ますか? : ") #年齢の入力をうながす。 pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") open("summer_c.dat","r") do |memory| #summer_c.dat内のデータを開き、読み込む。文字列をしまう変数をmemoryとする。 while summer_c = memory.gets if request =~ summer_c if /(\S+)\s+(\S+)/ =~ summer_c #文字列 空白 文字列のときに printf("\n\%s歳の時は %s\n", $1,$2) #結果表示。その行の1つ目の文字列を$1、2つ目の文字列を$2で%sに挿入 end # if /(\S+)\s+(\S+)/〜文の終了 end # if request〜文の終了 end # while文の終了 end #open文の終了 作成データ summer_c.rb #年齢 #思い出 06 広島の祖母の家でみかんの収穫をしました。 07 うーんと……思い出せません。 08 自由研究を父が大幅に手伝ってくれたため校内の賞を授賞しました。 09 来る日も来る日も遊んでばかりの毎日でした。 10 海で溺れました。監視員さんが助けてくれたので無事でした。 11 町内のラジオ体操で皆勤賞。賞品が黒ボールペン十本でがっくりしました。 12 山口県に、「きらら博」という博覧会を見にいきました。 13 中学校行事のキャンプで、友人と流れ星を見ました。 14 特に何もない夏でした。 15 高校受験対策に、友人達と塾の夏期講習に行きました 16 絵を売りつけるコワイお姉さんにひっかかりそうになりました。 17 友人達と町内会の盆踊りに行きました。 18 大学受験をひかえ、勉強ばかりの夏でした。 19 自動車教習所を無事卒業しました。(免許取得はその年の冬に) 20 仙台の松島でカモメにエサやり。カモメは意外と目が怖いです。 21 諸事情によりMRI検査を受けました。特に異常はありませんでした。 c. 前期に作成したstd_regesp.rbと 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「データを読み込むようにするには」 http://roy/~madoka/2010/r1/07/07_09_theme_08_fileread.html のページを参考に作成。(作成者 西村まどか先生) 変更点 ・始めに表示される文章を変更。 ・読み込むデータの名前をsummer_c.datに、変数をmemoryに変更。 ・/(\S+)と\+sの数を作成データに合わせた。 ・結果の表示内容を変更。 d.実行結果 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 06 06歳の時は 広島の祖母の家でみかんの収穫をしました。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 21 21歳の時は 諸事情によりMRI検査を受けました。特に異常はありませんでした。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 1 10歳の時は 海で溺れました。監視員さんが助けてくれたので無事でした。 11歳の時は 町内のラジオ体操で皆勤賞。賞品が黒ボールペン十本でがっくりしました。 12歳の時は 山口県に、「きらら博」という博覧会を見にいきました。 13歳の時は 中学校行事のキャンプで、友人と流れ星を見ました。 14歳の時は 特に何もない夏でした。 15歳の時は 高校受験対策に、友人達と塾の夏期講習に行きました 16歳の時は 絵を売りつけるコワイお姉さんにひっかかりそうになりました。 17歳の時は 友人達と町内会の盆踊りに行きました。 18歳の時は 大学受験をひかえ、勉強ばかりの夏でした。 19歳の時は 自動車教習所を無事卒業しました。(免許取得はその年の冬に) 21歳の時は 諸事情によりMRI検査を受けました。特に異常はありませんでした。 e.考察 ・06から21を入力 この時、その数字が入ったものが出てくるか確認する。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 06 06歳の時は 広島の祖母の家でみかんの収穫をしました。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 08 08歳の時は 自由研究を父が大幅に手伝ってくれたため校内の賞を授賞しました。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 10 10歳の時は 海で溺れました。監視員さんが助けてくれたので無事でした。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 12 12歳の時は 山口県に、「きらら博」という博覧会を見にいきました。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 14 14歳の時は 特に何もない夏でした。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 16 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 18 18歳の時は 大学受験をひかえ、勉強ばかりの夏でした。 roy{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 20 20歳の時は 仙台の松島でカモメにエサやり。カモメは意外と目が怖いです。 偶数しか記載していないが、奇数でもその歳の思い出が出てきた。 ・1を入力 10や21など、1の入った数字のときの思い出全てが出てくると予想。 pan{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 1 10歳の時は 海で溺れました。監視員さんが助けてくれたので無事でした。 11歳の時は 町内のラジオ体操で皆勤賞。賞品が黒ボールペン十本でがっくりしました。 12歳の時は 山口県に、「きらら博」という博覧会を見にいきました。 13歳の時は 中学校行事のキャンプで、友人と流れ星を見ました。 14歳の時は 特に何もない夏でした。 15歳の時は 高校受験対策に、友人達と塾の夏期講習に行きました 16歳の時は 絵を売りつけるコワイお姉さんにひっかかりそうになりました。 17歳の時は 友人達と町内会の盆踊りに行きました。 18歳の時は 大学受験をひかえ、勉強ばかりの夏でした。 19歳の時は 自動車教習所を無事卒業しました。(免許取得はその年の冬に) 21歳の時は 諸事情によりMRI検査を受けました。特に異常はありませんでした。 1の入った数字すべてが検索された。 ・データになっていない数字を入力したとき そのときにはエラーメッセージなどを設定していないので 何も出ずに終了と予想。 pan{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 23 pan{c108203}% ./summer_c.rb [~/Ruby] 6歳から21歳までの夏の思い出を語ります。 ※一桁の場合は、06、07、08、09のように初めに 0 を付けてください※ ※それ以下の数字が入力されるとプログラムは終了します※ ※また、数字を一つだけいれた場合はその数字が入った年の思い出全てが出てきます※ 何歳のときの思い出を見ますか? : 01 pan{c108203}% [~/Ruby] データもメッセージもないので、何も出ず終了した。 なのでこのプログラムは正常に動いていると言える。 f.参考文献 広瀬雄二先生 著「Rubyプログラミング基礎講座」2006 技術評論社 p85-100 第7講 『ファイル出入力』 感想 簡単な操作も忘れていることに気付いたので、今回のレポートでは前期の復習と して基本的な操作だと思うことをまとめた。 また、データの読み出しの方法が思い出せず、西村先生の作った講義ノートの第7回を 見て復習した。それでもまだ飲み込めていない点が多い。 講義ノートばかりに頼らず自分のものにしなくては、と感じた。 忘れたことが多いので少し不安ですが、頑張るので後期もよろしくお願いします。