参考文献の書き方が正しくありませんが、 レポートの書き方はこのように書くと、自分でも何を書いたかよく分かる だろうと察せられるレポートです。 ----- 第3回 基礎プログラミング I レポート課題 XXXXXXXX C109XXXX 英語3 政策マネジメント 1-A. if [変数] == "quit" # もし入力された文字が"quit"と全く等しい場合 break # 計算し続ける状況 (while true) から抜ける end # ifの設定は終わり という文を[while true - end]の途中に挟むと、quit で終了することができる。 2. Bを選んだ。 a) 授業で作成した while_calory.rb をもとにプログラムを作成した。 while_calory.rb も、数値を入力することで一日の合計を出し、 その合計を、入力した回数で割らせることで、 一回の平均を出すことができるプログラムであったので、 変数の変更や、10進数表記への変更だけで、 設問の条件を満たすプログラムを作成できると考え、 while_average.rb を作成した。 b) 作成したプログラム #!/usr/koeki/bin/ruby step = 0 # 記録を開始する前(当然0) total = 0 # 記録を開始する前の合計(当然0) k = 0 # 記録を開始する前の回数(当然0) while true # 永遠に計算し続ける(今回は条件付けで終了させている) STDERR.print("1時間に何歩歩きましたか?: ") # ""の中が、プログラムを実行させたときに出るメッセージ step = gets.chomp # getsは実行したときに入力される文字で、変数(step)に代入される。 しかしgetsだけでは入力したときに改行文字ごと読み込んでしまい、 表示が不自然に改行されてしまうので、 改行文字を取ってくれる .chomp を後ろに付けている。 if step == "quit" # もし入力された文字が quit と全く等しい場合、 break # 計算し続ける状況(while true) から抜ける end # ifの設定は終わり total += step.to_i # iなので小数は扱わない(fにすると扱う) k += 1 # 回数は一回ずつ増える end # while true の設定はこれで終わり printf("一日に %d 歩歩きました。\n", total) # 合計を実行したときに表示させる文の設定。 to_i を使ったことや、万歩計の場合の有功数字は10進法整数であることから、 %dで10進法整数で算出させている。(""の中が表示される。\nで改行) avg = total / k # 平均は合計を回数で割って出します。 printf("一時間あたりの平均 %d 歩 \n", total / k) # 平均を出したときに表示させる文の設定。 こちらも%dで10進数表示(""の中が表示され、\nで改行)。 c) もとのプログラムとの変更点 もとの while_calory.rb では変数がcalと指定されていたがここではstepとした。 またifの設定の中では、計算を終了させる時に入力する文字をquitとした。 ここについては変える必要はなかったが、1-Aの設問に合わせてquitにした。 while true の設定の中では、元のプログラムでは cal = cal.to_f と、 小数まで扱う設定だったが、万歩計では小数まで求めることは考えづらいので、 step = step.to_i とし、整数だけを取り扱うようにした。 total += step.to_i で合計の場合も同じく整数だけを取り扱うようにした。 .to_i と指定したのに合わせて、printf文の中でも %d と指定し、 整数だけを取り扱うようにした。 最後に""の中の文字列を万歩計という設定に適切だと思われるものに変更した。 d) 実行結果 pan{c109046}% ./while_average.rb [~/Ruby] 1時間に何歩歩きましたか?: 555 1時間に何歩歩きましたか?: 330 1時間に何歩歩きましたか?: 270 1時間に何歩歩きましたか?: 190 1時間に何歩歩きましたか?: 420 1時間に何歩歩きましたか?: quit 一日に 1765 歩歩きました。 一時間あたりの平均 353 歩 pan{c109046}% ./while_average.rb [~/Ruby] 1時間に何歩歩きましたか?: 2200 1時間に何歩歩きましたか?: 390 1時間に何歩歩きましたか?: 444 1時間に何歩歩きましたか?: 398 1時間に何歩歩きましたか?: 221 1時間に何歩歩きましたか?: 3743 1時間に何歩歩きましたか?: 5439 1時間に何歩歩きましたか?: 1045 1時間に何歩歩きましたか?: 6673 1時間に何歩歩きましたか?: 160 1時間に何歩歩きましたか?: 469 1時間に何歩歩きましたか?: quit 一日に 21182 歩歩きました。 一時間あたりの平均 1925 歩 e) bc -l を使って調べてみた結果 pan{c109046}% bc -l [~/Ruby] 555 + 330 + 270 + 190 + 420 1765 1765 / 5 353.00000000000000000000 2200 + 390 + 444 + 398 + 221 + 3743 + 5439 + 1045 + 6673 +160 +469 21182 21182 / 11 1925.63636363636363636363 f) 参考文献 「Ruby プログラミング基礎講座」 広瀬雄二 著 p38,39 「第3講 変数・制御構造 〜 3-5 よく使うメソッド 〜」 基礎プログラミング I 第3回 「キーボードから入力して計算させるには」 西村まどか http://roy/~madoka/2010/r1/03 3. 感想 前回はwhileのあとに条件をつけることで自動的に条件を満たすまで計算させる プログラミング文を学んだが、今回は手動で入力し、 しかも永遠に終わらせないようにしようと思えばできる、while true を学んだ。 しかしそれでは実用的でないので、終わらせるためのif文も学んだ。 また、実行し入力するときの問題点である改行については、 改行文字を取るメソッド .chomp を使えばいいということがわかった。 このように何かさせたいときにつけるのをメソッドという。 合計を出したいときには、.to_i や .to_f で数値変換をする。 また、プログラムの正確さを確かめるには2回は実行と 確かめ算をすべきだということも改めて知った。 それからtrrをするときに大きな画面にできることに附随して、 ウィンドウの最小化の方法もわかった。 何故今まで気がつかなかったのか不思議である。 また、課題の内容についての基礎・基本の指導がとても勉強になった。 大学生として、また将来のためにも、きちんと課題として提出できるような レポートを心掛けていきたい。 レポート課題については、実は前回よりも元のプログラムからの変更が少なく、 説明に力を入れたものの、若干不安である。 しかしプログラム全体を見てもさっぱりわからないというところから、 把握ができるようになってきて、考えていて楽しくなって来た。 これから難しくなっていくとは思うが、 投げ出さないで根気よく取り組んで行きたい。 共同学習者:笹原千珠子