第 4 回 繰り返しは引っ張りだそう レポート課題 氏名:渡辺 龍 学籍番号:c1102057 語学クラス:中国語 3クラス コース(系):地域共創コース 1.筆記試験 A.なぞかけ 八王子とかけて、今日の曜日は解く その心は? 南陽台(何曜だい?) B.なぞかけ 朝とかけて熱いお茶と解きます その心は? どちらもさめる(覚め、冷め)でしょう B.計算問題 (1) 1リットルのガソリン代と入れた量を計算し、結果いくらになるか。 ガソリン代 1リットル 140円 入れた量 30リットル f(x,y) = x * y f(140,30) = 140 * 30 = 4200 確かめ算 pan{WATANABE Ryu}% bc -l [~] 140*30 4200 f(x,y) = x * y f(140,60) = 140 * 60 = 8200 確かめ算 pan{WATANABE Ryu}% bc -l [~] 140*60 8400 quit (2) 天然水と紅茶、共に購入する本数を計算し結果いくらになるか。 天然水1本100円 紅茶1本 150円 例) 仮に天然水を2本、紅茶を3本買ったとする。 f(x,y) = x * y f(100,150) = 100 * 2 + 150 * 3 = 650 確かめ算 pan{c110205}% bc -l [~] 100*2+150*3 650 quit 例2) 仮に天然水を5本、紅茶を6本買ったとする。 f(x,y) = x * y f(100,150) = 100 * 5 + 150 * 6 = 1400 確かめ算 pan{c110205}% bc -l [~] 100*5+150*6 1400 quit 2.プログラム問題 A. def_twoparam.rb a.考えた設定 筆記問題で考えた問題を基にして、合計金額を計算するプログラム。 b.作成したプログラム #!/usr/koeki/bin/ruby def nomimono(x,y) # nomimonoという関数を定義。引数は x,y とする。 100 * x + 150 * y # 100は天然水、150は紅茶の値段。* は乗算 end #defを閉じるためのend STDERR.print("天然水は何本購入しましたか?\n") # printで入力を促す mizu = gets.to_i # 入力された数字を変数にする。 # 本数は整数のためto_iを使用。 STDERR.print("紅茶は何本購入しましたか?\n") tea = gets.to_i # 入力された数字を変数にする。 # 本数は変数のためto_iを使用。 total = nomimono(mizu,tea) # 合計を計算。入力された変数を引用。 printf("合計は %s 円になります。\n",total) # 変数と合計を代入する。 c.実行結果 pan{c110205}% ./def_twoparam.rb [~/Ruby] 天然水は何本購入しましたか? 2 紅茶は何本購入しましたか? 5 合計は 950 円になります。 d.考察 プログラムの計算は間違っていないか? pan{c110205}% bc -l [~] 100*2+150*5 950 quit 確かめ算の結果計算は正確にできていた。 B.def_oneparam_a.rb a.考えた設定 変数の一つを固定し、もう一方の数を入力してもらい合計を表示するプログラ ム。 b.作成したプログラム #!/usr/koeki/bin/ruby def nomimono(x) #nomimonoという関数を定義。引数は(x)とする。 100 * x + 150 * 4 #100は天然水の値段、xは変数。150は紅茶の値段、4は固定された購入数。 #今回の場合は一方が固定数のためxのような変数は使用しない。+は加乗。 end #defを閉じるためのend STDERR.print("俺先に紅茶4本買っちゃったよ!!\n") STDERR.print("お前最高に気が利くな!!じゃあ俺は天然水買うよ\n") STDERR.print("何本買いますか?\n") mizu = gets.to_i # 入力された数字を変数にする。 # 本数は変数のためto_iを使用。 print"\n" # ユーザーの見やすいように改行 printf("二人の合計購入金額は %d 円です。\n",nomimono(mizu)) # 変数と合計を代入する c.実行結果 (1) pan{c110205}% ./def_oneparam_a.rb [~/Ruby] 俺先に紅茶4本買っちゃったよ!! お前最高に気が利くな!!じゃあ俺は天然水買うよ 何本買いますか? 3 二人の合計購入金額は 900 円です。 (2) pan{c110205}% ./def_oneparam_a.rb [~/Ruby] 俺先に紅茶4本買っちゃったよ!! お前最高に気が利くな!!じゃあ俺は天然水買うよ 何本買いますか? 7 二人の合計購入金額は 1300 円です。 d.考察 固定数は合計の際正確に代入されているか?また計算に間違いはないか? 確かめ算 (1) pan{c110205}% bc -l [~] 100*3+150*4 900 quit (2) pan{c110205}% bc -l [~] 100*7+150*4 1300 quit 結果を見る限り特別な問題もなく、エラーなども起きなかった。 よって固定数は正確に合計に代入されており、計算にも間違いはなかった。 C def_oneparam_bar.rb a.考えた設定 合計などを計算し、棒グラフを作成するプログラム。 b.作成したプログラム #!/usr/koeki/bin/ruby def nomimono(x,y) # nomimonoという関数を定義。引数は(x,y)とする。 print("+") #グラフの分かれ目に使用。 print("--------------------------------------------------------") # グラフの軸として使用。 print"\n" # 改行を表す。 for r in x..y # 変数はrとする。変数rにxとyを代入。 graf(r) #変数rを代入。 end #for の end。 print("|\n") # グラフの最後に余裕を持たせるため。 end # def の end 閉じる。 def graf(x) # 変数xとする。 print("|") # グラフの縦線。 printf("□"*total2(x)) # □とtotalを乗算する。totalにはxが代入されている。 print("\n") #改行 end # defを閉じるための end def total(x) #変数はxする。 y = 4 # 固定数である紅茶の数。つまり初めから紅茶が4本購入されている。 100 * x + 150 * y # 100 は天然水の値段。x は変数。 150 は紅茶の値段。 y は変数。 # + は加算。* は乗算。天然水と紅茶の値段と本数を計算する式。 end #def を閉じるための end def total2(x) # 変数はxとする。 y = 4 # 固定数である紅茶の数。つまり初めから紅茶が4本購入されている。 (100 * x + 150 * y)/100 # 左は天然水と紅茶の計算式。 # 右に存在する /100 は /100 をしないとグラフが大量に表示されるため。 # /100することによりユーザーがグラフをみて理解しやすくなる。 end # def の end STDERR.print("また先に紅茶4本買っておいたよ!!\n") print("マジで気が利くな!!お前神か?神なのか?じゃあお礼に1コインで買える天然水は俺が買おう!!\n") STDERR.print("けど金が無いから少めにしてくれなかい?\n") mizu = gets.to_i # 入力を促すもの。本数は整数のためto_iを使用。 STDERR.print("おいおい俺もなめられたものだ!!もう少し多く買えるよ!!\n") mizu2 = gets.to_i # 入力を促すもの。本数は整数のためto_iを使用。 printf("購入可能最低金額は:f(%d)=%d 円です\n",mizu,total(mizu)) # f内の数字は入力された本数を表示。 # mizuとtotalをそれぞれ代入し計算式を求める。 printf("購入可能最高金額は:f(%d)=%d 円です\n",mizu2,total(mizu2)) # f内の数字は入力された本数を表示。 # mizu2とtotalをそれぞれ代入し計算式を求める。 nomimono(mizu,mizu2) # nomimonoにmizuとmizu2それぞれ代入。 c.実行結果 pan{c110205}% ./def_oneparam_bar.rb [~/Ruby] また先に紅茶4本買っておいたよ!! マジで気が利くな!!お前神か?神なのか?じゃあお礼に1コインで買える天然水は俺が買おう!! けど金が無いから少めにしてくれなかい? 2 おいおい俺もなめられたものだ!!もう少し多く買えるよ!! 7 購入可能最低金額は:f(2)=800 円です 購入可能最高金額は:f(7)=1300 円です +-------------------------------------------------------- |□□□□□□□□ |□□□□□□□□□ |□□□□□□□□□□ |□□□□□□□□□□□ |□□□□□□□□□□□□ |□□□□□□□□□□□□□ | d.考察 グラフに間違いはないか?また計算に間違いはないか? 購入可能最低金額は:f(2)=800 円です 購入可能最高金額は:f(7)=1300 円です +-------------------------------------------------------- |□□□□□□□□ |□□□□□□□□□ |□□□□□□□□□□ |□□□□□□□□□□□ |□□□□□□□□□□□□ |□□□□□□□□□□□□□ | グラフは正確に800円〜1300円を含め表示されていることが確認出来た。 確かめ算 購入可能最低金額 pan{WATANABE Ryu}% bc -l [~] 100*2+150*4 800 quit 購入可能最高金額 pan{c110205}% bc -l [~] 100*7+150*4 1300 qui 両方の結果を調べたが間違いはなかった。 以上の結果を踏まえてグラフ・計算式共に間違いはなく、プログラムは正確に起 動した。 3.今回の課題で学んだこと 今回は数式やグラフを作成するレポートが多かった。苦戦はしたが、おかげで数 式の作成方法や、グラフの作成方法が理解できるようになった。 4.感想 今回のプログラムは義務教育で教わった数学と、根本的な部分は同じ仕組みだと思っ た。確かにプログラム中での計算式は数学とは違うが、計算方法などは数学とな んら変化は見られなかった。 私は簿記を履修していないため簿記とグラフが関連しているかは分からなかった。 しかし、数学などは大学ではあまり学ぶ機会がなかった為、今回のプログラムは すごく楽しく作成できた。 5.参考文献 西村 まどか 講義ノート http://roy/~madoka/2011/r2/04/ 協力者 松田 大輝