講評: 行ごとに説明するときに工夫がなされていました。 少し読みにくいのでたとえば 3: や、 (3行目) などと書くと観やすくていいかもしれません。 ---- 10 月 3 日 第 1 回レポート 「前期の復習」 学籍番号: C106XXXX 氏名: XXXXXXXX 語学クラス: XXXX語 XX 系: XXXX系 1. Emacs ファイルを開く Ctrl-x Ctrl-f ファイルを保存 Ctrl-x Ctrl-s Emacs の分裂 Ctrl-x 5 2 Emacs の数を減らす Ctrl-x 5 0 mew mew に添付 Ctrl-c Ctrl-a ↓ 添付するファイルを指定 c ↓ 指定したら2回リターンキーを押す 送信 Ctrl-c Ctrl-c 受信 i MAILER-DAEMON@ failure notice が受信された場合は、 宛先アドレスが間違っているため送信できなかったということである。 ktermの操作 cd Ruby cdの後のDirectoryにはいる。この場合はRubyである。 ls -l Directoryの中身を表示する。 chmod +x review.rb chmod +x の後のファイルを実行可能な状態にする。 ./review.rb ./の後のファイルを実行する。 bc -l 手計算 プログラム print("表示したい文章 \n") 表示したい文章を表示。 printf("%s \n", 変数) 変数にはいっているものが表示される。 \n 改行文字。 "" 文字列を代入するときに用いる。 %s 文字列 string を出力するときに用いる。 \t 横幅を空ける。 %d 整数の値を出力するときに用いる。 STDERR.print("入力を促す文章") 文字列の入力を促すときに用いる。 変数 = gets.chomp! 入力された文字列を切り取り、 変数に記憶させる。 変数 = gets.chomp!.to_i 入力された文字列を切り取って整数に変換 して、変数に記憶させる。 変数 = gets.chomp!.to_f 入力された文字列を切り取って小数に変換 して、変数に記憶させる。 to_i … %d 整数値のときに用いる。 to_f … %f 小数値のときに用いる。 to_s … %s 文字列のときに用いる。 今回始めて学んだこと %整数s 整数分だけスペースを空けて、右詰めに文字列を表示 %整数d 整数分だけスペースを空けて、右詰めに文字列を表示 %整数.整数f 全体で空けるスペースの数.そのうちの小数点以下の スペースの数 %負の整数s 整数分だけスペースを空けて、左詰めに文字列を表示 %負の整数d 整数分だけスペースを空けて、左詰めに文字列を表示 2. A. 今年の夏の思い出について語るプログラム summer_a.rb #!/usr/koeki/bin/ruby print("\nわたしの夏の一番の思い出は…\n\n") sleep 2 print("友達と海でBBQをしたことです。\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 2 print("もう最高ですね(笑)\n\n") sleep 2 print("まぁともかく\n\n") sleep 2 print("私にとってはとても充実した夏休みになりました。\n\n") 考えた設定 夏の一番の思い出をプログラムにした。 作成したプログラムコード print を用いて出力させた。 語っているように見せるため、sleepを用いて出力させる秒数を調整した。 実行結果 irsv{c106089}% ./summer_a.rb [~/Ruby] わたしの夏の一番の思い出は… 友達と海でBBQをしたことです。 夜に(笑) 正直暗くて何も見えません。 そんな中で私達は懐中電灯を持ちながら必至に肉を焼きました。 友達は海に入ってとても寒い思いをしました。 トイレがなく、いちいちコンビニまで車で移動しなければならないという便利の悪さ もう最高ですね(笑) まぁともかく 私にとってはとても充実した夏休みになりました。 結果の考察 夏の日の思い出が正常に出力された。 B. 幼少の夏の思い出について語るプログラム 何歳の思い出について聞きたいかを尋ねたあと、 その年の思い出を語るプログラム summer_b.rb #!/usr/koeki/bin/ruby 1 STDERR.printf("\n何歳の思い出について語りましょうか? \n 1. 8歳 2. 10歳 3. 12歳\n 番号を入力して下さい : ") 2 poroporo = gets.chomp! 3 if poroporo == "1" 4 sleep 2 5 print("\n8歳の思い出…\n\n") 4 sleep 2 5 print("犬を飼いました。\n") 4 sleep 2 5 print("柴犬です。\n") 4 sleep 2 5 print("名前はベルと名付けました。\n") 4 sleep 2 5 print("今年でベルは12歳\n") 4 sleep 2 5 print("老犬にも関らず毎日元気に走りまわります。\n") 6 end 3 if poroporo == "2" 4 sleep 2 5 print("\n10歳の思い出…\n\n") 4 sleep 2 5 print("それは担任だった阿部先生(笑)\n") 4 sleep 2 5 print("阿部先生のインパクトはとにかく強烈で、、\n") 4 sleep 2 5 print("あのヒゲは忘れられません(笑)\n") 6 end 3 if poroporo == "3" 4 sleep 2 5 print("\n12歳の思い出…\n\n") 4 sleep 2 5 print("卒業式の日\n") 4 sleep 2 5 print("ものすごく号泣しました。\n") 4 sleep 2 5 print("別れがツライというよりも\n") 4 sleep 2 5 print("思い出がいっぱい溢れてきたんです。\n") 6 end 考えた設定 何歳の思い出か選び、 if を用いて選択した思い出を出力させるプログラムを作ろうと考えた。 プログラムの解説 1 STDERR.print により 何歳の思い出について語りましょうか? と尋ねた後に 1. 8歳 2. 10歳 3. 12歳 番号を入力して下さい: と表示させるプログラムである。 これにより思い出を選ぶことが可能になる。 2 gets.chomp! により、変数poroporo に入力した番号が記憶される。 3 if により 変数poroporo に入力された番号のプログラムが出力される。 もし 1 が入力されたら 8歳の思い出のプログラムが出力される。 もし 2 が入力されたら 10歳の思い出のプログラムが出力される。 もし 3 が入力されたら 12歳の思い出のプログラムが出力される。 4 print により思い出を表示させる。 5 語らせるように見せるため、sleep により、 print で表示させる秒数を調整した。 6 この end は if を終了させるための end である。 実行結果 1を選択 irsv{c106089}% ./summer_b.rb [~/Ruby] 何歳の思い出について語りましょうか? 1. 8歳 2. 10歳 3. 12歳 番号を入力して下さい : 1 8歳の思い出… 犬を飼いました。 柴犬です。 名前はベルと名付けました。 今年でベルは12歳 老犬にも関らず毎日元気に走りまわります。 実行結果 2を選択 irsv{c106089}% ./summer_b.rb [~/Ruby] 何歳の思い出について語りましょうか? 1. 8歳 2. 10歳 3. 12歳 番号を入力して下さい : 2 10歳の思い出… それは担任だった阿部先生(笑) 阿部先生のインパクトはとにかく強烈で、、 あのヒゲは忘れられません(笑) 実行結果 3を選択 irsv{c106089}% ./summer_b.rb [~/Ruby] 何歳の思い出について語りましょうか? 1. 8歳 2. 10歳 3. 12歳 番号を入力して下さい : 3 12歳の思い出… 卒業式の日 ものすごく号泣しました。 別れがツライというよりも 思い出がいっぱい溢れてきたんです。 実行結果の考察 結果を見てもわかるように、正常に if が動作して出力されている。 C. 自分の略歴データから履歴書を出力し、 データから年齢や年号を計算して表示させるプログラム 。 application.rb #!/usr/koeki/bin/ruby 1 rire = Array.new 2 print("データファイルから計算して表示させます:\n") 3 while rire_data = gets 4 if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~rire_data 5 rire[1] = $1 5 rire[2] = $2 5 rire[3] = $3 5 rire[4] = $4 6 keisan = $1.to_i 7 end 8 keisan -= 1988 9 printf("%10d年(平成%2d)%2d月%2d日 %d歳 \t%-30s\n", rire[1], keisan, rire[2], rire[3], keisan, rire[4]) 10 end 2 print("計算終了\n") データファイル application.dat 2003 3 31 余目町立余目中学校卒業 2003 4 1 山形県立酒田工業高等学校入学 2006 3 31 山形県立酒田工業高等学校卒業 2006 4 1 東北公益文科大学入学 2010 3 31 東北公益文科大学卒業見込み 考えた設定 データファイルから履歴書のように出力し、 そこから年齢と平成何年かを計算するプログラムを考えた。 データファイルは自分の略歴を表したものである。 プログラムの解説 1 配列を新規につくるプログラム。 2 print により表示させる。 3 while により 10 までが繰り返される。 gets により変数rire_data にデータが取り込まれる。 4 変数rire_data に入っているデータを分解するプログラム。 5 rire[1] は $1 つまりデータファイルの1列目のデータをしまう変数 rire[2] は $2 つまりデータファイルの2列のデータをしまう変数 rire[3] は $3 つまりデータファイルの3列のデータをしまう変数 rire[4] は $4 つまりデータファイルの4列のデータをしまう変数 6 rire[1]から直截計算することができないため、 変数keisan に $1 つまり1列目のデータをしまう。 7 if の終了 8 keisan から1988を引くプログラム。 これにより年齢と平成何年か計算される。 9 printにより表示させる。 \t は横幅を空ける。 %負の整数 で 整数分だけ箱を空けて、左詰めに文字列を表示 %整数 で 整数分だけ箱を空けて、右詰めに文字列を表示 10 while がこの end まで繰り返される。 実行結果 irsv{c106089}% ./application.rb application.dat [~/Ruby] データファイルから計算して表示させます: 2003年(平成15) 3月31日 15歳 余目町立余目中学校卒業 2003年(平成15) 4月 1日 15歳 山形県立酒田工業高等学校入学 2006年(平成18) 3月31日 18歳 山形県立酒田工業高等学校卒業 2006年(平成18) 4月 1日 18歳 東北公益文科大学入学 2010年(平成22) 3月31日 22歳 東北公益文科大学卒業見込み 計算終了 実行結果の考察 手計算 irsv{c106089}% bc -l [~] 2003 - 1988 15 2006 - 1988 18 2010 - 1988 22 よってこのプログラムの計算は正常に動作していると証明できる。 3. 今回のレポートでは前期で学んだことを思いだすことができた。 配列に関しては全く覚えておらず、2のCの問題を解くのが手間取ってしまった。 特に、データファイルを記憶させた 変数rire から直接引くことができず、 何時間もどのようにして引けばいいのか考えた。 2のAの問題は、print が主体だったので楽に解けた。 2のBの問題は、私なりに if を用いたのはいいのだが、思いだすのに時間が かかった。 このレポートで思いだしたことを忘れずに、これからも頑張っていきたい。