第 4 回 繰り返しは引っ張りだそう レポート課題 氏名:井上宏美 学籍番号:c1110223 語学クラス:英語3 コース:政策マネジメント 1.筆記問題 A.夏の暑いときに仰ぐものとかけて、モデルのファッションと解く。 その心は? どちらもセンスが良いでしょう。 B. (1)家族で遊園地に遊びに行った。 入場券は、大人1人3000円、子供1人1500円である。 ある家族は大人が4人、子供が5人の家族だとする。 その場合、(3000*4)+(1500*5)で合計19500円かかることになる。 確かめ算 pan{c111022}% bc -l [~] 3000*4+1500*5 19500 また、別の家族は大人が3人、子供2人だとする。 その場合、(3000*3)+(1500*2)で合計12000円かかる。 確かめ算 pan{c111022}% bc -l [~] 3000*3+1500*2 12000 となるのでそれぞれの計算は正しいと言える。 (2)パン屋に行った。 あんぱん1つ120円、クリームパン1つ130円、メロンパン1つ200円、 焼きそばぱん1つ150円、コッぺぱん1つ90円とする。 あんぱんを2つ、クリームパンを1つ、メロンパンを3つ、 焼きそばパンを4つ、コッペパンを5つ買うとする。 (120*2)+(130*1)+(200*3)+(150*4)+(90*5)で合計2020円かかる。 確かめ算 pan{c111022}% bc -l [~] 120*2+130*1+200*3+150*4+90*5 2020 また、別の家族は、クリームパンを10こ、焼きそばパンを3つ買う。 (130*10)+(150*3)で合計1750円かかることになる。 確かめ算 pan{c111022}% bc -l [~] 130*10+150*3 1750 となるのでそれぞれの計算は正しいと言える。 2.プログラム問題 A. (i)考えた設定 筆記問題のその2で用いたデータを元に合計金額を計算出来るプログラムを 考えた。 (ii)作成したプログラム def_twoparam.rb #!/usr/koeki/bin/ruby #coding: euc-jp def pan(z,y,x,w,v) # pan という関数を定義する。 #仮引数は、パンの数だけz,y,x,w,vとする。 120 * z + 130 * y + 200 * x + 150 * w + 90 * v #それぞれあんパン、クリームパン、メロパン、 #焼きそばパン、コッペパン *個数とする。 end # def の end STDERR.print("パン屋へようこそ!\nあんパンは何個でしょうか?\n") #あんパンの個数の入力をする a = gets.to_i #入力された変数をしまう。個数は、整数なのでto_i STDERR.print("クリームパンは何個でしょうか?\n") #クリームパンの個数を入力する b = gets.to_i #入力された変数をしまう。個数は、整数なのでto_i STDERR.print("メロンパンは何個でしょうか?\n") #メロンパンの個数を入力する c = gets.to_i #入力された変数をしまう。個数は、整数なのでto_i STDERR.print("焼きそばパンは何個でしょうか?\n") #焼きそばパンの個数を入力する d = gets.to_i #入力された変数をしまう。個数は、整数なのでto_i STDERR.print("コッペパンは何個でしょうか?\n") #コッペパンの個数を入力する e = gets.to_i #入力された変数をしまう。個数は、整数なのでto_i total = pan(a,b,c,d,e) #合計を計算する。仮引数にa,b,c,d,eの値が入る。 printf("あんパン%d個,クリームパン%d個\nメロンパン%d個,焼きそばパン%d個,コッペパンは%d個です。\n合計%d円になります。\nお買い上げまことにありがとうございました。\nまたどうぞお越し下さいませ!\n",a,b,c,d,e, total) #入力された値と合計を代入する (iii)もとにしたプログラムからの変更点 授業で作成したプログラムdef_func.rbでは数を代入をさせるだけだったが、 合計のtotalを付け加えた。 (iv)プログラムを実行した結果画面 パターン1 pan{c111022}% ./def_twoparam.rb [~/Ruby] パン屋へようこそ! あんパンは何個でしょうか? 1 クリームパンは何個でしょうか? 2 メロンパンは何個でしょうか? 3 焼きそばパンは何個でしょうか? 4 コッペパンは何個でしょうか? 5 あんパン1個,クリームパン2個 メロンパン3個,焼きそばパン4個,コッペパンは5個です。 合計2030円になります。 お買い上げまことにありがとうございました。 またどうぞお越し下さいませ! パターン2 pan{c111022}% ./def_twoparam.rb [~/Ruby] パン屋へようこそ! あんパンは何個でしょうか? 3 クリームパンは何個でしょうか? 15 メロンパンは何個でしょうか? 30 焼きそばパンは何個でしょうか? 7 コッペパンは何個でしょうか? 5 あんパン3個,クリームパン15個 メロンパン30個,焼きそばパン7個,コッペパンは5個です。 合計9810円になります。 お買い上げまことにありがとうございました。 またどうぞお越し下さいませ! (v)導き出された結果の考察 パターン1 pan{c111022}% bc -l [~] 120*1+130*2+200*3+150*4+90*5 2030 パターン2 pan{c111022}% bc -l [~] 120*3+130*15+200*30+150*7+90*5 9810 以上の結果から答えはあっているので、このプログラムは正しいと言える。 B. (i)考えた設定 Aで作成したプログラムを元する。予算を決めて、1つを購入するともうひ とつのものがいくら買えるか分かるプログラムを考える。 (ii)作成したプログラム def_budget.rb #!/usr/koeki/bin/ruby #coding: euc-jp def pan(z,y) # pan という関数を定義する。仮引数は、zy 120 + 130 * z + 200 * y #あんパン+クリームパン*個数+メロンパン*個数 end #def の end print("ここのお店のあんパンは、格別美味しいんだよな。\n") print("あーついでにクリームパンと、メロンパンも買って行こうかな。\n") STDERR.print("クリームパンは何個買おう?: ") #クリームパンの個数を入力する a = gets.to_i # 入力された値を変数にしまう。個数は、整数なのでto_i STDERR.print("メロンパンは何個買おう?: ") #メロンパンの個数を入力する b = gets.to_i # 入力された値を変数にしまう。個数は、整数なのでto_i total = pan(a,b) #合計を計算する。仮引数にabの値が代入される printf("あんパン1つ、クリームパン%d個、メロンパン%d個になります。\n合計%d 円になります。\nお買い上げまことにありがとうございました。",a,b,total) #入力された値と合計を代入 (iii)もとにしたプログラムからの変更点 Aからの変更点は、1つの仮引数を削除して値を固定し、print文の変更を行なっ た。 (iv)プログラムを実行した結果画面 パターン1 pan{c111022}% ./def_budget.rb [~/Ruby] ここのお店のあんパンは、格別美味しいんだよな。 あーついでにクリームパンと、メロンパンも買って行こうかな。 クリームパンは何個買おう?: 2 メロンパンは何個買おう?: 3 あんパン1つ、クリームパン2個、メロンパン3個になります。 合計で980円になります。 お買い上げまことにありがとうございました。 パターン2 pan{c111022}% ./def_budget.rb [~/Ruby] ここのお店のあんパンは、格別美味しいんだよな。 あーついでにクリームパンと、メロンパンも買って行こうかな。 クリームパンは何個買おう?: 5 メロンパンは何個買おう?: 9 あんパン1つ、クリームパン5個、メロンパン9個になります。 合計で2570円になります。 お買い上げまことにありがとうございました。 (v)導き出された結果の考察 パターン1 pan{c111022}% bc -l [~] 120+130*2+200*3 980 パターン2 pan{c111022}% bc -l [~] 120+130*5+200*9 2570 以上の結果から答えはあっているので、このプログラムは正しいといえる。 C. (i)考えた設定 Bの問題をグラフで表すようプログラムを考えた。 (ii)作成したプログラム def_budget_bar.rb #!/usr/koeki/bin/ruby #coding: euc-jp def barplot(o,p) # method の定義 print("--" * b(p)+"-y単位(金額)\n") # panda(t) をかけた答えの回数分だけ - を表示 #そして最後に単位(金額)を表示 for i in 0 .. o - 1 #0 から o-1 を引いた回数を繰り返し print("|\n") # | は改行を表示 end # def の end for j in o ..p # o から p を引いた回数を繰り返し print("|" + "□" * b(j) + "\n") # | と □ をかけた答えの回数分だけ □ を表示 end # def に対する end print("|\n×\n") end def f(x) 130 * x + 120 * 2 #あんパンをx個、クリームパンを2個買ったとする end def b(x) (130 * x + 120 * 2) / 100 #あんパンをx個、クリームパンを2個買ったとする end print("客:今日はあんパンを買おうかな?\n") a = gets.to_i # a の中の数値を整数に直す print("客:あーやっぱりもう少し買おうかな?\n") b = gets.to_i # b の中の数値を整数に直す barplot(a,b) # barplot (a,b)で定義したものを表示 (iii)もとにしたプログラムからの変更点 Bの問題を元にして合計金額をグラフで表せるように変更した。 (iv)プログラムを実行した結果画面 pan{c111022}% ./def_budget_bar.rb [~/Ruby] 客:今日はあんパンを買おうかな? 4 客:あーやっぱりもう少し買おうかな? 7 -----------------------y単位(金額) | | | | |□□□□□□□ |□□□□□□□□ |□□□□□□□□□□ |□□□□□□□□□□□ | × pan{c111022}% ./def_budget_bar.rb [~/Ruby] 客:今日はあんパンを買おうかな? 7 客:あーやっぱりもう少し買おうかな? 15 -------------------------------------------y単位(金額) | | | | | | | |□□□□□□□□□□□ |□□□□□□□□□□□□ |□□□□□□□□□□□□□□ |□□□□□□□□□□□□□□□ |□□□□□□□□□□□□□□□□ |□□□□□□□□□□□□□□□□□□ |□□□□□□□□□□□□□□□□□□□ |□□□□□□□□□□□□□□□□□□□□ |□□□□□□□□□□□□□□□□□□□□□ | × (v)導き出された結果の考察 グラフで表すことで分かりやすく表示させることが出来た。 実行して何度か試したか上手く実行させることが出来た。 3.感想 今回の問題の考え方は、今まで学校で習ったことのある数学や算数などと 同じ仕組みだと思う。 グラフを書くにしても、自分が書いたグラフでは見映えを良くするのに 必死だった。 しかし、コンピュータに内臓されているものでは、エクセルがとても 見やすく、そこが大きく違うと感じた。 今回は、グラフを作る際のプログラムの仕組みが授業中では理解することが 難しかったので、自分なりに復習して理解を深めることが出来た。 今後も難しくなっていくと思うが、自分なりに諦めず頑張っていきたいと 思う。 参考文献 基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「関数だってくりかえし」 西村まどか先生 http://roy/~madoka/2012/r2/04/r2_04_02_theme_02_function.html 基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「どんな関数がきてもだいじょうぶ」 西村まどか先生 http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html 基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「操作をまとめる」 西村まどか先生 http://roy/~madoka/2012/r2/04/r2_04_07_theme_07_allinone.html