第4回 基礎プログラミング II レポート課題 氏名: 池田博哉 学籍番号: c109014 語学クラス: 英語3 コース(系): 地域共創 1.筆記問題 A.「雷とかけて、うちのオカン」 「その心は?」 「怖い」 「一人ぼっちとかけて、懐の中と解く」 「その心は?」 「寂しい…」 B.「ある大学生がコンビニへ買い物に行き、その時の代金を調べた。」 a.105円のおにぎりを2個、116円のパンを3個、150円のジュースを1本買った。 105 * 2 + 116 * 3 + 150 * 1 = 210 + 348 + 150 = 558 + 150 = 708 ◯Ktermで確認 pan{c109014}% bc -l [~] 105 * 2 210 116 * 3 348 210 + 348 + 150 708 よって、この計算は正しいと言える。 金額の合計は、708円となる。 b.105円のおにぎりを3個、116円のパンを4個、150円のジュースを2本買った。 105 * 3 + 116 * 4 + 150 * 2 = 315 + 464 + 300 = 315 + 764 = 1079 ◯Ktermで確認 pan{c109014}% bc -l [~] 105 * 3 315 116 * 4 464 150 * 2 300 315 + 464 + 300 1079 よって、この計算は正しいと言える。 金額の合計は、1079円となる。 2.プログラミング問題 A.◯考えた設定 コンビニで買い物をして、買う個数を入力し、その合計金額を表示するプ ログラム。 ◯もとにしたプログラムからの変更点 講義で作った「def_function.rb」 ・関数を f を 商品の名前にあたるものにした ・total を出し、print文を追加 ◯プログラム本体「def_twoparam.rb」 ------------------------------------------------------------------------- #!/usr/koeki/bin/ruby def oni(x) # 関数oni 105 * x end def pan(y) # 関数pan 116 * y end def juice(z) # 関数juice 150 * z end print("大学の帰り道、コンビニに寄り道をした。\n") sleep 1 print("「なーんか、腹減ったなぁ〜。」\n") sleep 1 print("「何か食べよ。」\n\n") sleep 1.3 STDERR.print("おにぎり(105円)を何個買う?: ") a = gets.to_i STDERR.print("パン(116円)を何個買う?: ") b = gets.to_i STDERR.print("ジュース(150円)を何本買う?: ") c = gets.to_i sleep 1 print("\n") printf("105円のおにぎり %s 個\n", a) printf("116円の パン %s 個\n", b) printf("150円のジュース %s 本\n", c) print("\n") total = oni(a) + pan(b) + juice(c) printf("「合計金額は、%s 円になります。」\n", total) ------------------------------------------------------------------------- ◯実行結果 ------------------------------------------------------------------------- pan{c109014}% ./def_oneparam_a.rb [~/Ruby] 大学の帰り道、コンビニに寄り道をした。 「なーんか、腹減ったなぁ〜。」 「何か食べよ。」 おにぎり(105円)を何個買う?: 2 パン(116円)を何個買う?: 3 ジュース(150円)を何本買う?: 1 105円のおにぎり 2 個 116円の パン 3 個 150円のジュース 1 本 「合計金額は、708 円になります。」 ------------------------------------------------------------------------- ◯Ktermで確認 pan{c109014}% bc -l [~/Ruby] 105 * 2 210 116 * 3 348 150 * 1 150 210 + 348 + 150 708 ◯考察 プログラムを実行した結果とKtermで計算した結果が一致したので、この結 果は正しいと言える。 total の初期値を 0 にする文を入れていたが、省いても問題なく実行でき たことを確認。 B.◯考えた設定 A問題の設定で、おにぎりは10個買うことを決めている状態。 ◯もとにしたプログラム A問題「def_twoparam.rb」 ・おにぎりを買う数を10個に固定 ◯プログラム本体「def_oneparam_a.rb」 ------------------------------------------------------------------------- #!/usr/koeki/bin/ruby def oni(x) # 関数oni 105 * x end def pan(y) # 関数pan 116 * y end def juice(z) # 関数juice 150 * z end print("大学の帰り道、コンビニに寄り道をした。\n") sleep 1 print("「なーんか、腹減ったなぁ〜。」\n") sleep 1 print("「何か食べよ。」\n\n") sleep 1.3 STDERR.print("おにぎり(105円)は10個買うことにした:10 \n") a = 10 STDERR.print("パン(116円)を何個買う?: ") b = gets.to_i STDERR.print("ジュース(150円)を何本買う?: ") c = gets.to_i sleep 1 print("\n") printf("105円のおにぎり %s 個\n", a) printf("116円の パン %s 個\n", b) printf("150円のジュース %s 本\n", c) print("\n") total = oni(a) + pan(b) + juice(c) printf("「合計金額は、%s 円になります。」\n", total) ------------------------------------------------------------------------- ◯実行結果 ------------------------------------------------------------------------- pan{c109014}% ./def_oneparam_a.rb [~/Ruby] 大学の帰り道、コンビニに寄り道をした。 「なーんか、腹減ったなぁ〜。」 「何か食べよ。」 おにぎり(105円)は10個買うことにした:10 パン(116円)を何個買う?: 1 ジュース(150円)を何本買う?: 1 105円のおにぎり 10 個 116円の パン 1 個 150円のジュース 1 本 「合計金額は、1316 円になります。」 ------------------------------------------------------------------------- ◯Ktermで確認 pan{c109014}% bc -l [~/Ruby] 105 * 10 1050 116 * 1 116 150 * 1 150 1050 + 116 + 150 1316 ◯考察 プログラムを実行した結果とKtermで計算した結果が一致したので、この結 果は正しいと言える。 C. ◯考えた設定 おにぎりを買う数は決まっていて、ジュースは買わず、パンは限られた数か ら買う設定。 ◯変更点 講義で作った「def_function.rb」 ・おにぎりの値段「105円」→「50円」に変更 ・パンの値段「116円」→「60円」に変更 ・ジュースは買わない ・定義域、値域を表示するようにした ・文章をきちっとした ◯プログラム本体「def_oneparam_bar.rb」 ------------------------------------------------------------------------- #!/usr/koeki/bin/ruby def barplot(p,q) print(" 10 20 30 40 50\n") print("+---------|---------|---------|---------|---------|------y軸\n") # y軸を表示 for s in p .. q print("|" + "*" * total(s) + "\n") end print("|\nx軸\n") # x軸を表示 end def total(k) (50 * 4 + 60 * k)/10 # グラフが見にくくならないように、値段の合計を 1/10 にする end print("大学の帰り道、コンビニに寄り道をした。\n") sleep 1 print("「今日は安物ばっかり買うかー」\n\n") sleep 1 print("商品の購入金額を表示します\n") sleep 1 print("[必要事項]\n") STDERR.print("おにぎり(50円)は4個買わなければいけない\n") print("ジュースはいらない\n\n") sleep 1 print("「パンは残り5個のようだ。」\n") sleep 1 STDERR.print("パン(60円)を少なくとも何個買う? :") a = gets.to_i STDERR.print("パン(60円)を多くて何個買う? :") b = gets.to_i STDERR.printf("\n\n定義域は、%d < x < %d\n", a, b) STDERR.printf("値域は、%d0 円 < y < %d0 円\n\n", total(a), total(b)) #値段が1/10になっているので、「0」をひとつ足す barplot(a,b) # 棒グラフを表示 ------------------------------------------------------------------------- ◯実行結果 ------------------------------------------------------------------------- pan{c109014}% ./def_oneparam_bar.rb [~/Ruby] 大学の帰り道、コンビニに寄り道をした。 「今日は安物ばっかり買うかー」 商品の購入金額を表示します [必要事項] おにぎり(50円)は4個買わなければいけない ジュースはいらない 「パンは残り5個のようだ。」 パン(60円)を少なくとも何個買う? :3 パン(60円)を多くて何個買う? :5 定義域は、3 < x < 5 値域は、380 円 < y < 500 円 10 20 30 40 50 +---------|---------|---------|---------|---------|------y軸 |************************************** |******************************************** |************************************************** | x軸 ------------------------------------------------------------------------- ◯Ktermで計算 ------------------------------------------------------------------------- pan{c109014}% bc -l [~/Ruby] 60 * 3 180 60 * 5 300 50 *4 200 180 + 200 380 300 + 200 500 ------------------------------------------------------------------------- ◯考察 プログラムを実行した結果とKtermで計算した結果が一致したので、この結 果は正しいと言える。 グラフで値段を表示するときは1/10にしないと、とんでもない数になった。 また、目盛りを10単位ごとに区切ると、多少はグラフらしくなった。 3.感想 グラフで第一象限などで表すことが出来るので、数学と同じ仕組みだと思いま した。点を使うことで、反比例のグラフも線無しなら作れるのではないかと思 います。 今回のプログラミング問題は、友人がいないと完成まで至らなかったところが沢 山ありました。私はプログラミングで計算させるような作業が苦手なので、こ の機会にでも克服していきたいと思います。 グラフを表示するプログラムは作るまでが大変でしたが、土台が出来ると意外 と楽しかったところもありました。 忙しいですが、頑張っていきたいです。 4.共同学習者 ◯遠藤孝之 ◯藤井駿 ◯佐藤裕康 ◯花木剛志