第7回 基礎プログラミング I レポート課題 氏名:笹木郁哉 学籍番号:c1090791 語学クラス:英語1 コース(系):地域 1.A 0b 11110110 = 0x?? 11110110を計算しやすいように半分の4桁でくぎります。 A.0x 1111と0110にくぎる。 はじめに1111を左から順に2の3乗、2の2乗と計算していく。 1 * 2の3乗 = 8 1 * 2の2乗 = 4 1 * 2の1乗 = 2 1 * 2の0乗 = 1 よって8+4+2+1で15となる。 A.0xF 次に0110を上記の手順で同じように行う。 これを対応表を使って16進数に当てはめると0xFとなる。 0 * 2の3乗 = 0 1 * 2の2乗 = 4 1 * 2の1乗 = 2 0 * 2の0乗 = 0 よって0+4+2+0で6となる。 A.0x6 これを対応表を使って16進数に当てはめると0x6となる。 2つを合わせると、0xF6とすることが出来る。 10進数、2進数、16進数対応表 10進数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 16進数 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 B. 0d 256 = 0x?? まず始めに256を2進数に変換する。 256 / 2 = 128 ....... 0 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 A.0b100000000 ちなみに表示するときは、下から並べ替える。 2進数に変換後は、Aの問題と同様に最初の0000と、 次の0000をわける。 最初の1は、0001とすることができるので上記の 手順の通り計算していく。 0 * 2の3乗 = 0 0 * 2の2乗 = 0 0 * 2の1乗 = 0 1 * 2の0乗 = 1 A.0x1 0+0+0+1で1となるので、16進数に当てはめると 0x1となる。 0 * 2の3乗 = 0 0 * 2の2乗 = 0 0 * 2の1乗 = 0 0 * 2の0乗 = 0 A.0x0 最後の0000は2番目にやった計算と同じなので、 計算は省き、0x0となることが分かる。 最後に16進数変換した3つをそれぞれ足して 0x100とすることが出来る。 2.A #!/usr/koeki/bin/ruby taipu = Array.new uriage = Array.new sum = 0 i = 0 open("battery.dat", "r") do |f| while buy = f.gets if /(\S+)\s+(\S+)/ =~ buy taipu[i] = $1 uriage[i] = $2.to_f if taipu[i] == "A" sell = 400 * uriage[i] elsif taipu[i] == "B" sell = 300 * uriage[i] else sell = 50 * uriage[i] end sum += sell i += 1 end end end k = 0 print("%売り上げ数\n") while k < taipu. length printf("%-10s\t%d\n",taipu[k],uriage[k]) k += 1 end tanka = sum / 7 printf("その日の売り上げは、 %d円です。 \n", sum) printf("単価は、%2.1f円です。 \n",tanka) 実行結果 pan{c109079}% ./open_battery.rb [~/Ruby] %売り上げ数 # 0 A 23 B 62 C 15 A 56 B 87 C 44 A 71 その日の売り上げは、 107650円です。 単価は、15378.6円です。 考察 ktermを使って、Ruby/battery.rbとRuby/battery.datを実行し、 bc -lを使って確かめ算を行った結果、同じだということが 証明された。 pan{c109079}% bc -l [~/Ruby] 23 * 400 9200 9200 + 62 * 300 27800 27800 + 15 * 50 28550 28550 + 56 * 400 50950 50950 + 87 * 300 77050 77050 + 44 * 50 79250 79250 + 71 * 400 107650 107650 / 7 15378.57142857142857142857 また、今回の課題で ./open_battery.rb と入力しても、 ./open_battery.rb battery.datと入力しても同じく 実行できることがわかった。 あらたな発見だった。 感想 今回も課題が難しかったが、授業で学んだことをいかせた。 今回も共同学習者や先輩と協力して、課題を完成できた。 次回からも真剣に取り組みたいです。 共同学習者 奥山 広大 阿部 祐樹 協力してくれた先輩 大沼 拓海さん 参考文献 2進数、16進数と10進数 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html 正規表現のレポートの体裁について http://roy/~madoka/2010/rpt/egrep.html 西村まどか 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング http://roy/~madoka/2010/r1/07/