第 9 回 Ruby であそぼ / 広告ページの作成 レポート課題 氏名:高橋岬 学籍番号:c1110973 語学クラス:英語5 コース:環境サイエンスコース 1.A.a.0x32 + 0x24 = 0x?? 0x32 + 0x24 = 0x ( 3+2 ) ( 2+4 ) = 0x56 b.0x15 + 0x2d = 0x?? 0x15 + 0x2d = 0x ( 1+2 ) ( 5+d ) = 0x 3 ( 5+13 = 16+2 ) # 一桁目には15までしか入らないので 16 を二桁目に繰り上げる = 0x ( 3+1 ) 2 # 一桁目から16繰り上がってきたので 1 を足す = 0x42 c.0xed - 0x12 = 0x?? 0xed - 0x12 = 0x ( e-1 ) ( d-2 ) = 0x ( 14-1 ) ( 13-2 ) = 0x ( 13 ) ( 11 ) = 0xdb B. 1 から 31 までの整数で、7 で割るとあまりが 2 であるような数 商を x とすると計算式は以下のようになる。 ( 整数 ) = 7 * x + 2 この数が 1以上31以下 なので 1 <= 7 * x + 2 <= 31 -1 <= 7 * x <= 29 となり、これに該当するのは x = [ 0, 1, 2, 3, 4 ] となる。 これを整数の式に代入して計算する。 x = 0 : 7 * 0 + 2 = 2 x = 1 : 7 * 1 + 2 = 9 x = 2 : 7 * 2 + 2 = 16 x = 3 : 7 * 3 + 2 = 23 x = 4 : 7 * 4 + 2 = 30 したがって、答えは 2, 9, 16, 23, 30 2.A.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("MikasA商店でのお買物\n") # kterm に表示させる言葉 print("何日のお買物ですか?\n") # kterm に表示させる言葉 STDERR.printf("何月?: ") # 入力させたい文字への導入(月) month = gets.chomp # 入力された文字を month として受け付ける month = month.to_i # month を整数として扱う STDERR.printf("何日?: ") # 入力させたい文字への導入(日) day = gets.chomp # 入力された文字を day として受け付ける day = day.to_i # day を整数として扱う total = 0 # 合計金額 point = 0 # ポイント数 all = 0 # ポイント合計 if month == 1 or month == 4 or month == 7 d = (day - 1) % 7 # 2012年 1/4/7月 1日は日曜日 elsif month == 10 d = day % 7 # 2012年 10月 1日は月曜日 elsif month == 5 d = (day + 1) % 7 # 2012年 5月 1日は火曜日 elsif month == 2 or month == 8 d = (day + 2) % 7 # 2012年 2/8月 1日は水曜日 elsif month == 3 or month ==11 d = (day + 3) % 7 # 2012年 3/11月 1日は木曜日 elsif month == 6 d = (day + 4) % 7 # 2012年 6月 1日は金曜日 elsif month == 9 or month == 12 d = (day + 5) % 7 # 2012年 9/12月 1日は土曜日 end if d == 0 # 計算機の日曜日 wday = "日" elsif d == 1 # 計算機の月曜日 wday = "月" elsif d == 2 # 計算機の火曜日 wday = "火" elsif d == 3 # 計算機の水曜日 wday = "水" elsif d == 4 # 計算機の木曜日 wday = "木" elsif d == 5 # 計算機の金曜日 wday = "金" else # d == 6 wday ="土" end printf("2012年%d月%d日(%s)のお買物\n", month, day, wday) # kterm に表示させる言葉(2012年○月×日(△)) print("お買い上げ商品の値段を打ち込んで下さい。 (終了は[q])\n") # kterm に表示させる言葉 i = 0 # しまう変数 open("registar.html", "a") do |html| # registar.html に書き込み(a)、以後は html として扱う # ( a はファイルが存在していれば続きから書きはじめる) html.printf("\n") # でHTML文章であることを示す html.printf("\n") # の後には が続く(ページ情報の記載) html.printf("レシート発行\n") # ページタイトル html.printf("") # stylesheet を css で設定し、その css ファイル名を与える html.printf("\n") # 閉じ html.printf("\n") # 本文 html.printf("

========================================

\n") #

