第 5 回 何度も呼び出そう レポート課題 氏名:森桂太 学籍番号:c110190 語学クラス:中国語 コース(系):社会福祉コース 1.筆記問題 A. ASCII コードで、自分の名前を調べた。 その結果を使用してよい。 その文 字コード を全て足し合わせるといくつになるか、 16 進数と 10 進数で計 算せよ。それぞれ求めた数を 16 で割った場合、 あまりはいくつになるか。 名前は森桂太なので、 mori keita となる。 m = 0x6d o = 0x6f r = 0x72 i = 0x69 k = 0x6b e = 0x15 i = 0x69 t = 0x74 a = 0x61 これを 10 進数になおすと、 m = 0d109 o = 0d111 r = 0d114 i = 0d105 k = 0d107 e = 0d101 i = 0d105 t = 0d116 a = 0d97 文字コードを全て足すと、 109 + 111 + 114 + 105 + 107 + 101 + 105 + 116 + 97 = 965 よって、0d965となる。 これを16で割っていくと、 965 / 16 = 60 3 60 / 16 = 3 7 3 / 16 = 0 1 よって、0x173となった。 B.日常で何度も繰り返す作業を発見し、def 文を使って書け。 風呂に入る行動をプログラムにした。 def nyuuyoku(syanpuu ,yuwokakeru ,huronihairu) 頭に syanpuu をつける 頭を洗ったら yuwokakeru をする huro = huronihairu end nyuuyoku(1g ,30秒 ,300秒) print("良い湯だった\n") 2.プログラム問題 A.順列の method factorial を使用し、組み合わせを求めるプログラム 3.考えたプログラム 今話題のAKB48というグループのメンバーから、リーダーを選ぶプログラム設定 4.作成したプログラム #!/usr/koeki/bin/ruby def factorial(z) if z == 1 1 else z * factorial(z-1) end end def senbatu(a, b) factorial(a) / (factorial(b) * factorial(a-b)) end print("AKB48メンバーの中から、リーダーを選ぶ。\n") print("\n") print("リーダーに選ばれるメンバーの組み合わせは何通りか?\n") print("\n") STDERR.print("全メンバー数(人): ") menbar = gets.to_i STDERR.print("選ばれるリーダー数(人): ") leader = gets.to_i printf("%d人選んだときの組み合わせは%d通りです。\n",leader , senbatu(menbar,leader)) 5.基にしたプログラムからの変更点 factorial()の引数を m から z に。 print("\n")の内容変更。 6.プログラム説明 def factorial(z) でメソッドを与え、 if z == 1 1 でもし z 内が 1 ならば、1を。 else z * factorial(z-1) end end ifを終わらせる。 def senbatu(a, b) factorial(a) / (factorial(b) * factorial(a-b)) でプログラムの計算方法を示し。 printf("%d人選んだときの組み合わせは%d通りです。\n",leader , senbatu(menbar,leader)) で計算の受けかたを指示。 7.実行結果 pan{c110190}% ./def_combination.rb [~/Ruby] AKB48メンバーの中から、リーダーを選ぶ。 リーダーに選ばれるメンバーの組み合わせは何通りか? 全メンバー数(人): 48 選ばれるリーダー数(人): 2 2人選んだときの組み合わせは1128通りです。 pan{c110190}% ./def_combination.rb [~/Ruby] AKB48メンバーの中から、リーダーを選ぶ。 リーダーに選ばれるメンバーの組み合わせは何通りか? 全メンバー数(人): 48 選ばれるリーダー数(人): 3 3人選んだときの組み合わせは17296通りです。 pan{c110190}% bc -l [~/Ruby] (48*47*46)/(3*2*1) 17296.00000000000000000000 (48*47)/(2*1) 1128.00000000000000000000 8.考察 bc -l で確認したところ、計算は合っていた。 9.感想 最初エラーばかりで上手くいかなかったが、友達に教わったり、先生の講義ページや先輩方のプログラムを参考にさせていただき、なんとか出来ました。 10.参考文献 西村先生講義ページ http://roy/~madoka/2011/r2/05/r2_05_01_theme_01_diet.html http://roy/~madoka/2011/r2/05/r2_05_07_theme_05_factorial.html 神田先生講義ページ 先輩作成プログラム http://roy/~madoka/2010/r2/05/rpt/c108203.txt http://roy/~madoka/2010/r2/05/rpt/c109149.txt http://roy/~madoka/2010/r2/05/rpt/c109067.txt