第5回 基礎プログラング II レポート課題 氏名:佐竹聡美 学籍番号:c1090816 語学クラス:英語 コース:社会福祉 1、筆記問題 A. 自分の名前のアルファベットは…Satake Satomi これをASIIで調べる。 S = 0x73 a = 0x61 t = 0x74 a = 0x61 k = 0x6b e = 0x65 S = 0x73 a = 0x61 t = 0x74 o = 0x6f m = 0x6d i = 0x69 まず、これを10進数に直す。 0x73 → 7*16**1 + 3*16**0 = 112 + 3 = 115 よって、0x53 = 0d115 0x61 → 6*16**1 + 1*16**0 = 96 + 1 = 97 よって、0x61 = 0d97 0x74 → 7*16**1 + 4*16**0 = 112 + 4 = 116 よって、0x74 = 0d116 0x61 → 6*16**1 + 1*16**0 = 96 + 1 = 97 よって、0x61 = 0d97 0x6b → bを11になおす 6*16**1 + 11*16**0 = 96 + 11 = 107 よって、0x6b = 0d107 0x65 → 6*16**1 + 5*16**0 = 96 + 5 = 101 よって、0x65 = 0d101 0x73 → 7*16**1 + 3**16*0 = 112 + 3 = 115 よって、0x53 = 0d115 0x61 → 6*16**1 + 1*16**0 = 96 + 1 = 97 よって、0x61 = 0d97 0x74 → 7*16**1 + 4*16**0 = 112 + 4 = 116 よって、0x74 = 0d74 0x6f →fを15になおる 6*16**1 + 15*16**0 = 96 + 15 = 111 よって、0x6f = 0d111 0x6d →dを13になおす 6*16**1 + 13*16**0 = 96 + 13 = 109 よって、0x6d = 0d109 0x69 → 6*16**1 + 9*16**0 = 96 + 9 = 105 よって、0x69 = 0d105 10進数を全て足すと 115 + 97 + 116 +97 + 107 +101 + 115 + 97 + 116 +111 + 109 +105 = 1286 次に2進数にする 1286 / 2 = 643 余り 0 643 / 2 =321 余り 1 321 / 2 = 160 余り 1 160 / 2 = 80 余り 0 80 / 2 = 40 余り 0 40 / 2 = 20 余り 0 20 / 2 = 10 余り 0 10 / 2 = 5 余り 0 5 / 2 = 2 余り 1 2 / 2 = 1 余り0 1 / 2 = 0 余り 1 下から読む 10100000110 これを16進数になおす。 0*2の3乗=0 1*2の2乗=4 0*2の1乗=0 1*2の0乗=1 0+4+0+1=5 0*2の3乗=0 0*2の2乗=0 0*2の1乗=0 0*2の0乗=0 0+0+0+0=0 0*2の3乗=0 1*2の2乗=4 1*2の1乗=2 0*2の0乗=0 0+4+2+0=6 よって、0b10100000110 = 0x506 となる。 0dは10進数で、0xは16進数なので 1286 / 16 = 80 余り 6 80 / 16 = 5 余り 0 5 / 16 = 0 余り 5 よって、10進数を16で割ると、506 になるので計算は正しい。 B. ソフトボールをする前の習慣にをプログラム風に書き直します。 def sport(globe, batto, spike) spike をはく globe を持つ softball = spike と globe でキャッチボールをする softball = softball と batto でトスバッティングをする end softball(2周, 5本, 5回) #準備運動をするので呼び出す nokku(5本, 3周,10分) #ノックをするので呼び出す print("試合を始めるよ!\n") 2、プログラム問題 a.考えた設定 何個かの中から何個かを取りだす組み合わせを表示するプログラム b.作成したプログラム #!/usr/koeki/bin/ruby def factorial(a) #階乗を求める式 if a == 1 1 else a * factorial(a - 1) end end def combination(b, c) #組み合わせを求める式 if b == c 1 elsif c == 0 1 else factorial(b)/(factorial(c)*factorial(b-c)) end end print("コンテナにリンゴがあります。\n") STDERR.print("全部で何個ありますか?\n") b = gets.chomp.to_i #全部の数 STDERR.print("何個取り出しますか?\n") c = gets.chomp.to_i #取り出す数 print("\n") printf("%d個の内%d個取り出す組み合わせは…\n", b , c) printf("%d通りです。\n" , combination(b, c)) c.もとにしたプログラム 授業でやった def_factorial.rb をもとに変更した。 変更した点変数、prinnt文を変更した。 d.実行結果 <5個のうち2個の場合> pan{c109081}% ./def_combination.rb [~/Ruby] コンテナにリンゴがあります。 全部で何個ありますか? 5 何個取り出しますか? 2 5個の内2個取り出す組み合わせは… 10通りです。 <4個のうち3個の場合> pan{c109081}% ./def_combination.rb [~/Ruby] コンテナにリンゴがあります。 全部で何個ありますか? 4 何個取り出しますか? 2 4個の内2個取り出す組み合わせは… 6通りです。 <8個のうち4個の場合> pan{c109081}% ./def_combination.rb [~/Ruby] コンテナにリンゴがあります。 全部で何個ありますか? 8 何個取り出しますか? 4 8個の内4個取り出す組み合わせは… 70通りです。 e.考察 bc -lで確かめる <5個のうち2個> pan{c109081}% bc -l [~/Ruby] (5*4*3*2*1)/(2*1*3*2*1) 10.00000000000000000000 <4個のうち2個> pan{c109081}% bc -l [~/Ruby] (4*3*2*1)/(2*1*2*1) 6.00000000000000000000 <8個のうち4個> (8pan{c109081}% bc -l [~/Rub] *7*6*5*4*3*2*1)/(4*3*2*1*4*3*2*1) 70.00000000000000000000 実行結果と考察が同じなのでこのプログラムは正しい。 B、 a.考えた設定 りんごを6個以上買うと2割引になるプログラムを考えた。 b.作成したプログラム #!/usr/koeki/bin/ruby def budo(r) #メソットの設定 130 * r end def ringo(b) #メソットの設定 if b >= 6 #もしbが6より大きかったら 70 * b * 0.8 else 70 * b end end STDERR.print("へい!いらっしゃい!!!\n") STDERR.print("☆りんごとぶどうを買った場合の値段を計算します。☆\n") STDERR.print("りんご1個70円、ぶどう1房130円で、りんごを6個以上買うと2割引です\n") STDERR.print("りんご何個買いますか?\n") gram_r = gets.to_i #入力されたりんごの数を整数にして代入する STDERR.print("ぶどう何房かいますか?\n") gram_b = gets.to_i #入力されたぶどうの数を整数にして代入する zenbu = ringo(gram_r) + budo(gram_b) printf("合計は %d 円です。\n",zenbu) print("毎度ありっ!!\n") c.もとにしたプログラム 授業で使った def_firefly.rb をもとにした。 d.実行結果 <りんご2個、ぶどう3房> pan{c109081}% ./two_methods.rb [~/Ruby] へい!いらっしゃい!!! ☆りんごとぶどうを買った場合の値段を計算します。☆ りんご1個70円、ぶどう1房130円で、りんごを6個以上買うと2割引です りんご何個買いますか? 2 ぶどう何房かいますか? 3 合計は 530 円です。 毎度ありっ!! <りんご6個、ぶどう3個> pan{c109081}% ./two_methods.rb [~/Ruby] へい!いらっしゃい!!! ☆りんごとぶどうを買った場合の値段を計算します。☆ りんご1個70円、ぶどう1房130円で、りんごを6個以上買うと2割引です りんご何個買いますか? 6 ぶどう何房かいますか? 3 合計は 726 円です。 毎度ありっ!! e.考察 <りんご2個、ぶどう3房> pan{c109081}% bc -l [~/Ruby] 70*2 140 130*3 390 140+390 530 <りんご6個、ぶどう3房> pan{c109081}% bc -l [~/Ruby] 70 * 6 * 0.8 + 130 * 3 726.0 実行結果と考察があっているのでこのプログラムは正しい。 3、感想 機械的な操作を繰り返すものはおもちゃのシンバルを叩くチンパンジーがあると 思う。他には太鼓を叩くさるとかがあると思う。 今回のプログラムは授業でやったことを振り返りながら進めることができた。プ ログラグラ厶を作成し、実行した際には計算はあっていると思っていたが、考察 をしたら計算が合わなかった。原因はかけ算のし仕方が間違っていたからだった。 また、B問題でも実行結果と考察が間違っていたが、それは割り引きの仕方が間 違っていた。今回は友人の協力で完成することができた。次の頑張るぞ! 参考文献 基礎プログラミング II 第5回 何度も呼び出そう ・何度も呼び出そう 「階乗計算」 http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/05/05_07_theme_05_factorial.html ・何度も呼び出そう 「これもだめで、あれもだめ」 http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/05/05_06_theme_04_exit.html 共同学習 *酒井春香 *大島藍 *横山広樹