講評: 確認しました。他の学生のレポートをヒントに、 今回の疑問に取り組んでみて下さい。 ---- 添付を忘れてしまったので、添付したものです。すいません 10 月 3 日 第 1 回レポート 「前期の復習」 学籍番号:c106XXXX 氏名:XXXXXXXX 語学クラス:XXXX語XX 系: XXXX系 1、 #!/usr/koeki/bin/ruby → Ruby 言語を使うと宣言すること print("") → print 文という実行文 ("") この中に表示する文を書く /n → 改行。これが抜けると、文か出力されたのか分からない。また、改行されず に表示されることになる。 printf → printf 変数を表示する実行文 while -- end → 繰り返す実行文を -- のなかに書く。end で終了を表す。 STDERR.print → 実行時にエラーメッセージを Kterm に表示させるときに使う gets → 入力されたデータを取りこむ chomp → 改行文字の有無を調べる to_i → 文字列を整数に変換する to_f → 文字列を小数に変換する while true -- end → 何度も繰り返すときに使う。end で終了を表す if -- end → 条件をつけ、その場合のみ実行する。end で終了を表す open -- end → ファイルを指定し、データを開いて読みこむ。end で終了を表す /v → 縦に行間を空ける sleep → sleep の後に数字を置くとその秒数の間時間が空いて、次の文が表示される 2-A a,山形に行って来たときのことを語るプログラム。 b,#!/usr/koeki/bin/ruby print("【山形に行って来たよっ!!】\n") # print ("")のなかの文字を表示させる sleep 2 # 2秒間停止 print("\v" * 2) # \v 縦に行をあける print("友達と一緒に山形にバスで行って来た日のこと。\n") print("本当は去年一緒に行こうと約束していたにもかかわらず、私がバイトの休みを貰うのを忘れてしまったため、今年まで伸びた今日この日。\n") print("ドキドキしながらバスに乗り込み、待つこと2時間弱。\n") print("ようやく山形駅前までつき、そこからまたバスでビックウィングまで直行!!\n") print("待ちに待った子の瞬間。中に入ってみると!\n") print("中はがらがら。\n") print("一応中を見回ってみるけれど、たいして面白くもない。むしろつまんなーい!!\n") print("意気込んで来たにもかかわらず、面白くもなくふたりで顔を見合わせ「どうする?出る?」「でよっか」と瞬時に決断。\n") print("今度はもっと都会に行ってみたいとつくづく思った日であった。\n") print("\v" * 2) print("終わり\n") c,元にしたプログラム (review.rb) [ 変更点 ] print文のみ残し、print文を増やして改行しつつ作文のような形にしている。 また、行間を空けたり、数秒間停止するようにもした。 L6,18、行間を空ける。 L5、2秒停止する。 d,% ./summer_a.rb [~/Ruby] 【山形に行って来たよっ!!】 友達と一緒に山形にバスで行って来た日のこと。 本当は去年一緒に行こうと約束していたにもかかわらず、私がバイトの休みを貰うのを忘れてしまったため、今年まで伸びた今日この日。 ドキドキしながらバスに乗り込み、待つこと2時間弱。 ようやく山形駅前までつき、そこからまたバスでビックウィングまで直行!! 待ちに待った子の瞬間。中に入ってみると! 中はがらがら。 一応中を見回ってみるけれど、たいして面白くもない。むしろつまんなーい!! 意気込んで来たにもかかわらず、面白くもなくふたりで顔を見合わせ「どうする?出る?」「でよっか」と瞬時に決断。 今度はもっと都会に行ってみたいとつくづく思った日であった。 終わり 2-B a,[ 考えた設定 ] 自分のはずかしーい過去を語るプログラム。(ゲーム風味) b,[ 作成したプログラム ] #!/usr/koeki/bin/ruby age1 = ["1:5歳"," 2:6歳"] # 問題を用意する。配列 age age2 = ["1:11歳"," 2:12歳"] age3 = ["1:18歳"," 2:19歳"] print("これは私のはずかしーい過去を赤裸々に語るプログラムです。\n") print("一切の苦情は受け付けませんのであしからず。\n") STDERR.print("次のうち、聞きたい歳の記号を選べっ!!\n") STDERR.print("ただし、一問二者択一です。よって、どちらかひとつに赤裸々に語っております。見なくてもまあ、別に良。では、さくさくと行こー!!\n") STDERR.print("\v" * 2) # \v 縦に行間をあける STDERR.printf("[ %s ]\n",age1) past = gets.chomp.to_i # past に gets.chomp した文字列を代入する # to_i で文字列を整数に切り替える STDERR.print("\v" * 2) #age == 1 if past == 1 print("5歳。\n") print("まだ小学生になる前の私。ええ、あの頃はまだ何もわかっていませんでした。そう、それほどまでにアホだったと!!\n") sleep 2 # 2秒間停止 print("当時の私、自分の苗字はちゃんと「佐藤」だとわかっていました。\n") print("\v" * 2) sleep 2 print("た・だ・し\n") print("\v" * 2) sleep 2 print("家族の苗字をわかっていませんでした。\n") print("そう、わかっていなかったんです。この時点でアホ確定。\n") print("その頃は一人一人に苗字があると思ってたんですね。ようするに、祖父には「加藤」祖母には「伊藤」父には「飯野」など、と。みんな苗字が違うと思ってたんです。\n") print("はい、だめだめですね。次、行ってみよう!!\n") else print("6歳は特に何もないですね〜\n") end # if に対応する end #end STDERR.printf("\v" * 2) STDERR.printf("[ %s ]\n",age2) past = gets.chomp.to_i STDERR.print("\v" * 2) #age == 2 if past == 2 print("この頃は常識がついているはずなのに私ときたら……\n") print("小学生最後の思い出、修学旅行の日のこと。その出来事は起こりました。\n") print("それはある旅館に泊まったときのことでした。その旅館、パンフではとても綺麗なのに対し実際はそれほどでもないのです、という話は置いといて。\n") print("その日の夜、疲れ果てて眠い私。早々に敷いてある布団にもぐりこみ、寝ようとしたのですが、\n") print("浮かれていたのでしょうね、廊下で同級生が騒ぐ、騒ぐ!!\n") print("それはもう、寝ている私に聞こえる程に、煩くて、煩くて、煩くて\n") print("自分の中の勘忍袋の緒が切れ、\n") sleep 2 print("一緒に部屋にいる友達にキレました(汗)\n") sleep 2 print("言っておきますが、友達に非はありません。むしろ悪いのは騒ぐクラスメイト。\n") print("それにもかかわらず、私は更に友達に、土下座までさせてしまったのですよーーーーーーーーーーっ!!!!!!!!!!!\n") print("現在も反省中です。みなさんも悪くない人に土下座させないように気を付けて☆\n") else past == 1 print("11歳は特に何もなかったような。あー、痛い記憶がありますね。それはまた今度☆\n") end # if(past=2) に対応する end #end STDERR.print("\v" * 2) STDERR.printf("[ %s ]\n",age3) past = gets.chomp.to_i STDERR.print("\v" * 2) #age = 3 if past == 2 print("あー、最近のことですねー。\n") print("ある日わたしは母親からひとつのお守りをもらいました。\n") print("「これ車につけなさい」と母が言うのでとりあえず疑問を持たず車につけてみました。ええ、一切の疑問を持たず。\n") print("その後、母親に言いました。「ちゃんと車につけたよ〜」と。\n") print("その瞬間母親がちょっと変な顔をしました。\n") sleep 5 print("母親「……車につけたの?」\n") sleep 2 print("私「うん!!」(勢い良く)\n") sleep 2 print("母親「……あれ、『学業成就』のお守りなのに?」\n") sleep 2 print("私「え、だって車につけろって言ったじゃん」\n") sleep 2 print("母親「そう言われたからって、そうする?」\n") sleep 2 print("私「うん、する!! むしろもうしちゃったし?」\n") sleep 2 print("母親「なら、いいや」\n") sleep 2 print("ははは、呆れられました。当たり前ですか。当たり前ですね。一応これでもマジメにやったので、怒らないで下さいね。\n") print("笑ってくれたのであれば、本望!! さらばです。\n") else past == 1 print("この頃は嫌な記憶が渦を巻いているので秘密です(笑)\n") end # if に対応する end #end STDERR.print("\v" * 4) sleep 4 STDERR.print("これで私のはずかしーい過去のお話しは終りです。まあ、まだいっぱいありますけど、ここでは終りということで。\n") STDERR.print("ここまでおつきあいありがとうございました。\n") c,[ 元にしたプログラム ] demo.rb [ 変更点 ] デモ版にはある「色」「バナー」をつけないことにした。 d,[ 結果画面 ] すべて正解の場合↓↓ ./summer_b.rb [~/Ruby] これは私のはずかしーい過去を赤裸々に語るプログラムです。 一切の苦情は受け付けませんのであしからず。 次のうち、聞きたい歳の記号を選べっ!! ただし、一問二者択一です。よって、どちらかひとつに赤裸々に語っております。見なくてもまあ、別に良。では、さくさくと行こー!! [ 1:5歳 2:6歳 ] 1 5歳。 まだ小学生になる前の私。ええ、あの頃はまだ何もわかっていませんでした。そう、それほどまでにアホだったと!! 当時の私、自分の苗字はちゃんと「佐藤」だとわかっていました。 た・だ・し 家族の苗字をわかっていませんでした。 そう、わかっていなかったんです。この時点でアホ確定。 その頃は一人一人に苗字があると思ってたんですね。ようするに、祖父には「加藤」祖母には「伊藤」父には「飯野」など、と。みんな苗字が違うと思ってたんです。 はい、だめだめですね。次、行ってみよう!! [ 1:11歳 2:12歳 ] 2 この頃は常識がついているはずなのに私ときたら…… 小学生最後の思い出、修学旅行の日のこと。その出来事は起こりました。 それはある旅館に泊まったときのことでした。その旅館、パンフではとても綺麗なのに対し実際はそれほどでもないのです、という話は置いといて。 その日の夜、疲れ果てて眠い私。早々に敷いてある布団にもぐりこみ、寝ようとしたのですが、 浮かれていたのでしょうね、廊下で同級生が騒ぐ、騒ぐ!! それはもう、寝ている私に聞こえる程に、煩くて、煩くて、煩くて 自分の中の勘忍袋の緒が切れ、 一緒に部屋にいる友達にキレました(汗) 言っておきますが、友達に非はありません。むしろ悪いのは騒ぐクラスメイト。 それにもかかわらず、私は更に友達に、土下座までさせてしまったのですよーーーーーーーーーーっ!!!!!!!!!!! 現在も反省中です。みなさんも悪くない人に土下座させないように気を付けて☆ [ 1:18歳 2:19歳 ] 2 あー、最近のことですねー。 ある日わたしは母親からひとつのお守りをもらいました。 「これ車につけなさい」と母が言うのでとりあえず疑問を持たず車につけてみました。ええ、一切の疑問を持たず。 その後、母親に言いました。「ちゃんと車につけたよ〜」と。 その瞬間母親がちょっと変な顔をしました。 母親「……車につけたの?」 私「うん!!」(勢い良く) 母親「……あれ、『学業成就』のお守りなのに?」 私「え、だって車につけろって言ったじゃん」 母親「そう言われたからって、そうする?」 私「うん、する!! むしろもうしちゃったし?」 母親「なら、いいや」 ははは、呆れられました。当たり前ですか。当たり前ですね。一応これでもマジメにやったので、怒らないで下さいね。 笑ってくれたのであれば、本望!! さらばです。 これで私のはずかしーい過去のお話しは終りです。まあ、まだいっぱいありますけど、ここでは終りということで。 ここまでおつきあいありがとうございました。 すべて不正解の場合↓↓ ./summer_b.rb [~/Ruby] これは私のはずかしーい過去を赤裸々に語るプログラムです。 一切の苦情は受け付けませんのであしからず。 次のうち、聞きたい歳の記号を選べっ!! ただし、一問二者択一です。よって、どちらかひとつに赤裸々に語っております。見なくてもまあ、別に良。では、さくさくと行こー!! [ 1:5歳 2:6歳 ] 2 6歳は特に何もないですね〜 [ 1:11歳 2:12歳 ] 1 11歳は特に何もなかったような。あー、痛い記憶がありますね。それはまた今度☆ [ 1:18歳 2:19歳 ] 1 この頃は嫌な記憶が渦を巻いているので秘密です(笑) これで私のはずかしーい過去のお話しは終りです。まあ、まだいっぱいありますけど、ここでは終りということで。 ここまでおつきあいありがとうございました。 2-C a,履歴書プログラム b,[ 作成したプログラム ] #!/usr/koeki/bin/ruby STDERR.print "西暦を入れて下さい : " pattern = STDIN.gets.chomp request = Regexp.new(pattern, true, "e") open("application.dat","r") do |candidate| while history = candidate.gets if request =~ history if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ history printf("学校名は%s\n", $4) end end STEDRR.printf("月日を入れて下さい :\n") if request1 =~ history if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ history printf("学校名は%s\n", $4) end end end end c,[ 元にしたプログラム] readdata.rb [ 変更点 ]./application.rb [~/Ruby] 西暦を入れて下さい : 2006 学校名は山形県立鶴岡北高等学校卒業 学校名は私立東北公益文科大学入学 station を history に変更 西暦をいれることでその頃の履歴が出るようにした。 d,[ 結果画面 ] ./application.rb [~/Ruby] 西暦を入れて下さい : 2006 学校名は山形県立鶴岡北高等学校卒業 学校名は私立東北公益文科大学入学 [ 考察 ] A))少し時間を空けたり行間を空けたりして作文のような感じにすることは出来 たが、もっとプログラムらしく、文字が流れ出るようにしたり驚きを含んだとこ ろをもっと大きく表示させれば良かったと思った。 B))これはほとんど元にしたプログラムと同じになってしまった。本当はゲーム 風味にするつもりではなく、 「 1、2歳 2、4歳 3、6歳 」 というふうに選択肢を出して、そこから聞きたい年齢の記号を入力するとその時 の話が出てくるといった感じにしたかったのだが、どうすればいいのか分からず、 今の形になったので、今度は今回出来なかった方法にチャレンジしてみたいと思 う。 C))open -- end を使い西暦を入力するとその時の履歴が出てくるようにしたが、 その時の年齢や年号を計算するようなプログラムを作ることが出来なかった。 もう一度やり直して計算出来るようなプログラムを作りたいと思う。 [ 参考文献 ] 西村先生のホームページ 基礎プログラミング1(1〜9まで) 3、感想 夏休み中全くプログラムを作っていなかったので、プログラムの書き方から忘れ てしまっており、ここまで作るのに苦労した。また、前期の復習がなっておらず、 今回プログラムを作る課程で前期で勉強したことを振り返ってみると今だ分かっ ていないことが多いことが分かり、まだまだ勉強不足だと感じた。 今回復習してみて、while -- end と while true -- end の違いが良く分からな いことに気づいた。どちらも繰り返しのときに使うものだと思うのだが、その違 いをちゃんと調べて次回に望もうと思う。