第7回 基礎プログラミング I レポート課題 氏名:小関文紀 学籍番号:c1090638 語学クラス:中国語 1 コース(系):地域共創コース 1 A 0b11110110を16進数で表す場合 まずは10進数に直す必要があるので10進数に直す。 0 * 1 = 0 1 * 2 = 2 1which * 4 = 4 0 * 8 = 0 1 * 16 = 16 1 * 32 = 32 1 * 64 = 64 1 * 128 = 128 次にこの数を足す。 0+2+4+0+16+32+64+128=246 10進数は0d246ということになる。 最後にこの10進数を16進数になおす。 246 / 16 = 15 余り 6 15 / 16 = 0 余り 15 よって0d256は0xf6となる。 B 0d256を16進数で表す場合 256 / 16 = 16 余り0 16 / 16 = 1 余り0 1 / 16 = 0 余り1 よって0d256を16進数で表すと0x100 2 B 設定 6個入りだけを20円引きして、2パック買うと60円引きにする。この時の売上の変 化を表すプログラム。 プログラミング本体 # syouhin # kosuu A 1 B 2 C 3 B 2 A 1 A 1 C 2 B 1 #!/usr/koeki/bin/ruby taipu = Array.new # taipu という配列を作る uriage = Array.new # uriage という配列を作る sum = 0 i = 0 open("battery.dat" , "r") do |f| # battery というファイルを開き # f という名前にする。 while buy = f.gets if /(\S+)\s+(\d+)/ =~ buy # 文字列、空白、数値にマッチ # するものを読み込む taipu[i] = $1 # taiou[i]の中にいれる uriage[i] = $2.to_f # uriage[i]の中にいれる if taipu[i] == "A" # もしtaipu[i]がAだったら次の # 処理をする a = 400 * uriage[i] elsif taipu[i] == "B" # もしtaiou[i]がBだったら次の # 処理をする a = 300 * uriage[i] else a = 50 * uriage[i] end # if に対する end sum += a i += 1 end # if に対する end end # while に対する end end # open に対する end k = 0 print("売上げ数\n") while k < taipu.length # whileのtaiou.lengthでtaipu[k] # の個数を返す printf("%-10s\t%d\n",taipu[k], uriage[k]) k += 1 end # whileはここで終り tanka = sum / 11 printf("客単価は %2.1f円です。 \n",tanka) printf("その日の売上げ %d 円です。 \n", sum) taipu = Array.new # taipu という配列を作る uriagesuu = Array.new # uriagesuu という配列を作る sum_a = 0 p = 0 open("battery.dat" , "r") do |d| # battery というファイルを開き # uriagesuu という配列を作る while bay = d.gets if/(\S+)\s+(\d+)/ =~ bay # 文字列、空白、数値にマッチ # するものを読み込む taipu[p] = $1 # taipu[p]の中にいれる uriagesuu[p] = $2.to_f # uriagesuu[p]の中にいれる if taipu[p] == "A" # もしtaipu[p]がAだったら # 次の処理をする a = 400 * uriagesuu[p] elsif taipu[p] == "B" # もしtaip[p]がBだったら # 次の処理をする if uriagesuu[p] <= 1 # もしuriagesuu[p]が1以下だったら # 次の処理をする a = 280 * uriagesuu[p] elsif uriagesuu[p] >= 2 # uriagesuu[p]が2以上だったら # 次の処理をする a = 240 * uriagesuu[p] end # if に対する end else # それ以外だったら次の処理をする a = 50 * uriagesuu[p] end # if に対する end sum_a += a p += 1 end # if に対する end end # while に対する end end # open に対する end tanka_a = sum_a / 11 printf("客単価は %2.1f 円です。 \n",tanka_a) printf("その日の売上げは %d 円です。 \n",sum_a) 実行結果 pan{c109063}% ./open_six.rb [~/Ruby] 売上げ数 A 1 B 2 C 3 B 2 A 1 A 1 C 2 B 1 客単価は 268.2円です。 その日の売上げ 2950 円です。 客単価は 244.5 円です。 その日の売上げは 2690 円です。 考察 pan{c109063}% bc -l [~/Ruby] 400 * 1 400 300 * 2 600 50 * 3 150 300 * 2 600 400 * 1 400 400 * 1 400 50 * 2 100 300 * 1 300 400 + 600 + 150 + 600 + 400 + 400 + 100 + 300 2950 2950 / 11 268.18181818181818181818 quit pan{c109063}% bc -l [~/Ruby] 400 * 1 400 240 * 2 480 50 * 3 150 240 * 2 480 400 * 1 400 400 * 1 400 50 * 2 100 280 * 1 280 400 + 480 + 150 + 480 + 400 + 400 + 100 + 280 2690 2690 / 11 244.54545454545454545454 quit 実行結果と確かめ算より売上げ値は正しく計算されたといえる。 客単価は 268.18181818181818181818 と計算され小数第2位を四捨五入すると 268.2 となるため、合っている。 もう一つの客単価は 244.54545454545454545454 と計算され小数第2位を四捨五 入すると 244.5 となるため、合っている。 感想 今回はプログラムがとても長く、エラーの数が半端ではなく、エラーをなおす のを一番頑張った。しかも最初プログラムの説明文を書いていなかったため、 探すのも大変だった。しかし、教科書を読みgoto_lineといれ移動したい行を 入れると、その場所にカーソルを移動出来ることを知ったことでとても効率が 良くなった。今回は横山に教えてもらった部分が大きかった。次回は完全に 自分一人の力でやりたい。 参考文献 基礎プログラミング I 第7回「正規表現とRuby言語でのプログラム」券売機のし くみ 西村 まどか先生 http://roy/~madoka/2010/r1/07/07_13_theme_11_vendingmachine.html 基礎プログラミング I 第7回「正規表現とRuby言語でのプログラム」走行距離を 求めるには 西村 まどか先生 http://roy/~madoka/2010/r1/07/07_14_theme_12_distance.html 協同学習者 横山広樹 堀悠貴 佐久間三蔵