第5回 基礎プログラミング II レポート課題 氏名:笹木郁哉 学籍番号:c1090791 語学クラス:英語1 コース(系):地域 1.A 笹木郁哉「Sasaki Fumiya」をASCIIコード表で表したものを 用いて、それを足し合わせたものを16進数と10進数で表記し たものを求める。「Sasaki Fumiya」をASCIIコード表で表すと、 S 0x53 a 0x61 s 0x73 a 0x61 k 0x6b i 0x69 F 0x46 u 0x75 m 0x6d i 0x69 y 0x79 a 0x61 となる。まずこれを10進数に直す。16進数を10進数に直すには、 16進数の数値に右から16の0乗、16の1乗をかけていけば良い。 S 0x53 - 5*16**1 + 3*16**0 = 80 + 3 = 83 よって、0x53 = 0d 83 a 0x61 - 6*16**1 + 1*16**0 = 96 + 1 = 97 よって、0x61 = 0d 97 s 0x73 - 7*16**1 + 3*16**0 = 112 + 3 = 115 よって、0x73 = 0d 115 a 0x61 - 6*16**1 + 1*16**0 = 96 + 1 = 97 よって、0x61 = 0d 97 k 0x6b - 6*16**1 + 1*16**0 = 96 + 11 = 107 よって、0x6b = 0d 107 [b は 11 に直して計算。] i 0x69 - 6*16**1 + 9*16**0 = 96 + 9 = 105 よって、0x69 = 0d 105 F 0x46 - 4*16**1 + 6*16**0 = 64 + 6 = 70 よって、0x46 = 0d 70 u 0x75 - 7*16**1 + 5*16**0 = 112 + 5 = 117 よって、0x75 = 0d 117 m 0x6d - 6*16**1 + 13*16**0 = 96 + 13 = 109 よって、0x6d = 0d 109 [d は 13 に直して計算。] i 0x69 - 6*16**1 + 9*16**0 = 96 + 9 = 105 よって、0x69 = 0d 105 y 0x79 - 7*16**1 + 9*16**0 = 112 + 9 = 121 よって、0x79 = 0d 121 a 0x61 - 6*16**1 + 1*16**0 = 96 + 1 = 97 よって、0x61 = 0d 97 そして、この10進数で出た値を全て足すと10進数の値が出る。 83 + 97 + 115 + 97 + 107 + 105 + 70 + 117 + 109 + 105 + 121 + 97 = 1223 よって 0d 1223 となる。 次に、0d1223を16進数表記に直す。10進数を16進数に直すには、 0d1223 の1223 を16で割っていく。 1223 / 16 = 76 ... 10 76 / 16 = 4 ... 11 このようにして出た値の4と、余りの11、10という値を順に取っていく。 11を16進数表記に変換すると B になる。 10を16進数表記に変換すると A になる。 よって、0d 1223 = 0x 4BA となる。 B. 風呂での動作をプログラム風に書き直した。 def bath(body, shampu, conditioner) bodysorp で体を洗う shampu で頭を洗う conditionerをつける head = bodysorpとshampuとconditionerを洗い流す end bath(4回プッシュ、 5回プッシュ、 6回プッシュ) print("さっぱり、すっきりした。 \n") 2.A a.考えた設定 入力した数字から組み合わせを求める。 b.作成したプログラム #!/usr/koeki/bin/ruby print("袋の中にアメがあります。 \n") STDERR.print("何個ありますか?: ") m = gets.chomp.to_i STDERR.print("何個取りますか?: ") n = gets.chomp.to_i def factorial(a) if a == 1 1 else a * factorial(a - 1) end end printf("%d 個のアメから %d 個取る組み合わせは %d 通りあります。 \n", m, n, factorial(m) / (factorial(n) * factorial(m -n))) c.もとにしたプログラムからの変更点 授業で作成した def_factorial.rb を参考に、変数を変えていった。 d.実行結果 pan{c109079}% ./def_combination.rb [~/Ruby] 袋の中にアメがあります。 何個ありますか?: 5 何個取りますか?: 2 5 個のアメから 2 個取る組み合わせは 10 通りあります。 e.考察 pan{c109079}% bc -l [~/Ruby] 5 * 4 * 3 * 2 * 1 120 2 * 1 * 3 * 2 * 1 12 120 / 12 10.00000000000000000000 確かめ算を行なった結果、計算があったのでこのプログラム は正しいと言える。 B. a.考えた設定 CDと雑誌を買ったときの合計金額を出すプログラム b.作成したプログラム #!/usr/koeki/bin/ruby def CD(disk) if 10 < disk 800 * disk * 0.5 elsif 5 < disk 800 * disk else 1000 * disk end end def zassi(book) 500 * book end STDERR.print("1枚1000円のCDをいくつ買いますか? \n\n") sleep 2 STDERR.print("5枚以上購入されますと1枚800円になります。 \n\n") sleep 2 STDERR.print("10枚以上購入されますと半額となっております。 \n") cd = gets.chomp.to_i print("1冊500円の雑誌を何冊購入しますか? \n") hon = gets.chomp.to_i total = CD(cd) + zassi(hon) STDERR.printf("CD %d枚で、 %d 円になります。 \n\n", cd,CD(cd)) sleep 2 STDERR.printf("雑誌 %d冊で、 %d 円になります。 \n\n", hon,zassi(hon)) printf("合計金額は %d 円になります。毎度ありがとうございました。 \n\n", total) c.もとにしたプログラムからの変更点 授業で作成した def_metabolic.rb を参考にして、methodを 2つ以上使用し、今回の内容に合うように変更していった。 d.実行結果 pan{c109079}% ./two_methods.rb [~/Ruby] 1枚1000円のCDをいくつ買いますか? 5枚以上購入されますと1枚800円になります。 10枚以上購入されますと半額となっております。 2 1冊500円の雑誌を何冊購入しますか? 1 CD 2枚で、 2000 円になります。 雑誌 1冊で、 500 円になります。 合計金額は 2500 円になります。毎度ありがとうございました。 e.考察 pan{c109079}% bc -l [~/Ruby] 1000 * 2 2000 500 * 1 500 2000 + 500 2500 確かめ算を行なった結果このプログラムは正しいと言える。 3.感想 食事であったり、飲み物を飲んだりと常日頃の生活がそれに相当 すると思った。 今日の課題は少々難しかったがなんとかできた。 参考文献 西村まどか http://roy/~madoka/2010/r2/05/ 協力してくれた先輩 大沼 拓海さん 共同学習者 奥山 広大