第 4 回 繰り返しは引っ張りだそう レポート課題 吉住 貴則 C1101980 英語 2 地域共創コース 1A、「天気が悪い日の空とかけまして、」 「放射能問題についての関係者の責任と解く」 「その心は?」 「どちらも重い(どんよりとした空のこと、責任が重い)でしょう」 「衆議院議院のセキュリティとかけまして、」 「よく虫が通り抜ける網戸と解きます」 「その心は?」 「どちらも目(セキュリティ、網戸)が粗いでしょう」 1B、1)あるCDショップの売り上げを調べた。 そこでは、アーティストのCDの アルバムは3000円、シングル1200円 (全て税込)と決まっていた。 :アルバムを1枚とシングルを2枚買ったとする。 (計算式) 3000 * 1 = 3000(円) … アルバムの計算 1200 * 2 = 2400(円) … シングルの計算 3000 + 2400 = 5400(円) … アルバムとシングルの合計 ( 答 ) 5400(円) <確かめ算> pan{YOSHIZUMI Takanori}% bc -l 3000*1 3000 1200*2 2400 3000+2400 5400 :また、アルバムを3枚とシングルを4枚買ったとする。 (計算式) 3000 * 3 = 9000(円) … アルバムの計算 1200 * 4 = 4800(円) … シングルの計算 9000 + 4800 = 13800(円) … アルバムとシングルの合計 ( 答 ) 13800(円) <確かめ算> pan{YOSHIZUMI Takanori}% bc -l 3000*3 9000 1200*4 4800 9000+4800 13800 2)1)のひきつづきです。 そのあるCDショップでセールが行われました。 アルバム、シングル全品3割り引きでした。 :アルバム5枚とシングル3枚と張り込んだ場合。 (計算式) 3000 * 5 = 15000(円) … アルバムの計算 15000 * 0.03 = 450(円) … アルバムの割り引き金額の計算 15000 - 450 = 14550(円) … アルバムの合計 1200 * 3 = 3600(円) … シングルの計算 3600 * 0.03 = 108(円) … シングルの割り引き金額の計算 3600 - 108 = 3492(円) … シングルの合計 14550 + 3492 = 18042(円) … アルバムとシングルの合計 ( 答 ) 18042(円) … 通常より558円お得 <確かめ算> pan{c110198}% bc -l [~] 3000*5 15000 15000*0.03 450.00 15000-450 14550 1200*3 3600 3600*0.03 108.00 3600-108 3492 14550+3492 18042 :また、アルバム2枚とシングル2枚を求めた人の場合 (計算式) 3000 * 2 = 6000 (円) … アルバムの計算 6000 * 0.03 = 180(円) … アルバムの割り引き金額の計算 6000 - 180 = 5820(円) … アルバムの合計 1200 * 2 = 2400(円) … シングルの計算 2400 * 0.03 = 72(円) … シングルの割り引き金額の計算 2400 - 72 = 2328(円) … シングルの合計 5820 + 2328 = 8148(円) … アルバムとシングルの合計 ( 答 ) 8148(円) … 通常より252円お得 <確かめ算> pan{c110198}% bc -l [~] 3000*2 6000 6000*0.03 180.00 6000-180 5820 1200*2 2400 2400*0.03 72.00 2400-72 2328 5820+2328 8148 2A、 1) 1Bで考えたCDショップの問題を利用する。 町のCDショップに行きました。 そこでは、全品アルバムは3000円で シングルは1200円だった。 そこで買い物をしたときのこととする。 2) 作成したプログラム #!/usr/koeki/bin/ruby # : Rubyのお約束 def total(a,b) # : total が関数、 a と b が仮引数 3000 * a + 1200 * b # : 3000 は アルバムの値 # : 1200 は シングルの値 # : a は アルバムの枚数 # : b は シングルの枚数 end # : defの終わり STDERR.print("あなたはアルバムを何枚お買い求めになりますか?\n") # : ディスプレイで入力された文字を出力するメソッド album = gets.chomp.to_i # : albumを整数と認識する STDERR.print("あなたはシングルを何枚お買い求めになりますか?\n") single = gets.chomp.to_i # : singleを整数と認識する printf("アルバムが %s枚とシングルが %s枚の\nお買い上げありがとうございます。\n",album,single) # %s : 整数と認識する # , のあとの1つ目の album は アルバムの所の %s に対応する # 、、 2つ目の single は シングルの所の %s に対応する printf("お買い上げの合計は %s円です。\nありがとうございました。\n",total(album,single)) # total の album は total(a,b) の total(a) に 対応 # 、、 single は 、、 total(b) に 対応 3)もとにしたプログラム 授業時に作った、def_func.rboを参考にして作成した。 授業時に、自分のノートに書けなかったことを プログラムにコメントとして入力しておいたため とても作業しやすかった。 関数と仮引数の関係を分かるまでに少し時間がかかったため プログラムのコメント覧に説明を沢山書いた。 本当は、変数ももっとやりやすいものに変えようと思ったのですが、 計算の結果を出すときにどの変数が何に作用しているのか 分からなくなりそうだったので少し長いですが、 album,singleとしました。 4) 実行結果 pan{YOSHIZUMI Takanori}% ./def_twoparam.rb [~/Ruby] あなたはアルバムを何枚お買い求めになりますか? 5 あなたはシングルを何枚お買い求めになりますか? 5 アルバムが 5枚とシングルが 5枚の お買い上げありがとうございます。 お買い上げの合計は 21000円です。 ありがとうございました。 5) 考察 KTERMの計算機能を利用して 計算してみたいと思う。 pan{c110198}% bc -l [~/Ruby] 3000*5 : アルバムの計算 15000 : アルバムの合計 1200*5 : シングルの計算 6000 : シングルの合計 15000+6000 : アルバムとシングルの計算 21000 : 合計金額 実行結果のお買い上げ合計と考察の合計金額が 一致したためこれでプログラムは正常と云える。 2B、 1) 2Aの問題を引続き利用した。 そこのCDショップの経営が右肩下がりだったため、 お客様のことを考えてアルバムを 必ず2枚購入していただくことにした。 作者が云うのはおかしいが もし、こんなお店が私の地元にあったら 絶対行かないと思う。 しかし、こういう正直な店もあって良いと思う。 2) 作成したプログラム #!/usr/koeki/bin/ruby # : Rubyのお約束 def total(a) # : total が関数、 a と b が仮引数 3000 * 2 + 1200 * a # : 3000 は アルバムの値 # : 1200 は シングルの値 # : a は シングルの枚数 end # : defの終わり printf("アルバムを2枚のお買い求めありがとうございます\n") STDERR.print("お客様はシングルを何枚お買い求めになりますか?\n") single = gets.chomp.to_i # : singleを整数と認識する printf("シングル %s枚の\nお買い上げありがとうございます。\n",single) # %s : 整数と認識する # , のあとの1つ目の single は シングルの所の %s に対応する printf("お買い上げの合計は %s円です。\nありがとうございました。\n",total(single)) # total の single は total(a) に 対応 # ded - end の間にある定義は関数を使うことで結果をだすことが出来る。 3) もとにしたプログラム この課題の2Aを基本に作成した。 作成したと言うよりも正直な話、仮引数の b と 変数の album を削除して見ただけだった。 しかし、プログラムのコメント覧にも記述したが ded - end の中にある定義の作用が良く理解できた。 Bの問題を解いて良かったと思う。 4) 実行結果 pan{YOSHIZUMI Takanori}% ./def_oneparam_a.rb [~/Ruby] あなたはアルバムを2枚のお買い求めありがとうございます あなたはシングルを何枚お買い求めになりますか? 3 シングル 3枚の お買い上げありがとうございます。 お買い上げの合計は 9600円です。 ありがとうございました。 5) 考察 2AのようにKTERMの計算機能で確かめ算をしてみたいと思う。 pan{c110198}% bc -l [~/Ruby] 3000*2 # 固定されているアルバムの計算 2枚分 6000 # 合計 1200*3 # 購入分のシングル3枚の計算 3600 # 合計 6000+3600 # アルバムとシングルの計算 9600 # お買い求め金額 お買い上げの合計金額の結果と 計算機能を利用したことでの結果が 一致したことでこのプログラムは正常と云える。 3、感想 このプログラムで行った関数を利用する方法は 義務教育時代の算数や数学と同じ仕組みだと思う。 このような関数を利用使うプログラムなどは 義務教育の頃の勉強をしっかりしてなかったら 理解することにとても時間を要し、 諦めるものもいただろう。 プログラム作成にも云えるが、 どんなことにも基礎又は基本が必ず必要だと云うことだろう。 しかし、関数をならっているときに このようなプログラムの問題を作成していたら 柔軟な考える力や応用力がついたのではないかと思う。 それを考えると残念だ。 今回のプログラムは、考えた設定等に書いたが 自分がプログラムを見て、考え方が すぐに分かるように工夫した。 もし自分が忘れたときに、 自分の為になると思うと苦しい課題も 少し肩の力を抜きながら制作できた。 これからもこういった気持ちを忘れずに 頑張りたいと思う。 4、参考文献 WEBサイト :西村まどか 先生 ホームページ 2011 年度 基礎プログラミング II 講義ノート(シラバス) 第 4 回 「繰り返しは引っ張りだそう」 (http://roy/~madoka/2011/r2/04/) :神田直弥 先生 ホームページ 2011 年度 基礎プログラミングII メソッド (http://roy/~naoya/rubyII/6.html) ※特にプログラムの説明文作成のときに 参考させていただきました。 :自分のノートやプログラムのコメント覧 共同研究者 上林 千尋 5、添付