第5回 基礎プログラミング II レポート課題 氏名:遠藤裕貴 学籍番号:c1090294 語学クラス:中国語 コース(系):政策マネ 1.筆記問題 A. 自分の名前のアルファベット: Endo Yuki これをASCIIコードで調べると E = Ox45 n = Ox6e d = Ox64 o = Ox6f Y = 0x59 u = 0x75 k = 0X6b i = 0x69 となる。 まず、それぞれを10進数に書き直す。 Ox45=16^1*4+16^0*5 =64+5 =69 =Od69 Ox6e=16^1*6+16^0*e =96+14 =110 =Od110 Ox64=16^1*6+16^0*4 =96+4 =100 =Od100 Ox6f=16^1*6+16^0*15 =96+15 =111 =Od111 Ox59=16^1*5+16^0*9 =80+9 =89 =Od89 Ox75=16^1*7+16^0*5 =112+5 =117 =Od117 Ox6b=16^1*6+16^0*11 =96+11 =107 =Od107 Ox69=16^1*6+16^0*9 =96+9 =105 =Od105 始めに10進数で求めたときの合計 Od69 + Od110 + Od100 + Od111 + Od89 + Od117 + Od107 + Od105 = Od808 次に、16進数に直す 808 /16=50…8 50/16=3…2 3/16=0…3 よって Ox45 + Ox6e + Ox64 + Ox6f + Ox59 + Ox75 + Ox6b + Ox69 = Ox328 16^2*3+16^1*2+16^0*8 =768 + 32 + 8 =808 これは、上記で求めたものと等しい さらに割り算をしても結果が同じだった 808/16=50余り8 50/16=3余り2 3/16=0余り3 よって Ox328 = Od808 は等しいといえる B. 日常繰り返すものとして、朝起きてからの行動についてプログラム風に書くと 以下のようになると思われる。 def syukan(kao , hamigaki ) #起きてからする行動 kao を洗う hamigaki をする syukan = kao を洗い hamigaki をする end # 返すものはsyukan syukan(顔を洗う, 歯みがきをする) print("目覚めスッキリ\n") 実際のプログラムにするためには、もう少し改良が必要だと思う。 2.プログラム問題 A. ◯考えた設定 袋の中から球を取りだす組み合わせを計算するプログラム。 ◯作成したプラグラム #!/usr/koeki/bin/ruby def factorial(m) if m == 1 1 else m * factorial(m-1) end end def combination(akadama,aodama) factorial(akadama)/(factorial(aodama)*factorial(akadama-aodama)) end STDERR.print("袋にはボールが10個入っています。\n") STDERR.print("袋から赤玉を取りだす組み合わせを計算します。\n") STDERR.print("赤玉を何個取りだしますか?\n") redboll = gets.chomp.to_i hukuro = 10 printf("%d 個 選んだときの組み合わせは %d 通りです。\n",redboll, combination(hukuro,redboll)) ◯変更 授業で使ったdef_factorial.rbをprint文を加えるなどした。 ◯実行結果 pan{c109029}% ./def_combination.rb [~/Ruby] 袋にはボールが10個入っています。 袋から赤玉を取りだす組み合わせを計算します。 赤玉を何個取りだしますか? 4 4 個 選んだときの組み合わせは 210 通りです。 pan{c109029}% ./def_combination.rb [~/Ruby] 袋にはボールが10個入っています。 袋から赤玉を取りだす組み合わせを計算します。 赤玉を何個取りだしますか? 5 5 個 選んだときの組み合わせは 252 通りです。 ◯考察 pan{c109029}% bc -l [~/Ruby] (10*9*8*7*6*5*4*3*2*1)/(4*3*2*1*6*5*4*3*2*1) 210.00000000000000000000 (10*9*8*7*6*5*4*3*2*1)/(5*4*3*2*1*5*4*3*2*1) 252.00000000000000000000 quit この結果から実行結果と確かめ算の結果が一致したことから正しくプログラムさ れているといえる。 B. ◯考えた設定 みかんとリンゴを買ったときリンゴだけ5個または10個以上買うと値引され、そ れぞれの合計が計算されるプログラム。 ◯作成したプログラム #!/usr/koeki/bin/ruby def mikan(m) 80 * m end def ringo(r) if r >= 10 100 * r - 300 elsif r >= 5 100 * r - 100 else 100 * r end end STDERR.print("みかんとリンゴを売っています。\n") STDERR.print("みかんは一個80円、リンゴは一個100円です。\n") STDERR.print("リンゴは5個以上買うと100値引になります。\n") STDERR.print("さらに10個以上買うと300円値引になります。\n") STDERR.print("みかんを何個買いますか?\n") orange = gets.to_i STDERR.print("リンゴを何個買いますか?\n") aplle = gets.to_i total = mikan(orange) + ringo(aplle) printf("合計は %d 円です。\n",total) ◯変更点 method名を変更した。 ◯実行結果 pan{c109029}% ./two_methods.rb [~/Ruby] みかんとリンゴを売っています。 みかんは一個80円、リンゴは一個100円です。 リンゴは5個以上買うと100値引になります。 さらに10個以上買うと300円値引になります。 みかんを何個買いますか? 2 リンゴを何個買いますか? 4 合計は 560 円です。 pan{c109029}% ./two_methods.rb [~/Ruby] みかんとリンゴを売っています。 みかんは一個80円、リンゴは一個100円です。 リンゴは5個以上買うと100値引になります。 さらに10個以上買うと300円値引になります。 みかんを何個買いますか? 2 リンゴを何個買いますか? 5 合計は 560 円です。 pan{c109029}% ./two_methods.rb [~/Ruby] みかんとリンゴを売っています。 みかんは一個80円、リンゴは一個100円です。 リンゴは5個以上買うと100値引になります。 さらに10個以上買うと300円値引になります。 みかんを何個買いますか? 2 リンゴを何個買いますか? 10 合計は 860 円です。 ◯考察 pan{c109029}% bc -l [~/Ruby] 80*2+100*4 560 80*2+100*5-100 560 80*2+100*10-300 860 quit 確かめ算と実行結果が等しいので正しくプログラムされているといえる。 ◯感想 サルのシンバルを叩くおもちゃは叩きながら歩く。 ◯参考文献 基礎プログラミング I 第5回 配列の構造 「ASCII コード表」 http://roy/~madoka/2010/r1/05/05_01_theme_01_asciicode.html 基礎プログラミング II 第5回 何度も呼び出そう 「階乗計算」 http://roy/~madoka/2010/r2/05/05_07_theme_05_factorial.html ◯共同研究者 横山くん ◯プログラム本体を張り付けます