文章の見出し2 html.printf("

MikasA商店

\n") #

文章の見出し1 html.printf("

Tel 0123-45-6789

\n") #

通常の文書 html.printf("

2012年%d月%d日(%s)

\n", month, day, wday) while true # 計算が終わるまで計算し続ける i += 1 # 1ずつ増えていく STDERR.printf("商品 %d : ", i) # 入力させたい文字への導入 money = gets.chomp # 入力された文字を money として受け付ける if money == "q" # q(終了)を選んだら printf("合計 %d 円 / 取得ポイント %d \n", total, all) # 入力させたい文字への導入 html.printf("

合計 %d

\n", total) # 大きい文字になる html.printf("

取得ポイント %dP

\n", all) if d == 1 # 月曜日だったら html.print("

★毎週月曜日はポイント10倍★

\n") end if day == 8 # 8日だったら html.print("

☆毎月8のつく日はお会計より10%オフ☆

\n") end break # 計算終了 end money = money.to_i # money を整数として扱う if day == 8 total += money * 0.9 # 10%オフした money を足し続ける else total += money # money を足し続ける end point = money / 100 # money を100で割る(小数点以下切り捨て) if d == 1 all += point.to_i * 10 # point を整数として扱ってい10倍し足し続ける else all += point.to_i # point を整数として扱ってい足し続ける end html.printf("

商品%d :\t%d円\t%dP

\n", i, money, point) end html.printf("

========================================

\n") html.printf("\n") # 閉じ html.printf("\n") # 閉じ end # html.printf となっている文章は registar.html に書き込まれる 実行したプログラム a.平日 pan{c111097}% ./registar.rb [~/public_html/adv] MikasA商店でのお買物 何日のお買物ですか? 何月?: 3 何日?: 9 2012年3月9日(金)のお買物 お買い上げ商品の値段を打ち込んで下さい。 (終了は[q]) 商品 1 : 199 商品 2 : 105 商品 3 : 398 商品 4 : 315 商品 5 : 1050 商品 6 : q 合計 2067 円 / 取得ポイント 18 b.8のつく日 pan{c111097}% ./registar.rb [~/public_html/adv] MikasA商店でのお買物 何日のお買物ですか? 何月?: 5 何日?: 8 2012年5月8日(火)のお買物 お買い上げ商品の値段を打ち込んで下さい。 (終了は[q]) 商品 1 : 199 商品 2 : 105 商品 3 : 398 商品 4 : 315 商品 5 : 1050 商品 6 : q 合計 1860 円 / 取得ポイント 18 c.月曜日 pan{c111097}% ./registar.rb [~/public_html/adv] MikasA商店でのお買物 何日のお買物ですか? 何月?: 8 何日?: 20 2012年8月20日(月)のお買物 お買い上げ商品の値段を打ち込んで下さい。 (終了は[q]) 商品 1 : 199 商品 2 : 105 商品 3 : 398 商品 4 : 315 商品 5 : 1050 商品 6 : q 合計 2067 円 / 取得ポイント 180 d.8のつく月曜日 pan{c111097}% ./registar.rb [~/public_html/adv] MikasA商店でのお買物 何日のお買物ですか? 何月?: 10 何日?: 8 2012年10月8日(月)のお買物 お買い上げ商品の値段を打ち込んで下さい。 (終了は[q]) 商品 1 : 199 商品 2 : 105 商品 3 : 398 商品 4 : 315 商品 5 : 1050 商品 6 : q 合計 1860 円 / 取得ポイント 180 出力結果 a.======================================== MikasA商店 Tel 0123-45-6789 2012年3月9日(金) 商品1 : 199円 1P 商品2 : 105円 1P 商品3 : 398円 3P 商品4 : 315円 3P 商品5 : 1050円 10P 合計 2067円 取得ポイント 18P ======================================== b.======================================== MikasA商店 Tel 0123-45-6789 2012年5月8日(火) 商品1 : 199円 1P 商品2 : 105円 1P 商品3 : 398円 3P 商品4 : 315円 3P 商品5 : 1050円 10P 合計 1860円 取得ポイント 18P ☆毎月8のつく日はお会計より10%オフ☆ ======================================== c.======================================== MikasA商店 Tel 0123-45-6789 2012年8月20日(月) 商品1 : 199円 1P 商品2 : 105円 1P 商品3 : 398円 3P 商品4 : 315円 3P 商品5 : 1050円 10P 合計 2067円 取得ポイント 180P ★毎週月曜日はポイント10倍★ ======================================== d.======================================== MikasA商店 Tel 0123-45-6789 2012年10月8日(月) 商品1 : 199円 1P 商品2 : 105円 1P 商品3 : 398円 3P 商品4 : 315円 3P 商品5 : 1050円 10P 合計 1860円 取得ポイント 180P ★毎週月曜日はポイント10倍★ ☆毎月8のつく日はお会計より10%オフ☆ ======================================== 考察(bc -lより) 199+105+398+315+1050 = 2067 2067*0.9 = 1860.3 1+1+3+3+10 = 18 18*10 = 180 料金計算のため、小数点以下は切り捨てとなる。 よって a.b.c.d. ともに正しい計算結果が出ている。 したがって、このプログラムは正しく起動している。 参考文献 基礎プログラミング I 第 9 回 (Ruby であそぼ / 広告ページの作成) 「ファイルの入出力に関して」 http://roy/~madoka/2012/r1/09/r1_09_01_review_01_fileopen.html 参考にしたプログラム 第 4 回 プログラミングの方法 レポート課題 にて作成 Ruby/cal_registar.rb Ruby/cal_wday.rb 第 8 回 電子チケットを作ろう レポート課題 にて作成 public_html/openweb/web_order_c111097.rb B.作成したwebページ http://roy/~c111097/adv/index.html http://roy/~c111097/adv/plan.txt <00readme> http://roy/~c111097/adv/00readme http://roy/~c111097/adv/registar.rb キャッチフレーズ 簡単操作!使えるレジスター! 概略 日付を入力して、商品の金額を入力するとレシートが発行されます。 ポイント倍や割引設定可。 メインHP http://roy/~c111097/ C.エントリー部門 実用部門 広告ホームページURL http://roy/~c111097/adv/ 3.感想 作りたいと思っていたプログラムを作ることが出来た。 メールを作成していて、もっとこうできたのではないか、こんな動作ができた ら面白いのではないか、と案が沢山出てきたので今後も引続き作成していきたい。 ----------------------------- 高橋 岬 東北公益文科大学 2年 c111097@g.koeki-u.ac.jp -----------------------------