第5回 基礎プログラミング II レポート課題 氏名:花木剛志 学籍番号:C109126A 語学クラス:英語3 コース(系):地域共創コース 1、筆記問題 A はなきたけし→Hanaki Takeshi ASCIIコード表に当てはめると、 H → 0x48 a → 0x61 n → 0x6E a → 0x61 k → 0x6B i → 0x69 T → 0x54 a → 0x61 k → 0x6B e → 0x65 s → 0x73 h → 0x68 i → 0x69 [十六進数で計算した場合] まずは一桁目から計算した。 0d8 + 0d1 + 0d14 + 0d1 + 0d11 + 0d9 + 0d4 + 0d1 + 0d11 + 0d5 + 0d3 + 0d8 + 0d9 = 0d85 85 / 16 = 5 余り 5 5 / 16 = 0 5 よって、0d85 = 0x55 次に二桁目を計算した。 0d4 + 0d6 + 0d6 + 0d6 + 0d6 + 0d6 + 0d5 + 0d6 + 0d6 + 0d6+ 0d7 + 0d6 + 0d6 = 0d76 70 / 16 = 4 余り 12 4 / 16 = 0 4 よって、0d70 = 0x4c 次に桁に注意して、一桁目と二桁目を足す。 5 5 + 4 c --------- 5 1 5 十六進数で計算した結果、0x515となった。 次に10進数に変換していく。 H → 4 * 16 + 8 = 72 a → 6 * 16 + 1 = 97 n → 6 * 16 + 14 = 110 a → 6 * 16 + 1 = 97 k → 6 * 16 + 11 = 107 i → 6 * 16 + 9 = 105 T → 5 * 16 + 4 = 84 a → 6 * 16 + 1 = 97 k → 6 * 16 + 11 = 107 e → 6 * 16 + 5 = 101 s → 7 * 16 + 3 = 115 h → 6 * 16 + 8 = 104 i → 6 * 16 + 9 = 105 そして、これらを足していく。 72 + 97 + 110 + 97 + 107 + 105 + 84 + 97 + 107 + 101 + 115 + 104 + 105 = 1301 十進数で計算した結果、1301となった。 1301を十六進数に直すと、 1301 / 16 = 81 余り 5 81 / 16 = 5 1 5 / 16 = 0 5 となり、0x515 = 0d1301である。 B 毎朝の習慣をプログラム風に書きます。 def asa(douga, wash, gohan) douga を 見る wash を する gohan を食べる。 end asa(niconicodouga, kao, nokorimono) # 朝の習慣を呼び出す print("今日も学校行ってきますか。\n") 2、プログラム問題 問題A [考えた設定] チョコレートが元々何個あるか、その中から何個選ぶかをユーザーに設定しても らい、その数値に応じた組み合わせの数を求めるプログラムを作成した。 [作成したプログラム] #!/usr/koeki/bin/ruby def f(x) if x == 1 #xが1のとき表示 1 else #上記以外のとき表示 x * f(x-1) #順列の計算式 end end def combination(y,z) if y == z #yとzが同じだったとき表示 1 elsif z == 0 #zが0のとき表示 0 else #上記以外のとき表示 f(y)/(f(z) * f(y-z))#組合せの計算式 end end print"チョコレートを選ぶ組み合わせを求めるよ。\n" print"何個の中から?\n" a = gets.chomp.to_i print"何個選ぶの?\n" b = gets.chomp.to_i if a < b print("\選ぶチョコの方が多いよ!!\n") elsif printf("%d個の中から%d個選ぶと、%d通りの組み合わせがあるよ。\n", a , b ,combination(a,b)) end [元にしたプログラムからの変更点] ・順列なので、順列を求める式、f(y)/(f(z) * f(y-z)を追加。 ・元々あるチョコと選ぶチョコが同じ場合、一つも選ばなかった時のために、 if y == z 1 elsif z == 0 0 を追加。 ・選ぶ個数が多かったときのために、 if a < b print("\選ぶチョコの方が多いよ!!\n") を追加。 [実行結果] pan{c109126}% ./def_combination.rb [~/Ruby] チョコレートを選ぶ組み合わせを求めるよ。 何個の中から? 5 何個選ぶの? 3 5個の中から3個選ぶと、10通りの組み合わせがあるよ。 pan{c109126}% ./def_combination.rb [~/Ruby] チョコレートを選ぶ組み合わせを求めるよ。 何個の中から? 10 何個選ぶの? 4 10個の中から4個選ぶと、210通りの組み合わせがあるよ。 pan{c109126}% ./def_combination.rb [~/Ruby] チョコレートを選ぶ組み合わせを求めるよ。 何個の中から? 5 何個選ぶの? 8 選ぶチョコの方が多いよ!! pan{c109126}% [考察] pan{c109126}% bc -l [~/Ruby] (5*4*3*2*1)/(3*2*1*2*1) pan{c109126}% bc -l [~/Ruby] (10*9*8*7*6*5*4*3*2*1)/(4*3*2*1*6*5*4*3*2*1) 210 bc -lで計算したところ、プログラムで出た結果と同じになり、プログラムの計 算が正しいことが分かった。 また、元々の個数より選ぶ個数が多かった場合、「選ぶチョコの方が多いよ!!」 というメッセージが出た。 3、感想 時計、車のピストン運動、メトロノームが機械的に操作を繰り返すものだと思う。 4、参考文献など 参考にしたwebページ:http://roy/~madoka/2009/r2/05/crt.html 共同製作者:横山広樹君、遠藤孝之君