第 5 回 何度も呼び出そう レポート課題 氏名:樋口貴士 学籍番号:C1101715 語学クラス:中国語3 コース(系):地域共創コース 1.筆記問題 A.higuchi takashiをASCIIコードを参考に16進数で表示すると h = 0x68 i = 0x69 g = 0x67 u = 0x75 c = 0x63 h = 0x68 i = 0x69 t = 0x74 a = 0x61 k = 0x6b a = 0x61 s = 0x73 h = 0x68 i = 0x69 となる。 16進数では a = 10 b = 11 c =12 D = 13 e = 14 f = 15 となる。 h 0x68 = 6*16^1+8*16^0 = 104 i 0x69 = 6*16^1+9*16^0 = 105 g 0x67 = 6*16^1+7*16^0 = 103 u 0x75 = 7*16^1+5*16^0 = 117 c 0x63 = 6*16^1+3*16^0 = 99 h 0x68 = 6*16^1+8*16^0 = 104 i 0x69 = 6*16^1+9*16^0 = 105 t 0x74 = 7*16^1+4*16^0 = 116 a 0x61 = 6*16^1+1*16^0 = 97 k 0x6 11 = 6*16^1+11*16^0 = 107 a 0x61 = 6*16^1+1*16^0 = 97 s 0x73 = 7*16^1+3*16^0 = 115 h 0x68 = 6*16^1+8*16^0 = 104 i 0x69 = 6*16^1+9*16^0 = 105 104 + 105 + 103 + 117 + 99 + 104 +105 + 116 + 97 + 107 +97 + 115 + 104 + 105 = 1478 bc -l で確認すると pan{HIGUCHI Takashi}% bc -l [~] 104+105+103+117+99+104+105+116+97+107+97+115+104+105 1478 となるので、足算の答えは1478で合っている。 1478 を 16 進数にするため 16 で割る。 16)1478 ----- 16) 92 … 6 ----- 16) 5 … 12 … c ----- 0 … 5 下から読むと 5c6 となる。 16進数で表示すると 0x5c6 になる。 よって、コードを全部足すと 10進数は 1478 になり、 16進数は 0x5c6 となる。 0d1478 = 0x5c6 16 進数と 10 進数の計算の結果が同じなので、計算は正しいといえる。 B. 毎日の洗濯をする習慣をプログラム風にした。 def sentaku(huku, water,senzai ) huku を入れる water を入れる senzai を入れる sentakuki = sentakukiにhukuとwaterとsenzaiを入れる end sentakuki(3 kg, 47l, 容器 60ml) # 洗濯をするので呼び出す print("洗濯できたよ\n") 2.プログラム問題 Aの問題を作成した。 a.考えた設定 部員数と大会に出る人(選抜)を入力して、 その中から、組合せが何通りあるかを求めるプログラム。 b.作成したプログラム #!/usr/koeki/bin/ruby def factorial(m) # 関数factorialをつくる。因数は m とする。 if m == 1 # m が 1 のときは、 1 #1を返す。 else # m が 1 以外の場合は m * factorial(m-1) # m から 1 をひく。 end # if の終わり。 end # def の終わり。 def sentaku(a, b) # 関数 sentaku の式をつくる。 factorial(a) / (factorial(b) * factorial(a-b)) # mCn = m! / (n!(m-n))の公式 end # def の終わり。 で計算する。 print("部員の中から、大会に出る人(選抜)を選ぶ。\n") print("\n") #空行 print("大会に選ばれる部員の組み合わせは何通りか?\n") print("\n") print("\n") STDERR.print("部員数(人): ") # 部員数 buin = gets.to_i # 入力された文字列を整数にする。 STDERR.print("選ばれる部員数(人): ") # 選ばれる部員数 senbatu = gets.to_i # 入力された文字列を整数にする printf("%d人選んだときの組み合わせは%d通りです。\n",senbatu , sentaku(buin,senbatu)) c.変更点 授業で学んだ def_factorial.rb をもとに作成した。 STDERR.print文とgets.to_i を加えた。 d.実行結果 部員の中から、大会に出る人(選抜)を選ぶ。 大会に選ばれる部員の組み合わせは何通りか? 部員数(人): 10 選ばれる部員数(人): 5 5人選んだときの組み合わせは252通りです。 3.考察 部員数(人): 10 選ばれる部員数(人): 5 = (10*9*8*7*6)/(5*4*3*2*1) の計算式で計算が出来る。 bc -l で計算を確かめると pan{HIGUCHI Takashi}% bc -l [~/Ruby] (10*9*8*7*6)/(5*4*3*2*1) 252.00000000000000000000 確かめた結果 252 となるので、プログラムの計算は正しいことがわかる。 4.感想 機械的な操作を繰り返すものは ボウリング場のピンを直す機械だ。 投げて、倒れ残ったピンや全て倒れたピンをもとどおりにしてくれる。 今回の筆記問題の計算は16進数にしたり、10進数にしたりと大変だったが 計算をしていくうちに少しずつ理解することが出来て良かった。 5.参考文献 16進数・ASCIIコード http://roy/~naoya/ruby/9.html 作者:神田直弥 第 4 回 繰り返しは引っ張りだそう http://roy/~madoka/2011/r2/04/ 作者:西村まどか 第 5 回 何度も呼び出そう http://roy/~madoka/2011/r2/05/ 作者:西村まどか