第1回 前期の復習 レポート課題 氏名:佐藤 千香 学籍番号:C1101069 語学クラス:英語6 コース(系):地域共創 プログラムCを添付してもう一度おくります。 1、筆記問題 A、前期の復習 ●ショートカットキーを用いたウィンドウの切り替え ctrl+1:emacsが前面に出る ctrl+2:ktermが前面に出る ctrl+3:consoleが前面に出る ctrl+4:Firefoxが前面に出る ●emacs操作方法 新規作成:Ctrl+x Ctrl+f ファイルを開く:Ctrl+x Ctrl+f ファイルの保存:Ctrl+x Ctrl+s 日本語入力のオンオフ:Ctrl+o ●getsメゾットについて getsメゾットとはキーボードからの入力を文字列として 読み込むものである。 ex) 変数 = gets.chomp!.to_i chomp!は改行文字があれば(\n)があれば取り除く ●値の型変換メゾット to_i:値の型を整数に変換する to_f:値の型を実数に変換する to_s:値の型を文字列に変換する ●繰り返し:while-end 繰り返しを表現するためにはwhile-endを用いる ex) while 繰り返しを継続する条件 繰り返し行う処理 end 特殊な用法:while true 繰り返しにさらに特殊な条件をつける際に用いる break:繰り返しを中止、繰り返しから抜ける redo:その回の繰り返しを無効化、繰り返しを先頭からやり直す next:その回の繰り返しを無効化、次の繰り返しへ ex) while true print"金額を入力してください(お会計は0と入力):\n " price = gets.chomp!.to_i if price == 0 then break end #0で繰り返しを抜ける ●条件判断:if-end 条件判断する場合に用いる ex) if 条件A 処理A #条件がAならば処理Aへ。 elsif 条件B 処理B #条件がBならば処理B else 条件C 処理C #その他は処理Cなる。 !if-endとwhile-endを両方用いる際は それに見合ったendをつ け忘れないようにする! ●openメゾットについて openメゾットを使うとプログラム内でファイルオープンやクローズを 行うことができる ex) open("ファイル","モード")do |変数| 開いたファイルを使って行う処理 end ファイルには指定したいファイル名を入力する。 モードは以下の6つから選択して入力する。 r :読み込み専用。 r+:読み込み/書き込み用。 w :書き込み専用。指定したファイルを新規作成する w+:読み込み/書き込み用で、その他はwと同じ。 a :追加書き込み専用 a+:読み込み/追加書き込み専用で、その他はaと同じ。 参考文献 神田 直弥 2011年度授業用ページ 前期 基礎プログラミングI UNIXの操作 http://roy/~naoya/ruby/1.html プログラミングの基礎 http://roy/~naoya/ruby/2.html 値の変換 http://roy/~naoya/ruby/3.html 制御構造[1]http://roy/~naoya/ruby/4.html 制御構造[2]http://roy/~naoya/ruby/5.html ファイルの入出力 http://roy/~naoya/ruby/8.html 2、プログラム問題 最終的にCのプログラムを選択した。 A、Bのプログラムも作ったので一緒に添付する。 A、 a)プログラム #!/usr/koeki/bin/ruby print"今年の夏の思い出!\n\n" sleep(2) print"さてさて2011年大学生活2年目の夏の思い出…\n\n" sleep(2) print"語り始めてもよろしいですか?\n\n" print"よろしければyesをよろしくなければnoを入力して下さい\n" answer = gets.chomp! if answer == "yes" print"ありがとうございます!\n\n" else print"そんなこと言わずに〜聞いて下さいよぅ\n\n" end print"大学に入ってから2回目の夏休みがやって来ました。\n\n" sleep(1) print"期末テストが終わると、集中講義が待ってました…\n\n" sleep(1) print"お盆は去年と同じくバイト三昧で実家に帰れず…\n\n" sleep(1) print"8月の終わりは海でBBQしました!!\n\n" sleep(1) print"9月の12日-14日は友達と大坂京都の旅に出かけました!\n\n" sleep(1) print"暑いし歩いて疲れたけど、いい思い出になりました。\n\n" sleep(1) print"9月17日にはお兄様の結婚式がありました。\n\n" sleep(1) print"最近涙線がゆるくて困ります。感動しました。\n\n" sleep(1) print"9月21日は仙台でライブ!!のはずが台風で中止に…\n\n" sleep(1) print"とほほほ……で酒田にカムバッーーク!!!!\n\n" sleep(2) print"なんだかんだで満喫できた夏でした。\n\n" b)実行結果 今年の夏の思い出! さてさて2011年大学生活2年目の夏の思い出… 語り始めてもよろしいですか? よろしければyesをよろしくなければnoを入力して下さい yes ありがとうございます! 大学に入ってから2回目の夏休みがやって来ました。 期末テストが終わると、集中講義が待ってました… お盆は去年と同じくバイト三昧で実家に帰れず… 8月の終わりは海でBBQしました!! 9月の12日-14日は友達と大坂京都の旅に出かけました! 暑いし歩いて疲れたけど、いい思い出になりました。 9月17日にはお兄様の結婚式がありました。 最近涙線がゆるくて困ります。感動しました。 9月21日は仙台でライブ!!のはずが台風で中止に… とほほほ……で酒田にカムバッーーク!!!! なんだかんだで満喫できた夏でした。 c)考察 今年の夏の思い出を語る簡単なプログラムを作った。 gets.chomp!で入力を求め、yesの場合でもnoの場合でも 勝手に夏の思い出について語り始める。 sleepを使って次の行に進むまで間を空けた。 また見やすいように改行\nを使って、文と文の間を空けた。 B、 a)プログラム #!/usr/koeki/bin/ruby print"\n" print"7〜20歳までの夏の思い出を語ります\n" while true print"\n" print"何歳の思い出がいいですか?(終了する場合は0を入力)\n" answer = gets.chomp!.to_i if answer == 7 print"小学1年生。ほぼ記憶にないが、きっと楽しかったはず。\n" elsif answer == 8 print"小学2年生。実家のすいか出荷の手伝いをする。\n" elsif answer == 9 print"小学3年生。カナダからの外国人がやってきた!\n" elsif answer == 10 print"小学4年生。今だプールで25メートル泳げず……。\n" elsif answer == 11 print"小学5年生。海に行って信じられないほど焼けた。\n" elsif answer == 12 print"小学6年生。自由研究のネタがなくなる。\n" elsif answer == 13 print"中学1年生。ほぼ毎日部活で走った。\n" elsif answer == 14 print"中学2年生。友達と地元の夏祭りに行く。\n" elsif answer == 15 print"中学3年生。プリント倶楽部がはやった。\n" elsif answer == 16 print"高校1年生。夏休みの課題が間に合わなくなる。\n" elsif answer == 17 print"高校2年生。部活したり、遊んだり…JKを満喫する。\n" elsif answer == 18 print"高校生活最後の夏休み。ほぼ学校に通って勉強の日々。\n" elsif answer == 19 print"大学1年目の夏休み。2ヵ月って長い!ほとんどバイトして終わる。\n" elsif answer == 20 print"大学2年生。友達と大坂京都の旅へ。兄が結婚した。\n" elsif answer == 0 break else print" もう一度入力して下さい。\n" end end b)実行結果 7〜20歳までの夏の思い出を語ります 何歳の思い出がいいですか?(終了する場合は0を入力) 6 もう一度入力して下さい。 何歳の思い出がいいですか?(終了する場合は0を入力) 7 小学1年生。ほぼ記憶にないが、きっと楽しかったはず。 何歳の思い出がいいですか?(終了する場合は0を入力) 13 中学1年生。ほぼ毎日部活で走った。 何歳の思い出がいいですか?(終了する場合は0を入力) 19 大学1年目の夏休み。2ヵ月って長い!ほとんどバイトして終わる。 何歳の思い出がいいですか?(終了する場合は0を入力) 0 c)考察 7〜20歳までの思い出を語るプログラムを作った。 gets.chomp!.to_iで知りたい年齢を入力してもらい、if-endで条件判断した。 while trueでその作業の繰り返しを求め、breakで繰り返しを抜けるようにした。 また7〜20以外の数値を入れた場合は再入力を促した。 C、 a)プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' age = Array.new memory = Array.new STDERR.print"7〜20歳の夏の思い出について語ります。\n\n" while true STDERR.print"何歳の夏の思い出にしますか? (終了する場合は0を入力)\n\n" answer = gets.chomp.to_i i = 1 open("summer_c.dat","r") do |sun| while summer = sun.gets if /(\d+)\s+(\S+)/=~ summer age[i] = $1 memory[i] = $2 end i += 1 end end if answer >= 6 && answer <= 20 sleep(1) printf"%s歳の夏の思い出:%s\n\n",age[answer-6], memory[answer-6] elsif answer == 0 break else print"再入力してください。\n" redo end end 作成したデータ 7 小学1年生。ほぼ記憶にないが、きっと楽しかったはず。 8 小学2年生。実家のすいか出荷の手伝いをする 9 小学3年生。カナダからの外国人がやってきた! 10 小学4年生。今だプールで25メートル泳げず……。 11 小学5年生。海に行って信じられないほど焼けた。 12 小学6年生。自由研究のネタがなくなる 13 中学1年生。ほぼ毎日部活で走った。 14 中学2年生。友達と地元の夏祭りに行く。 15 中学3年生。プリント倶楽部がはやった。 16 高校1年生。夏休みの課題が間に合わなくなる。 17 高校2年生。部活したり、遊んだり…JKを満喫する。 18 高校生活最後の夏休み。ほぼ学校に通って勉強の日々。 19 大学1年生。夏休みが2ヵ月って長い!ほとんどバイトして終わる。 20 大学2年生。友達と大坂京都の旅へ。兄が結婚した。 b)実行結果 7〜20歳の夏の思い出について語ります。 何歳の夏の思い出にしますか? (終了する場合は0を入力) 7 7歳の夏の思い出:小学1年生。ほぼ記憶にないが、きっと楽しかったはず。 何歳の夏の思い出にしますか? (終了する場合は0を入力) 13 13歳の夏の思い出:中学1年生。ほぼ毎日部活で走った。 何歳の夏の思い出にしますか? (終了する場合は0を入力) 19 19歳の夏の思い出:大学1年生。夏休みが2ヵ月って長い!ほとんどバイトして終わる。 何歳の夏の思い出にしますか? (終了する場合は0を入力) 1 再入力してください。 何歳の夏の思い出にしますか? (終了する場合は0を入力) 12 12歳の夏の思い出:小学6年生。自由研究のネタがなくなる 何歳の夏の思い出にしますか? (終了する場合は0を入力) 0 c)考察 7〜20歳までの思い出を語るプログラムを作った。 内容はBと同じであるがopenメゾットを用いてデータを読み込んで 表示するプログラムを作った。 age = Array.newとmemory = Array.newでそれぞれの配列を作成する。 入力された年齢を変数answerとし、to_iで整数の型にする。 i = 1とし、データの各配列に番号を振り分けるために作成しておく。 open("summer_c.dat","r") do |sun|でデータを読み込み、 while summer = sun.getsで1行ずつデータを読み込み、変数summerに置き換える。 正規表現を使って年齢を変数age、思い出を変数memoryに置き換える。 while trueで繰り返しの作業を行うようにした。 if-endでanswer >= 6 && answer <= 20としanswerが6より大きく、かつ20より小 さかった場合はprintで思い出が表示されるようにする。 answerが0の場合はbreakで繰り返しを抜け、それ以外は再入力を促す。 d)参考にしたプログラム、そこからの変更点 西村まどか 2009年 基礎プログミングII 第1回 前期の復習 レポート講評 その6 http://roy.e.koeki-u.ac.jp/~madoka/2009/r2/01/rpt/c108069.txt 変数、内容を変更した。またwhile trueで繰り返しを求め、breakで繰り返しを 抜けるようにした。間違った入力があった場合は再入力を促し、redoでその回の 繰り返しの先頭からやり直すようにした。 3、感想 夏休み明けということもあり、プログラミングの基礎の部分から忘れている ところが多かった。while-end、if-end、while trueといったものの用法など の復習をした。主に参考にしたのは神田直弥先生の授業用ページ、過去の自 分のプログラム、過去の先輩方のプログラムを参考に今回の課題に取り組ん だ。 Cのプログラムでwhile true を使い繰り返しを求め、breakで繰り返しを抜 けるところや間違った入力を行った場合に再入力を促すところが手間取った。 プログラミングは大変ではあるが、楽しみながらやっていければよいと思う。 4、参考文献 神田 直弥 2011年度授業用ページ 前期 基礎プログラミングI 値の変換 http://roy/~naoya/ruby/3.html 制御構造[1]http://roy/~naoya/ruby/4.html 制御構造[2]http://roy/~naoya/ruby/5.html 正規表現 http://roy/~naoya/ruby/7.html ファイルの入出力 http://roy/~naoya/ruby/8.html 協同学習者: 石山 遥