第 5 回 何度も呼び出そう レポート課題 氏名:須藤 充司 学籍番号: C1101342 語学クラス:英語2 コース(系): 環境サイエンスコース 1, A 第三回のレポートでしらべたASCLL(Sutou Atusi) S = 0x53 u = 0x75 t = 0x74 o = 0x6f u = 0x74 A = 0x41 t = 0x74 u = 0x75 s = 0x73 i = 0x69 各々を16進数足し算する 0x53 + 0x75 = 5+7、 3+5^16 = c5 0x74 + 0x6f = 7+6, 4+16^16 = d4 0x74 + 0x41 = 7+4, 4+1^16 = b3 0x74 + 0x75 = 7+7, 4+5^16 = e5 0x73 + 0x69 = 7+6, 3+9^16 = d7 c5 + d4 = 12+13 , 5+4^16 = 195 b3 + e5 = 11+14 , 3+5^16 = 195 195 + d7 = 19+d , 5+7^16 = 387 387 + 195 = 3+1+1 , 8+9^16 , 7+5^16 = 507 名前を足すと0x507となる 16進数を10進数に直す、16をかけていく 10進数表で確認しながら実行した。 0x53 = 5 * 16 ^ 1 + 3 * 16 ^0 = 83 0x75 = 7 * 16 ^ 1 + 5 * 16 ^0 = 117 0x74 = 7 * 16 ^ 1 + 4 * 16 ^0 = 116 0x6f = 6 * 16 ^ 1 + 15 * 16 ^0 = 111 0x74 = 7 * 16 ^ 1 + 4 * 16 ^0 = 116 0x41 = 4 * 16 ^1 + 1 * 16 ^0 = 82 0x74 = 7 * 16 ^1 + 4 * 16 ^0 = 116 0x75 = 7 *16 ^1 + 5 *16 ^0 = 117 0x73 = 7 *16 ^1 + 3 * 16 ^0 = 116 0x69 = 6 *16 ^1 + 9 * 16 ^0 = 105 83+117+116+111+116+82+116+117+116+105=1139 よって、0d1079 となる。 これを16進数にするため16で割る 1079^16 = 67,,,7 67^16 = 4,,,3 4^16 = 0,,,12 よって c、3、7となる。 B 朝食の行動をプログラムに風にしてみた。 def food (gohan, misosiru ,natto) gohan を盛る misosiru を作る dish = gohan に natto をかける end food(1杯、150g、味噌汁1杯) # 準備ができたにでよびだす print("いただきます\n") 2 プログラム問題 1、考えた設定 メニューのなかから何種類セットを作るか考えた #!/usr/koeki/bin/ruby def factorial(s) if s == 1 1 else s * factorial(s-1)# -1として一つ少ない数字をかける end end def kumiawase(f,w) factorial(f)/factorial(f-w) #ここでaCr公式を使用している。 end STDERR.print("セットメニューの組み合わせを求めます。 \n") STDERR.print("店には1から15までのメニューがある。何種類選びますか?") setto = gets.to_i menyu = 15 printf("%d 種類選んだ セットの組み合わせは %d 通りです。 \n",setto ,kumiawase(menyu,setto)) 2、実行結果 (1) pan{c110134}% ./def_combination.rb [~/Ruby] セットメニューの組み合わせを求めます。 店には1から15までのメニューがある。何種類選びますか?2 2 種類選んだ セットの組み合わせは 210 通りです。 (2) pan{c110134}% ./def_combination.rb [~/Ruby] セットメニューの組み合わせを求めます。 店には1から15までのメニューがある。何種類選びますか?3 3 種類選んだ セットの組み合わせは 2730 通りです。 3、考察 (1)の場合は15から2を選ぶから 10C2になる。 aCr = a!/r!の公式をもちいて pan{c110134}% bc -l [~/Ruby] (15*14*13*12*11*10*9*8*7*6*5*4*3*2*1)/(13*12*11*10*9*8*7*6*5*4*3*2*1) 210.00000000000000000000 よって、210通りである。 (2)も同様に計算する pan{c110134}% bc -l [~/Ruby] (15*14*13*12*11*10*9*8*7*6*5*4*3*2*1)/(12*11*10*9*8*7*6*5*4*3*2*1) 2730.00000000000000000000 よって、2730通りである。 以上からプログラムは正しく動いているといえる。 3、感想 ベルトコンベアー 巨大な工場ならベルトコンベアーが止まらずに稼動している まさに機械的な操作を象徴するような機械である。 今回は進数計算が難関だった、16進数を10進数に直したり16進数の足し算に てまどった。 プログラムは前回考察が足りなかったので自分なりに書いた。 4、参考文献 基礎プログラミングII 第5回 西村 まどか http://roy/~madoka/2011/r2/05/r2_05_05_theme_03_param.html シュミレーションで考えること 共同作成者 吉田 亘 下妻 匡哉