筆記問題がよくできており、プログラム中の解説もある。 参考文献も多く、書き方がきちんとしている。 --- 第1回 前期の復習 レポート課題 氏名:xxxxxxxx 学籍番号:c110xxx 語学クラス:英語6 コース(系):政策マネジメントコース 1.筆記問題 前期の復習 ・ウィンドウの説明 … kterm:ファイルのコピー/移動/実行操作 (データ emacs:mewの操作/プログラム作成 console:ログアウト(exitを入力) ・ウィンドウの切り替え … Ctrl + 1:emacsを全面に表示、操作できる。(以下同様) Ctrl + 2:kterm Ctrl + 3:console Ctrl + 4:firefox Ctrl + 5 2:emacs画面を増やす。 Ctrl + 5 0:emacs画面を減らす。(選択している画面が消える) ・ktermの操作 … ソフトウェア名 & [retern]:起動、実行。& が無いとktermが同時に 使えなくなる。 cd ファイル名:ファイルを開く。 <プログラ厶> ・プログラムの1行目には、#!/usr/koeki/bin/ruby を書く。 ・保存されているかどうかは下のグレーのバーを見る。 -E:** の場合は未保存、-E:-- の場合は保存済。 ・ファイルの拡張子は.rb ・メソッド:もともと登録されている特定の働きを持った文字列のこと。 … p:指定した変数内の値を表示 print:""内を表示 printf:""内のメッセージの位置に変数内の値が表示される … 書式制御文字:printfに続く""内で使われ%の後に続く、 d:10進整数の文字列に変換 b:2進整数 x:16進整数 f:10進小数 s:文字列 これらの文字のこと。値の表示形式を指定する。 %と書式制御文字の間に出力幅を指定する整数が書ける。 これによって桁揃えが出来る。 整数にマイナスを付けると左詰め。 fの場合は、全体の桁数.小数点以下の桁数 で指定。 gets:キーボードからの入力を読み込む chomp!:改行\nがあれば取り除く to_i:値の型を整数に変換 to_f:実数に変換 to_s:文字列に変換 length:配列に対して、配列変数.lengthとすることでその配列の 中に代入されている値の数を返してくれる。(= sizeメソッド) ex)while x < item.length ・変数:何かの値を代入、保管しておく。 … 文字を代入する際には""でくくる 同一名称の変数に何度も代入したときに保持されるのは、最後に代 入した値。 = は右辺に左辺を代入するということ。 初期値をあたえる際、10 とすれば整数、10.0とすれば実数として 扱われるが、計算に用いる値のうち一つでも実数があれば計算結果 は実数。 ・エラー表示 … 実行したファイル名:エラーのある行数:エラー内容 ・算術演算子 … + 加算、- 減算、* 乗算、/ 除算、% 剰余(割った余り)、 ** べき算 ・コメント:プログラム中にコメントを書くには、#の後に書く。 その行の#以降はプログラムとして認識されない。 ・制御構造:通常は上から順に実行するプログラムの流れを変えるもの。 ・条件判断:条件に応じて違う処理をさせること。 … ・if-end 1)if 条件A 処理A else 処理B end 2)if 条件A 処理A elsif 条件B 処理B else 処理C end ・繰り返し:条件を満たすまで同じ処理を反復させること。 … ・while-end: while 条件 処理 end ※条件の部分には、number >= 6 などがくる。 ・while true:あらかじめ繰り返しの回数を定めず入力により終了 while true if price == 0 then break end sum += price end whileの中にif文を入れることで繰り返しを終了。 if文の中にbreakを入れると繰り返しから抜ける。 … break:繰り返すの実行を中止、繰り返しから抜ける。 redo:その回の繰り返しを無効化、繰り返しの先頭から やり直す。 next:その回の繰り返しを無効化、次の繰り返しへ。 ・for-end: for 変数 in 開始時の数値..終了時の数値 do 処理 end ・代入演算子 … = :通常代入 += :加算代入 -= :減算代入 *= :乗算代入 /= :除算代入 %= :剰余代入 **= :べき乗代入 ・論理演算子 … == :左辺と右辺が等しい < :左辺が右辺よりも小さい <= :左辺が右辺以下 > :左辺が右辺よりも大きい >= :左辺が右辺以上 && :かつ(論理積) || :または(論理和) ! :否定 not :否定 ・ファイルの読み込み:あらかじめ別ファイルに作成したデータを プログラム中に読み込んで表示させる。 1)getsメソッドを用いる。 while line = gets p line sum += line.to_i end 実行する際、kterm上で Ruby プログラム名 読み込むファイル名[return] と入力し、読み込むファイルを指定。 1行目:ファイルから読み込んだデータを 変数lineに代入している。 ・テスト方法:プログラムに間違いがないか確認するために行う。 … ・ブラックボックステスト プログラムの内部構造を考慮せず行うテスト。 正しい値だけでなく、不適切な値の場合に不適切であることを 促すメッセージが表示されるかどうかを確認する。 ・ホワイトボックステスト プログラムの内部構造を踏まえて、全ての条件分岐を試し、 エラーが出ないことを確認する。 ・配列:複数の値を保持することができる変数を配列という。 複数のデータは[]内に , でつなげて格納する。 hoge = [10,20,30] →10は0番目、20は1番目、30は2番目のデータとなり、 それぞれhoge[0]、hoge[1]、hoge[2]と表記。 ・1)x = [] 2)x = Array.new の2通りの方法で、その変数が配列であることを宣言できる。 ・配列の中に配列を代入する、二次元配列というものもある。 ・正規表現:検索パターンを表現するために利用する表記法。 … メタ文字:正規表現を書く際に使用する?や[]などの特殊文字。 \s:空白文字。空白、タブ、改行文字とマッチ。 \S:空白以外。 \d:0から9までの数字とマッチ。 \D:0から9までの数字以外とマッチ。 \w:英数字と_にマッチ。 \W:英数字と_以外にマッチ。 \A:文字列の先頭にマッチ。 \z:文字列の末尾にマッチ。 \b:単語の境目にマッチ。 ^ :行頭にマッチ。 $ :行末にマッチ。 . :任意の一文字にマッチ。 * :直前の文字の0回以上の繰り返しにマッチ。 + :直前の文字の1回以上の繰り返しにマッチ。 ? :直前の文字の0回または1回の繰り返しにマッチ。 //は、これが正規表現であることを示すRubyの記法。 /正規表現/ =~ 文字列 =~:正規表現にマッチするという比較演算子 !~:正規表現にマッチしないという比較演算子 i :正規表現のパターンの後ろにiを付けた場合、 大文字と小文字を区別しないという意味。 後方参照:正規表現にマッチしたデータから特定の部位を取り出す 方法。正規表現の中で()を使って記述しておくと、そのくくられ た部分にマッチした部位を()の順番に応じて$1、$2のように$数字 の形で取り出すことが出来る。 ・openメソッド … ・基本構造 open ("ファイル","モード")do |変数| 開いたファイルを使って行う処理 end ・モード:指定したファイルをどう扱うかを指定する。 r :読み込み専用 r+:読み込み/書き込み用 w :書き込み専用。指定したファイルを新規作成。 w+:読み込み/書き込み用。その他はwと同じ。 a :追加書き込み専用。存在しない場合は新規作成、既存の場 合はデータの末尾に続けて書込みを行う。 a+:読み込み/追加書き込み専用で、その他はaと同じ。 ・変数:printfやprintメソッドの表示先、getsメソッドの読み込み 元を指定する際に使用。任意の名前でよい。 ・読み込み元や読み込み先が複数ある場合の対応 STDIN.gets:キーボードからの読み込み 変数.gets :ファイルからの読み込み STDERR.print、STDERR.printf:ディスプレイへの表示 変数.print、変数.printf:ファイルへの出力 ・進数 … ・Rubyでの取扱い 接頭語なし:10進数 接頭語0b:2進数 接頭語0x:16進数 ・書式制御文字 %d:10進数 %b:2進数 %x:16進数 ※進数変換の手順は省略。 ・web作成(省略) ・GIMP操作、画像作成(省略) 2.プログラム問題 b) i.全ての年齢について書いたのではなく、4つの選択肢を作って、その番号を入 力してもらう形にした。 選択肢以外の番号や文字を入力した場合は、再入力を促すメッセージが出るよう にした。 文が長いため、sleepを使用して読みやすくする工夫をした。 ii.summer_b.rb #!/usr/koeki/bin/ruby print("今までの夏の思い出を振り返ってみたいと思います。\n") sleep(2) while true print("\nあなたが話を聞きたい年齢を選んで、番号を入力して下さい。\n") print("===========================\n") print("1.4歳(推定)の思い出\n") print("2.小学4年生の思い出\n") print("3.中学3年生の思い出\n") print("4.最近の思い出\n") print("===========================\n") print("選んだ番号: ") select = gets.chomp!.to_i #選んだ番号(整数)をキーボードから入力してもらう。 if select == 1 print("\n「1.4歳(推定)の思い出」を選択しました。\n") sleep(3) print("\n\n幼い頃、毎年夏になると家族で海水浴に行きました。\n") sleep(2) print("\n小さすぎてあまり覚えていないけれど、 両親と一緒に遊んだ砂浜の光景がうっすら記憶に残っています。\n") sleep(2) print("\n母ははしゃぐ父と私を写真に撮りながら、 生まれたばかりの妹をかかえて笑っていました。\n") sleep(2) print("\n海をバックに妹を抱いた父の写真が、 しばらく部屋の壁に飾ってあったような気がします。\n") sleep(3) print("\n\nその時遊んだ海は、今年の震災で被害を受けました。\n") sleep(2) print("\n震災のあと、まだそこを訪れられていないので、 できるだけ近いうちに行きたいと思っています。\n") sleep(2) print("\n十何年ぶりなので楽しみです。 不安もありますが、思い出の場所として覚えていたいです。\n") sleep(3) print("\n\nおしまい。\n") sleep(2) break elsif select == 2 print("\n「2.小学4年生の思い出」を選択しました。\n") sleep(3) print("\n\n小4の夏、4泊5日の野外宿泊体験に参加しました。\n") sleep(2) print("\n初めての一人旅!色んなことを満喫。\n") sleep(2) print("\n初めて会う子達と班行動、テント、いかだ作り、カヤック、釣り、ご飯作り。\n") sleep(2) print("\nキャンプファイヤーの余興で 「となりのト●ロ」のパロディ劇をしたのもいい思い出です。\n") sleep(2) print("\nあの時仲良くなったみんなは今どうしているんだろう?\n") sleep(2) print("\nきっともう会うことは無いけれど、 あだ名を覚えているほどインパクトの強い人達でした。笑\n") sleep(3) print("\n\nおしまい。\n") sleep(2) break elsif select == 3 print("\n「3.中学3年生の思い出」を選択しました。\n") sleep(3) print("\n\n中学生最後の夏休み。\n") sleep(2) print("\n保育園からずっと一緒に過ごして来た同級生の何人かと 学校のプールで水中バレーボールをしたのがいい思い出。\n") sleep(2) print("\n最後にはただのドッジボールになってたっけ。笑\n") sleep(2) print("\n真夏の陽射しの中で、男女関係なく本気になって疲れるまで遊んだ。\n") sleep(2) print("\nいま思い出すと若かったなー。感心するな。\n") sleep(2) print("\nあれ以来泳いでないけれども、いま泳げるんだろうか……。\n") sleep(3) print("\n\nおしまい。\n") break elsif select == 4 print("\n「4.最近の思い出」を選択しました。\n") sleep(3) print("\n\n今年の8月の終わり、私は仙台にいた。\n") sleep(2) print("\n「ARABAKI ROCK FEST.11」に参戦するためだった。\n") sleep(2) print("\n2日間、仙台駅からシャトルバスで50分かけて行った。\n") sleep(2) print("\nバスの待ち時間が1時間以上かかり、 楽しみにしていたライブを見逃したりもした。本当に泣きたかった。\n") sleep(3) print("\n\nこのフェスに一緒に行った友達を通して、新しい友だちも増えた。\n") sleep(2) print("\nそして色んなアーティストを見て、色んな音楽を聴いた。 全力ではしゃいだり、じっと見つめて聴き入ったりもした。\n") sleep(2) print("\n初めて参加したフェスだったけれど、 中止にならなくて本当に良かった。\n") sleep(2) print("\n宮城や山形や福島出身のアーティストもいて、 東北の復興へ大きなエネルギーをくれる演奏だったように思う。\n") sleep(2) print("\n来年は今までどおり4月に行われるとのことで、 ARABAKI史上最初で最後の夏フェスになるようだ。\n") sleep(2) print("\n都市フェスにはない良さがあるこのフェスに、 これからも行きたいと強く思った。\n") sleep(3) print("\n\nおしまい。\n") break else print("\n入力エラーです。数字で再入力してください。\n") sleep(2) redo end end iii.もとにしたプログラム:特になし。 iv.プログラム実行結果 ●正しい選択肢を入力した場合 pan{c110064}% ./summer_b.rb [~/Ruby] 今までの夏の思い出を振り返ってみたいと思います。 あなたが話を聞きたい年齢を選んで、番号を入力して下さい。 =========================== 1.4歳(推定)の思い出 2.小学4年生の思い出 3.中学3年生の思い出 4.最近の思い出 =========================== 選んだ番号: 1 「1.4歳(推定)の思い出」を選択しました。 幼い頃、毎年夏になると家族で海水浴に行きました。 小さすぎてあまり覚えていないけれど、 両親と一緒に遊んだ砂浜の光景がうっすら記憶に残っています。 母ははしゃぐ父と私を写真に撮りながら、 生まれたばかりの妹をかかえて笑っていました。 海をバックに妹を抱いた父の写真が、 しばらく部屋の壁に飾ってあったような気がします。 その時遊んだ海は、今年の震災で被害を受けました。 震災のあと、まだそこを訪れられていないので、 できるだけ近いうちに行きたいと思っています。 十何年ぶりなので楽しみです。 不安もありますが、思い出の場所として覚えていたいです。 おしまい。 pan{c110064}% ./summer_b.rb [~/Ruby] 今までの夏の思い出を振り返ってみたいと思います。 あなたが話を聞きたい年齢を選んで、番号を入力して下さい。 =========================== 1.4歳(推定)の思い出 2.小学4年生の思い出 3.中学3年生の思い出 4.最近の思い出 =========================== 選んだ番号: 2 「2.小学4年生の思い出」を選択しました。 小4の夏、4泊5日の野外宿泊体験に参加しました。 初めての一人旅!色んなことを満喫。 初めて会う子達と班行動、テント、いかだ作り、カヤック、釣り、ご飯作り。 キャンプファイヤーの余興で 「となりのト●ロ」のパロディ劇をしたのもいい思い出です。 あの時仲良くなったみんなは今どうしているんだろう? きっともう会うことは無いけれど、 あだ名を覚えているほどインパクトの強い人達でした。笑 おしまい。 pan{c110064}% ./summer_b.rb [~/Ruby] 今までの夏の思い出を振り返ってみたいと思います。 あなたが話を聞きたい年齢を選んで、番号を入力して下さい。 =========================== 1.4歳(推定)の思い出 2.小学4年生の思い出 3.中学3年生の思い出 4.最近の思い出 =========================== 選んだ番号: 4 「4.最近の思い出」を選択しました。 今年の8月の終わり、私は仙台にいた。 「ARABAKI ROCK FEST.11」に参戦するためだった。 2日間、仙台駅からシャトルバスで50分かけて行った。 バスの待ち時間が1時間以上かかり、 楽しみにしていたライブを見逃したりもした。本当に泣きたかった。 このフェスに一緒に行った友達を通して、新しい友だちも増えた。 そして色んなアーティストを見て、色んな音楽を聴いた。 全力ではしゃいだり、じっと見つめて聴き入ったりもした。 初めて参加したフェスだったけれど、 中止にならなくて本当に良かった。 宮城や山形や福島出身のアーティストもいて、 東北の復興へ大きなエネルギーをくれる演奏だったように思う。 来年は今までどおり4月に行われるとのことで、 ARABAKI史上最初で最後の夏フェスになるようだ。 都市フェスにはない良さがあるこのフェスに、 これからも行きたいと強く思った。 おしまい。 ●選択肢以外を入力したとき pan{c110064}% ./summer_b.rb [~/Ruby] 今までの夏の思い出を振り返ってみたいと思います。 あなたが話を聞きたい年齢を選んで、番号を入力して下さい。 =========================== 1.4歳(推定)の思い出 2.小学4年生の思い出 3.中学3年生の思い出 4.最近の思い出 =========================== 選んだ番号: r 入力エラーです。数字で再入力してください。 あなたが話を聞きたい年齢を選んで、番号を入力して下さい。 =========================== 1.4歳(推定)の思い出 2.小学4年生の思い出 3.中学3年生の思い出 4.最近の思い出 =========================== 選んだ番号: 5 入力エラーです。数字で再入力してください。 あなたが話を聞きたい年齢を選んで、番号を入力して下さい。 =========================== 1.4歳(推定)の思い出 2.小学4年生の思い出 3.中学3年生の思い出 4.最近の思い出 =========================== 選んだ番号: a 入力エラーです。数字で再入力してください。 あなたが話を聞きたい年齢を選んで、番号を入力して下さい。 =========================== 1.4歳(推定)の思い出 2.小学4年生の思い出 3.中学3年生の思い出 4.最近の思い出 =========================== 選んだ番号: 入力エラーです。数字で再入力してください。 あなたが話を聞きたい年齢を選んで、番号を入力して下さい。 =========================== 1.4歳(推定)の思い出 2.小学4年生の思い出 3.中学3年生の思い出 4.最近の思い出 =========================== 選んだ番号: 3 「3.中学3年生の思い出」を選択しました。 中学生最後の夏休み。 保育園からずっと一緒に過ごして来た同級生の何人かと 学校のプールで水中バレーボールをしたのがいい思い出。 最後にはただのドッジボールになってたっけ。笑 真夏の陽射しの中で、男女関係なく本気になって疲れるまで遊んだ。 いま思い出すと若かったなー。感心するな。 あれ以来泳いでないけれども、いま泳げるんだろうか……。 おしまい。 v.考察 選んだ番号の文章が表示されたことと、 入力ミスした場合でも、プログラム通りやり直しが出来たことから、 プログラムは正しく動いていると考えられる。 3.感想 筆記問題の前期の復習をするにあたり、神田先生のページを参考にした。 内容をまた自分で見返せるよう、その部分だけを.txtのファイルに保存しておい た。 今回のレポートに取り組んだことで、習ったきり使わずにいたため忘れていた部 分を思い出すことが出来た。また、前よりもそれぞれの項目の理解が進んだので、 とてもよかった。 プログラムに関して、若干文章に力を入れすぎた感もあるが、その文読みやすく なるよう工夫した点は上手くいったと思う。 前期の復習にだいぶ時間を取られてしまったので、次回からは最後のプログラム 問題まで取り組みたい。 4.参考文献など 基礎プログラミング I 第 1 回 UNIXの操作 神田直弥 http://roy/~naoya/ruby/1.html 基礎プログラミングI 第 2 回 プログラミングの基礎 神田直弥 http://roy/~naoya/ruby/2.html 基礎プログラミングI 第 3 回 値の型変換・演算子 神田直弥 http://roy/~naoya/ruby/3.html 基礎プログラミングI 第 4 回 制御構造[1] 神田直弥 http://roy/~naoya/ruby/4.html 基礎プログラミングI 第 5 回 制御構造[2] 神田直弥 http://roy/~naoya/ruby/5.html 基礎プログラミングI 第 6 回 配列 神田直弥 http://roy/~naoya/ruby/6.html 基礎プログラミングI 第 7 回 正規表現 神田直弥 http://roy/~naoya/ruby/7.html 基礎プログラミングI 第 8 回 ファイルの入出力 神田直弥 http://roy/~naoya/ruby/8.html 基礎プログラミングI 第 9 回 16進数・ASCIIコード 神田直弥 http://roy/~naoya/ruby/9.html 共同学習者:xxxxxxxx