第7回 基礎プログラミング I レポート課題 氏名: XXXXXXXX 学籍番号:C109XXX 語学クラス:中国語 コース(系):福祉 1、筆記問題 A、0b 11110110 = 0x?? 2進数から16進数に直すには、右から4つずつにわけていく。 1111 0110 2進数 10進数 16進数 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 10 A 1011 11 B 1100 12 C 1101 13 D 1110 14 E 1111 15 F その後わけたものを10進数に直す。上の表より2進数だと、1111と0110になり、 10進数で、15と6になる。 その後、表を見ながら16進数に直す。そして、15 は F になり 6 は 6 になる。よって、答えは、F6になる。 0b = 11110110 = 0x F6 B、0d 256 = 0x?? 256 を 2 でわっていく 2 / 256 2 / 128 0 2 / 64 0 2 / 32 0 2 / 16 0 2 / 8 0 2 / 4 0 2 / 2 0 1 0 よって、100000000になる。 4つにわけると 1 と 0000 と 0000 になる。上の表に当てはめて、10進数の1 と 0 と 0 は16進数で、1 と 0 と 0 になる。よって、答えは 100 となる。 0d 256 = 0x 100 2、プログラム問題 A、 8個入りは 400 円(Aタイプ)、6個入りは 300 円(Bタイプ)、ばら売りは 50 円 (Cタイプ)である。その日の売り上げと客単価を計算させるプログラム。 #!/usr/koeki/bin/ruby type = Array.new # type という配列を作る。 pakkusuu = Array.new # pakkusuu という配列を作る。 goukei = 0 # goukei というファイルを作る。 s = 0 # 配列の行番号は0から始まるので # 0にした。 open("battery.dat","r") do |f| # battery というファイルを開き # f というファイル名にする。 while buy = f.gets if/(\S+)\s+(\d+)/ =~ buy # もし文字列、空白、文字列にマッチ # するものを読む type[s] = $1 # type[s]の中にいれる pakkusuu[s] = $2.to_f # pakkusuu[s]の中にいれる if type[s] == "A" # もしtype[s]がAだったら次の処理を # する。 i = 400 * pakkusuu[s] elsif type[s] == "B" # もしpakkusuu[s]がBだったら次の # 処理をする。 i = 300 * pakkusuu[s] else i = 50 * pakkusuu[s] end # if に対する end goukei += i s += 1 end # if に対する end end # while に対する end end # open に対する end l = 0 print("売上げ数\n") while l < type.length # whlie の type.length で type[s] # の個数を返す printf("%-10s\t%d\n",type[l],pakkusuu[l]) l += 1 end kyakutannka = goukei / 10 printf("客単価は %2.1f 円です。\n",kyakutannka) printf("その日の売上げは %d 円です。\n",goukei) ・実行結果 pan{c109033}% ./open_battery.rb [~/Ruby] 売上げ数 A 1 B 1 C 2 B 1 A 2 A 2 B 1 C 3 C 3 A 2 客単価は 410.0 円です。 その日の売上げは 4100 円です。 ・考察 pan{c109033}% bc -l [~/Ruby] 400 * 1 400 300 * 1 300 50 * 2 100 300 * 1 300 400 * 2 800 400 * 2 800 300 * 1 300 50 * 3 150 50 * 3 150 400 * 2 800 400 + 300 + 100 + 300 + 800 + 800 + 300 + 150 + 150 + 800 4100 4100 / 10 410.00000000000000000000 quit 実行結果と確かめ算により、売り上げ値と客単価は正しいといえる。 よって、このプログラムは正確に機能したといえる。 2、プログラム問題 B、6個入りだけを 20 円値引して、2 パック買うと 60 円の値引にする。このと きの売り上げの変化を調査するプログラム。 #!/usr/koeki/bin/ruby type = Array.new # type という配列を作る。 pakkusuu = Array.new # pakkusuu という配列を作る。 goukei = 0 # goukei というファイルを作る。 s = 0 # 配列の行番号は0から始まるので # 0にした。 open("battery.dat","r") do |f| # battery というファイルを開き # f というファイル名にする。 while buy = f.gets if/(\S+)\s+(\d+)/ =~ buy # もし文字列、空白、文字列にマッチ # するものを読む type[s] = $1 # type[s]の中にいれる pakkusuu[s] = $2.to_f # pakkusuu[s]の中にいれる if type[s] == "A" # もしtype[s]がAだったら次の処理を # する。 i = 400 * pakkusuu[s] elsif type[s] == "B" # もしpakkusuu[s]がBだったら次の # 処理をする。 i = 300 * pakkusuu[s] else i = 50 * pakkusuu[s] end # if に対する end goukei += i s += 1 end # if に対する end end # while に対する end end # open に対する end l = 0 print("売上げ数\n") while l < type.length # whlie の type.length で type[s] # の個数を返す printf("%-10s\t%d\n",type[l],pakkusuu[l]) l += 1 end kyakutannka = goukei / 10 printf("客単価は %2.1f 円です。\n",kyakutannka) printf("その日の売上げは %d 円です。\n",goukei) type = Array.new # type という配列を作る。 pakkusuu = Array.new # pakkusuu という配列を作る。 goukei = 0 # goukei というファイルを作る。 s = 0 # 配列の行番号は0から始まるので # 0にした。 open("battery.dat","r") do |f| # battery というファイルを開き # f というファイル名にする。 while buy = f.gets if/(\S+)\s+(\d+)/ =~ buy # もし文字列、空白、文字列にマッチ # するものを読む type[s] = $1 # type[s]の中にいれる pakkusuu[s] = $2.to_f # pakkusuu[s]の中にいれる if type[s] == "A" # もしtype[s]がAだったら次の処理を # する。 i = 400 * pakkusuu[s] elsif type[s] == "B" # もしpakkusuu[s]がBだったら次の # 処理をする。 if pakkusuu[s] <= 1 # もしpakkusuu[s]が1以下だったら # 次の処理をする。 i = 280 * pakkusuu[s] elsif pakkusuu[s] >= 2 # もしpakkusuu[s]が2以上だったら i = 240 * pakkusuu[s] # 次の処理をする。 end # if に対する end else # それ以外だったら次の処理をする。 i = 50 * pakkusuu[s] end # if に対する end goukei += i s += 1 end # if に対する end end # while に対する end end # open に対する end kyakutannka = goukei / 10 printf("客単価は %2.1f 円です。\n",kyakutannka) printf("その日の売上げは %d 円です。\n",goukei) ・実行結果 pan{c109033}% ./open_six.rb [~/Ruby] 売上げ数 A 1 B 1 C 2 B 1 A 2 A 2 B 1 C 3 C 3 A 2 客単価は 410.0 円です。 その日の売上げは 4100 円です。 客単価は 404.0 円です。 その日の売上げは 4040 円です。 ・考察 pan{c109033}% bc -l [~/Ruby] 400 * 1 400 280 * 1 280 50 * 2 100 280 * 1 280 400 * 2 800 400 * 2 800 280 * 1 280 50 * 3 150 50 * 3 150 400 * 2 800 400 + 280 + 100 + 280 + 800 + 800 + 280 + 150 + 150 + 800 4040 4040 / 10 404.00000000000000000000 quit 実行結果と確かめ算より、売り上げ値と客単価は正しく計算されたといえる。 よって、このプログラムは正確に機能したといえる。 ・感想 AとBをやって、みんなに摩擦されてCにもとりかかったがわからなくて妥協してし まった。でも、みんなとやると楽しいのでこれからも頑張っていきたいと思った。 全てにおいて頑張ったがBのプログラム問題で実行結果と計算が合わなくて大変 だった。2進数と10進数と16進数の計算がわかってきて良かった。 これからの課題にもしっかり取り組み頑張っていきたい。 ・参考文献 西村まどか先生 http://roy/~madoka/2010/r1/07/07_13_theme_11_vendingmachine.html 西村まどか先生 http://roy/~madoka/2010/r1/07/07_14_theme_12_distance.html 西村まどか先生 http://roy/~madoka/2010/r1/07/07_11_theme_09_candidate.html 共同学習者 青木 千紗 / 横山 広樹 / 久保田 瑛一郎 協力してくれた先輩 工藤 智也さん