第5回 基礎プログラミング II レポート課題 氏名:大島 藍 学籍番号:C1090331 語学クラス:中国語 コース(系):福祉コース 1、筆記問題 A、 oosima ai を 16進数にすると… o = 0x6f o = 0x6f s = 0x73 i = 0x69 m = 0x6d a = 0x61 a = 0x61 i = 0x69 になるなで、0x6f、0x6f、0x73、0x69、0x6d、0x61、0x61、0x69 と表すことができる。 a = 10 b = 11 c = 12 d = 13 e = 14 f = 15 0x6f = 6*16^1 + 15*16^0 = 111 0x6f = 6*16^1 + 15*16^0 = 111 0x73 = 7*16^1 + 3*16^0 = 115 0x69 = 6*16^1 + 9*16^0 = 105 0x6d = 6*16^1 + 13*16^0 = 109 0x61 = 6*16^1 + 1*16^0 = 97 0x61 = 6*16^1 + 1*16^0 = 97 0x69 = 6*16^1 + 9*16^0 = 105 足し算していくと… 111 + 111 + 115 + 105 + 109 + 97 + 97 + 105 = 850 850 / 16 = 53 … 2 53 / 16 = 4 … 1 3 / 16 = 0 …3 0d 850 = 0x 312 16進数と10進数で計算した結果が一緒なのであってることが確認できる。 B、 ケーキを作るプログラム def cake(komugi,satou,tamago,bata) komugi をふるう satou の量をはかる tamago を割る bata を溶かす boru = komugi と tamago をいれて混ぜる boru = boru に他のも全ていれる end # 返すものは boru def kurimu(namakurimu,satou) namakurimu の量を測る satou の量を測る nama = namakurimu をいれて混ぜる nama = satou もいれる end # 返すものは nama ・ ・ ・ cake(300g,150g,2個,20g) # スポンジをつくるので呼び出す kurimu(300cc,100g) # 生クリームをつくるので呼び出す print("さあ、飾り付けて〜/n") 2、プログラム問題 A、 ・考えた設定 箱の中からくじを取り出した時の組み合わせを求めるプログラムを考えた。 ・作成したプログラム #!/usr/koeki/bin/ruby def factorial(hako) # メソットの設定 if hako == 1 # もし hako が 1だったら 1 else # それ以外だったら hako * factorial(hako-1) # hako に factorial(hako)を呼びかける end # ifのend end # defのend def kumiawase(kuzi_a,kuzi_b) # メソットの設定 factorial(kuzi_a)/(factorial(kuzi_b)*factorial(kuzi_a-kuzi_b)) # factorial(s)を呼び出し # m! # mCr = -----------の計算をする # r!(r-m)! end # defのend STDERR.print("箱の中からくじを引いた時の組み合わせを求めます。\n") STDERR.print("何回くじを引きますか?\n") kuzibiki = gets.to_i # 整数に変えて、変数 kuzibikiの中に代入する hako = 10 # ボールの数は10個なので10を代入 printf("%d 個選んだときの組み合わせは %d 通りです。\n", kuzibiki, kumiawase(hako,kuzibiki)) ・もとにしたプログラム def_factorial.rbをもとにした ・実行結果 pan{c109033}% ./def_combination.rb [~/Ruby] 箱の中からくじを引いた時の組み合わせを求めます。 何回くじを引きますか? 3 3 個選んだときの組み合わせは 120 通りです。 ・考察 pan{c109033}% bc -l [~/Ruby] (10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1) / (3 * 2 * 1 * 7 * 6 * 5 * 4 * 3 * 2 * 1) 120.00000000000000000000 小数で表されていない理由はプログラムで小数ではなく整数に変換して表示して いるからである。よって、このプログラムは正しく動いているといえる。 B、 ・考えた設定 マグロを5匹以上買うと3割引きになるプログラムを考えた ・作成したプログラム #!/usr/koeki/bin/ruby def azi(a) # メソットの設定 100 * a end # defのend def maguro(m) # メソットの設定 if m >= 5 # もしmが5より大きかったら 500 * m * 0.7 else # 違っていたら 500 * m end # ifのend end # defのend STDERR.print("アジとマグロを買った場合の値段を計算します。\n") STDERR.print("アジ1匹100円、マグロ1匹500円で、マグロを5匹以上買うと3割引です。\n") STDERR.print("アジを何匹買いますか?\n") gram_a = gets.to_i # 入力されたアジの数を整数にして代入する STDERR.print("マグロを何匹買いますか?\n") gram_m = gets.to_i # 入力されたマグロの数を整数にして代入する goukei = azi(gram_a) + maguro(gram_m) # 値段の合計をazi,maguroを使い、求める printf("合計は %d 円です。\n", goukei) ・もとにしたプログラム def_firefly.rbをもとにした ・実行結果 pan{c109033}% ./two_methods.rb [~/Ruby] アジとマグロを買った場合の値段を計算します。 アジ1匹100円、マグロ1匹500円で、マグロを5匹以上買うと3割引です。 アジを何匹買いますか? 1 マグロを何匹買いますか? 5 合計は 1850 円です。 ・考察 pan{c109033}% bc -l [~/Ruby] 100 * 1 100 500 * 5 * 0.7 1750.0 100 + 1750 1850 bc -lで計算を行なった結果、確かめ算により、きちんと表示されたので、プロ グラムは正常に機能している。 3、感想 シンバルを叩くサルのおもちゃはこれに該当すると思われる。 今回の課題は、def を使っての階乗の計算に苦労した。 再帰を理解するのも苦労した。 4、参考文献 西村 まどか http://roy/~madoka/2010/r2/05/05_01_theme_01_diet.html 基礎プログラミング II 第5回 何度も呼び出そう 「脱メタボリック計画」 西村 まどか http://roy/~madoka/2010/r2/05/05_04_appendix_01_firefly.html 基礎プログラミング II 第5回 何度も呼び出そう 「ほたるの数と米の収穫量」 5、共同学習者 青木千紗 横山広樹 佐竹聡美