第7回 基礎プログラミング I レポート課題再提出 氏名:笹原千珠子 学籍番号:c109080A 語学クラス:英語3 コース(系):政策マネジメント ---- 再提出での変更点 プログラミングが最後までできていなかったので最後まで完成させた。 データの添付も忘れていたので、プログラミング本体と電池のデータを添付した。 1.A. 0b 11110110 #右から4桁ずつ16進数に変換 1 1110 0110 1 E 6 答え:0x 1E6 1.B. 0d 256 #10進数を2進数に変換 256 / 2 = 128余り 0 #答えが0になるまで2で割る 128 / 2 = 64余り 0 64 / 2 = 32余り 0 32 / 2 = 16余り 0 16 / 2 = 8余り 0 8 / 2 = 4余り 0 4 / 2 = 2余り 0 2 / 2 = 1余り 0 1 / 2 = 0余り 1 余りを下から並べる 0b 100000000 #これを16進数に変換 1 0000 0000 1 0 0 答え:0x 100 参考資料 ウェブページ:2進数、16進数と10進数 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html ウェブページ2:【2進数・10進数・16進数の変換について】 http://www.geocities.jp/cwqnx949/xshinsuu/ 2.A. a. 乾電池の売上げデータを読みこんでタイプA、B、Cそれぞれの売上げと、タイプ ABCの売上げの合計を計算し、客単価を計算するするプログラム。 b. #!/usr/koeki/bin/ruby -Ke number = Array.new type = Array.new i = 0 open("battery.dat","r") do |dennti| while sale = dennti.gets if /(\S+)\s+(\d+)/ =~ sale number[i] = $1 type[i] = $2.to_i i += 1 end end end k = 0 total = 0 while k < number.length if number[k] == "A" a = type[k] * 400 printf("%s タイプ:\t%d円の売上げ\n", number[k],a) total += a elsif number[k] == "B" b = type[k] * 300 printf("%s タイプ:\t%d円の売上げ\n", number[k],b) total += b elsif number[k] == "C" c = type[k] * 50 printf("%s タイプ:\t%d円の売上げ\n", number[k],c) total += c end k += 1 end avg = total / number.length printf("今日の売上げ:\t%d 円\n",total) printf("今日の客単価:\t%d 円\n",avg) c. regexp_readdata.rb のデータを読み込むやり方で乾電池のデータを読み込むよ うにして if 文を使ってタイプABCのそれぞれの合計を出して全体の売上げを出 して avg で客単価を出した。 d. pan{c109080}% ./open_battery.rb [~/Ruby] C タイプ: 150円の売上げ C タイプ: 50円の売上げ A タイプ: 400円の売上げ B タイプ: 1200円の売上げ C タイプ: 100円の売上げ B タイプ: 900円の売上げ B タイプ: 300円の売上げ B タイプ: 600円の売上げ 今日の売上げ: 3700 円 今日の客単価: 462 円 e. 乾電池のデータをみて、本当に計算が合っているか確かめてみる。 C 3 C 1 A 1 B 4 C 2 B 3 B 1 B 2 Aの電池1個400円 Aの電池は1回に1個だけ買われたので合計額はそのまま400円 Bの電池1個300円 Bの電池は1回目が4個で pan{c109080}% bc -l [~/Ruby] 4*300 1200円 2回目は3個で 3*300 900円 3回目は1個で300円 4回目は2個で 2*300 600円 Cの電池は1個50円 1回目3個で 3*50 150円 2回目1個で50円 3回目2個で 2*50 100円 合計は pan{c109080}% bc -l [~/Ruby] 400 + 1200 + 900 + 300 + 600 + 150 + 50 + 100 3700 客単価はABCの合計を人数(データの行の数が人数)で割る 3700 / 8 462.50000000000000000000 小数点以下がプログラムでは切り捨てられているので、 printf("今日の客単価:\t%d 円\n",avg) のところで小数点以下を切り捨てない処理をする必要があるんじゃないかと思った。 3. 小数点以下を切り捨てずに表示する方法を調べてみたがよくわからなかった。 それ以外はなんとなくわかるようになってきたのでよかった。 今回のグループでの発表の色目検索で使ったのはこのあたりだということを思い 出した。 これからはあきらめずにやって行きたい。 参考文献 ウェブべージ:基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 第 7 回目次 講義ノート 西村まどか http://roy/~madoka/2010/r1/07/ 共同学習者:金田麻美