第 4 回 繰り返しは引っ張りだそう レポート課題 氏名: 松田 大輝 学籍番号: c1101804 語学クラス: 中国語 コース(系): 地域共創コース 1、筆記問題 A、「手すりとかけまして稲川淳二さんと解く」 「その心は?」 「そこには階段(怪談)があるでしょう!」 「町工場とかけまして2ちゃんねると解く」 「その心は?」 「中小(中傷)が多いでしょう!」 B、1つ目 モモは1個、300円 リンゴは1個、200円 モモとリンゴを数個買って代金はいくらかかるでしょう。 解答例、1 モモを6個、リンゴを9個、買ったときの合計金額は? 300 * 6 + 200 * 9 = 3600 合計金額 3600円 考察 pan{c110180}% bc -l [~] 300*6+200*9 3600 計算が正しいことが確かめられた 解答例、2 モモを3個、リンゴ11個、買ったときの合計金額は? 300 * 3 + 200 * 11 =3100 合計金額 3100円 考察 pan{c110180}% bc -l [~] 300*3+200*11 3100 計算が正しいことが確かめられた 2つ目 靴は1足、5000円 靴下は1足、500円 靴と靴下を数足、買って代金はいくらかかるでしょう。 解答例、1 靴を1足、靴下を10足、買ったときの合計金額は? 5000 * 1 + 500 * 10 =10000 合計金額 10000円 考察 pan{MATSUTA Taiki}% bc -l [~] 5000*1+500*10 10000 計算が正しいことが確かめられた 解答例、2 靴を3足、靴下を4足、買ったときの合計金額は? 5000 * 3 + 500 * 4 =17000 合計金額 17000円 考察 pan{c110180}% bc -l [~] 5000*3+500*4 17000 計算が正しいことが確かめられた 2、プログラム問題 3問、解いたため3問とも掲載した。 プログラムA、 1、考えた設定 変数が2つ以上の数式を計算するプログラムを作成。 今回は、モモとリンゴを複数、購入した場合 合計金額がいくらになるか調べるものにした。 2、プログラム(説明) #!/usr/koeki/bin/ruby # 最初に書かなければいけないもの print("モモは1個、300円 リンゴは1個、200円とする。\n\n") # print を用いて、2変数による数式の数値を決めた。 def goukei(x,y) 関数を goukei と定義して、仮引数は x と y とする。 300 * x + 200 * y # ここで関数の定義を決めた。 end # def の end STDERR.print("モモをいくら買いますか?\n") # 対話的な表示をするのためにSTDERR を使用。 momo = gets.chomp.to_i #キーボードからの入力を読み込むメソッドとしてgetsメソッドを使用 STDERR.print("リンゴをいくら買いますか?\n") # 6行前と同じプログラム apple = gets.chomp.to_i # 6行前と同じプログラム printf("モモは%d個、リンゴは%d個買いました。\n\n",momo,apple) # printf を用いて入力させた、モモとリンゴの購入数を表示。 printf("合計金額は:%d円になります。\n",goukei(momo,apple)) # printf を用いて計算結果を表示させた。 3、実行結果 pan{c110180}% ./def_twoparam.rb [~/Ruby] モモは1個、300円 リンゴは1個、200円とする。 モモをいくら買いますか? 2 リンゴをいくら買いますか? 6 モモは2個、リンゴは6個買いました。 合計金額は:1800円になります。 pan{c110180}% ./def_twoparam.rb [~/Ruby] モモは1個、300円 リンゴは1個、200円とする。 モモをいくら買いますか? 0 リンゴをいくら買いますか? 1 モモは0個、リンゴは1個買いました。 合計金額は:200円になります。 4、結果の考察 計算が正しいか調べる。 pan{c110180}% bc -l [~/Ruby] 300*2+200*6 1800 pan{c110180}% bc -l [~/Ruby] 300*0+200*1 200 どちらの計算も正しいことが確認できた。 プログラムB、 1、考えた設定 内容はプログラムAとほぼ同じだが、今回は変数のうち、1つを固定して 合計金額がいくらになるか調べるものにした。 2、プログラム(説明) #!/usr/koeki/bin/ruby # 最初に書かなければいけないもの print("モモは1個、300円 リンゴは1個、200円とする。\n\n") # print を用いて、2変数による数式の数値を決めた。 def goukei(x) # 関数を goukei と定義して、仮引数は x とする。 y = 5 # 変数のうち 1 つを固定して、リンゴの購入数を5個とする。 300 * x + 200 * y # ここで関数の定義を決めた。 end # def の end STDERR.print("モモをいくら買いますか?\n") # 対話的な表示をするのためにSTDERR を使用。 momo = gets.chomp.to_i #キーボードからの入力を読み込むメソッドとしてgetsメソッドを使用 STDERR.print("リンゴは5個、買うことにしました。\n") # 6行前と同じプログラム printf("モモは%d個、リンゴは5個買いました。\n\n",momo) # printf を用いて入力させた、モモとリンゴの購入数を表示。 printf("合計金額は:%d円になります。\n",goukei(momo)) # printf を用いて計算結果を表示させた。 3、もとにしたプログラムからの変更点 プログラムA(Ruby/def_twoparam.rb)をもとにした。 変更点は数値を固定するために y = 5 として リンゴは5個と決めて購入させた。モモはプログラムAと同様にした。 4、実行結果 pan{c110180}% ./def_oneparam_a.rb [~/Ruby] モモは1個、300円 リンゴは1個、200円とする。 モモをいくら買いますか? 4 リンゴは5個、買うことにしました。 モモは4個、リンゴは5個買いました。 合計金額は:2200円になります。 pan{c110180}% ./def_oneparam_a.rb [~/Ruby] モモは1個、300円 リンゴは1個、200円とする。 モモをいくら買いますか? 0 リンゴは5個、買うことにしました。 モモは0個、リンゴは5個買いました。 合計金額は:1000円になります。 5、結果の考察 計算が正しいか調べる。 pan{c110180}% bc -l [~/Ruby] 300*4+200*5 2200 pan{c110180}% bc -l [~/Ruby] 300*0+200*5 1000 どちらの計算も正しいことが確認できた。 プログラムC、 1、考えた設定 プログラムBの内容を使用して、 棒グラフを表示するプログラムを作成。 2、プログラム(説明) #!/usr/koeki/bin/ruby # 最初に書かなければいけないもの print("モモは1個、300円 リンゴは1個、200円とする。\n\n") # print を用いて、2変数による数式の数値を決めた。 def goukei(x) # 関数を goukei と定義して、仮引数は x とする。 y = 5 # 変数のうち 1 つを固定して、リンゴの購入数を5個とする。 300 * x + 200 * y # ここで関数の定義を決めた。 end # def の end def goukei2(x) # 先ほどとほぼ同じプログラムだが y = 5 # このプログラムは後にグラフを表示するために作成。 ( 600 * x + 150 * y)/100 # グラフにするとものすごい数値になるため end # 100で割って、見やすくした。 def barplot(x,y) # 描画方法の棒線グラフ機能の部分 printf("\n%5d個 < モモの個数 < %5d個\n", x, y) printf("%5d円 < 合計金額 < %5d円\n", goukei(x), goukei(y)) # printf を用いてグラフの定義域をここで決めた。 # ここから棒グラフを書く指示を出している print("+") print("-"*40) print(">>\n") for r in x..y # for-endでハッシュの値を取り出す際にソート基準ブロックを用いて、 # 小さい順に取り出している。 graf(r) end # for の end print("|\n") end # def の end def graf(x) print("|") printf("*"*goukei2(x)) # goukei2 で計算された合計金額分を表示 print("\n") end # def の end print("リンゴは、5個買うことにしました。\n") print("モモを何個、買うか考えましょう。\n\n") # print を用いて文章を表示 STDERR.print("モモを少なくとも何個、買いますか?\n") # 対話的な表示をするのためにSTDERR を使用。 momo1 = gets.chomp.to_i #キーボードからの入力を読み込むメソッドとしてgetsメソッドを使用 STDERR.print("モモを多くて何個、買いますが?\n") # 6行前と同じプログラム momo2 = gets.chomp.to_i # 6行前と同じプログラム barplot(momo1,momo2) 3、もとにしたプログラムからの変更点 講義中に作成したプログラム(Ruby/def_func.rb)と プログラムB(def_oneparam_a.rb )をもとにした。 変更点はプログラムBの内容でグラフを作成できるようにしたところ。 4、実行結果 pan{c110180}% ./def_oneparam_bar.rb [~/Ruby] モモは1個、300円 リンゴは1個、200円とする。 リンゴは、5個買うことにしました。 モモを何個、買うか考えましょう。 モモを少なくとも何個、買いますか? 1 モモを多くて何個、買いますが? 5 1個 < モモの個数 < 5個 1300円 < 合計金額 < 2500円 +---------------------------------------->> |************* |******************* |************************* |******************************* |************************************* | pan{c110180}% ./def_oneparam_bar.rb [~/Ruby] モモは1個、300円 リンゴは1個、200円とする。 リンゴは、5個買うことにしました。 モモを何個、買うか考えましょう。 モモを少なくとも何個、買いますか? 0 モモを多くて何個、買いますが? 10 0個 < モモの個数 < 10個 1000円 < 合計金額 < 4000円 +---------------------------------------->> |******* |************* |******************* |************************* |******************************* |************************************* |******************************************* |************************************************* |******************************************************* |************************************************************* |******************************************************************* 5、結果の考察 計算が正しいか調べる。 pan{c110180}% bc -l [~/Ruby] 300*1+200*5 1300 300*5+200*5 2500 pan{c110180}% bc -l [~/Ruby] 300*0+200*5 1000 300*10+200*5 4000 どちらの計算も正しいことが確認できた。 3、感想 これまで義務教育期間に学んできた算数や数学と 今回作成した計算やぐらふの仕組みは同じであった。 私は会計学や簿記などを大学に来てから学んだがグラフを作る機会は なかった。そして今後もグラフを作る機会はないと思われる。 4、参考文献 西村まどか先生の講義ノート http://roy/~madoka/2011/r2/ 第 4 回 「繰り返しは引っ張りだそう」 http://roy/~madoka/2011/r2/04/ 1. なぞかけ http://roy/~madoka/2011/r2/04/r2_04_01_theme_01_riddle.html 2. 関数だってくりかえし http://roy/~madoka/2011/r2/04/r2_04_02_theme_02_function.html 3. どんな関数がきてもだいじょうぶ http://roy/~madoka/2011/r2/04/r2_04_03_theme_03_method.html 4. これを代入した答はなあに http://roy/~madoka/2011/r2/04/r2_04_04_theme_04_stderr.html 5. 分かりやすいプログラムへ http://roy/~madoka/2011/r2/04/r2_04_05_theme_05_print.html 6. 描画ソフトの真似 http://roy/~madoka/2011/r2/04/r2_04_06_theme_06_graph.html 7. 操作をまとめる http://roy/~madoka/2011/r2/04/r2_04_07_theme_07_allinone.html 8. method を使ったプログラムの作り方の特徴 http://roy/~madoka/2011/r2/04/r2_04_08_theme_08_comment.html 共同学習者: 渡辺 龍