第5回 何度も呼び出そう レポート課題 氏名:小川まどか 学籍番号:C1100420 語学クラス:英語2 コース:社会福祉 1.筆記問題 A.Ogawa Madoka ASCJIIコードになおすと、 O = 0x4f g = 0x67 a = 0x61 w = 0x77 a = 0x61 M = 0x4d a = 0x61 d = 0x64 o = 0x6f k = 0x6b a = 0x61 となる。 足していくと、 0x4f=4*16^1+15*16^0=79 0x67=6*16^1+7*16^0=103 0x61=6*16^1+1*16^0=97 0x77=7*16^1+7*16^0=119 0x61=6*16^1+1*16^0=97 0x4d=4*16^1+13*16^0=77 0x61=6*16^1+1*16^0=97 0x64=6*16^1+4*16^0=100 0x6f=6*16^1+15*16^0=111 0x6b=6*16^1+11*16^0=107 0x61=6*16^1+1*16^0=97 79+103+97+119+97+77+97+100+111+107+97=1084 1084を16進数にするために16で割る。 16)1084 −−− 16) 67 12 −−− 16) 4 3 −−− 0 4 下から読むと4312となり、16進数にすると12はcになるので、0x43c 全部足すと10進数は1314になり、16進数は0x442になった。 0d1084=0x43c 16進数と10進数で計算した結果が同じなので、計算はあっている。 B.def breakfast(pan,ringo,milk) panを焼く ringoを切る milkをコップに注ぐ food = jamをpanに塗る food = yoghurtを皿に盛る end breakfast(3分,林檎2分の1,200ml) # 朝ご飯を作るので呼び出す print("朝ご飯のできあがり!!\n") 2.プログラム問題 A. i.考えた設定 クラスの中から班長を選ぶプログラム def_combination.rb を作成した。 ii.作成したプログラム #!/usr/koeki/bin/ruby def factorial(p) # pはpeopleのp if p == 1 # pが1だったら 1 else p*factorial(p-1) end #ifを終わる end #defを終わる def choice(classmate,hanchou) if classmate == hanchou # classmate,hanchouが同じ数のとき 1 # 1を返す else # classmate,hanchouが同じ数ではないとき factorial(classmate)/(factorial(hanchou) * factorial(classmate-hanchou)) end # ifを終わる end # factionalを終わる print("クラスの中から、班長を選びます。\n") print("\n") STDERR.printf("クラスの人数を入力して下さい。:") ninzuu = gets.to_i # 入力された文字を整数にする STDERR.printf("班長は何人選びますか?:") choose = gets.to_i # 入力された文字を整数にする if ninzuu < choose # クラスの人数よりも班長の方が多いとき print("クラスの人数よりも班長の数が多いので計算できません。\n") else # クラスの人数が班長よりも多いとき printf("%d人から班長を%d人選ぶときの組み合わせは%d通りです。\n",ninzuu,choose,choice(ninzuu,choose)) end # ifを終わる iii.もとにしたプログラムからの変更点 授業で作成したプログラム def_factorial.rb をもとにした。 プログラムに合わせてdef、print、STDERR.print、gets.to_iを加えた。 iv.プログラムを実行した結果画面 pan{c110042}% ./def_combination.rb [~/Ruby] クラスの中から、班長を選びます。 クラスの人数を入力して下さい。:20 班長は何人選びますか?:4 20人から班長を4人選ぶときの組み合わせは4845通りです。 pan{c110042}% ./def_combination.rb [~/Ruby] クラスの中から、班長を選びます。 クラスの人数を入力して下さい。:20 班長は何人選びますか?:25 クラスの人数よりも班長の数が多いので計算できません。 v.導き出された結果の考察 数式に当てはめると20 C 4 = 20*19*18*17/4*3*2*1 = 4845 通り bc -lで確かめると pan{c110042}% bc -l [~/Ruby] 20*19*18*17/24 4845.00000000000000000000 となったのでプログラムの計算は正しい。 また、班長の人数をクラスの人数よりも多く入力すると計算できないというメッ セージがきちんと表示された。 B. i.考えた設定 パンとアイスの合計金額を求めるプログラ厶 two_methods.rb を作成した。 ii.作成したプログラム #!/usr/koeki/bin/ruby def pan(p) # メソッドの設定 105 * p # 105*パンの個数 end # defを終わる def aisu(a) # メソッドの設定 if a >= 5 # もしアイスが5個以上なら 120 * a * 0.3 # 120*アイスの個数*0.3 else # 違っていたら 120 * a end # ifを終わる end # defを終わる STDERR.print("パンととアイスを買ったときの合計を計算します。\n") STDERR.print("パンは1個105円で、アイスは1個120円です。\n") STDERR.print("アイスを5個以上買うと3割り引きになります。\n") STDERR.print("パンを何個買いますか?\n") kazu1 = gets.to_i # 入力された文字を整数になおす STDERR.print("アイスを何個買いますか?\n") kazu2 = gets.to_i # 入力された文字を整数になおす goukei = pan(kazu1) + aisu(kazu2) printf("合計は %d 円です。\n",goukei) #合計金額を表示 iii.もとにしたプログラムからの変更点 授業で作成したプログラム def_firefly.rb をもとにした。 プログラムに合わせて、メソッドの名前、値を変更した。 iv.プログラムを実行した結果画面 pan{c110042}% ./two_methods.rb [~/Ruby] パンととアイスを買ったときの合計を計算します。 パンは1個105円で、アイスは1個120円です。 アイスを5個以上買うと3割り引きになります。 パンを何個買いますか? 3 アイスを何個買いますか? 6 合計は 531 円です。 pan{c110042}% ./two_methods.rb [~/Ruby] パンととアイスを買ったときの合計を計算します。 パンは1個105円で、アイスは1個120円です。 アイスを5個以上買うと3割り引きになります。 パンを何個買いますか? 2 アイスを何個買いますか? 2 合計は 450 円です。 v.導き出された結果の考察 ・アイスを5個以上買ったとき bc -lで確かめ算をすると pan{c110042}% bc -l [~/Ruby] 105*3+120*6*0.3 531.0 となったのでプログラムの計算は正しい。 ・アイスが5個未満のとき bc -lで確かめ算をすると pan{c110042}% bc -l [~/Ruby] 105*2+120*2 450 となったのでプログラムの計算は正しい。 3.感想 機械的な操作を繰り返すものとして、シンバルや太鼓を叩きながら前進するぬい ぐるみのおもちゃが挙げられる。 筆記問題Aはよく分からなかったので、先輩のレポートを参考に進めた。始めはど のようにやるかわからなかったが、参考にしながら解いていくうちに理解できた。 一度解いてみて計算ミスがないか確認してみたところ、大幅な計算ミスがあり焦っ た。ミスがないか確かめることがいかに重要なのか実感した。 4.参考文献 基礎プログラミングII 第5回 何度も呼び出そう (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/05/) ・脱メタボリック計画 (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/05/) ・階乗計算 (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/05/r2_05_07_theme_05_factorial.html) ・ひとつずつ確かめよう (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/05/r2_05_08_theme_06_onebyone.html) 西村まどか先生 去年の先輩のレポート (http://roy/~madoka/2010/r2/05/rpt/c109149.txt)