金曜日に提出したメールに参考文献を書き忘れたことに気付いたので、参考文献 を書いた状態で再提出します。 第 4 回 繰り返しは引っ張りだそう レポート課題 氏名:加藤恭平 学籍番号:c1100549 語学クラス:英語2 コース(系):政策マネジメント 1.筆記問題 A. 「諸葛亮とかけましてノストラダムスの大預言と解きます」 「その心は?」 「どちらも才(災)があります。」 B.(1)とある武器屋で、偃月刀は一本800円で蛇矛は一本1000円である。 費用はいくらになるか。 ・偃月刀3本、蛇矛を2本購入した場合 (800*3)+(1000*2)=2400+2000=4400 bc -l で確認すると pan{c110054}% bc -l [~] 800*3+1000*2 4400 quit (2)遠くに敵船の影を見つけ海戦を仕掛ける。こちらの船に乗っている500人 の弓兵が一人20本の矢を射ると敵船に降り注ぐ矢は合計何本になるか。 ・500*20=10000 bc -l で確認すると pan{c110054}% bc -l [~] 500*20 10000 quit 2.プログラム課題 選択した問題 A,B a)考えた設定 変数が 2 つ以上定義されている def -- end を用いた数値の計算を導くプロ グラム b)作成したプログラム(def_twoparam.rb) #!/usr/koeki/bin/ruby def wepon(r,x,y,z) # weponという関数を定義する。仮引数は r,x,y,z 800*r+1000*x+1200*y+1500*z # 鉄剣の価格 * 本数+ 蛇矛の価格 * 本数 + 偃 月刀の価格 * 本数 + 方天戟の価格 * 本数 end # defに対するend STDERR.print("武器屋へようこそ\n 鉄剣(800円)を何本お求めでしょうか?: ") a = gets.to_i # 入力された値を変数aにしまう。購入する本数は整数なので.to_iを 用いる STDERR.print("蛇矛(1000円)を何本お求めでしょうか?: ") b = gets.to_i # 入力された値を変数bにしまう。購入する本数は整数なので.to_iを 用いる STDERR.print("偃月刀(1200円)を何本お求めでしょうか?: ") c = gets.to_i # 入力された値を変数cにしまう。購入する本数は整数なので.to_iを 用いる STDERR.print("方天戟(1500円)を何本お求めでしょうか?: ") d = gets.to_i #入力された値を変数dにしまう。購入する本数は整数なので.to_iを 用いる total = wepon(a,b,c,d) # 仮引数に入力したa,b,c,dの値が入るので合計が計算 される。 printf("\n鉄剣 %d 本、蛇矛 %d 本、偃月刀 %d 本、方天戟 %d 本で合計 %d円 になります。\またのお越しをお待ちしております。ご武運を。\n",a,b,c,d,total) # 入力された値と合計を代入して表示。 c)元にしたプログラム 授業中に作成したdef_function.rb を基に作成した。 d)実行結果 武器屋へようこそ 鉄剣(800円)を何本お求めでしょうか?: 4 蛇矛(1000円)を何本お求めでしょうか?: 2 偃月刀(1200円)を何本お求めでしょうか?: 5 方天戟(1500円)を何本お求めでしょうか?: 4 鉄剣 4 本、蛇矛 2 本、偃月刀 5 本、方天戟 4 本で合計 17200円になります。またのお越しをお待ちしております。ご武運を。 e)考察 bc -l で計算結果を確認すると pan{c110054}% bc -l 800*4+1000*2+1200*5+1500*4 17200 となり、計算結果は間違っていないのでこのプログラムは正しいと言える。 問題B a)考えた設定 A問題で作成した def_twoparam.rb の仮引数のうちの一つを無くして固定し、他 の3つの商品を通常通り入力した数値と足し、合計を求めるプログラム。 b)作成したプログラム(def_oneparam_a.rb ) #!/usr/koeki/bin/ruby def wepon(r,x,y) # weponという関数を定義する。仮引数は r,x,y 3000 + 800*r+1000*x+1200*y # 方天戟二本の価格+ 鉄剣の価格 * 本数+ 蛇矛 の価格 * 本数 + 偃月刀の価格 * 本数 end # defに対するend print("方天戟を2本買いに武器屋へやって来ました。\n") print("店頭で他の武器を見ると、出来が良かったので他の武器も買って行こうと思います。\n") STDERR.print("武器屋へようこそ\n 鉄剣(800円)を何本お求めでしょうか?: ") a = gets.to_i # 入力された値を変数aにしまう。購入する本数は整数なので.to_iを 用いる STDERR.print("蛇矛(1000円)を何本お求めでしょうか?: ") b = gets.to_i # 入力された値を変数bにしまう。購入する本数は整数なので.to_iを 用いる STDERR.print("偃月刀(1200円)を何本お求めでしょうか?: ") c = gets.to_i # 入力された値を変数cにしまう。購入する本数は整数なので.to_iを 用いる total = wepon(a,b,c) # 仮引数に入力したa,b,cの値が入るので合計が計算される。 printf("\n方天戟 1 本鉄剣 %d 本、蛇矛 %d 本、偃月刀 %d 本で合計 %d円にな ります。\nまたのお越しをお待ちしております。ご武運を。\n",a,b,c,total) # 入力された値と合計を代入して表示。 c)元にしたプログラム 問題Aで作成した(def_twoparam.rb)を改良して作成した。 d)実行結果 方天戟を2本買いに武器屋へやって来ました。 店頭で他の武器を見ると、出来が良かったので他の武器も買って行こうと思います。 武器屋へようこそ 鉄剣(800円)を何本お求めでしょうか?: 4 蛇矛(1000円)を何本お求めでしょうか?: 7 偃月刀(1200円)を何本お求めでしょうか?: 3 方天戟 2 本鉄剣 4 本、蛇矛 7 本、偃月刀 3 本で合計 16800円になります。 またのお越しをお待ちしております。ご武運を。 e)考察 bc -l で計算結果を確認すると 3000+800*4+1000*7+1200*3 16800 quit となり、計算結果は間違っていないのでこのプログラムは正しいと言える。 3. 今回学んだ内容は、計算自体はプログラムがやってくれるが、自分で求めたい物 に応じた式を考えたり、公式を利用したりなど入力する本人が式の内容を理解し ている必要があるので、義務教育で学んだ算数や数学と同じしくみであると思っ た。 授業用ページと授業中に作成したプログラムを参考にしながらなんとか自力で作成するこ とが出来た。自分が打っている内容もきちんと理解できたので、個人的にハッシュ よりも今回の内容の方が理解しやすいと感じた。 内容が理解できたのでBのプログラムに挑戦し、無事完成させることができたの が自分の中では大きな進歩であると思う。 ------------------------------------------------------------------------------- 参考文献 基礎プログラミング II 第 4 回 「関数だってくりかえし」 著者 西村まどか http://roy/~madoka/2011/r2/04/r2_04_02_theme_02_function.html 基礎プログラミング II 第 4 回 「どんな関数がきてもだいじょうぶ」 著者 西村まどか http://roy/~madoka/2011/r2/04/r2_04_03_theme_03_method.html