第 9 回 Ruby であそぼ / 広告ページの作成 レポート課題 氏名: 土門千里 学籍番号: C1111122 語学クラス: 英語5 コース: 政策マネジメント 1. 筆記問題 A. 0b は 2 進数表記、0d は 10 進数表記、0x は 16 進数表記である。 16 進数の足算または引算は、桁毎に計算することによって答えを得ることがで きる。また、10 進数に変換した後に足算をし、その結果を 16 進数に変換する ことによっても答えを得ることができる。 a. 0x32 + 0x24 = 0x?? 3 2 + 2 4 --------- 5 6 なので、0x32 + 0x24 の計算結果は 0x56 である。 b. 0x15 + 0x2d = 0x?? はじめに、d とは 16 進数表記で 13 を表現している。 10 進数に変換して足算した後に、その計算結果を 16 進数に変換をする。 16 進数を 10 進数に変換するためには、16 進数をばらし、右から 16 の 0乗、 16 の 1乗、16 の 2乗 ...と掛けていく。最後にそれぞれの計算結果を足す。 まずは、0x15 を「1」「5」、0x2d を「2」「d」に分ける。次に、それぞれに右 から 16 の0乗、16 の 1乗を掛けていく。 ・0x15 を 10 進数に変換する。 1 * 16 の 1乗 = 16 5 * 16 の 0乗 = 5 16 + 5 = 21 0x15 を 10 進数に変換すると 0d21 になる。 ・0x2d を 10 進数に変換する。 2 * 16 の1乗 = 32 13 * 16 の0乗 = 13 32 + 13 = 45 0x2d を 10 進数に変換すると 0d45 になる。 次に 計算結果を足し、それを 16 進数に変換する。 10 進数を 16 進数に変換するためには、10 進数を16 の0乗で割っていく。その 計算は商が 0 になるまで繰り返し行う。 0d21 + 0d46 = 0d66 66 / 16 = 4 余り 2 2 / 16 = 0 余り 4 最後に、余りをしたから順にならべると 42 となる。 なので、答えは 0x42 となる。 c. 0xed - 0x12 = 0x?? はじめに、e とは 16 進数表記で 14 を表現している。 d は上に記しておいた通り、16 進数表記で 13 を表している。 e d - 1 2 --------- d b ・数字のみで表現した場合 14 13 - 1 2 ----------- 13 11 13 を 16 進数表記すると d になり、11 を 16 進数表記すると b になる。 なので、 0xed - 0x12 の計算結果は 0xdb である。 B. 1 から 31 までの整数で、7 で割るとあまりが 2 であるような数は、掛け算で 7 の桁の数に 2 を足した下記の計算結果の数である。 7 * 1 + 2 = 9 7 * 2 + 2 = 16 7 * 3 + 2 = 23 7 * 4 + 2 = 30 次に上の計算の結果でた数 [9, 16, 23, 30]を 7 で割っていく。 9 / 7 = 1 余り 2 16 / 7 = 2 余り 2 23 / 7 = 3 余り 2 30 / 7 = 4 余り 2 なので、1 から 31 までの整数で 7 で割ると余りが 2 であるような数は [9, 16, 23, 30]である。 2. プログラム問題 A. a) 考えた設定 お小遣いなどの収入と、商品やサービスなどを受けるために支払った金額を入力 することにより、そのデータを読み込んで、支払った金額や現在の残額を計算し、 その結果や入力したデータを pmoneybook.txt に出力するプログラム。 b)作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp year = 0 # 小遣い帳に書きこんだ年 month = 0 # 小遣い帳に書きこんだ月 day = 0 # 小遣い帳に書きこんだ日 pmoney = 0 # 小遣い額 expense = 0 # 支出した金額 total = 0 # 総支出金額 i = 0 # 商品をいくつ買ったのか balance = 0 # 残金 print("今年は何年ですか: ") year = gets.chomp.to_i # 入力されたデータを取り込む print("今日は何月ですか: ") month = gets.chomp.to_i # 入力されたデータを取り込む print("今日は何日ですか: ") day = gets.chomp.to_i # 入力されたデータを取り込む print("\n現在の小遣いはいくらありますか[円]: ") pmoney = gets.chomp.to_i # 入力されたデータを取り込む print("\n支出金額を入力して下さい。\n") print("入力し終わったら q を押して下さい。\n") while true # 何回も繰り返すときに使用する STDERR.print("支出金額[円]: ") # 支出金額の入力 expense = gets.chomp # 入力されたデータを取り込む if expense == "q" # q を入力すると終了する break # 反復文を抜ける end # if 文の終了 total += expense.to_i # 総支出金額の計算 i += 1 # 1 回ずつ増える balance = pmoney - total # 残金の計算 end # while true の終了 printf("\n\n%d 月 %d 日\n", month, day) # 月日の表示 printf("今月の総支出金額 %d 円\n", total) # 総支出金額の表示 printf("平均支出額 %d 円\n", total / i) # 平均支出額の表示 if pmoney > total # 小遣いよりも総支出金額が少なかった場合 printf("残金は %d 円です。\n", balance) # 残金の表示 elsif pmoney == total # 小遣いと総支出金額が同額であった場合 print("残金は 0 円です。\n") # 残金の表示 else # 小遣いよりも総支出金額が多かった場合 printf("%d 円の 赤字です。\n", balance) # 赤字の表示 end # if 文の終了 print("\n小遣い帳へ書きこみました\n") open("pmoneybook.txt","a+") do |pmoneybook| # pmoneybook.txt への出力 pmoneybook.printf("▼%d 年 %d 月 %d日\n", year, month, day) # 日付の出力 pmoneybook.printf("・小遣い額 %d 円\n", pmoney) # 小遣い額の表示 pmoneybook.printf("・総支出金額 %d 円\n", total) # 総支出金額の出力 pmoneybook.printf("・残額 %d 円\n\n", balance) # 残額の出力 end c) プログラム実行結果 1-1) 支払い金額が収入を超えない場合 pan{DOMON Chisato}% ./pocketmoney.rb [~/public_html/adv] 今年は何年ですか: 2012 今日は何月ですか: 5 今日は何日ですか: 3 現在の小遣いはいくらありますか[円]: 4560 支出金額を入力して下さい。 入力し終わったら q を押して下さい。 支出金額[円]: 120 支出金額[円]: 110 支出金額[円]: 450 支出金額[円]: 350 支出金額[円]: 1225 支出金額[円]: q 5 月 3 日 今月の総支出金額 2255 円 平均支出額 451 円 残金は 2305 円です。 小遣い帳へ書きこみました 1-2) pmoneybook.txt への出力結果 pan{c111112}% cat pmoneybook.txt [~/public_html/adv] ▼2012 年 5 月 3日 ・小遣い額 4560 円 ・総支出金額 2255 円 ・残額 2305 円 2-1) 支払い金額が収入を超えた場合 pan{c111112}% ./pocketmoney.rb [~/public_html/adv] 今年は何年ですか: 2012 今日は何月ですか: 6 今日は何日ですか: 12 現在の小遣いはいくらありますか[円]: 5400 支出金額を入力して下さい。 入力し終わったら q を押して下さい。 支出金額[円]: 3200 支出金額[円]: 200 支出金額[円]: 100 支出金額[円]: 540 支出金額[円]: 600 支出金額[円]: 1228 支出金額[円]: q 6 月 12 日 今月の総支出金額 5868 円 平均支出額 978 円 -468 円の 赤字です。 小遣い帳へ書きこみました 2-2) pmoneybook.txt への出力結果 pan{c111112}% cat pmoneybook.txt [~/public_html/adv] ▼2012 年 5 月 3日 ・小遣い額 4560 円 ・総支出金額 2255 円 ・残額 2305 円 ▼2012 年 6 月 12日 ・小遣い額 5400 円 ・総支出金額 5868 円 ・残額 -468 円 3-1) 支払い金額と収入が同額であった場合 pan{DOMON Chisato}% ./pocketmoney.rb [~/public_html/adv] 今年は何年ですか: 2012 今日は何月ですか: 4 今日は何日ですか: 25 現在の小遣いはいくらありますか[円]: 4540 支出金額を入力して下さい。 入力し終わったら q を押して下さい。 支出金額[円]: 240 支出金額[円]: 300 支出金額[円]: 560 支出金額[円]: 1120 支出金額[円]: 2010 支出金額[円]: 310 支出金額[円]: q 4 月 25 日 今月の総支出金額 4540 円 平均支出額 756 円 残金は 0 円です。 小遣い帳へ書きこみました 3-2) pmoneybook.txt への出力結果 pan{c111112}% cat pmoneybook.txt [~/public_html/adv] ▼2012 年 5 月 3日 ・小遣い額 4560 円 ・総支出金額 2255 円 ・残額 2305 円 ▼2012 年 6 月 12日 ・小遣い額 5400 円 ・総支出金額 5868 円 ・残額 -468 円 ▼2012 年 4 月 25日 ・小遣い額 4540 円 ・総支出金額 4540 円 ・残額 0 円 d) 考察 bc -l でプログラムの計算結果があっているのかを確認する。 1) pan{c111112}% bc -l [~/public_html/adv] 120 + 110 230 230 + 450 680 680 + 350 1030 1030 + 1225 2255 quit プログラムの計算結果と bc -l による計算結果が同じであったため、プログラ ムの計算結果は正しいと言える。 2) pan{c111112}% bc -l [~/public_html/adv] 3200 + 200 3400 3400 + 100 3500 3500 + 540 4040 4040 + 600 4640 4640 + 1228 5868 quit プログラムの計算結果と、bc -l による計算結果が等しかったため、プログラム による計算は正しいと言える。 3) pan{c111112}% bc -l [~/public_html/adv] 240 + 300 540 540 + 560 1100 1100 + 1120 2220 2220 + 2010 4230 4230 + 310 4540 quit プログラムによる計算結果と、bc -l による計算結果が等しかったため、プログ ラムによる計算結果は正しいと言える。 また、入力された金額を基に計算されて出た結果や入力されたデータが pmoneybook.txt へ追加的に出力されているため、追加的に出力するようにした 設定が正しく作動していると言える。 B. 作成したファイル 1) 企画書(plan.txt) 小遣い帳計算プログラム -- 企画書 --------------------------------------------------------------- 小遣い帳や家計簿に金額を記入し、特に金額を計算することは結構手間のかかる ことなのではないだろうかと思った。 そのため、現在手許にある金額と、商品やサービスを受けるために支払った金額 を入力することによって、どれくらいお金を使ったのか、残金がいくらあるのか を計算し、その結果を小遣い帳や家計簿に記入してくれるプログラムを作成しよ うと考え、このプログラムの作成に至った。 ------------------------------------------------------------------------- -- 今後の課題 ----------------------------------------------------------- 今回のプログラムは、入力された金額などを基にして計算をし、入力されたデー タや計算結果などを txt に出力するというものであったが、その他にもtxt に 出力された結果(総支出金額や今までに得た緒小遣いの額など)を読み込んで、今 までに使用した金額や得た収入金額などを計算するという設定をしたかったが、 上手くいかなかった。 なので、計算された結果などのデータを txt へ出力するだけではなく、更にそ れを読み込んだりすることが出来るようなプログラムを作れるようにもう一度挑 戦したい。 ------------------------------------------------------------------------- 2) 取り扱い説明書(00readme) 小遣い帳計算プログラム -- 取り扱い説明書 ------------------------------------------------------- A. プログラム内容 このプログラムは現在手許にある金額と、商品やサービスを受けるために支払っ た金額を入力することによって、どれくらいお金を使ったのか、残金がいくらあ るのかを計算し、素の結果を小遣い帳(または家計簿)に記入するものである。 ------------------------------------------------------------------------- B. ダウンロードが必要なファイル ・00readme (取り扱い説明書) ・pocketmoney.rb (プログラム) ・pmoneybook.txt (小遣い帳) これらのファイルは同じディレクトリに保存して下さい。 ------------------------------------------------------------------------- C. ダウンロードの手順 1. ダウンロードしたいプログラムの URL にマウスのカーソルをあわせ、右クリッ クをします。次に「Save Link As...」をクリックし、プルダウンメニューか ら プログラムを保存したい場所を選択します。保存したい場所を選択し、 「Save」をクリックすることによってプログラムの保存が完了します。 2. ダウンロードしたプログラムを Ruby などに移動させたい場合は、 「mv プログラム名 移動させたい場所(Ruby など)」で移動をさせることが出 来ます。 3. cd プログラムを移動させた場所 → ls でダウンロードしたプログラムを確 認することができたら、ダウンロードとプログラムの移動が正常に行われた ということになります。 ------------------------------------------------------------------------- D. プログラム実行の手順 (Kterm での実行) 1. プログラムを保存した場所に移動し、「ls」 でプログラムがあることを確認 した後、「chmod +x 実行させたいプログラム」でプログラムを実行すること が出来る状態に変換します。 2. もう一度「ls」を入力し、実行させたいプログラム名の後ろに 「*」 (アス タリスク)がついていればプログラムが実行可能な状態になっています。 3. プログラムを実行するには「./ 実行したいプログラム」で実行することが可 能です。 4. プログラムを実行し、プログラムの最後に「小遣い帳へ書きこみました」と いう表示がされれば、「pmoneybook.txt」に実行結果が書きこまれます。 「pmoneybook.txt」の内容を知りたい場合は、「cat pmoney.txt」で表示さ せることが出来ます。 ------------------------------------------------------------------------- E. プログラム実行の際の注意 1. 現在の小遣い金額、支出金額ともに数字で入力して下さい。 ex) 千円と入力したい場合 ○ 1000 × 千円 2. 支出金額を入力し終わった場合は「q」を入力して下さい。 3. 年月日も現在の小遣い金額、支出金額と同じように数字で入力して下さい。 ------------------------------------------------------------------------- F. 著作権について このプログラムは 東北公益文科大学 2011 年度生 土門千里が著作権を保有して います。このプログラムの入手、実行、改変、再配布はいずれも無料で自由に行 うことが出来ます。ただし、このプログラムを取り扱うことで生じるいかなる結 果に対しても著作権者は責任を負いません。 このプログラムに対する感想、意見、批判などは下記のメールアドレスへお願い します。 c111112@g.koeki-u.ac.jp (迷惑メール対策のため@は全角になっています) 3) 広告ページ(index.html) 小遣い帳計算プログラム

