第 4 回 繰り返しは引っ張りだそう レポート課題 氏名:浅沼佑香 学籍番号:C1110039 語学クラス:英語1 コース:社会福祉コース 1.A.6つ考えた。 ・「生活保護とかけて、買い物客と解く」 「その心は?」 「どちらもお金が必要です。」 ・「焼きいもとかけて、新婚さんと解く」 「その心は?」 「どちらもできたてホヤホヤです。」 ・「おたまじゃくしとかけて、留守と解く」 「その心は?」 「どちらもいない(胃、無い)でしょう。」 ・「ジェットコースターとかけて、料理人と解く」 「その心は?」 「どちらも速さ(早さ)が必要です。」 ・「クリスマスとかけて、漁師と解く」 「その心は?」 「どちらもツリー(釣り)がつきものです。」 ・「アイドルとかけて、あきかんと解く」 「その心は?」 「どちらもから(KARA・空)です。」 B.1)A子さんは、一人暮らしである。携帯料金6000円と家賃30000円を毎月払わな くてはいけないのでいくらかかるか調べた。 <1ヵ月払いの場合> 6000 + 30000 = 36000(円) 〜確かめ算〜 pan{ASANUMA Yuka}% bc -l [~] 6000+30000 36000 <携帯料金は1ヵ月・家賃は3ヵ月払いの場合> 6000 + 30000 * 3 = 96000(円) 〜確かめ算〜 pan{c111003}% bc -l [~] 6000+30000*3 96000 計算はあっているので正しいといえる。 2)人気ラーメン屋で、しょうゆラーメン500円、しおラーメン560円、みそラーメ ン540円、餃子1皿380円で食べられる。団体客が来店した時の食べた合計金額 がいくらかかるか調べた。 <しょうゆラーメン2人前、みそラーメン1人前、餃子4皿の場合> 500 * 2 + 540 + 380 * 4 = 3060(円) 〜確かめ算〜 pan{c111003}% bc -l [~] 500*2+540+380*4 3060 <しおラーメン5人前、餃子10皿、みそラーメン2人前の場合> 560 * 5 + 380 * 10 + 540 * 2 = 7680(円) 〜確かめ算〜 pan{c111003}% bc -l [~] 560*5+380*10+540*2 7680 計算はあっているので正しいといえる。 2.A.<設定> 大人と子どもで遊園地に行く。入園料は、1人あたり大人(高校生以上)が 1000円、子ども(高校生以下)が500円である。25人以上になると団体料金が 適用され、大人が800円、子どもが350円になる。1グループあたりの入園料 を求めるプログラム。 <プログラム(def_twoparam.rb)> #!/usr/koeki/bin/ruby #coding: euc-jp def park(adult,child) #関数park、引数adultとchild sum=adult+child #引数を足したものをsum if sum<25 #もしsumが25人以下ならば adult*1000+child*500 #大人1000円、子ども500円 else #またはsumが25人以上であれば adult*800+child*350 #大人800円、子ども350円 end #if文終わり end #def文終わり print("入園料を表示します。\n") #文表示 print("大人または子どもの人数をいれてください。\n") #文表示 STDERR.printf("\n大人は何人ですか?: ") #文表示 otona = gets.to_i #入力された数値としてotonaに取りこむ STDERR.printf("\n子どもは何人ですか?: ") #文表示 kodomo = gets.to_i #入力された数値としてkodomoに取りこむ printf("\n入園料は合計で%d円になります\n",park(otona,kodomo)) #文表示 <前のプログラムとの変更点> def_graph.rbを参考に作成した。 見やすいように改行をつけた。 <実行結果> 〜その1〜 pan{c111003}% ./def_twoparam.rb [~/Ruby] 入園料を表示します。 大人または子どもの人数をいれてください。 大人は何人ですか?: 0 子どもは何人ですか?: 4 入園料は合計で2000円になります 〜その2〜 pan{c111003}% ./def_twoparam.rb [~/Ruby] 入園料を表示します。 大人または子どもの人数をいれてください。 大人は何人ですか?: 2 子どもは何人ですか?: 3 入園料は合計で3500円になります 〜その3〜 pan{c111003}% ./def_twoparam.rb [~/Ruby] 入園料を表示します。 大人または子どもの人数をいれてください。 大人は何人ですか?: 4 子どもは何人ですか?: 30 入園料は合計で13700円になります 〜その4〜 pan{c111003}% ./def_twoparam.rb [~/Ruby] 入園料を表示します。 大人または子どもの人数をいれてください。 大人は何人ですか?: 20 子どもは何人ですか?: 11 入園料は合計で19850円になります 〜その5〜 pan{c111003}% ./def_twoparam.rb [~/Ruby] 入園料を表示します。 大人または子どもの人数をいれてください。 大人は何人ですか?: 15 子どもは何人ですか?: 10 入園料は合計で15500円になります <考察> それぞれbc -lで確かめ算を行い、計算があっているか調べた。 ◯通常料金の場合◯ 〜その1〜 pan{c111003}% bc -l [~/Ruby] 500*4 2000 計算があっていたので正しいといえる。 〜その2〜 pan{c111003}% bc -l [~/Ruby] 1000*2+500*3 3500 計算があっていたので正しいといえる。 ◯団体料金の場合◯ 〜その3〜 pan{c111003}% bc -l [~/Ruby] 800*4+350*30 13700 計算があっていたので正しいといえる。 〜その5〜 pan{c111003}% bc -l [~/Ruby] 800*20+350*11 19850 計算があっていたので正しいといえる。 〜その5〜 pan{c111003}% bc -l [~/Ruby] 1000*15+500*10 20000 800*15+350*10 15500 25人以上は団体料金とプログラムは作成しているため、合計が25人はどうなるの か調べたところ、団体料金で金額が表示されていることが分かった。なので、こ のプログラムは正しいといえる。 <参考文献> 最後に記載 B.<設定> 設定は設問Aと同様にした。予算を30000円とした場合に、大人の人数を教えれ ば、子どもの人数もわかるプログラム。 <プログラム(def_budget.rb)> #!/usr/koeki/bin/ruby #coding: euc-jp def prak(otona) #関数park、仮引数otona if otona<25 #もしotonaが25人以下ならば 30000 - 1000 * otona #予算からotonaの人数分の額を引く else #またはotonaが25人以上であれば 30000 - 800 * otona #予算からotonaの人数分の額を引く end #if文終わり end #def文終わり print("予算は30000円です。\n") #文表示 print("\n入園料を表示します。\n") #文表示 STDERR.printf("\n大人は何人ですか?: ") #文表示 adult = gets.to_i #入力された数値としてadultを取りこむ if adult<25 #もしadultが25人以下ならば child = 30000 - 1000 * adult #childは予算からadultの人数分の額を引く kodomo = child / 500 #kodomoはchildから500円の料金を割る else #またはadultが25人以上であれば child = 30000 - 800 * adult #childは予算からadultの人数分の額を引く kodomo = child / 350 #kodomoはchildから350円の料金を割る end #if文終わり printf("\n子どもは%d人になります。\n",kodomo) #文表示 <前のプログラムとの変更点> def_func.rbを参考に作成した。子どもの人数を知りたいので、残りの額から子 どもの料金で割った。 <実行結果> 〜その1〜 pan{c111003}% ./def_budget.rb [~/Ruby] 予算は30000円です。 入園料を表示します。 大人は何人ですか?: 3 子どもは54人になります。 〜その2〜 pan{c111003}% ./def_budget.rb [~/Ruby] 予算は30000円です。 入園料を表示します。 大人は何人ですか?: 0 子どもは60人になります。 〜その3〜 pan{c111003}% ./def_budget.rb [~/Ruby] 予算は30000円です。 入園料を表示します。 大人は何人ですか?: 25 子どもは28人になります。 <考察> それぞれbc -lで確かめ算を行い、計算があっているか調べた。 ◯基本料金の場合◯ 〜その1〜 pan{c111003}% bc -l [~/Ruby] 30000-1000*3 27000 27000/500 54.00000000000000000000 計算があっていたので正しいといえる。 〜その2〜 pan{c111003}% bc -l [~/Ruby] 30000-1000*0 30000 30000/500 60.00000000000000000000 計算があっていたので正しいといえる。 ◯団体料金の場合◯ 〜その3〜 pan{c111003}% bc -l [~/Ruby] 30000-800*25 10000 10000/350 28.57142857142857142857 計算があっていた。金額が設定されているため、割り切れない場合に小数点切捨 てで人数が表示されていることがわかった。なので、プログラム結果は正しいと いえる。 また、数式を2つにしないと人数が金額に足されていることが分かった。 <参考文献> 最後に記載 3.感想 公式にあてはめて計算することは、義務教育で学んだ算数や数学と同じしくみだ と思った。簿記は習ったことがないので分からないが、表計算は、一つのマスに 式を打つと、次のマスから倍になって表示されるので、グラフの表示と同じ仕組 みではないかと感じた。 4.参考文献 基礎プログラミングII 第4回 「繰り返しは引っ張りだそう」 西村 まどか ・どんな関数がきてもだいじょうぶ http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html ・分かりやすいプログラムへ http://roy/~madoka/2012/r2/04/r2_04_05_theme_05_print.html <共同学習者> 伊藤詩野 / 佐藤祐子 / 村上茉奈美