第4回 基礎プログラミング II レポート課題 氏名:xxxxxxxx 学籍番号:C108xxx 語学クラス:英語xx コース(系):社会 A. 本棚とかけて銃ととく。 その心はどちらもマガジンが入る。 政治家とかけてロボットととく。 その心はどちらも人の しじ(支持、指示)を求める。 乗馬とかけてコンピュータととく。 その心はどちらも ばぐ(馬具、バグ)が付き物。 サメが沢山いる海とかけて成績が悪い人の成績表ととく。 その心はどちらも ふか(フカ=サメ、不可)が多い。 歌手とかけて、アリバイのある人ととく。 その心はどちらも うたがうまい(歌がうまい、疑うまい)。 レースのカーテンとかけて人づきあいの苦手な人ととく。 その心はどちらも しゃこうせい(遮光性、社交性)がない。 B. ある家族が電車で、酒田駅から新庄駅まで行く。 運賃は、大人が950円、子供は半額(10円以下切り捨て)となり、470円だ。 電車賃は片道で合計いくらになるか。 ・大人1人子供1人の場合 950+470=1420円 ・大人2人子供3人の場合 950*2+470*3=3310円 確かめ算 pan{c108203}% bc -l [~] 950+470 1420 950*2+470*3 3310 なので計算は正しいと言える 鶴と亀が数匹ずついる。鶴の足は2本、亀の足は4本である。 足は全部で何本あるか調べたい。 ・亀7匹、鶴13羽の場合 7*4 + 13*2 = 54本 ・亀18匹、鶴11羽の場合 18*4 + 11*2 = 94本 これも確かめ算をする。 pan{c108203}% bc -l [~] 7*4+13*2 54 18*4+11*2 94 なので正しい。 2.A a.設定 大人と子どもで土門拳記念館にいく。 入館料は20人未満の場合は大人1人420円で、子どもは1人100円だ。 20人以上になると団体料金が適用され、大人1人360円、子どもは1人80円となる。 1グループあたりの入館料を求めるプログラムdef_twoparam.rb (土門拳記念館には学生料金もあるが、今回は割愛。) b.作成プログラム def_twoparam.rb #!/usr/koeki/bin/ruby def fee(otona,kodomo)#関数feeを作る。引数はotona(大人)とkodomo(子ども)とする number=otona+kodomo #大人と子どもの人数を足したものをnumberとおく。 if number<20 #numberが20未満のとき。通常料金*それぞれの人数 otona*420+kodomo*100 else #numberが20以上のとき、団体料金*人数 otona*360+kodomo*80 end # if文 終了 end #関数の定義を終了する。 print("入館料を表示します。大人、子どもそれぞれの人数をいれて下さい。\n") #説明文。 STDERR.printf("大人は何人ですか?:") adult = gets.to_i #入力されたものを数値としてadultに取り込む STDERR.printf("子どもは何人ですか?:") child = gets.to_i #入力されたものを数値としてchildに取り込む printf("入館料は合計で%d円になります\n",fee(adult,child)) #関数feeで計算した数値を表示する。 c.変更点 def_function.rbを元に作成。 ・変数を設定に合わせ変更した。 ・引数に使うものを2つにした。 ・また、関数を作るときにif文は使えないかと考え、ifを使ってみた。 d.実行結果 pan{c108203}% ./def_twoparam.rb [~/Ruby] 入館料を表示します。大人、子どもそれぞれの人数をいれて下さい。 大人は何人ですか?:1 子どもは何人ですか?:1 入館料は合計で520円になります pan{c108203}% ./def_twoparam.rb [~/Ruby] 入館料を表示します。大人、子どもそれぞれの人数をいれて下さい。 大人は何人ですか?:2 子どもは何人ですか?:4 入館料は合計で1240円になります pan{c108203}% ./def_twoparam.rb [~/Ruby] 入館料を表示します。大人、子どもそれぞれの人数をいれて下さい。 大人は何人ですか?:3 子どもは何人ですか?:35 入館料は合計で3880円になります e.考察 大人1人子ども1人のとき(通常料金) pan{c108203}% ./def_twoparam.rb [~/Ruby] 入館料を表示します。大人、子どもそれぞれの人数をいれて下さい。 大人は何人ですか?:1 子どもは何人ですか?:1 入館料は合計で520円になります bc -l で確かめ算。 pan{c108203}% bc -l [~/Ruby] 420+100 520 大人2人子ども6人のとき(通常料金) pan{c108203}% ./def_twoparam.rb [~/Ruby] 入館料を表示します。大人、子どもそれぞれの人数をいれて下さい。 大人は何人ですか?:2 子どもは何人ですか?:6 入館料は合計で1440円になります bc -l で確かめ算。 pan{c108203}% bc -l [~/Ruby] 420*2+100*6 1440 大人3人子ども45人のとき(団体料金) pan{c108203}% ./def_twoparam.rb [~/Ruby] 入館料を表示します。大人、子どもそれぞれの人数をいれて下さい。 大人は何人ですか?:3 子どもは何人ですか?:45 入館料は合計で4680円になります bc -l で確かめ算。 pan{c108203}% bc -l [~/Ruby] 360*3+80*45 4680 大人25人子ども10人のとき(団体料金) pan{c108203}% ./def_twoparam.rb [~/Ruby] 入館料を表示します。大人、子どもそれぞれの人数をいれて下さい。 大人は何人ですか?:25 子どもは何人ですか?:10 入館料は合計で9800円になります bc -l で確かめ算。 pan{c108203}% bc -l [~/Ruby] 360*25+80*10 9800 合計人数が20人未満の場合は通常料金、20人以上の場合は団体料金で計算された。 計算結果も合っているのでこのプログラムは正常に動いていると言える。 B. a.設定 上の設定で、大人の人数を3人として、子どもの人数を入れてもらい 入館料金を求めるプログラム def_oneparam.rb b.作成プログラム def_oneparam.rb #!/usr/koeki/bin/ruby def fee(kodomo)#関数feeを作る。引数はkodomo(子ども) とする if kodomo<17 #kodomoが17未満のとき。 #つまり、大人3人と合わせても20以上にならないとき 3*420+kodomo*100 #通常料金*人数 else #kodomoが17以上のとき、団体料金*人数 3*360+kodomo*80 end # if文 終了 end #関数の定義を終了する。 print("入館料を表示します。人数をいれて下さい。\n") #説明文。 print("大人は3人ですね。\n") #あらかじめ決まっていた人数を確認する。 STDERR.printf("子どもは何人ですか?:") child = gets.to_i #入力されたものを数値としてchildに取り込む printf("入館料は合計で%d円になります\n",fee(child)) #関数feeで計算した数値を表示する。 c.変更点 def_twoparam.rbをもとに作成。 ・引数をkodomoだけにした。 ・kodomoの人数で団体料金か否か決まるようにした。 ・入力されたものをしまう変数もchild 1つだけにした d.考察 pan{c108203}% ./def_oneparam_a.rb [~/Ruby] 入館料を表示します。人数をいれて下さい。 大人は3人ですね。 子どもは何人ですか?:4 入館料は合計で1660円になります pan{c108203}% ./def_oneparam_a.rb [~/Ruby] 入館料を表示します。人数をいれて下さい。 大人は3人ですね。 子どもは何人ですか?:16 入館料は合計で2860円になります pan{c108203}% ./def_oneparam_a.rb [~/Ruby] 入館料を表示します。人数をいれて下さい。 大人は3人ですね。 子どもは何人ですか?:30 入館料は合計で3480円になります e.考察 子ども10人のとき(通常料金) pan{c108203}% ./def_oneparam_a.rb [~/Ruby] 入館料を表示します。人数をいれて下さい。 大人は3人ですね。 子どもは何人ですか?:10 入館料は合計で2260円になります pan{c108203}% bc -l [~/Ruby] 420*3+100*10 2260 子ども16人のとき(通常料金) pan{c108203}% ./def_oneparam_a.rb [~/Ruby] 入館料を表示します。人数をいれて下さい。 大人は3人ですね。 子どもは何人ですか?:16 入館料は合計で2860円になります pan{c108203}% bc -l [~/Ruby] 420*3+100*16 2860 子ども20人のとき(団体料金) pan{c108203}% ./def_oneparam_a.rb [~/Ruby] 入館料を表示します。人数をいれて下さい。 大人は3人ですね。 子どもは何人ですか?:20 入館料は合計で2680円になります pan{c108203}% bc -l [~/Ruby] 360*3+80*20 2680 いずれも確かめ算で、団体料金、通常料金ともに区別して計算されていることが 分かった。このプログラムは正常に動いているといえる 3. 数学で習った一次関数は、y=3x+3のように表される。 このxに1,2,3を代入すると y=1*3+3=6 y=2*3+3=9 y=3*3+3=12のようになる。 これはメソッドと似ていると思う。 また、現在 情報リテラシーIIでまさに表計算を学んでいる。 マクロ設定は、defのように引数を設定し計算させる。 なので似た仕組みだと言える。 ################# 今回は、Cのグラフ問題にも挑戦しようとしたが、よく分からなくなったため 諦めてしまった。グラフを授業中に理解したつもりであったが、要復習だと感じた。 参考 土門拳記念館/総合インフォメーション http://www.domonken-kinenkan.jp/infomation.html 基礎プログラミング II 第4回 繰り返しは引っ張りだそう 「どんな関数がきてもだいじょうぶ」 http://roy/~madoka/2010/r2/04/04_03_theme_03_method.html 「これを代入した答はなあに」 http://roy/~madoka/2010/r2/04/04_04_theme_04_stderr.html 「分かりやすいプログラムへ」 http://roy/~madoka/2010/r2/04/04_05_theme_05_print.html 「method を使ったプログラムの作り方 http://roy/~madoka/2010/r2/04/04_08_theme_08_comment.html 作成者:西村まどか先生