第7回 基礎プログラミング I レポート課題 氏名:布川大地 学籍番号:c1091230 語学クラス:英語3 コース(系):政策 1、筆記課題 A.0b11110110 = 0x?? 2進数11110110を16進数に直す。 2進数四桁で16進数一桁を表すので、「1111」と「0110」に分ける。 次に2進数のそれぞれの桁に掛けていく。 0b1111 = 1*8 + 1*4 + 1*2 + 1*1 = 0d15 0b0110 = 0*8 + 1*4 + 1*2 + 0*1 = 0d6 10進数の15は16進数では「f」に相当する。 10進数 16進数 9以前 10進数と同じ 10 a 11 b 12 c 13 d 14 e 15 f 6はそのままで6。 よって、 0b11110110 = 0xf6 となる。 B.0d256 = 0x?? 10進数256を16進数に直す。 16進数に直す場合、まずは10進数256を「16」で割って行き、余りを求める。 256 / 16 = 16 余り 0 16 / 16 = 1 余り 0 1 / 16 = 0 余り 1 答えが0余り1になるまで割って行き、余りを下から並べていくと、16進数に変 換できる。 よって、 0b256 = 0x100 となる。 2、プログラミング問題 A、 7人の客が電池を買った日の売り上げと客単価を求めるプログラムを作成した。 [作成したプログラム] #!/usr/koeki/bin/ruby syurui = Array.new sell = Array.new sum = 0 i = 0 open("battery.dat", "r") do |f| while buy = f.gets if/(\S+)\s+(\d+)/ =~ buy syurui[i] = $1 sell[i] = $2.to_f if syurui[i] == "A" a = 400 * sell[i] elsif syurui[i] == "B" a = 300 * sell[i] else a = 50 * sell[i] end sum += a i += 1 end end end k = 0 print("売上数\n") while k < syurui.length printf("%-10s\t%d\n", syurui[k], sell[k]) k += 1 end tanka = sum /7 printf("その日の売り上げは %d円です。 \n", sum) printf("客単価は %2.1f 円です。 \n", tank [実行結果] pan{c109123}% ./open_battery.rb battery.dat [~/Ruby] 売上数 A 1 B 2 C 4 A 7 B 6 C 5 A 8 その日の売り上げは 2500円です。 客単価は 357.1 円です。 [確認、考察] [売り上げ] 400*1 400 300*2+400 1000 50*4+1000 1200 400*7+1200 4000 300*6+4000 5800 50*5+5800 6050 400*8+6050 9250 [客単価] 9250/7 1321.42857142857142857142 となり、実行したプログラムとbcーlで計算した結果が一致した。 3、感想 今回はかなり難しかった。また友達の力を借りておこなったので次からはもっと ちゃんとできるようにしたい。 4、協同製作者:横山広樹君、渡辺力、藤井駿、池田博哉、花木剛志 参考文献など:http://roy/~madoka/2009/r1/07/crt.html http://roy/~naoya/ruby/8.html