第 3 回 キーボードから入力して計算させるには レポート課題 氏名:梅津光 学籍番号:c1110246 語学クラス:英語 2 コース:政策マネジメント 1、筆記問題 A. 授業で使った while_calory.rb を応用し、「開けゴマ」と入力しなけ れば終了しないプログラムを作る。 作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp while true # プログラムを何度も実行する STDERR.print("ここから先は行かせません: ") # 標準エラー出力でprintfを 実行 goma = gets.chomp # 改行文字を取り除く if goma == "開けゴマ" # 「開けゴマ」と入力したときwhile文を抜ける break # 反復文を抜ける end # if文の終了 end # while文の終了 printf("おめでとう: \n",) # 表示する 考察 while_calory.rb を応用したが、ゴマには calory にあった数字の概念がないた め、いつもより少ないプログラムになった。colory で、"q" を入力したら実行が 終了する if 文を、このプログラムでは、「開けゴマ」と入力すれば終了する見 方に変えた。決まった文字を入力しなければ何度も聞かれ、「開けゴマ」と入力 すれば終了するプログラムが出来る。 2、プログラム問題 colory.rb 文を応用して、1日のきのこの収穫量を使って、色々な計算ができる プログラムを作成する。オプションは1つ1つ追加作成していく。 作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp mash = 0 # きのこの数 total = 0 # きのこの総収穫 n = 0 # 収穫した日 while true # 何度もプログラムを実行する STDERR.print("1日の収穫量[kg]: ") # " " 内を表示 mash = gets.chomp # 改行文字を取り除く if mash == "q" # "q"を入力した場合、 break # while true から抜ける end # if 文を終了 mash = mash.to_i # i で小数を使わない n += 1 # 1回ずつ増える total += mash.to_f # total は小数点表示 end # while true の終了 printf("総収穫量[kg]: %d\n", total) # 合計の表示 実行の結果 pan{c111024}% ./while_mashroom.rb [~/Ruby] 1日の収穫量[kg]: 234 1日の収穫量[kg]: 345 1日の収穫量[kg]: 456 1日の収穫量[kg]: 123 1日の収穫量[kg]: 243 1日の収穫量[kg]: 453 1日の収穫量[kg]: 445 1日の収穫量[kg]: q 総収穫量[kg]: 2299 bc -l を使って証明する pan{c111024}% bc -l [~/Ruby] 234+345+456+123+243+453+445 2299 実行の数値と等しくなった。 a ) 1週間における1日の平均収穫量 1日の平均をだすためのプログラムは最後の print 文の下に、平均を求める print文を追加する。 作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp kinoko = 0 total = 0 n = 0 while true STDERR.print("1日の収穫量[kg]: ") kinoko = gets.chomp if kinoko == "q" break end kinoko = kinoko.to_i n += 1 total += kinoko.to_f end printf("総収穫量[kg]: %d\n", total) printf("平均 %7.1f 収穫量\n", total / n) 実行結果 pan{c111024}% ./while_mashroom.rb [~/Ruby] 1日の収穫量[kg]: 234 1日の収穫量[kg]: 345 1日の収穫量[kg]: 456 1日の収穫量[kg]: 123 1日の収穫量[kg]: 243 1日の収穫量[kg]: 453 1日の収穫量[kg]: 445 1日の収穫量[kg]: q 総収穫量[kg]: 2299 1日の平均収穫量 328.4 [kg] bc -l で証明する pan{c111024}% bc -l [~/Ruby] (234+345+456+123+243+453+445)/7 328.42857142857142857142 小数点が多くなってしまったが、第 2 位を四捨五入をするとプログラムの実行 と同じ数値になった。 b ) この1週間での価格を固定し、 (1[kg] あたり 240 円) 1 週間分の売り上げ による収益を表示することができるプログラム 作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp mash = 0 total = 0 n = 0 money = 240 # 1[kg]あたり240 円を固定 while true STDERR.print("1日の収穫量[kg]: ") mash = gets.chomp if mash == "q" break end mash = mash.to_i n += 1 total += mash.to_f syuueki = total * money # total と money を掛ける end printf("総収穫量[kg]: %d\n", total) printf("1日の平均収穫量 %7.1f [kg]\n", total / n) printf("1週間分の収益 [円]:%d\n",syuueki ) # 1週間分の収益を表示する。 bcーl で証明する。 pan{c111024}% bc -l [~/Ruby] (110+120+130+140+150+160+170)*240 235200 実行結果と等しくなった。 考察 プログラムは、 a で作成したものに 1[kg]あたり 240 円を固定するプログラム を追加した。1週間分の収益を求めるプログラムを作成し、正確な数値を表示す ることができた。 感想 前回よりも難しく、手間取ってしまいましたが、大体のプログラムの基本は理解 できているなと感じました。ですがまだプログラムの知識がないので、こうだっ たらもっといいプログラムなのにと妄想ばかりがふくらんでいく一方です。これ からのプログラミングの授業を真剣に受けたいと思います。 参考文献 西村先生のページ http://roy/~madoka/2012 協力してくれた先輩 安藤夏海先輩 共同学習者 舟山真 柏倉舞 ----Next_Part(Wed_May__2_14_52_26_2012_345)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="while_goma.rb" #!/usr/koeki/bin/ruby #coding: euc-jp while true STDERR.print("ここから先は行かせません: ") goma = gets.chomp if goma == "開けゴマ" break end end printf("おめでとう: \n",) ----Next_Part(Wed_May__2_14_52_26_2012_345)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="while_mashroom.rb"