来週、学生にJavaScriptで引数や戻り値を持つ関数を教えます。BMI値計算や、消費税計算でもいいのですが、どうせでしたら「面白い」関数にしたいと思います。それほど複雑な式ではなく、(事前に予測が難しいという意味で)面白い結果が出てくるような関数を教えていただけないでしょうか?
たとえば、あるサッカーのスコアが m対n (m>=n) であったとき、試合中に一度も、勝ったチームが、負けたチームと同点になったシーンがない、いわば「ワンサイドゲーム」であった確率は (m-n)/(m+n) というのは、なかなか面白いと思います。
なお、再帰関数はダメです。できれば関数内にfor文やwhile文、if文も含まないで下さい。よろしくお願いいたします。
関数といえばケータイの料金に決まってるじゃないですか!
http://www.au.kddi.com/mobile/charge/smartphone/lte-plan/
http://www.au.kddi.com/mobile/charge/basic-charge/lte-v/
たとえば、auのLTEプランは、通話料が従量制になっています。
話を単純にするために、通話以外の基本使用料とパケット通信料を定額とすると、
通話料だけが変数の1次関数になります。
これなら単純といえませんか??
基本使用料を「誰でも割」適用の934円、
パケット通信料をLTEフラット(V)適用の5700円、
ネット接続サービスLTE NETが300円で、
それ以外のお金はかからないとします。
合計の料金をy(円)、通話時間をx(分)とすると、
y=934+5700+300+40*x
って感じになります(実際の料金と違ったらごめんなさい…)。
http://www.au.kddi.com/mobile/charge/smartphone/
auには
通話し放題のプランもあるので、どれぐらい通話する人はどちかがトクになるか、
関数の比較でわかりますね!
あとは誕生日の関係の問題だとどうですか?
http://ja.wikipedia.org/wiki/%E8%AA%95%E7%94%9F%E6%97%A5%E3%81%AE%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9
誕生日のパラドックスが絶対いいと思うんですが、それがもし難しすぎるなら
n人の集団の中に自分と同じ誕生日の人がいる確率、はどうでしょうか。
確率をp、人数をnとするとき、n人の集団の中に自分と同じ誕生日の人がいる確率は
p=1-(364/365)^n
となります。累乗はNGですかね…。
http://keisan.casio.jp/exec/system/1161228814
でもこのサイトだとオンラインでその計算をしてくれます。
自分で組み立てられなくても、味わって楽しむこともできるのではないでしょうか。
http://ja.wikipedia.org/wiki/%E7%B4%99%E3%81%AE%E5%AF%B8%E6%B3%95
Wikipediaには「紙の寸法」という記事があり、
ここにAnの長辺のサイズを求める式が出ています。
nに4を入れるとA4の長辺のサイズがわかります!
でも床関数とかNGなんですよね…。
http://www.tenki.jp/indexes/cough/
それと、風邪ひき指数というものがあり、
これを気温と湿度から算出できないかなと思ったのですが、
どうも指数のはじき出し方は見つけられませんでした。
気象関係の関数は楽しそうだと思ったのですが、なかなか難しいです。
http://homepage2.nifty.com/luminaries/guidance/kishou_018.htm
不快指数は式が見つかりましたが、季節外れですね…。
http://keisan.casio.jp/
話は戻りますが、こちらのサイトはどれも楽しくて応用が効きそうです。
http://keisan.casio.jp/exec/system/1373508428
このへんは特に身近で良さそう。
私はHTMLとか読めないんですが、内部JavaScriptで動いてたりしたら活用できますね。
まとまりのない回答ですが、いかがでしょうか。
2の3乗は8 → pow(2,3)
8の3乗根は2 → pow(8,(1/3))
log8÷log2は3 → log(8)/log(2)
面白くは無いですけど、
これが切っ掛けで、
数学を好きになる人がいるかも知れません。
http://webgaku.hateblo.jp/entry/20120620/1340125992
↑金利計算です。
秒速30メートルのボールを、
50度の角度で投げた時、
三秒後の高さは、
30*3*sin(50)-0.5*9.8*3
答えは24.844メートルです。
9.8は、重力加速度です。
3秒後の距離は、
30*cos(50)*3です。
JavaScriptは、角度の単位がラジアンなので、
度をラジアンにする時は、度/180*3.14=ラジアン
ラジアンを度にする時は、ラジアン/3.14*180=度
です。