第4回 基礎プログラミング II レポート課題 氏名 : 藤井 駿 学籍番号 : c1091307 語学クラス : 英語3 コース : 地域共創 1.筆記問題 A. 「野球のプレーヤーとかけまして、ケーキの種類と解きます。」 「その心は?」 「どちらも "ショート(遊撃手、ショートケーキ)"が欠かせません。」 B. (1) 文房具を買い、代金はいくらかかるかを調べた。 鉛筆1本50円、消しゴム1個90円、ボールペン1本100円であった。 鉛筆を5本、消しゴムを2個、ボールペンを2本買うことにした。 実際に計算すると 50 * 4 + 90 * 2 + 100 * 2 = 580 合計は580円である。 bc -l で確認すると pan{c109130}% bc -l [~/Ruby] 50*4+90*2+100*2 580 quit 580円となり合致するので正しいといえる。 (2) 友だちが来るのでお菓子を買いに行き、いくらかかるかを調べた。 ポテトチップス1袋120円、チョコレート1箱150円、ポップコーン1袋180 円であった。 ポテトチップスを3袋、チョコレートを2箱、ポップコーンを2袋を買うこ とにした。 実際に計算すると 120 * 3 + 150 * 2 + 180 * 2 = 1020 合計は1020円である。 bc -l で確認すると pan{c109130}% bc -l [~/Ruby] 120*3+150*2+180*2 1020 quit 1020円となり合致するので正しいといえる。 2.プログラム問題 A. a.考えた設定 筆記問題 B(1) を実際にプログラムで合計金額を表示させる。 b.元にしたプログラム 授業の時の def_function.rb を参考にした。 変更した点は、def function(x)・・・ を def enpitsu(x)、 def keshigomu(y)、def borupen(z)とした。 c.作成したプログラム #!/usr/koeki/bin/ruby def enpitsu(x) 50 * x # 鉛筆の値段 * 本数 end def keshigomu(y) 90 * y # 消しゴムの値段 * 個数 end def borupen(z) 100 * z # ボールペンの値段 * 本数 end print("文房具の購入金額を表示します\n\n") STDERR.print("鉛筆は何本買いますか? :") a = gets.to_i # to_i で整数表示 STDERR.print("消しゴムは何個買いますか? :") b = gets.to_i STDERR.print("ボールペンは何本買いますか? :") c = gets.to_i print("\n") # 改行文字 printf("鉛筆の合計金額: %d円\n",enpitsu(a)) printf("消しゴムの合計金額: %d円\n",keshigomu(b)) printf("ボールペンの合計金額: %d円\n",borupen(c)) print("\n") # 改行文字 printf("3つの合計金額は %d円です。\n",enpitsu(a)+keshigomu(b)+borupen(c)) d.実行結果 pan{c109130}% ./def_twoparam.rb [~/Ruby] 文房具の購入金額を表示します 鉛筆は何本買いますか? :4 消しゴムは何個買いますか? :2 ボールペンは何本買いますか? :2 鉛筆の合計金額: 200円 消しゴムの合計金額: 180円 ボールペンの合計金額: 200円 3つの合計金額は 580円です。 e.考察 bc -l で確認すると、 pan{c109130}% bc -l [~/Ruby] 50 * 4 200 90 * 2 180 100 * 2 200 200 + 180 + 200 580 quit となり、実行結果と合致したのでプログラムは正しいといえる。 また、見やすさを求めたので、所々に 改行文字の \n をいれた。 B. a.考えた設定 鉛筆の本数を固定して他の物との合計金額を求める b.元にしたプログラム プログラム問題Aを参考に作成。 変更した点は鉛筆を5本と固定したので a = 5 とした。 c.作成したプログラム #!/usr/koeki/bin/ruby def enpitsu(x) 50 * x # 鉛筆の値段 * 本数 end def keshigomu(y) 90 * y # 消しゴムの値段 * 個数 end def borupen(z) 100 * z # ボールペンの値段 * 本数 end print("文房具の購入金額を表示します\n\n") STDERR.print("鉛筆は残り5本しか無いので全部買うことにした : 5\n\n") a = 5 STDERR.print("消しゴムは何個買いますか? :") b = gets.to_i # to_i で整数表示 STDERR.print("ボールペンは何本買いますか? :") c = gets.to_i print("\n") # 改行文字 printf("鉛筆の合計金額: %d円\n",enpitsu(a)) printf("消しゴムの合計金額: %d円\n",keshigomu(b)) printf("ボールペンの合計金額: %d円\n",borupen(c)) print("\n") # 改行文字 printf("3つの合計金額は %d円です。\n",enpitsu(a)+keshigomu(b)+borupen(c)) d.実行結果 pan{c109130}% ./def_oneparam.rb [~/Ruby] 文房具の購入金額を表示します 鉛筆は残り5本しか無いので全部買うことにした : 5 消しゴムは何個買いますか? :3 ボールペンは何本買いますか? :4 鉛筆の合計金額: 250円 消しゴムの合計金額: 270円 ボールペンの合計金額: 400円 3つの合計金額は 920円です。 e.考察 bc -l で確認すると、 pan{c109130}% bc -l [~Ruby] 50*5 250 90*3 270 100*4 400 250+270+400 920 quit となり、プログラムと一致するので正しいといえる。 C. a.考えた設定 プログラム問題B をもとに棒グラフを作成する。 b.元にしたプログラム 授業の時の def_function.rb とプログラム問題の Bを参考に作成した。 変数を変更して作成した。 c.作成したプログラム #!/usr/koeki/bin/ruby def barplot(m,s) print("---------------------------------------------------------y軸\n") # y軸を表示する for z in m .. s print("|\n") end for i in m .. s print("|" + "*" * total(i) + "\n") end print("|\nx軸\n") # x軸を表示する end def total(k) (50 * 5 + 100 * k)/10 # グラフにしたときに莫大な数にならないように 1/10 をした end print("文房具の購入金額を表示します\n\n") STDERR.print("鉛筆(1本50円)は残り5本しか無いので全部買うことにした\n") print("消しゴムは売り切れだったので\nボールペンを買うことにした\n\n") STDERR.print("ボールペン(1本100円)を少なくとも何本買いますか? :") a = gets.to_i # to_i で整数表示 STDERR.print("ボールペン(1本100円)を多くて何本買いますか? :") b = gets.to_i # to_i で整数表示 STDERR.printf("\n\n定義域は、%d < x < %d\n",a,b) STDERR.printf("値域は、%d0 円 < y < %d0 円\n\n",total(a),total(b)) barplot(a,b) # 棒グラフを呼び出す d.実行結果 pan{c109130}% ./def_oneparam_bar.rb [~/Ruby] 文房具の購入金額を表示します 鉛筆(1本50円)は残り5本しか無いので全部買うことにした 消しゴムは売り切れだったので ボールペンを買うことにした ボールペン(1本100円)を少なくとも何本買いますか? :2 ボールペン(1本100円)を多くて何本買いますか? :5 定義域は、2 < x < 5 値域は、450 円 < y < 750 円 ---------------------------------------------------------y軸 | | | | |********************************************* |******************************************************* |***************************************************************** |*************************************************************************** | x軸 e.考察 bc -l で確認すると、 ◎ボールペンを2本買ったとき pan{c109130}% bc -l [~/Ruby] 50*5+100*2 450 quit ◎ボールペンを5本買ったとき pan{c109130}% bc -l [~/Ruby] 50*5+100*5 750 quit となるので、プログラム内の値域と合致するので正しいといえる。 また、棒グラフにする際に、値域で出た値のままで実行したらとても莫大 な量の表示の仕方になったので、表示の仕方を 1/10 にした。 しかしそのようにしたら今度は値域が正確に表示されなくなってしまっ た。 例) 450 < y < 750 → 45 < y < 75 だから苦肉の策で ("値域は、%d0 円 < y < %d0 円\n\n"・・・) として一 桁足した。 3.感想 義務教育で学んだ算数や数学と同じ仕組みだと感じた。計算方法もある程度 は同じであり、グラフに関しても同じようになっているからである。 また、負の値になったときにはどうなるか知りたくなった。 今回のレポートはやり方が分かればすらすら進むことが出来た。グラフ作成 は試行錯誤しながらなんとか作ることが出来たので良かった。 これからさらに難しくなっていくかもしれないけれどしっかりと頑張ってい きたいと思う。 4.参考文献等 ◯共同学習者 ・池田博哉 ・遠藤孝之