第4回 繰り返しは引っ張り出そう レポート課題 阿部誠吾 c1110068 英語3 政策マネジメント 1.筆記問題 A.なぞとき 「座布団とかけて、良妻の夫と解く」 「その心は?」 「どちらも尻に敷かれる」 B.2変数による数式の設定 -例1- ララちゃんはどら焼きとクッキーを買って代金がいくらかかるか調べた。 どら焼きの値段は1個150円、クッキーの値段は1個90円である。 どら焼きを3個、クッキーを5個買うと、 150*3 + 90*5 = 900 となり合計で900円になる。 -例2- ルル君はガムとアメを買って代金がいくらかかるか調べた。 ガムの値段は1個20円、アメの値段は1個10円である。 ガムを8個、アメを11個買うと、 20*8 + 10*11 = 270 となり合計で270円になる。 2.プログラム問題 A.def_twoparam.rb i .考えた設定 どら焼きとクッキーを買うという設定。def を使って合計を調べる。 ii.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("ララちゃんはどら焼きとクッキーを買って代金がいくらかかるか調べた。\n") print("どら焼きの値段は1個150円、クッキーの値段は1個90円である。\n") def goukei(dora,cooky) #仮引数を作るときに仮に使う。 dora * 150 + cooky * 90 #doraがどら焼き、cookyがクッキー。合計を求める式。 end STDERR.print("どら焼きを何個買う? : ") dora = gets.to_i #どら焼きを何個買うか入力させる。 STDERR.print("クッキーを何個買う? : ") cooky = gets.to_i #クッキーを何個買うか入力させる。 STDERR.printf("どら焼きを%d個、クッキーを%d個買うと合計は%d円となる。\n",dora,cooky,goukei(dora,cooky)) iii.元にしたプログラムからの変更 def_func.rbをどら焼きとクッキーに対応したものに改良し、加えて見やすいよ うに日本語を多くした。 iv.プログラムを実行した結果画面 pan{c111006}% ./def_twoparam.rb [~/Ruby] ララちゃんはどら焼きとクッキーを買って代金がいくらかかるか調べた。 どら焼きの値段は1個150円、クッキーの値段は1個90円である。 どら焼きを何個買う? : 3 クッキーを何個買う? : 5 どら焼きを3個、クッキーを5個買うと合計は900円となる。 v.導き出された結果の考察 まず、bc -lを使って計算が合っているか調べた。 pan{c111006}% bc -l [~/Ruby] 150*3+90*5 900 quit 計算は正しかった。 設定通りに動いたので正しいと言える。 vi.参考文献 西村まどか 基礎プログラミングII 第4回 (繰り返しは引っ張りだそう) 「どんな関数がきてもだいじょうぶ」 http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html B.def_budget.rb i .考えた設定 どら焼きを何個買うか入力させて残金でクッキーを何個買えるか調べるように設 定した。設定金額は1000円とする。 ii.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("どら焼きの値段は1個150円、クッキーの値段は1個90円である。\n") print("予算を1000円と固定する。どら焼きを◯個買う時、クッキーを何枚買えるか表示する。\n") def dorayaki(dora) #仮引数を作るときに仮に使う。 dora * 150 #doraがどら焼き。何円になるか計算させる式。 end STDERR.print("どら焼きを何個買う? : ") dora = gets.to_i #どら焼きを何個買うか入力させる。 STDERR.printf("どら焼きを%d個買うと合計は%d円となる。\n",dora ,dorayaki(dora)) STDERR.printf("残金は%d円なので、クッキーを%d個買える。\n",1000 - dorayaki(dora),(1000 - dorayaki(dora))/90) iii.元にしたプログラムからの変更点 前問で作ったdef_twoparam.rbの def 部分を変えて足りない所を他の式で補った。 iv.プログラムを実行した結果画面 普通の場合 pan{c111006}% ./def_budget.rb [~/Ruby] どら焼きの値段は1個150円、クッキーの値段は1個90円である。 予算を1000円と固定する。どら焼きを◯個買う時、クッキーを何枚買えるか表示する。 どら焼きを何個買う? : 3 どら焼きを3個買うと合計は450円となる。 残金は550円なので、クッキーを6個買える。 残金が足りない場合 pan{ABE Seigo}% ./def_budget.rb [~/Ruby] どら焼きの値段は1個150円、クッキーの値段は1個90円である。 予算を1000円と固定する。どら焼きを◯個買う時、クッキーを何枚買えるか表示する。 どら焼きを何個買う? : 7 どら焼きを7個買うと合計は1050円となる。 残金は-50円なので、クッキーを-1個買える。 v.導き出された結果の考察 普通の場合 pan{c111006}% bc -l [~/Ruby] 150*3 450 1000 - 450 550 550 / 90 6.11111111111111111111 quit pan{c111006}% bc -l [~/Ruby] 150*7 1050 1000-1050 -50 quit 計算が正しかった。 しかし残金が−になると表示がおかしくなった。 直し方が分からなかった。 vi.参考文献 西村まどか 基礎プログラミングII 第4回 (繰り返しは引っ張りだそう) 「どんな関数がきてもだいじょうぶ」 http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html C.def_budget_bar.rb i .考えた設定 前問で作った def_budget.rbを改良して作ることにした。グラフに表示させるの はどら焼きの個数とした。 ii.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("どら焼きの値段は1個150円、クッキーの値段は1個90円である。\n") print("予算を1000円と固定する。どら焼きを◯個買う時、クッキーを何枚買えるか表示する。\n") def goukei(dora,cooky) dora * 150 + cooky * 90 < 1000 end def dorayaki(dora) #仮引数を作るときに仮に使う。 dora * 150 #doraがどら焼き。何円になるか計算させる式。 end STDERR.print("どら焼きを何個買う? : ") dora = gets.to_i #どら焼きを何個買うか入力させる。 #STDERR.print("クッキーを何個買う? : ") cooky = gets.to_i #クッキーを何個買うか入力させる。 STDERR.printf("どら焼きを%d個買うと合計は%d円となる。\n",dora ,dorayaki(dora)) STDERR.printf("残金は%d円なので、クッキーを%d個買える。\n",1000 - dorayaki(dora),(1000 - dorayaki(dora))/90) print("この結果をグラフに表す。\n") def baplot(x1,x2,dora,cooky) #引数が4つの関数 printf("%d < どら焼きの個数 < %d\n",x1,x2) #入力してもらうどら焼きの個数の範囲を表示 STDERR.print("合計金額のグラフ\n") print("+") print("-" * 40) print(">\n") for cooky in x1..x2 #入力してもらった範囲の数を毎回cookyに代入 print("|") print("*" * goukei(dora,cooky) ) #合計金額を100で割った長さのグラフを書く print("\n") end print("\n") end while true STDERR.print("どら焼きの個数の範囲 (x1 < x < x2)\n") STDERR.print("x1 = ") x1 = gets.to_i STDERR.print("x2 = ") x2 = gets.to_i if x1 > x2 #x2よりx1の方が大きかった場合に注意してもう一度入力してもらう print("「 x1 < x < x2 」の形になるように入力して下さい。\n") redo end break end baplot(x1,x2,dora,cooky) #グラフを表示 iii.元にしたプログラムからの変更点 前問のプログラムと授業で作ったdef_graf.rbを合体させた。 iv.プログラムを実行した結果画面 pan{c111006}% ./def_budget_bar.rb [~/Ruby] どら焼きの値段は1個150円、クッキーの値段は1個90円である。 予算を1000円と固定する。どら焼きを◯個買う時、クッキーを何枚買えるか表示する。 どら焼きを何個買う? : 1 RETURMを押して下さい。 どら焼きを1個買うと合計は150円となる。 残金は850円なので、クッキーを9個買える。 この結果をグラフに表す。 どら焼きの個数の範囲 (x1 < x < x2) x1 = 1 x2 = 9 1 < どら焼きの個数 < 9 合計金額のグラフ +----------------------------------------> |****************************************************************************************************************************************************** |****************************************************************************************************************************************************** |****************************************************************************************************************************************************** |****************************************************************************************************************************************************** |****************************************************************************************************************************************************** |****************************************************************************************************************************************************** |****************************************************************************************************************************************************** |****************************************************************************************************************************************************** |****************************************************************************************************************************************************** v.導き出された結果の考察 グラフが変化しなかった。改良が必要である。 原因としては変数cooky と 35行目の計算式がおかしいと考えた。一度おしいと ころまでいったがそれもおかしかった。 pan{ABE Seigo}% ./def_budget_bar.rb [~/Ruby] どら焼きの値段は1個150円、クッキーの値段は1個90円である。 予算を1000円と固定する。どら焼きを◯個買う時、クッキーを何枚買えるか表示する。 どら焼きを何個買う? : 1 どら焼きを1個買うと合計は150円となる。 残金は850円なので、クッキーを9個買える。 この結果をグラフに表す。 どら焼きの個数の範囲 (x1 < x < x2) x1 = 1 x2 = 9 1 < どら焼きの個数 < 9 合計金額のグラフ +----------------------------------------> |** |*** |**** |***** |****** |****** ←ここがおかしいと思う。 |******* |******** |********* 改良しきれなかった vi.参考文献 西村まどか 基礎プログラミングII 第4回 (繰り返しは引っ張りだそう) 「直線グラフ」 http://roy/~madoka/2012/r2/04/r2_04_10_appendix_02_straightline.html 3.感想 算数や数学としくみは同じだと思う。ただパソコンだと難しい。簿記とは書方は 同じかも知れないが使い方が違うので適さないかなと感じた。 4.共同学習者 工藤智也