講評: 変数は、文字列や数値をいれてしまうものです。 method のときに、引数として、変数を使います。次のような method では mymethod(foo,var) とあるとき、変数 foo, var が引数の method となります。 昨年度よりも、というときは、それぞれ people * 1.15 people * 0.8 と書けばよいのではないでしょうか。 ---- 学籍番号:C106XXXX 氏名:XXXXXXXX 語学クラス:XXXX語XX 系: 経営系 1. A. その 1 「顔面から転んだ人 とかけまして、すべった芸人さん と解く」 「その心は?」 「どちらも見ていて痛々しい。」 その 2 「 先生の汚い黒板の字 とかけまして、不思議の国のアリスに出てくるチェシャ 猫 と解く」 「その心は?」 「どちらも読めません。」 B. その1 ルビ夫君は畑にかぼちゃの種をまくことにしました。かぼちゃは0.5(m)間隔で 蒔くことにします。さて、縦に何m、横に何m のかぼちゃ畑ができるでしょ うか。 ★解答例★ 縦に 5個、横に 8個植えました。 縦は 5 * 0.5 = 2.5(m) 横は 8 * 0.5 = 4.0(m) のかぼちゃ畑ができました。 ★確かめ★ irsv{c106186}% bc -l [~/Ruby] 5 * 0.5 2.5 8 * 0.5 4.0 その2 ルビ夫君は近所の犬にお使いを頼みました。その近所の犬は、ルビ夫君から頼 まれたお使いの金額によって、報酬金を変えて要求してきます。報酬金は、お 使いの金額の20%です。さて、ルビ夫君は近所の犬にいくら取られたでしょうか。 ★解答例★ ルビ夫君:「今日発売のCDアルバム買ってきて!!はい、3000円。」 近所の犬:「じゃぁ、あとでその2割頂くぜぇ!!」 3000 * 0.2 = 700 −−−−−次の日… ルビ夫君:「今日は駄菓子を700円分買ってきて!!はい、700円。」 近所の犬:「じゃぁ、あとでその2割頂くぜぇ!!」 700 * 0.2 = 140 ★確かめ★ irsv{c106186}% bc -l [~/Ruby] 3000 * 0.2 600.0 700 * 0.2 140.0 2. A.変数が 2 つ以上定義されている def -- end を用いた数値の計算を導く a. かぼちゃ畑の大きさを求めるプログラムにしました。縦と横の2つの変数を使い ました。最後に print 文で表示させました。 twoparam.rb b. #!/usr/koeki/bin/ruby def f(x) 0.5 * x end print("ルビ夫君は畑にかぼちゃの種をまくことにしました。\n") print("かぼちゃは 0.5m 間隔でまくことにします。\n") print("縦に何m、横に何m のかぼちゃ畑ができるでしょうか。\n") STDERR.print("\n始めに、縦に何個植えたかを入力してください\n") tate = gets.chomp.to_i p f(tate) STDERR.print("\n次に、横に何個植えたかを入力してください\n") yoko = gets.chomp.to_i p f(yoko) printf("\n縦に%5.1f(m)、横に%5.1f(m)のかぼちゃ畑ができましたね。\n",f(tate),f(yoko)) c. もとにしたプログラムは「func.rb」です。 変更点は、変数と数値を小数にしたところです。 d. irsv{c106186}% ./twoparam.rb [~/Ruby] ルビ夫君は畑にかぼちゃの種をまくことにしました。 かぼちゃは 0.5m 間隔でまくことにします。 縦に何m、横に何m のかぼちゃ畑ができるでしょうか。 始めに、縦に何個植えたかを入力してください 15 7.5 次に、横に何個植えたかを入力してください 7 3.5 縦に 7.5(m)、横に 3.5(m)のかぼちゃ畑ができましたね。 e. irsv{c106186}% bc -l [~/Ruby] 15 * 0.5 7.5 7 * 0.5 3.5 bc -l で確かめた結果、計算はあっていました。 f. 西村先生のHP 「操作をまとめる」 http://roy/~madoka/2007/r2/05/05-04-func_method.html 「入力を促す部分と出力させる部分」 http://roy/~madoka/2007/r2/05/05-05-stderr.html B.変数が 1 つ以上定義されている def -- end を 用いたプログラム a. ある町の人口変化予想を求めるプログラムにしました。高齢者は1年で20%増え、 非高齢者は1年で15%減る計算です。非高齢者がいなくなった時点で止まる設定 です。 b. #!/usr/koeki/bin/ruby def kourei(hito,nengo) hito + 0.2 * hito * nengo end def hikourei(leave, nengo) people = leave - 0.15 * leave * nengo if people < 0 return 0 else people end end STDERR.print("*****現在の◯◯町の、高齢者と非高齢者の人口***** \n") nin = 4000 i = 0 kazu = 17000 printf("高齢者人口: %d [人]\n", kourei(nin,i)) printf("非高齢者人口: %d [人]\n\n", hikourei(kazu,i)) while hikourei(kazu,i) > 10 sleep 3 printf("−−%d年後−−\n",i += 1) printf("高齢者人口: %d [人]\n", kourei(nin,i)) printf("非高齢者人口: %d [人]\n\n", hikourei(kazu,i)) end printf("非高齢者は町からいなくなってしまいました。\n") c. もとにしたプログラムは「firefly.rb」です。 変更点は計算式の数値と変数です。sleep を使って、データが1年ごと間を空け て出るようにしました。 d. irsv{c106186}% ./mymethod.rb [~/Ruby] *****現在の◯◯町の、高齢者と非高齢者の人口***** 高齢者人口: 4000 [人] 非高齢者人口: 17000 [人] −−1年後−− 高齢者人口: 4800 [人] 非高齢者人口: 14450 [人] −−2年後−− 高齢者人口: 5600 [人] 非高齢者人口: 11900 [人] −−3年後−− 高齢者人口: 6400 [人] 非高齢者人口: 9350 [人] −−4年後−− 高齢者人口: 7200 [人] 非高齢者人口: 6800 [人] −−5年後−− 高齢者人口: 8000 [人] 非高齢者人口: 4250 [人] −−6年後−− 高齢者人口: 8800 [人] 非高齢者人口: 1700 [人] −−7年後−− 高齢者人口: 9600 [人] 非高齢者人口: 0 [人] 非高齢者は町からいなくなってしまいました。 e. irsv{c106186}% bc -l [~/Ruby] 4000 * 0.2 800.0 17000 * 0.15 2550.00 年々、高齢者は800人ずつ増えている。非高齢者は2550人ずつ減っている。よっ て、計算はあっていました。 本当は、増やす数や減る数を前年の人数の15%や20%にしようと思ったのですが、 肝心の数式が作れませんでした。例えば、1年後の高齢者の人口は4800人。4800 人の20%は960人です。このように人数を増やしていきたかったのですが、わかり ませんでした。 f. 西村先生のHP「ほたるの数と米の収穫量」 http://roy/~madoka/2007/r2/05/05-08-firefly.html 3. 今回は変数の意味があまりよくわからないまま、課題に取り組んでいました。だ から、課題の内容が合っているか不安です。 def -- end を使えば、計算式を変えたいときその中を変えるだけでいいという ことで、今後も使えるときには使っていきたいと思います。