6月6日のレポートについて XXXX語 XXXX系 c106XXXX XXXXXXXX ■■ 1 ■■ 【A】 0xabc = 0b?? 0xabc = 16の0乗×c + 16の1乗×b + 16の2乗×a = c + 16b + 256a ここで、「第4回授業の16進数のまとめ」の表を参考にして、a、b、c にそれぞ れ 10、11、12 を代入する。すると、 = 12 + 176 + 2560 = 0d 2748 さらに 0d2748 を2進数にするため 2 で割っていく。 2 )2748 …余り 0 ------ 2 )1374 …余り 0 ------ 2 )687 …余り 1 ------ 2 )343 …余り 1 ------ 2 )171 …余り 1 ------ 2 )85 …余り 1 ------ 2 )42 …余り 0 ------ 2 )21 …余り 1 ------ 2 )10 …余り 0 ------ 2 )5 …余り 1 ------ 2 )2 …余り 0 ------ 1 よって、0b101010111100 【B】0b11010001 + 0b1 - 0b1100 = 0d?? 0b11010001 + 0b1 - 0b1100 右側から計算して、 ◯0b11010001 =2の0乗×1 + 2の1乗×0 +2の2乗×0 + 2の3乗×0 + 2の4乗×1 + 2の5乗×0 + 2の6乗×1 + 2の7乗×1 =1 + 0 + 0 + 0 + 16 + 0 + 64 + 128 =0d 209 ◯0b1 =0d 1 ◯0b1100 =2の0乗×0 + 2の1乗×0 + 2の2乗×1 + 2の3乗×1 =0 + 0 + 4 + 8 =0d 12 よって、0d 209 + 0d 1 - 0d 12 = 0d 198 ■■ 2 ■■ 【A】 (ファイル) #!/usr/koeki/bin/ruby n = 0 #人数 n の初期化 sum = 0 #和 sum の初期化 average = 0 #平均 average の初期化 while line = gets #1行ずつとってくる if /\S+\s+(\d+)\s+(\d+)/ =~ line #1列目は数字でないので( )はない。d はとってくる数字を表す。 sum += $1.to_i * $2.to_i * 100 #合計 = 日数 × 本数 × 100 #平均点は小数点であるため n += 1 end #if - end end #while - end average = sum/n #平均 = 合計 ÷ 人数 printf("本日の総売り上げは、 %d 円でした。\n",sum) printf("本日の客単価は、 %d 円でした。 \n", average) (実行結果) irsv{c106122}% ./rental.rb iimori.dat [~/Ruby] 本日の総売り上げは、 41400 円でした。 本日の客単価は、 2957 円でした。 (変更点) 授業の中では score だったのを、 line にした。 (考察) ・例 … aの場合 2本を5日借りた。→ 2 * 5 * 100 計算するとき、最初に 日数 * 100 を出して計算した。 irsv{c106122}% bc -l [~] 500 * 2 + 700 * 4 + 700 * 6 + 600 * 3 + 1000 * 5 + 700 * 2 + 900 * 4 + 300 * 1 +200 * 1 + 1000 * 9 + 800 * 6 + 700 * 6 + 500 * 3 + 400 * 4 41400 irsv{c106122}% bc -l [~] 41400/14 2957.14285714285714285714 計算結果が同じになった。 (参考文献) 「データから平均を求めよう」 score.dat http://roy/~madoka/2007/r1/08/08-04-addition.html 【B】 (ファイル) #!/usr/koeki/bin/ruby lunchA = 0 #lunchA の初期化 lunchB = 0 #lunchB の初期化 n = 0 # n の初期化 goukei = 0 #和 goukei の初期化 average = 0 #平均 average の初期化 while line = gets #1行ずつとってくる if /(\S+)/ =~ line #1列目は文字なので( )でくくる。 if $1 == "A" lunchA += 1 elsif $1 == "B" lunchB += 1 end n += 1 # n に1を足していく。 end #if - end end #while - end goukei = lunchA * 650 + lunchB * 550 #総売り上げを求める式 average = goukei / n #平均 = 合計 ÷ 人数 if lunchA > lunchB #lunchA が lunchB より注文数が多い時 print("新メニューと入れ替えるのは、ランチB。\n") elsif lunchA == lunchB #lunchA と lunchB の注文数が同じ時 print("2つともそのままでOK。\n") else lunchA < lunchB #lunchA が lunchB より注文数が少ない時 print("新メニューと入れ替えるのは、ランチA。\n") end #if - end printf("本日の総売り上げは、 %d 円でした。\n",goukei) printf("本日の客単価は、 %d 円でした。 \n", average) (変更点) 和の変数を sum → goukei に変更した。 (実行結果) irsv{c106122}% ./cafe.rb kuromori.dat [~/Ruby] 新メニューと入れ替えるのは、ランチB。 本日の総売り上げは、 7300 円でした。 本日の客単価は、 608 円でした。 (考察) ランチBの方が注文数が少なかったことがわかる。 lunchA は7人注文した。 lunchB は5人注文した。 irsv{c106122}% bc -l [~] 7 * 650 + 5 * 550 7300 7300 / 12 608.33333333333333333333 (参考文献) ・「データから平均を求めよう」の score.dat http://roy/~madoka/2007/r1/08/08-04-addition.html ■■ 3 ■■ 今回も全てにおいて頑張った。平均を求めるプログラムに、合計を求める操作 を加え、総売り上げと客単価を求めるものを作成した。授業ではプログラムが 作動しなくついていけなかったが、何とか作成することができたので嬉しく思っ た。(\S+) や \s や d の意味や、平均や合計の求め方を理解することができ た。