第7回 基礎プログラミング I レポート課題 氏名: 遠藤裕貴 学籍番号:c1090294 語学クラス:中国語 コース(系):政策マネ 1.A 0b 11110110 = 0x?? 11110110を右から4桁ずつ区切る。 1111/0110となる。 区切った2進数を16進数に直していく。 表と見くらべて f6 となる。 よって、0xf6。 B 0d 256 = 0x?? 10進数を16進数に直すので 256/16 を行う。 256 / 16 = 16 余り 0 16 / 16 = 1 余り 0 1 / 16 = 0 余り 1 よって 0x100 となる。 2. A 客単価と売上を計算するプログラム プログラム #!/usr/koeki/bin/ruby taipu = Array.new uru = Array.new goukei = 0 i = 0 open("battery.dat" , "r") do |kan| while denchi = kan.gets if /(\S+)\s+(\d+)/ =~ denchi taipu[i] = $1 uru[i] = $2.to_f if taipu[i] == "A" x = 400 * uru[i] elsif taipu[i] == "B" x = 300 * uru[i] else x = 50 * uru[i] end goukei += x i += 1 end end end k = 0 print("伝票\n") while k < taipu.length printf("%-10s\t%d\n", taipu[k], uru[k]) k += 1 end en = goukei / 10 printf("客単価%3.1f円\n", en) printf("売り上げ%d円\n", goukei) 実行結果 pan{c109029}% ./open_battery.rb [~/Ruby] 伝票 A 3 B 2 C 1 B 1 C 1 A 2 A 3 A 1 B 2 C 3 客単価535.0円 売り上げ5350円 考察 bc -lで確かめ算をしてみたところ pan{c109029}% bc -l [~/Ruby] 3*400 1200 2*300 600 1*50 50 1*300 300 1*50 50 2*400 800 3*400 1*400 400 2*300 600 3*50 150 1200+600+50+300+50+800+1200+400+600+150 5350 5350 / 10 535.00000000000000000000 quit 計算と確かめ算が合ったので、このプログラムは正常に機能したといえる。 B プログラム #!/usr/koeki/bin/ruby taipu = Array.new uru = Array.new goukei = 0 i = 0 open("battery.dat" , "r") do |kan| while denchi = kan.gets if /(\S+)\s+(\d+)/ =~ denchi taipu[i] = $1 uru[i] = $2.to_f if taipu[i] == "A" x = 400 * uru[i] elsif taipu[i] == "B" x = 300 * uru[i] else x = 50 * uru[i] end goukei += x i += 1 end end end k = 0 print("伝票\n") while k < taipu.length printf("%-10s\t%d\n", taipu[k], uru[k]) k += 1 end en = goukei / 10 printf("客単価%3.1f円\n", en) printf("売り上げ%d円\n", goukei) taipua = Array.new urua = Array.new goukeia = 0 z = 0 open("battery.dat" , "r") do |kana| while denchi = kana.gets if /(\S+)\s+(\d+)/ =~ denchi taipua[z] = $1 urua[z] = $2.to_f if taipua[z] == "A" x = 400 * urua[z] elsif taipua[z] == "B" if urua[z] <= 1 y = 280 elsif urua[z] >= 2 y = 240 end x = y * urua[z] else x = 50 * urua[z] end goukeia += x i += 1 end end end ena = goukeia / 10 printf("\n客単価%3.1f円\n", ena) printf("売り上げ%d円\n", goukeia) 実行結果 pan{c109029}% ./open_six.rb [~/Ruby] 伝票 A 3 B 2 C 1 B 1 C 1 A 2 A 3 A 1 B 2 C 3 客単価535.0円 売り上げ5350円 客単価509.0円 売り上げ5090円 考察 bc -lで確かめ算をしてみたところ pan{c109029}% bc -l [~/Ruby] 3*400 1200 2*240 480 1*50 50 1*280 280 1*50 50 2*400 800 3*400 1200 1*400 400 2*240 480 3*50 150 1200+480+50+280+50+800+1200+400+480+150 5090 5090/10 509.00000000000000000000 quit 計算と確かめ算が合ったので、このプログラムは正常に機能したといえる。 感想 最初、途中で[i]が抜けていてならなくて諦めようとしてしまったが、諦めたく なかったので頑張った。 参考文献 題名:Ruby プログラミング 基礎講座 作者:広瀬雄二 Webページ 礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「券売機 のしくみ」 http://roy/~madoka/2010/r1/07/07_13_theme_11_vendingmachine.html 著者:西村まどか 共同学習者 :青木 千紗