第7回 基礎プログラミング I レポート課題 氏名:奥山広大 学籍番号:c109039A 語学クラス:英語1 コース(系):地域 A、四桁で、区切る。 1111と0110に区切る。左から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になる。 答え、0xF 0110をまた左から順に計算していく。 0 * 2の3乗 = 0 1 * 2の2乗 = 4 1 * 2の1乗 = 2 0 * 2の0乗 = 0 これにより、0+4+2+0=6になる。 そして、16進数に当てはめると0x6になる。 全て足して、0xF6となる。 B、od 256 = ox?? 2進数に256を当てはめる。 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 上の問題と同じように、0000と0000を分ける。 最初の1は、0001となる。答え、0b100000000 0 * 2の3乗 = 0 0 * 2の2乗 = 0 0 * 2の1乗 = 0 1 * 2の0乗 = 1 0+0+0+1=1で0x1。 答え、0x1 0 * 2の3乗 = 0 0 * 2の2乗 = 0 0 * 2の1乗 = 0 0 * 2の0乗 = 0 0+0+0+0=0で0x0。 答え、0x0 0000は、先ほどの計算と同じなので0x0となる。最後に全て足して0x100となる。 プログラム問題 #!/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 / 6 printf("その日の売り上げは、%d円です。 \n", sum) printf("単価は、%2.1f円です。\n",tanka) 実行結果 pan{c109039}% ./open_battery.rb [~/Ruby] %売り上げ数 # 0 A 7 B 2 C 9 A 12 B 64 C 84 その日の売り上げは、32050円です。 単価は、5341.7円です 考察 確かめの計算をした。 pan{c109039}% bc -l [~/Ruby] 7*400 2800 2800+2*300 3400 3400+9 3409 3409-9 3400 3400+9*50 3850 3850+12*400 8650 8650+64*300 27850 27850+84*50 32050 32050/6 5341.66666666666666666666 この計算により答えがあっていると、言える。datを付けなくても実行すること がわかった。 感想 次回も本気出して頑張りたいです。 共同学習者 笹木郁哉 協力してくれた先輩 大沼拓海 先輩 参考文献 広瀬先生の教科書 西村先生のページ 第 7 回 レポート課題 http://roy/~madoka/2010/r1/07/rpt/ 正規表現と Ruby 言語でのプログラミング 「駅名だけを切り出そう」 http://roy/~madoka/2010/r1/07/07_08_theme_07_parenthesis.html