小遣い帳計算プログラム

小遣い帳をつけるって結構面倒臭いですよね。

このプログラムはそんなあなたの代わりにお小遣いの計算やお小遣い帳への記入をしてくれます。

メニュー

  1. 企画書(plan.txt)
  2. 取り扱い説明書(00readme)
  3. プログラム(pocketmoney.rb)
  4. 小遣い帳(pmoneybook.txt)

著作権について

このプログラムは 東北公益文科大学 2011 年度生 土門千里が著作権を保有しています。

このプログラムの入手、実行、改変、再配布はいずれも無料で自由に行うことが出来ます。

ただし、このプログラムを取り扱うことで生じるいかなる結果に対しても著作権者は責任を負いません。

このプログラムに対する感想、意見、批判などは下記のメールアドレスへお願いします。

c111112@g.koeki-u.ac.jp (迷惑メール対策のため@は全角になっています)

HOME PAGE



4) style.css body { background-color: #ffffff; } h1 { font-size: x-large; background-color: #ffffff; color: #4169e1; padding: 0.5ex; text-align:left; margin:50px 50px 30px 50px; } h2 { font-size: x-large; color: #ffea00; background-color: #2ca9e1; text-align:left; margin: 50px 30px 30px 50px; } p { font-size: middle; color: #2b2b2b; margin: 10px 50px 10px 50px; } ol { font-size: middle; color: #000000; margin: 50px 50px 50px 50px; } li { color: #000000; } address { text-align: right; margin: 30px 50px 30px 50px } a:link { color: #7b68ee; text-decoration: underline; } a:visited { color:; #4b0082; text-decoration: underline; } a:hover { color: #99ff00; background-color: #3eb370; } a:active { color: #ffec47; background-color: #3eb370; } C. ○広告ページ [ http://roy/~c111112/adv/ ] 実用部門にエントリーします。 ○企画書(plan.txt) http://roy/~c111112/adv/plan.txt ○取り扱い説明書(00readme) http://roy/~c111112/adv/00readme ○プログラム(pocketmoney.rb) http://roy/~c111112/adv/pocketmoney.rb ○小遣い帳(pmoneybook.txt) http://roy/~c111112/adv/pmoneybook.txt ○ホームページ http://roy/~c111112/ 3. 感想 今回のレポート課題のプログラム問題では、どのようなプログラムを作るかとい うことで一番悩んだが、作るプログラムが決まってからは楽しんでプログラムを 作ることが出来た。今までに学んだことをなるべく取り入れるようにしようと思 い、while true や if、gets、open などの要素を極力プログラムに組み込むよ うにした。今まで、毎回プログラム課題を作成するたびに分からないところや、 何処を間違っているかが分からず、かなり悩んで、それでも分からず悔しい思い をしたことも多々あったが、その経験が今活きていると感じ、分からないなりに も努力をして良かったと感じる。 広告ページでの取り扱い説明書では、なるべくプログラムのダウンロードの仕方 やプログラムの使い方についての知識があまりない様な人や初心者の人でも理解 できるように、自分で実際に先輩方のプログラムをダウンロードしたりして、そ れを基にし、説明部分は丁寧に書くように意識した。 4. 参考文献 西村まどか "基礎プログラミング I 第 9 回 (Ruby であそぼ / 広告ページの作成) 「広告において主張しておくべきこと」" http://roy/~madoka/2012/r1/09/r1_09_16_theme_11_sales.html 西村まどか "基礎プログラミング I 第 9 回 (Ruby であそぼ / 広告ページの作成) 「ソフトウェアの公開時の条項」" http://roy/~madoka/2012/r1/09/r1_09_14_theme_10_termsofcondition.html 西村まどか "基礎プログラミング I 第 3 回 (キーボードから入力して計算させるには) 「何度でも繰り返す場合には」" http://roy/~madoka/2012/r1/03/r1_03_07_theme_04_whiletrue.html 西村まどか "基礎プログラミング I 第 3 回 (キーボードから入力して計算させるには) 「入力した値をプログラムで使おう」 " http://roy/~madoka/2012/r1/03/r1_03_03_theme_01_gets.html 西村まどか "基礎プログラミング I 第 4 回 (プログラミングの方法) 「16 進数のまとめ」" http://roy/~madoka/2012/r1/04/r1_04_13_appendix_03_hexdecimal.html 上綱 秀治 "CyberLibrarian より 2進数、16進数と10進数" http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html