第 4 回 繰り返しは引っ張りだそう レポート課題 氏名:高田美咲 学籍番号:C1110909 語学クラス:英語1 コース:政策マネジメントコース 1. A. 「売れ残った商品とかけまして、砂糖と解きます。」 「その心は?」 「(当分 糖分)あります。」 B. < 問題1 > 小学生が鉛筆とノートを買いに行き、代金がいくらかかるか調べた。 鉛筆の値段は1本60円、ノートの値段は1冊90円である。 解答1 鉛筆5本、ノート3冊買った合計 60 * 5 + 90 * 3 = 570 確認計算 pan{TAKADA Misaki}% bc -l [~] 60 * 5 + 90 * 3 570 quit 解答2 鉛筆12本、ノート6冊買った合計 60 * 12 + 90 * 6 = 1260 確認計算 pan{c111090}% bc -l [~] 60 * 12 + 90 * 6 1260 quit < 問題2 > 友達とハンバーガーとフライドポテトを食べれるだけ食べ、代金がいくらかかる か調べた。ハンバーガーの値段は1個100円、フライドポテトの値段は1個170円で ある。 解答1 ハンバーガー4個、フライドポテト2個買い、食べた合計 100 * 4 + 170 * 2 = 740 確認計算 pan{c111090}% bc -l [~] 100 * 4 + 170 * 2 740 quit 解答2 ハンバーガー1個、フライドポテト9個買い、食べた合計 100 * 1 + 170 * 9 = 1630 確認計算 pan{c111090}% bc -l [~] 100 * 1 + 170 * 9 1630 quit 2. A. < 設定 > 変数に代入する数を入力すると合計が表示される。 < プログラム > def_twoparam.rb #!/usr/koeki/bin/ruby # coding: euc-jp def total(x,y) #式設定 100 * x + 170 * y end print("[ ハンバーガー1個100円 フライドポテト1個170円 ]\n\n") STDERR.print("ハンバーガーの購入数は? :") #入力部分 h = gets.to_i #数値として取りこむ STDERR.print("フライドポテトの購入数は? :") #入力部分 p = gets.to_i #数値として取りこむ print("\n") printf("あなたは ハンバーガー %d個 、フライドポテト %d個 買いました。\n",h,p) printf("合計金額は %d 円 です。\n",total(h,p)) #式に代入した結果表示 < もとにしたプログラム、変更点 > def_func.rbをもとにして、def -- end の中の式と入力部分の文章を変更した。 < 実行結果1 > pan{c111090}% ./def_twoparam.rb [~/Ruby] [ ハンバーガー1個100円 フライドポテト1個170円 ] ハンバーガーの購入数は? :3 フライドポテトの購入数は? :6 あなたは ハンバーガー 3個 、フライドポテト 6個 買いました。 合計金額は 1320 円 です。 < 実行結果2 > pan{c111090}% ./def_twoparam.rb [~/Ruby] [ ハンバーガー1個100円 フライドポテト1個170円 ] ハンバーガーの購入数は? :1 フライドポテトの購入数は? :90 あなたは ハンバーガー 1個 、フライドポテト 90個 買いました。 合計金額は 15400 円 です。 < 考察 > 確認計算を行う。 実行結果1 pan{c111090}% bc -l [~/Ruby] 100 * 3 + 170 * 6 1320 quit 実行結果2 pan{c111090}% bc -l [~/Ruby] 100 * 1 + 170 * 90 15400 quit 結果、同じ答えがでたため2つとも正しく結果が表示されたといえる。 -------------------------------------------- B < 設定 > 予算と片方の個数を入力するともう1つの商品がいくつ購入できるか表示される。 < プログラム >def_budget.rb #!/usr/koeki/bin/ruby # coding: euc-jp def total(x) #式設定 100 * x end def po(y) #式設定 y / 170 end print("[ ハンバーガー1個100円 フライドポテト1個170円 ]\n\n") print("予算とハンバーガーの購入数を入力することで\n") print("フライドポテトがいくつ購入できるか調べます。\n\n") STDERR.print("予算はいくら? :") #入力部分 plan = gets.to_i #数値として取りこむ STDERR.print("ハンバーガーの購入数は? :") #入力部分 h = gets.to_i #数値として取りこむ amari = plan - total(h) #残金出すための式 print("\n") printf("あなたの予算は %d 円です。",plan) printf("ハンバーガーを %d 個 購入した場合、\n",h) printf("フライドポテトは %d 個 買えます。\n",po(amari)) #最終的な答え < もとにしたプログラム、変更点 > 問題Aの def_twoparam.rbをもとに、入力部分をフライドポテトの個数から 予算に変更した。そして、残金を出すための式とフライドポテトの購入できる数 を算出するための式を付け加えた。 < 実行結果1 > pan{c111090}% ./def_budget.rb [~/Ruby] [ ハンバーガー1個100円 フライドポテト1個170円 ] 予算とハンバーガーの購入数を入力することで フライドポテトがいくつ購入できるか調べます。 予算はいくら? :1000 ハンバーガーの購入数は? :3 あなたの予算は 1000 円です。ハンバーガーを 3 個 購入した場合、 フライドポテトは 4 個 買えます。 < 実行結果2 > pan{TAKADA Misaki}% ./def_budget.rb [~/Ruby] [ ハンバーガー1個100円 フライドポテト1個170円 ] 予算とハンバーガーの購入数を入力することで フライドポテトがいくつ購入できるか調べます。 予算はいくら? :200 ハンバーガーの購入数は? :3 あなたの予算は 200 円です。ハンバーガーを 3 個 購入した場合、 フライドポテトは -1 個 買えます。 < 考察 > 確認計算を行う。 実行結果1 pan{c111090}% bc -l [~/Ruby] 1000 - 100 * 3 700 700 / 170 4.11764705882352941176 quit 確認計算では小数値も出たが、個数が表示されれば良いため切り捨てになる。 そのためプログラムは正しく機能している。 実行結果2 この場合、予算を超えているためマイナス表示になってしまった。 そのためハンバーガーの購入価格合計が予算を上回った場合の設定を付け加えた。 以下のプログラムに改良した。 #!/usr/koeki/bin/ruby # coding: euc-jp def total(x) #式設定 100 * x end def po(y) #式設定 y / 170 end print("[ ハンバーガー1個100円 フライドポテト1個170円 ]\n\n") print("予算とハンバーガーの購入数を入力することで\n") print("フライドポテトがいくつ購入できるか調べます。\n\n") STDERR.print("予算はいくら? :") #入力部分 plan = gets.to_i #数値として取りこむ STDERR.print("ハンバーガーの購入数は? :") #入力部分 h = gets.to_i #数値として取りこむ amari = plan - total(h) #残金出すための式 print("\n") if total(h) < plan #ハンバーガー合計が予算内だったら printf("あなたの予算は %d 円です。",plan) printf("ハンバーガーを %d 個 購入した場合、\n",h) printf("フライドポテトは %d 個 買えます。\n",po(amari)) #最終的な答え else #その他 print("ハンバーガーの購入価格が予算を超えています!!\n") print("そのためフライドポテトは買えません。\n") #最終的な答え end < 改良版実行結果 > pan{c111090}% ./def_budget.rb [~/Ruby] [ ハンバーガー1個100円 フライドポテト1個170円 ] 予算とハンバーガーの購入数を入力することで フライドポテトがいくつ購入できるか調べます。 予算はいくら? :200 ハンバーガーの購入数は? :3 ハンバーガーの購入価格が予算を超えています!! そのためフライドポテトは買えません。 その結果、マイナス表示ではなく正しい対応で機能した。 ------------------------------------------- C < 設定 > ハンバーガーの個数は固定してフライドポテトの最低値、最高値を入力すると グラフとして表示される。 < プログラム > def_budget_bar.rb #!/usr/koeki/bin/ruby # coding:euc-jp def total(y) #合計金額を求める式 x = 4 100 * x + 170 * y end def total2(y) #グラフで表示する用の式 x = 4 (100 * x + 170 * y)/100 end def graf(x,y) #グラフ print("+") print("------------------------------------>y") print("\n") for a in x..y barplot(a) end print("|\n") print("v\n") print("x\n") end def barplot(x) #グラフの中身 print("|") printf("*"*total2(x)) print("\n") end print("[ ハンバーガー1個100円 フライドポテト1個170円 ]\n\n") print("ハンバーガーを4つ買います。\n") print("フライドポテトの最低個数と最高個数をグラフにします。\n\n") STDERR.print("フライドポテトを何個から買いますか? :") #入力部分 h1 = gets.to_i #数値としてとりこむ STDERR.print("何個まで買いますか? :") #入力部分 h2 = gets.to_i #数値としてとりこむ print("\n") printf("合計の最低値:f(%d)=%d円\n",h1,total(h1)) printf("合計の最高値:f(%d)=%d円\n",h2,total(h2)) graf(h1,h2) #グラフ表示 < もとにしたプログラム、変更点 > def_graph.rb をもとにして、必要な部分のみを利用した。 < 実行結果 > pan{c111090}% ./def_budget_bar.rb [~/Ruby] [ ハンバーガー1個100円 フライドポテト1個170円 ] ハンバーガーを4つ買います。 フライドポテトの最低個数と最高個数をグラフにします。 フライドポテトを何個から買いますか? :3 何個まで買いますか? :8 合計の最低値:f(3)=910円 合計の最高値:f(8)=1760円 +------------------------------------>y |********* |********** |************ |************** |*************** |***************** | v x < 考察 > 確認計算を行う。 pan{c111090}% bc -l [~/Ruby] 100 * 4 + 170 * 3 910 100 * 4 + 170 * 8 1760 quit 結果、正しく計算されている。 グラフの * は100分の1に設定したが、その部分も正しく機能している。 3.感想 算数や数学と同じ仕組みだと思う。def -- endの部分に公式を設定して変数の部 分に入力された数値を代入するので仕組みは同じだと感じた。 今回の課題は、グラフを作成するプログラムを最大の個数で出力するまで完成で きなかった。そのため、一方の数値を固定してもう一方の数をグラフとして出力 するプログラムにした。講評が出たら良いレポートの人のを参考にして学びたい と思う。 4.参考資料 西村まどか 基礎プログラミングII 第4回 繰り返しは引っ張りだそう 「これを代入した答はなあに」 http://roy/~madoka/2012/r2/04/r2_04_04_theme_04_stderr.html 「描画ソフトの真似」 http://roy/~madoka/2012/r2/04/r2_04_06_theme_06_graph.html