第5回 基礎プログラミング II レポート課題 氏名:木内雄 学籍番号:c1090561 語学クラス:中国語 コース(系):政策 1.筆記問題 A ASCII表より k = 6b i = 69 n = 6e a = 61 y = 59 u = 75 10進数の場合 k = 6*16^1 + 11*16^0 = 107 i = 6*16^1 + 9*16^0 = 105 n = 6*16^1 + 14*16^0 = 110 a = 6*16^1 + 1*16^0 = 97 i = 6*16^1 + 9*16^0 = 105 y = 5*16^1 + 9*16^0 = 89 u = 7*16^1 + 5*16^0 = 117 107+105+110+97+105+89+117=730 確かめ算 pan{c109056}% bc -l [~] 107+105+110+97+105+89+117 730 10進数を二進数にする。 730/2 = 365 余り0 365/2 = 182 余り1 182/2 = 91 余り0 91/2 = 45 余り1 45/2 = 22 余り1 22/2 = 11 余り0 11/2 = 5 余り1 5/2 = 2 余り1 2/2 = 1 余り0 1/2 = 0 余り1 よって0d730=1011011010となる。 16進数にするために右から4つずつ区切る。 1010 = 1*2^3+0*2^2+1*2^1+0*2^0 = 10 1101 = 1*2^3+1*2^2+0*2^1+1*2^0 = 13 0010 = 0*2^3+0*2^2+1*2^1+0*2^0 = 1 0b730=0x1ad 730を16で割る。 730/16 = 45 余り 10 45/16 = 2 余り 13 13/16 = 1 余り 1 0b730=0x1ad したがって、Ox1ab=Od730 となるので、どちらで計算しても一致することが わかる。 B def food(okiru, haburasi, senngann) okiru yoghurt をとる asa = haburasi と senngannをする asa = okiru end haburasi(8時, 1本, 水) print("学校にいくか\n") 2.プログラム問題 a 考えた設定:ある数からいくつかの数を取る組み合わせを考えるプログラム #!/usr/koeki/bin/ruby def kumi (x) if x == 1 1 else x * kumi(x-1) end end all = 10 choice = 2 kotae = all - choice printf("%d 個の物から %d 個取る組合せは\n", all, choice) printf("%d 通りです。\n", kumi(all)/(kumi(choice)*kumi(kotae))) 実行結果 pan{c109056}% ./def_combination.rb [~/Ruby] 10 個の物から 2 個取る組合せは 45 通りです。 確かめ算 組み合わせの計算の仕方は a!/(b!*(a-b)!) pan{c109056}% bc -l [~/Ruby] 10*9*8*7*6*5*4*3*2*1/(2*1*8*7*6*5*4*3*2*1) 45.00000000000000000000 quit よってこのプログラムは正しい。 もとにしたプログラム:今週作ったdef_factorial.rb B. 考えた設定:マルボロを10箱以上買うと20円引きになるプログラム。 #!/usr/koeki/bin/ruby def maru(x) if x >= 10 a = 20 else a = 0 end (320 - a) * x end def seven(y) 300 * y # セブンスターの値段 * 個数 end STDERR.print("増税反対セール中です。\n") STDERR.print("マルボロを10個以上買うと一個20円引きになります。\n") STDERR.print("購入する個数を入力して下さい。\n") STDERR.print("マルボロ (1箱320円): ") a = gets.chomp.to_i # to_i で整数表示にする STDERR.print("セブンスター(1箱300円): ") b = gets.chomp.to_i printf("\nマルボロの合計金額: %d 円\n",maru(a)) printf("セブンスターの合計金額: %d 円\n",seven(b)) printf("\n全ての合計金額は %d 円です。\n",maru(a)+seven(b)) 実行結果 pan{c109056}% ./two_methods.rb [~/Ruby] 増税反対セール中です。 マルボロを10個以上買うと一個20円引きになります。 購入する個数を入力して下さい。 マルボロ (1箱320円): 1 セブンスター(1箱300円): 6 マルボロの合計金額: 320 円 セブンスターの合計金額: 1800 円 全ての合計金額は 2120 円です。 pan{c109056}% ./two_methods.rb [~/Ruby] 増税反対セール中です。 マルボロを10個以上買うと一個20円引きになります。 購入する個数を入力して下さい。 マルボロ (1箱320円): 10 セブンスター(1箱300円): 10 マルボロの合計金額: 3000 円 セブンスターの合計金額: 3000 円 全ての合計金額は 6000 円です。 確かめ算 pan{c109056}% bc -l [~/Ruby] 320+300*6 2120 quite pan{c109056}% bc -l [~/Ruby] (320-20)*10+300*10 6000 quite 考察 確かめ算よりちゃんとマルボロを10個以上買うと20円引きになっていたのでこの プログラムは正しい。 基にしたプログラム:先週作ったdef_twoparam.rb 3.感想 機械的な行動 食物が育つ ↓ 虫が食べる ↓ 小動物に食べられる ↓ 大型動物に食べられる ↓ 大型動物が死んで腐る ↓ 食物が育つ ↓ . . . 今回は筆記問題がいつもより時間がかかってしまった。途中で混乱して何回かや り直した。プログラム問題も組み合わせの計算の仕方を思い出すのが大変だった。 高校生の時あんなに頑張ったのに…。高校時代を思い出しながら頑張ったレポー トでした。 4. 参考文献 第4回 繰り返しは引っ張りだそう http://roy/~madoka/2010/r2/04/ 第5回 何度も呼び出そう http://roy/~madoka/2010/r2/05/ 共同学習者 遠藤君、横山君、酒井君