第 7 回 ゼミ紹介 レポート課題 氏名: 松田 大輝 学籍番号: c1101804 語学クラス: 中国語 コース(系): 地域共創コース 1、 A,仕様書 ーーーーー 企画意図 ーーーーーーーーーーーーーーーーーーーーーー 今までの大学生活を見直してみると、算数や数学といった基本的な計算を していないことに気付いた。そのため今回、作成したプログラムで 基本的な計算の仕方を思い出させたいと思い、プログラムを作成した。 基本的な計算から応用まで、就職試験でも必要となるため 改めて、算数や数学の大切さに感じてほしい。 ーーーーー 遊び方 ーーーーーーーーーーーーーーーーーーーーーーー 今回、作成したプログラムは図や計算を使用して、 合計金額をこちらが指定した数値と一致させるゲームです。 今回、指定した数値は 10000円です。 合計金額がぴったり、10000円になるよう頑張って計算して下さい。 ブドウ、ミカン、トマトの 3種類を購入します。 そして、ブドウの購入数は 5個と固定します。 そのため、ミカンとトマトを何個ずつか買っていき、10000円を目指しましょう! それぞれの値段のヒントとして、最少購入数と最高購入数を仮定し入力すると 金額がでます。そこから、計算していき値段を求めていきましょう。 見やすくするために、グラフも作成しました。 ぴったり目指して頑張りましょう!!! ーーーーー 連絡先 ーーーーーーーーーーーーーーーーーーーーーーーーー c110180@f.koeki-u.ac.jp b,プログラム 1、考えた設定 第 4回の講義で提出した、変数が 2つ以上の数式を計算するプログラムを作成。 今回は、ミカン と トマトを複数 (ブドウの数は固定) 購入し合計金額を 1 万円ぴったりに当てるゲームにした。 また、見やすくするため棒グラフも表示した。 2、作成したプログラム(説明) #!/usr/koeki/bin/ruby # 最初に書かなければいけないもの STDERR.print("ブドウ、ミカン、トマトを数個、購入する。\n") STDERR.print("しかし、この3つの商品は値段が分からない。\n") STDERR.print("この3つの商品を購入し、合計金額をぴったり1万円にせよ。\n\n") STDERR.print("ただし、ブドウの購入数は5個と固定する。\n") STDERR.print("ミカン、トマトの購入数を考えよ。\n") # 対話的な表示をするのためにSTDERR.print を使用し # 問題文、説明を表示させた。 # ここからは、ミカンの金額を調べるためのプログラム def goukei(x) # 関数を goukei と定義して、仮引数は x とする。 y = 5 # 変数のうち 1 つを固定して、ブドウの購入数を5個とする。 500 * x + 620 * y # ここで関数の定義を決めた。 end # def の end def goukei2(x) # 先ほどとほぼ同じプログラムだが y = 5 # このプログラムは後にグラフを表示するために作成。 ( 500 * x + 620 * 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("-"*60) print(">>\n") for r in x..y # for-endでハッシュの値を取り出す際にソート基準ブロックを用いて、 # 小さい順に取り出している。 graf(r) # 関数を graf と定義して、仮引数は r とする。 end # for の end print("|\n") # 改行するためにこの文を作成 end # def の end def graf(x) # 関数を graf と定義して、仮引数は r とする。 print("|") printf("*"*goukei2(x)) # goukei2 で計算された合計金額分を表示 print("\n") # 改行 end # def の end STDERR.print("\n\n計算のヒントを出します。(ミカン)\n") # 対話的な表示をするのためにSTDERR.print を使用した。 STDERR.print("少なくとも何個、ミカンを買いますか?\n") # 上と同じプログラム mikan1 = gets.chomp.to_i #キーボードからの入力を読み込むメソッドとしてgetsメソッドを使用 STDERR.print("多くて何個、ミカンを買いますが?\n") # 5行前と同じプログラム mikan2 = gets.chomp.to_i # 5行前と同じプログラム barplot(mikan1,mikan2) # barplot(x,y) で定義したものをを表示させた #------------------------------------------------------------------ # わかりやすくするため上の線で分けた。 # ここからは、トマトの金額を調べるためのプログラム # 先程、作成したミカンの金額を求めるためのプログラムとプログラムは同じ # 変数だけ変えていったため説明は省略する sleep(1) # 読みやすくするため sleep を使用し # 次の行に進むまでに1秒間停止させた def total(a) # 変数 goukei を total に、変数 x を a に変更 b = 5 # 変数 y を b に変更 400 * a + 620 * b end def total2(a) # 変数 goukei2 を total2 に変更 b = 5 ( 400 * a + 620 * b)/100 end def barplot(a,b) printf("\n%5d個 < トマトの個数 < %5d個\n", a, b) printf("%5d円 < 合計金額 (ブドウとトマト) < %5d円\n", total(a), total(b)) print("+") print("-"*60) print(">>\n") for r1 in a..b # 変数 r を r1 に変更 graf1(r1) # 変数 graf を graf1 に変更 end print("|\n") end def graf1(a) print("|") printf("*"*total2(a)) print("\n") end print("\n\n") print("計算のヒントを出します。(トマト)\n") STDERR.print("少なくとも何個、トマトを買いますか?\n") tomato1 = gets.chomp.to_i # 変数 mikan1 を tomato1 に変更 STDERR.print("多くて何個、トマトを買いますが?\n") tomato2 = gets.chomp.to_i # 変数 mikan2 を tomato2 に変更 barplot(tomato1,tomato2) #-------------------------------------------------------------------- # わかりやすくするため上の線で分けた。 # ここから結果を表示させるプログラムを作成 print("\n\n") # 改行するためにこの文を作成 STDERR.print("上の図から考えて、計算してぴったり1万円にしてください。\n") # 対話的な表示をするのためにSTDERR.print を使用した STDERR.print("ミカンを何個、買いますか?\n") # 上と同じプログラム mikan3 = gets.chomp.to_i #キーボードからの入力を読み込むメソッドとしてgetsメソッドを使用 STDERR.print("トマトを何個、買いますが?\n") # 4 行前と同じプログラム tomato3 = gets.chomp.to_i # 4 行前と同じプログラム kingaku = 620 * 5 + 500 * mikan3 + 400 * tomato3 # ここで計算して合計金額を求めるメソッド kingaku を作成 print("\n") # 改行するためにこの文を作成 printf("合計金額は %d 円となりました\n", kingaku) # printf を用いて、合計金額を表示させた # if 文を用いて、これから条件判断させている。 if kingaku == 10000 # kingaku の値がぴったり 10000 になった場合、下の print の文を表示。 print("ぴったり賞です。おめでとうございます!!\n") elsif kingaku > 10000 # 条件が 3つ以上のため elsif を使用。 # kingaku の値が 10000 より大きいならば下の print の文を表示。 print("オーバーしてます。買いすぎですよ。\n") elsif kingaku >= 5000 && kingaku <= 9999 # 論理演算子の && を使用。 # そして、kingaku の値が 5000 以上 9999以下 場合 # 下の print の文を表示。 print("少ないです。もう少し買ってよかったですね。\n") else # if と elsif の 条件以外の場合、下の print の文を表示。 # ここでは、5000 より小さい数字を表す print("少なすぎです。しっかり計算してください!!\n") end # if の end 3、もとにしたプログラムからの変更点 第 4回の講義で提出したプログラム(def_oneparam_bar.rb)を基にした。 以前のプログラムの改良作のため具体的に説明していく。 変更点は、合計金額を求めただけでなく、金額が 1 万円になるよう 計算させ購入数を入力させた。 グラフは 1つだったが今回作成したプログラムでは 2つにした。 グラフのプログラム内容はどちらも等しく変数だけ、変えていった。 最後の合計金額によって表示する文を複数、用意した。 4、実行結果 pan{c110180}% ./best.rb [~/Ruby] ブドウ、ミカン、トマトを数個、購入する。 しかし、この3つの商品は値段が分からない。 この3つの商品を購入し、合計金額をぴったり1万円にせよ。 ただし、ブドウの購入数は5個と固定する。 ミカン、トマトの購入数を考えよ。 計算のヒントを出します。(ミカン) 少なくとも何個、ミカンを買いますか? 1 多くて何個、ミカンを買いますが? 5 1個 < ミカンの個数 < 5個 3600円 < 合計金額 (ブドウとミカン) < 5600円 +------------------------------------------------------------>> |************************************ |***************************************** |********************************************** |*************************************************** |******************************************************** | 計算のヒントを出します。(トマト) 少なくとも何個、トマトを買いますか? 2 多くて何個、トマトを買いますが? 7 2個 < トマトの個数 < 7個 3900円 < 合計金額 (ブドウとトマト) < 5900円 +------------------------------------------------------------>> |*************************************** |******************************************* |*********************************************** |*************************************************** |******************************************************* |*********************************************************** | 上の図から考えて、計算してぴったり1万円にしてください。 ミカンを何個、買いますか? 5 トマトを何個、買いますが? 8 合計金額は 8800 円となりました 少ないです。もう少し買ってよかったですね。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー pan{c110180}% ./best.rb [~/Ruby] ブドウ、ミカン、トマトを数個、購入する。 しかし、この3つの商品は値段が分からない。 この3つの商品を購入し、合計金額をぴったり1万円にせよ。 ただし、ブドウの購入数は5個と固定する。 ミカン、トマトの購入数を考えよ。 計算のヒントを出します。(ミカン) 少なくとも何個、ミカンを買いますか? 1 多くて何個、ミカンを買いますが? 4 1個 < ミカンの個数 < 4個 3600円 < 合計金額 (ブドウとミカン) < 5100円 +------------------------------------------------------------>> |************************************ |***************************************** |********************************************** |*************************************************** | 計算のヒントを出します。(トマト) 少なくとも何個、トマトを買いますか? 1 多くて何個、トマトを買いますが? 5 1個 < トマトの個数 < 5個 3500円 < 合計金額 (ブドウとトマト) < 5100円 +------------------------------------------------------------>> |*********************************** |*************************************** |******************************************* |*********************************************** |*************************************************** | 上の図から考えて、計算してぴったり1万円にしてください。 ミカンを何個、買いますか? 9 トマトを何個、買いますが? 6 合計金額は 10000 円となりました ぴったり賞です。おめでとうございます!! ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー pan{c110180}% ./best.rb [~/Ruby] ブドウ、ミカン、トマトを数個、購入する。 しかし、この3つの商品は値段が分からない。 この3つの商品を購入し、合計金額をぴったり1万円にせよ。 ただし、ブドウの購入数は5個と固定する。 ミカン、トマトの購入数を考えよ。 計算のヒントを出します。(ミカン) 少なくとも何個、ミカンを買いますか? 1 多くて何個、ミカンを買いますが? 6 1個 < ミカンの個数 < 6個 3600円 < 合計金額 (ブドウとミカン) < 6100円 +------------------------------------------------------------>> |************************************ |***************************************** |********************************************** |*************************************************** |******************************************************** |************************************************************* | 計算のヒントを出します。(トマト) 少なくとも何個、トマトを買いますか? 1 多くて何個、トマトを買いますが? 9 1個 < トマトの個数 < 9個 3500円 < 合計金額 (ブドウとトマト) < 6700円 +------------------------------------------------------------>> |*********************************** |*************************************** |******************************************* |*********************************************** |*************************************************** |******************************************************* |*********************************************************** |*************************************************************** |******************************************************************* | 上の図から考えて、計算してぴったり1万円にしてください。 ミカンを何個、買いますか? 2 トマトを何個、買いますが? 4 合計金額は 5700 円となりました 少ないです。もう少し買ってよかったですね。 5、結果の考察 合計金額の計算が正しいか調べる。 1、pan{c110180}% bc -l [~/Ruby] 620*5+500*5+400*8 8800 2、pan{c110180}% bc -l [~/Ruby] 620*5+500*9+400*6 10000 3、pan{MATSUTA Taiki}% bc -l [~/Ruby] 620*5+500*2+400*4 5700 すべての計算が正しいことを確認できた。 d,広告ページ http://roy/~c110180/advertise2/index2.html 2、感想 これまで後期で学んできた要素を入れ、最高傑作のプログラムが作成できた。 表計算ソフトでグラフをプログラム描くことができたのが、非常に 印象に残ったため、今回のプログラムで使用した。 ホームページを作成したのが久し振りだったため、最初は戸惑ったが 前年度、学んだ内容をしっかりと復習して、見やすいホームページが 作成できたと思う。 3、参考文献 西村先生の2011 年度 基礎プログラミング II 講義ノート http://roy/~madoka/2011/r2/ 第 4 回 「繰り返しは引っ張りだそう」 http://roy/~madoka/2011/r2/04/ 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 第 6 回 「目的に応じて使ってみよう」 http://roy/~madoka/2011/r2/06/ 9. るびおっち http://roy/~madoka/2011/r2/06/r2_06_11_theme_09_rubiocci.html 神田先生の2011 年度 基礎プログラム I 授業用ページ http://roy/~naoya/ruby/index.html 制御構造 [1] http://roy/~naoya/ruby/4.html プログラムの公開 http://roy/~naoya/ruby/10.html プログラム紹介コーナー http://roy/~naoya/ruby/rep/kadai08-1.htm