第5回 何度も呼び出そう レポート課題 氏名: 進藤 江莉亜 学籍番号: c1101193 語学クラス: 英語2 コース(系): 環境 1. A.shindo eria s 0x73 16^1 16^0 16 1 * * 7 3 112 + 3=115 h 0x68 16^1 16^0 16 1 * * 6 8 96 + 8 =104 i 0x69 16^1 16^0 16 1 * * 6 9 96 + 9=105 n 0x6e 16^1 16^0 16 1 * * 6 14 96 +14=110 d 0x64 16^1 16^0 16 1 * * 6 4 96 + 4=100 o 0x6f 16^1 16^0 16 1 * * 6 15 96 +15=111 e 0x65 16^1 16^0 16 1 * * 6 5 96 * 5=101 r 0x72 16^1 16^0 16 1 * * 7 2 112+2=114 i 0x69 16^1 16^0 16 1 * * 6 9 96 + 9=105 a 0x61 16^1 16^0 16 1 * * 6 1 96 + 1=97 ---------↑上が3回目の課題 10進数 115+104=219 219+105=324 324+110=434 434+100=534 534+111=645 645+101=746 746+114=860 860+105=965 965+97=1062 0d1062 10進数を16進数に 16)1062 6 ------- 16)96 2 ---- 16) 4 4 ---- 0 下から順に数えて426 0x426 16進数 0x73+0x68=13,11=db 0x69+0x6e=12=c,9+e=9+14=23=17 c +17 --- d7 0x64+0x6f=12=c,4+f=13 c +13 --- d3 0x65+0x72=13=d,7, d7 0x69+0x61=12,10=ca db +d7 --- 1b2 1b2 +d3 --- 285 d7 +ca --- 1a1 285 +1a1 ---- 426 0x426 10進数に直すと 16^2 16^1 16^0 256 16 1 * * * 4 2 6 ------------- 1024 + 32 + 6=1062 0d1062 B 温泉玉子の作り方をプログラム風にしました。 def ontama (egg,water,time) egg を取り出す waterを鍋に入れて火にかける nabe = water が沸騰したら egg を入れる time 茹でる end # defの終わり ontama (55g,200ml,7分) # 温泉玉子を作るので呼び出す。 print("上手にできました\n") 2 プログラム a考えた設定 福引を行い、それに当たる組合せを考えた。 b作成したプログラム #!/usr/koeki/bin/ruby def factorial(x) # method if x == 1 # もしxが1だったら 1 else # ほかに x * factorial(x-1) end # ifの終わり end # defの終わり def choose(a,b) # method factorial(a) / (factorial(b) * factorial(a-b)) end # defの終わり print("商店街の福引大会\n") STDERR.print("何人が福引に参加しますか?\n") ninzu = gets.to_i STDERR.print("何等までありますか?:\n") atari = gets.to_i printf("%d等まである福引で当たりを引くのは%d通りです。\n", atari, choose(ninzu,atari)) c変更点 def_factorial.rbを参考にして作成した 前のプログラムの変数を変えた。 2回数値を入力させるようにした。 組合せを求める式を入れた。 d実行結果とe考察 pan{c110119}% ./def_combination.rb [~/Ruby] 商店街の福引大会 何人が福引に参加しますか? 10 何等までありますか?: 3 3等まである福引で当たりを引くのは120通りです。 pan{c110119}% bc -l [~/Ruby] (10*9*8)/(3*2*1) 120.00000000000000000000 quit pan{c110119}% ./def_combination.rb [~/Ruby] 商店街の福引大会 何人が福引に参加しますか? 100 何等までありますか?: 3 3等まである福引で当たりを引くのは161700通りです。 pan{c110119}% bc -l [~/Ruby] (100*99*98)/(3*2*1) 161700.00000000000000000000 quit 計算があっているので正しいと言える。 3 感想 筆記の10進数は簡単だったが16進数が繰り上がりで数字か英字になるかですごく 混乱した。しかし法則を理解できたのでなんとかできたと思う。 とるものは違うが、人は1日に3回食事をする。それを毎日繰り返す。 4 参考文献 基礎プログラミング II 第 5 回 (何度も呼び出そう) 「階乗計算」 西村まどか http://roy/~madoka/2011/r2/05/r2_05_07_theme_05_factorial.html (9) 06/20の授業内容:16進数・ASCIIコード 神田直弥 http://roy/~naoya/ruby/9.html