第7回 基礎プログラミング I レポート課題 氏名:川島哲 学籍番号:c1090489 語学クラス:英語3 コース(系):政策マネ 1. A.0b11110110=0x?? 右から4桁に区切りそれぞれを10進数に変換 1111=15 0110=6 さらにそれを16進数に変換 15=f 6は16進数でも変わらないのでそのまま fと6を区切る前の順番に配置する 解答: 0b11110110=0xf6 B.0d256=0x?? 10進数を16で割る 計算 商 16)256 16 16)16 0 16は16進数で10に変換される 上から商を左に配置する 0x100 解答:0d256=0x100 2. A) 一週間の電池の総売上と平均、客単価を求めるプログラムを作成 使用データ:battery.dat #客 #売った電池数 1 4 2 3 3 4 4 8 6 6 5 7 5 6 作成プログラム:open_battery.rb #!/usr/koeki/bin/ruby custm=0 #客 day=0 #日数 bat=0 #電池 $KCODE="e" #Eに変換 i=0 total_custm=0 #客総数 total_bat=0 #電池総数 open("battery.dat","r")do |m| #datファイルを挿入、mとする while shop =m.gets if/(\d+)\s+(\d+)/=~ shop bat = $2.to_f custm = $1.to_f printf("%d日目:\t%d人 \t%d個\t\t 総売上げ %d 円\n",i,custm,bat,bat*50) #一日毎のデータ end total_custm +=custm #客の値を足し合わせる total_bat +=bat #電池の値を足し合わせる i+=1 end end printf("一日平均で%2.1f人が%2.1f個買っていきました。\n",total_custm/7,total_bat/7) #一日平均 printf("総売上げ:%d円\n",total_bat*50) #売り上げ総数 printf("一日の平均売上げ:%5.1f円\n", total_bat*50/7 )#平均売り上げ printf("客単価:%d円\n",total_bat*50/total_custm) #客単価 #p custm #p day 実行結果) 1日目: 1人 4個 総売上げ 200 円 2日目: 2人 3個 総売上げ 150 円 3日目: 3人 4個 総売上げ 200 円 4日目: 4人 8個 総売上げ 400 円 5日目: 6人 6個 総売上げ 300 円 6日目: 5人 7個 総売上げ 350 円 7日目: 5人 6個 総売上げ 300 円 一日平均で3.7人が5.4個買っていきました。 総売上げ:1900円 一日の平均売上げ:271.4円 客単価:73円 元にしたプログラム) 講義中作成したwrite_ticket.rbを元に前年度受講者のレポートと先輩のアドバイ スを参考にしながら改変した。そのため前年度受講者作成のプログラムに近いもの になっている。 考察) プログラムが正しい計算をしているか確かめる。 客平均 (1+2+3+4+6+5+5)/7 3.71428571428571428571 個数の平均 (4+3+4+8+6+7+6)/7 5.42857142857142857142 総売り上げ 200+150+200+400+300+350+300 1900 平均売り上げ (200+150+200+400+300+350+300)/7 271.42857142857142857142 客単価 1900/(1+2+3+4+6+5+5) 73.07692307692307692307 客、個数、売り上げの平均と客単価は皆1/100の位を切り捨てた場合に数がつり あうので正しいと言える。総売り上げも同様に合計は正しかった。 また、考察の段階で食い違いが生じ原因がi(項目:日数)に表示されている数より 1+されて算出されていたことが分かったが対処方法が見つからなかったので、最 後のプリントFの項目を書き換えたことを記しておく。 B. Aの内容から6個入りの電池パックを20円引き、2パック買うと60円引きしたとき の売り上げ調査プログラム。 使用データ:battery2.dat #客 #電池A #電池B #電池C 4 4 0 0 5 3 1 1 2 0 2 0 4 1 2 1 8 3 3 2 3 1 1 1 6 2 3 1 battery.rbとは違い各電池パックの売上げを分割した。 プログラム名:open_six2.rb #!/usr/koeki/bin/ruby custm=0 #客 day=0 #日数 bat=0 #電池 $KCODE="e" #Eに変換 i=0 total_custm=0 #客総数 total_batA=0 #電池A数 total_batB=0 #電池B数 total_batC=0 #電池C数 total_batZ=(total_batA+total_batB+total_batC) open("battery2.dat","r")do |m| #datファイルを挿入、mとする while shop =m.gets if/(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/=~ shop custm = $1.to_f batA=$2.to_f batB =$3.to_f batC =$4.to_f printf("%d日目:\t%d人 \t電池A%d個\t 電池B%d個\t電池C%d個\t売上げ %d 円\n",i,custm,batA,batB,batC,(batA*400)+(bat*300)+(batC*50)) #一日毎のデータ end end total_custm +=custm #客の値を足し合わせる total_batA +=batA #電池Aの値を足し合わせる total_batB +=batB #電池Bの値を足し合わせる total_batC +=batC #電池Cの値を足し合わせる i +=i #日数 end printf("値段改訂前\n") printf("一日平均で%2.1f人が%2.1f個買っていきました。\n",total_custm/7,total_batZ/7) #一日平均 printf("総売上げ:%d円\n",total_batZ*50) #売り上げ総数 printf("一日の平均売上げ:%5.1f円\n", total_batZ*50/7 )#平均売り上げ printf("客単価:%d円\n",total_batZ*50/total_custm) #客単価 printf(" \n") #変更スペース printf("値段改訂後\n") printf("一日平均で%2.1f人が%2.1f個買っていきました。\n",total_custm/7,total_batZ) #p custm #p day )元にしたプログラム A問題で作成したopen_battery.rbをベースに電池A,B,Cの売上げをそれぞれ表示出来るよ うに変更、また改訂前の値段と改訂後の値段のそれぞれのデータを表示出来るちょ うにした。 実行画面) 0日目: 4人 電池A4個 電池B0個 電池C0個 売上げ 1600 円 0日目: 5人 電池A3個 電池B1個 電池C1個 売上げ 1250 円 0日目: 2人 電池A0個 電池B2個 電池C0個 売上げ 0 円 0日目: 4人 電池A1個 電池B2個 電池C1個 売上げ 450 円 0日目: 8人 電池A3個 電池B3個 電池C2個 売上げ 1300 円 0日目: 3人 電池A1個 電池B1個 電池C1個 売上げ 450 円 0日目: 6人 電池A2個 電池B3個 電池C1個 売上げ 850 円 値段改訂前 一日平均で0.9人が0.0個買っていきました。 総売上げ:0円 一日の平均売上げ: 0.0円 客単価:0円 値段改訂後 一日平均で0.9人が0.0個買っていきました。 考察) 日数が表示されないという問題が出てきた、そのためいくら計算しても0になっ てしまう。いろいろと調べて対処方を試してみたが結局日数は0のままだったの で作業を中断した。 感想) 今回一番苦労したのはdatを作成する点だった、パックという点に気をとられ売 り上げに関る部分を忘れていた、しかし途中で電池自体の単価に気づきなんと か作ることが出来た、またBの問題を途中まで作れたが結局完成には至らなかっ たのが残念だった。もし出来るならば次回レポート講評を参考に修正出来ればと思う。 参考 基礎プログラミング I 第07回 正規表現と Ruby 言語でのプログラミング レポー ト講評 (2009)/西村まどか及び2009年度受講者 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/c108118/open_rental.desc 協力してくれた先輩 讃岐彩香 協同学習者 及川雄寛