第 7 回 専門演習紹介 レポート課題 氏名:齋藤允貴 学籍番号:C111069A 語学クラス:英語 2 コース:地域共創コース 1、今回の課題は、最高傑作のプログラムを作り、それをホームページで発表す るものであった。 今回は、後期の前回の授業でやった、「def_sumup.rb」を参考にして、金銭 感覚をチェックする「家計診断プログラム」を作成してみた。 a、作成したプログラムの仕様書となるものを「spec.txt」で作成し、前期でやっ た企画書と取り扱い説明を合体させた。 作成した仕様書は以下の通りである。 『仕様書』 【企画名】 家計診断センター 【企画内容】 普段、あなたはどれだけのお金を使いますか? このプログラムではこれまでに使った金額を入力していただきその使い方があっ ているかどうかを独自の目線で診断させていただきます。 このプログラムで自分の金銭感覚を見直しましょう。 『取り扱い説明』 【準備するもの】 プログラム本体をダウンロードし、ディレクトリ内に保存して下さい。 データ: economy.rb 【使用するさいの準備】 1、まず、Kterm の画面を出力します。 2、その後、「chmod +x economy.rb」を入力する。 例 pan{name}%chomd +x economy.rb これを使わないとファイルを作っても起動しなくなりますので 必ず入力するようにしてください。 ※この操作は、1 回だけやれば大丈夫です。 3、あとは、「./economy.rb」を入力すれば、開始することができます。 例 pan{name}%./economy.rb 2 回目以降は1 → 3の順にやれば起動することができます。 【使用方法】 このプログラムで金額を入力するときには、次のように入力してください。 ./economy.rb 金額 金額 … 金額 その後、合計金額と平均額が表示されます。 約 10 秒後に診断の結果が表示されます。 また、たとえ操作方法が分からなくなった場合は、「./economy.rb」だけ入力す ると操作方法がしっかりと表示されています。ぜひご活用下さい。 □ご意見 / ご感想□ このプログラムに関するご意見 / ご感想がありましたら、こちらまでお寄せ下さい。 c111069@e.koeki-u.ac.jp b、今回のプログラムは前回やったプログラム、「def_sumup.rb」を参考にした。 このプログラムで使用したのが「ARGV 配列」である。これを使うことによっ て、プログラムを起動した後に、ユーザーが入力した値に基づいて計算をす るプログラムである。 まず、ユーザーが値を入力しなかった場合のために、if 文を使って以下の 項目を作成した。 if ARGV[price] == nil # 数値の指定が無い場合 STDERR.print("あなたがこれまでにいくらのお金を使ったかチェックします。\n") STDERR.print("やり方: ./economy.rb 金額 金額 … 金額\n") STDERR.print("※レシートがあれば、合計金額を入力してね。\n") exit # プログラムの終わり end 次にwhile 文を使ってユーザーが入力した値を合計する項目を作成した。 以下の通りである。 while 0 < ARGV[price].to_f # ARGV[price] が0より大きい限り計算して いく ban << ARGV[price].to_f # ARGV を小数の値にして、ban に入れる。 total += ban[price] # 合計を表している total に ban[price]を 足していく。 price += 1 # price に 1 を足す end # while 文の終わり 次に平均を求める計算を入力した。 average = total / price # 平均は合計金額の[total] に 配列番号の [price]で割って平均を求める。 プログラムをやっていくときに入力した後、すぐに診断結果が出たのでは詰 まらないと思ったため、前回のプログラムでやった「downto_rocket.rb」を 参考にカウントダウン機能を使ってみた。 カウントダウン機能は、繰り返し methodの一つである、 「downto do --- end」を使って作成した。 downto do --- end の使い方は、 始める整数.downto(終りにする整数) do |変数| 変数の処理 end である。 それを参考にして作成したのが以下の通りである。 s0 = 10 # 最初の整数 s1 = 1 # 最後の整数 s0.downto(s1) do |go| printf("診断結果まで %d 秒前\n",go) # 変数を代入して 最後の整数の値までに 1 ずつ減らしていく。 sleep(1) # 1 秒感覚をあけて表示する。 end # downto の終わり 最後に、診断結果を表示するため、前回の授業のときにやったロールプレイ ングゲームの if 文を参考にして作成してみた。 診断結果を表示するために 3 種類の結果を表示してみることにした。 合計金額が 20000 円を超えた場合は、 「ちょっと使いすぎです!! 来月以降は金額を減らしましょう。」 合計金額が 13000 円未満の場合は、 「妥当な金額ですね。この調子で無駄遣いせず、有効活用しましょう。」 合計金額が 13000 円 〜 20000 円の場合は、 「結構使いましたね。 この金額をキープして下さいね。」 というように設定してみた。 これを if 文で表すと以下の通りになる。 if total > 20000 # 20000 円を超えた場合 print("ちょっと使いすぎです!! 来月以降は金額を減らしましょう。\n") elsif total <= 13000 # 13000 円未満の場合 print("妥当な金額ですね。 この調子で無駄遣いせず、有効活用しましょう。\n") else # 13000 〜 20000 円の間 print("結構使いましたね。 この金額をキープして下さいね。\n") end こうして作成したプログラムは以下の通りである。 #!/usr/koeki/bin/ruby #coding: euc-jp price = 0 # 変数として「price」を用いる。 if ARGV[price] == nil STDERR.print("あなたがこれまでにいくらのお金を使ったかチェックします。\n") STDERR.print("やり方: ./economy.rb 金額 金額 … 金額\n") STDERR.print("※レシートがあれば、合計金額を入力してね。\n") exit end ban = Array.new # 配列 「ban」を準備する total = 0 # 変数として「total」を用いる。 while 0 < ARGV[price].to_f ban << ARGV[price].to_f total += ban[price] price += 1 end average = total / price printf("合計 %d 円\n", total) # 合計金額を表示する print 文 printf("平均 %4.1f 円\n",average) # 平均を表示する print 文 s0 = 10 s1 = 1 s0.downto(s1) do |go| printf("診断結果まで %d 秒前\n",go) sleep(1) end print("-----診断結果-----\n") if total > 20000 print("ちょっと使いすぎです!! 来月以降は金額を減らしましょう。\n") elsif total <= 13000 print("妥当な金額ですね。 この調子で無駄遣いせず、有効活用しましょう。\n") else print("結構使いましたね。 この金額をキープして下さいね。\n") end 実行結果 数値を何も入力しなかった場合 pan{c111069}% ./economy.rb [~/public_html/adv2] あなたがこれまでにいくらのお金を使ったかチェックします。 やり方: ./economy.rb 金額 金額 … 金額 ※レシートがあれば、合計金額を入力してね。 数値を入力した場合 pan{c111069}% ./economy.rb 463 574 958 372 869 637 493 683 [~/public_html/adv2] 合計 5049 円 平均 631.1 円 診断結果まで 10 秒前 診断結果まで 9 秒前 診断結果まで 8 秒前 診断結果まで 7 秒前 診断結果まで 6 秒前 診断結果まで 5 秒前 診断結果まで 4 秒前 診断結果まで 3 秒前 診断結果まで 2 秒前 診断結果まで 1 秒前 -----診断結果----- 妥当な金額ですね。 この調子で無駄遣いせず、有効活用しましょう。 pan{c111069}% ./economy.rb 5800 1254 [~/public_html/adv2] 合計 7054 円 平均 3527.0 円 診断結果まで 10 秒前 診断結果まで 9 秒前 診断結果まで 8 秒前 診断結果まで 7 秒前 診断結果まで 6 秒前 診断結果まで 5 秒前 診断結果まで 4 秒前 診断結果まで 3 秒前 診断結果まで 2 秒前 診断結果まで 1 秒前 -----診断結果----- 妥当な金額ですね。 この調子で無駄遣いせず、有効活用しましょう。 pan{c111069}% ./economy.rb 5800 7482 350 [~/public_html/adv2] 合計 13632 円 平均 4544.0 円 診断結果まで 10 秒前 診断結果まで 9 秒前 診断結果まで 8 秒前 診断結果まで 7 秒前 診断結果まで 6 秒前 診断結果まで 5 秒前 診断結果まで 4 秒前 診断結果まで 3 秒前 診断結果まで 2 秒前 診断結果まで 1 秒前 -----診断結果----- 結構使いましたね。 この金額をキープして下さいね。 pan{c111069}% ./economy.rb 430 284 2199 5800 6358 [~/public_html/adv2] 合計 15071 円 平均 3014.2 円 診断結果まで 10 秒前 診断結果まで 9 秒前 診断結果まで 8 秒前 診断結果まで 7 秒前 診断結果まで 6 秒前 診断結果まで 5 秒前 診断結果まで 4 秒前 診断結果まで 3 秒前 診断結果まで 2 秒前 診断結果まで 1 秒前 -----診断結果----- 結構使いましたね。 この金額をキープして下さいね。 pan{c111069}% ./economy.rb 8474 3845 4937 4724 4943 4573 [~/public_html/adv2] 合計 31496 円 平均 5249.3 円 診断結果まで 10 秒前 診断結果まで 9 秒前 診断結果まで 8 秒前 診断結果まで 7 秒前 診断結果まで 6 秒前 診断結果まで 5 秒前 診断結果まで 4 秒前 診断結果まで 3 秒前 診断結果まで 2 秒前 診断結果まで 1 秒前 -----診断結果----- ちょっと使いすぎです!! 来月以降は金額を減らしましょう。 pan{c111069}% ./economy.rb 14864 83753 5938 5883 593 510 [~/public_html/adv2] 合計 111541 円 平均 18590.2 円 診断結果まで 10 秒前 診断結果まで 9 秒前 診断結果まで 8 秒前 診断結果まで 7 秒前 診断結果まで 6 秒前 診断結果まで 5 秒前 診断結果まで 4 秒前 診断結果まで 3 秒前 診断結果まで 2 秒前 診断結果まで 1 秒前 -----診断結果----- ちょっと使いすぎです!! 来月以降は金額を減らしましょう。 考察 pan{c111069}% bc -l [~/public_html/adv2] 463 + 574 + 958 + 372 + 869 + 637 + 493 + 683 5049 5049 / 8 631.12500000000000000000 quit pan{c111069}% bc -l [~/public_html/adv2] 5800 + 1254 7054 7054 / 2 3527.00000000000000000000 quit pan{c111069}% bc -l [~/public_html/adv2] 5800 + 7482 + 350 13632 13632 / 3 4544.00000000000000000000 quit pan{c111069}% bc -l [~/public_html/adv2] 430 + 284 + 2199 + 5800 + 6358 15071 15071 / 5 3014.20000000000000000000 quit pan{c111069}% bc -l [~/public_html/adv2] 8474 + 3845 + 4937 + 4724 + 4943 + 4573 31496 31496 / 6 5249.33333333333333333333 quit pan{c111069}% bc -l [~/public_html/adv2] 14864 + 83753 + 5938 + 5883 + 593 + 510 111541 111541 / 6 18590.16666666666666666666 quit どの実行結果も合計金額、平均を求める金額をしっかりと表示することができ た。また、診断結果のプログラムも合計金額に合わせてコメント文がしっかり と表示することができたので、このプログラムは成立する。 d、自分が作成したマネープログラム「家計診断センター」へのリンク先 http://roy/~c111069/adv2/ 2、感想 今回は専門演習紹介と題し各々のゼミでどんなことをしているのかを紹介し てもらったが、各ゼミともに色んなことをしていてとても驚いたが、参考に もなった。先輩方の話を聞くと、ゼミの見学ができるということだったので、 今日の話と来週の専門演習ガイダンスを参考にして自分に合った研究をする ことができるゼミに入りたいと思った。 そのためにも自分が興味のあるゼミには、積極的に見学や面談を行うように していきたい。 3、参考文献 http://roy/~madoka/2012/r2/06/r2_06_14_theme_11_commandline.html 西村まどか 基礎プログラミングII 第 6 回 目的に応じて使ってみよう 「コマンドライン入力と method をあわせてみよう」 http://roy/~madoka/2012/r2/06/r2_06_10_theme_08_while.html 西村まどか 基礎プログラミングII 第 6 回 目的に応じて使ってみよう 「while 文で入力するとき」 http://roy/~madoka/2012/r2/06/r2_06_11_theme_09_rubiocci.html 西村まどか 基礎プログラミングII 第 6 回 目的に応じて使ってみよう 「るびおっち」 http://roy/~madoka/2012/r1/08/r1_08_06_appendix_01_structure.html 西村まどか 基礎プログラミングI 第 8 回 電子チケットを作ろう 「HTML 文書の見本」 http://roy/~madoka/2012/r1/08/r1_08_05_review_05_cascadingstylesheet.html 西村まどか 基礎プログラミングI 第 8 回 電子チケットを作ろう 「CSS の復習」 http://roy/~madoka/2012/r1/08/r1_08_11_review_06_colorandfonts.html 西村まどか 基礎プログラミングI 第 8 回 電子チケットを作ろう 「色をつけよう」 http://roy/~naoya/ruby/css.html 神田直弥 カスケーティングスタイルシート(CSS) 「[5] 色とサイズの指定」 共同学習者 梅津 光、小野貴己、佐藤智久