第7回 基礎プログラミング I レポート課題 氏名:XXXXXXX 学籍番号:C10XXXX 語学クラス:英語XX コース(系):社会 1. A.0b 11110110 = 0x?? まず、0b11110110を10進法、0d??に直す 2^7*1+2^6*1+2^5*1+2^4*1+2^3*0+2^2*1+2^1*1+2^0*0 =128*1+64*1+32*1+16*1+8*0+4*1+2*1+1*0 =128+64+32+16+4+2 =246 なので0b11110110=0d246 0d246を0x??にするには16で割っていき、余りを下からつけ足して行くので 246/16=15あまり6 15/16=0あまり15 なので 15 6 16進数では15はFになるので 0b11110110=0xF6 B.0d 256 = 0x?? 0d256を0x??にするには16で割っていき、余りを下からつけ足して行くので 256/16=16あまり0 16/16=1あまり0 1/16=0あまり1 なので0d256=0x100 2.A(open_battery.rb)を選択。 a.設定 乾電池の売り上げ伝票をまとめたデータ battery.dat について、 その日の売り上げと客単価を計算させるプログラム open_battery.rbを作成。 b.作成プログラム open_battery.rb !/usr/koeki/bin/ruby $KCODE = 'e' #機械の言葉でなく人間の言葉で と指示 pack = 0 #各パックの売り上げ個数 customer = 0 #客の人数 sale = 0 #売上金額。パックの値段 * 売れた個数 tsale = 0 #その日の売上総額。total sale を略してtsale とした open("battery.dat","r") do |denchi| #battery.datを開いて中のデータを読ませる while bought = denchi.gets #変数はdenchiとする。 if /(\S+)\s+(\d+)/ =~ bought #文字列 空白 数値 という条件のときは type = $1.to_s #1つ目の項目を文字列として取り入れ、 pack = $2.to_f #2つ目の項目を小数として取りこむ。 #客単価を出すために割り、小数点以下も出すので to_fに。 if type== "A" #売れたのがAパックなら、 sale = 400*pack #売れた個数に400をかける。 elsif type== "C" #Cパックのときは、 sale = 50*pack #売れた個数に50をかける。 else type #AでもCでもない、つまりBパックの場合、 sale = 300*pack #売れた個数には300をかける。 end #if〜else文の終了 tsale += sale #上で出た売上金額を足しその日の売上総額を出す。 customer += 1 #客の人数を一人ずつ足していく。 average = tsale / customer #客単価を出すため、売上総額を客の人数で割る printf("%d人目のお客様のお買上げ額 %d 円\n",customer ,sale) #それぞれの客のお買上げ額を表示 end #if文終了 end #while文終了 printf("本日のお客樣 計 %d人\n",customer) #その日の客の人数表示 printf("本日の電池総売上げ %d円\n",tsale) #その日の売上総額表示 printf("客単価 %4.1f円\n",average) #その日の客単価表示。四捨五入して小数点第1位から表示。 end #プログラム全体の終了 ############################################################ 作成データ battery.dat #タイプ #売り上げ A 1 A 2 C 4 B 1 C 2 C 2 A 3 C 4 C 5 B 1 C 1 c.変更点 今回参考にしたプログラムはある特定のプログラムではない。 昨年度の基礎プログラミング I 第07 回で 課題レポート講評に 「よかったレポート」として掲載された方々の作成プログラムをいくつか 参考にさせてもらった。 主な変更点は ・変数などの値を問題に合わせて変えたこと。 ・全てが同じ値段ではないのでifやelseを使いそれぞれの値段に応じて売上を 計算させるようにしたこと ・何日かの総計でなくその日1日だけの総額、客単価を求めるようにしたこと ・一人一人の購入額を表示させるようにしたこと である。 d.実行結果 pan{c108203}% ./open_battery.rb [~/Ruby] 1人目のお客様のお買上げ額 400 円 2人目のお客様のお買上げ額 800 円 3人目のお客様のお買上げ額 200 円 4人目のお客様のお買上げ額 300 円 5人目のお客様のお買上げ額 100 円 6人目のお客様のお買上げ額 100 円 7人目のお客様のお買上げ額 1200 円 8人目のお客様のお買上げ額 200 円 9人目のお客様のお買上げ額 250 円 10人目のお客様のお買上げ額 300 円 11人目のお客様のお買上げ額 50 円 本日のお客樣 計 11人 本日の電池総売上げ 3900円 客単価 354.5円 e.考察 まずは一人一人の購入額をbc -lで計算し確かめる。 1人目は400円のAパックを1つ購入で pan{c108203}% bc -l [~/Ruby] 400*1 400円 2人目は400円のAパックを2つ購入で 400*2 800円 3人目は50円のCパックを4つ購入で 50*4 200円 4人目は300円のBパックを1つ購入で 300*1 300円 5人目は50円のCパックを2つ購入で 50*2 100円 6人目は50円のCパックを2つ購入で 50*2 100円 7人目は400円のAパックを3つ購入で 400*3 1200円 8人目は50円のCパックを4つ購入で 50*4 200円 9人目は50円のCパックを5つ購入で 50*5 250円 10人目は300円のBパックを1つ購入で 300*1 300円 11人目は400円のCパックを1つ購入で 50*1 50円 一人一人の購入額は計算できている。 次に、bc -lで上で出た一人一人の購入額を全て足す。 その日の電池の売上げ総額を考察する。 pan{c108203}% bc -l [~/Ruby] 400+800+200+300+100+100+1200+200+250+300+50 3900 プログラムの実行結果の 本日の電池総売上げ 3900円 と同じなので、電池の売上総額も正しく出せている。 最後に客単価を計算する。 売上総額を客の人数で割る。 pan{c108203}% bc -l [~/Ruby] 3900/11 354.54545454545454545454 小数点第1位まで求めたいので第2位以下を四捨五入すると 354.5 なので、このプログラムは正常に作動していることが分かる。 3. 読み込ませるデータ作成のとき、電池パックの種類はABCの3種しかないのにどう やって6行以上のデータを作るのか分からず苦戦した。 考えた結果、客は同じパックの電池だけをいくつか買ったというデータになった。 だが実際、たとえば電池が10個欲しい人はAを1パックとCを2個買うだろう。 その点も考慮したものを作りたかったのだが、ここで力尽きてしまった。 また、昨年度の西村先生のプログラミングの授業を受けていた人から 「先生の講義ノートをよーく見ればどこかにヒントがある」とアドバイスを受け た。前回までも一応見ていたが、今回からはもっとよく講義ノートを見ることにした。 参考文献 基礎プログラミング I 2010年度 講義ノート 第7回 正規表現と Ruby 言語でのプログラミング 「データを読み込むようにするには」 http://roy/~madoka/2010/r1/07/07_09_theme_08_fileread.html 第4回 プログラミングの方法 「もしもそうならば」 http://roy/~madoka/2010/r1/04/04_03_theme_01_branch.html 「文字列を数値にするには」 http://roy/~madoka/2010/r1/04/04_02_review_02_convert.html 作成者 西村まどか先生 基礎プログラミング I 2009年度 第07回 正規表現と Ruby 言語でのプログラミング レポート講評 よかったレポート より http://roy/~madoka/2009/r1/07/rpt/c108022/iimori.desc http://roy/~madoka/2009/r1/07/rpt/c108039/open_rental.desc http://roy/~madoka/2009/r1/07/rpt/c108061/open_rental.desc http://roy/~madoka/2009/r1/07/rpt/c108063/iimori.desc http://roy/~madoka/2009/r1/07/rpt/c108118/open_rental.desc http://roy/~madoka/2009/r1/07/rpt/c108142/iimori.desc http://roy/~madoka/2009/r1/07/rpt/c108148/to_i_compare.desc http://roy/~madoka/2009/r1/07/rpt/c108171/open_renta.desc http://roy/~madoka/2009/r1/07/rpt/c108172/iimori.desc http://roy/~madoka/2009/r1/07/rpt/c108174/open_rental.desc http://roy/~madoka/2009/r1/07/rpt/c108182/iimori.desc 作成者 2009年度基礎プログラミングI 西村クラス 受講者の皆さん 協力者 アドバイスをくれた方 松島佳奈江さん