人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【学習用に、面白くて単純な関数を募集】
来週、学生にJavaScriptで引数や戻り値を持つ関数を教えます。BMI値計算や、消費税計算でもいいのですが、どうせでしたら「面白い」関数にしたいと思います。それほど複雑な式ではなく、(事前に予測が難しいという意味で)面白い結果が出てくるような関数を教えていただけないでしょうか?

たとえば、あるサッカーのスコアが m対n (m>=n) であったとき、試合中に一度も、勝ったチームが、負けたチームと同点になったシーンがない、いわば「ワンサイドゲーム」であった確率は (m-n)/(m+n) というのは、なかなか面白いと思います。

なお、再帰関数はダメです。できれば関数内にfor文やwhile文、if文も含まないで下さい。よろしくお願いいたします。

●質問者: lionfan2
●カテゴリ:学習・教育
○ 状態 :終了
└ 回答数 : 9/9件

▽最新の回答へ

1 ● サディア・ラボン
●5ポイント

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=度
です。


lionfan2さんのコメント
サディア・ラボン様、すみません、この程度ではダメです。 powとかlogとか、初心者には小難しい割には、特に数式に面白い意味もないので。 まだしも pow で金利計算とか提案して下さい。

lionfan2さんのコメント
サディア・ラボン様、追加の数式、了解です。ありがとうございます。

2 ● a-kuma3
●15ポイント

普通、っちゃあ、普通かもしれませんが、ふたつほど。

1からある数字までの自然数の総和

¥sum_{k=1}^{n} _k = ¥frac{n(n+1)}{2}

想定内だとは思いますが、単純な式でもいける、for ループで計算するのも善し。
関数の中がどのような実装になっていても、呼ぶ側からは、中身を気にしないで呼べるのだ、という流れで。

春分の日、秋分の日の求め方

D = ¥left[ 20.8431+0.242194 (Y-1980) - ¥left[ ¥frac{Y-1980}{4} ¥right¥] ¥right¥]
http://www.h3.dion.ne.jp/~sakatsu/holiday_topic.htm#syunbun

3月20日か21日のどちらかを求めるだけなのに、大げさだねえ、と。
ガウス記号のところは、Math.ceilで求めます。


lionfan2さんのコメント
a-kuma3様、いつもありがとうございます。 「春分の日、秋分の日の求め方」は、やや面白いと思いました。

☆さんのコメント
閏年を求める式は簡単だけど妙に奥が深くて好きでした。

3 ● みやど
●20ポイント

指数関数が急速に大きくなることは、ネズミ講の被害者にとっては「事前に予測が難しい」と思います。

それから、指数関数の身近に使われている例として

2^0=1
2^1=2
2^(1+7/12)≒3
2^2=4
2^(2+4/12)≒5
2^(2+7/12)≒6

というのがあります。
どこで使われているでしょうか。


lionfan2さんのコメント
みやど様、いつも回答ありがとうございます。 金利100%のサラ金が、何年何か月で貸した金がn倍になるかの表ですかね? (たとえば2年4か月で5倍)

みやどさんのコメント
そういう解釈もできます。年利換算100%の毎月複利と解釈すればですが。 しかし、ちゃんと合法に使われています。知らないでそういう製品を使っているもしれません。逆数を取った方が確かめやすいかもしれません。自分で使ってなくても人が使っているのは見聞きしているはずです。

みやどさんのコメント
fn(x)=2^(-n/12) (0<x<a) のグラフをn=0, 1, 2, …について重ねて描いてみましょう。

みやどさんのコメント
これで分からなければ x=ak/7, 0<y<1, k=1, 2, 3, 4, 5, 6 も重ねて描いてみましょう。

みやどさんのコメント
==========解答編-========== これは音楽で言う音の高さと物理で言う音の高さとの関係です。 基準とする音をドとすると、 オクターブ上のドは周波数が2^1=2倍 その上のソは周波数が2^(1+7/12)≒3倍 その上のドは周波数が2^2=4倍 その上のミは周波数が2^(2+4/12)≒5倍 その上のソは周波数が2^(2+7/12)≒6倍 となります。正確にはここの左辺のようにする方式を平均律と言います。なお平均律にするとドミソの周波数が簡単な整数比からちょっとずれますから厳密には不協和音になります。通常、ピアノもギターも平均律なので厳密には不協和音です。まず気づきませんが。ドミソとドファラとシレソの周波数が簡単な整数比になるように調律するのを純正律と言いますが、これをやると調が変わると調律し直さなければならなくなります。 なおこの逆数をとったものがギターであればフレットの位置です。ですからその図を描かせたのです。 ==========解答編・終わり==========

lionfan2さんのコメント
みやど様 ありがとうございます。音楽にはうといもので、結局、これだけヒントいただきながら分かりませんでした・・・。お恥ずかしい。

4 ● たけじん
●15ポイント

いま、数式がみちびけていませんが、
生年月日関連 :日付を入れると曜日が返る。太陰暦、旧暦(江戸時代を継続)の日付。
時刻関連:江戸時刻を返す(不定時法による今何時だい)

太陽系突入速度と突入角度による、最終到達地点:太陽に飛び込む、どこかの軌道におさまる、無限遠に捨てられる。

二拓、三拓:関数軌道時のクロックの一秒未満部分が?0.5なら選択1、それ以外なら選択2を返す。スーパーランダム関数。返る選択数を変更できると面白いかも。

マンデルブロー関数値を返す:座標(xy)を入力すると、そのポイントの繰り返し回数を返す。
ポイントが微小にずれるだけで、返り値が大きく異なる部分がある。また、これを使って、マンデルブロー図形を書くこともできる。

などと考えてみました。時間があれば、関数化してみます。


lionfan2さんのコメント
takejin様、ありがとうございます。 ただ、これはたいへん申し訳ないのですが、難しすぎるか、学生の興味を真に惹くものではないと感じました。 ただでさえ関数は難しい単元ですので、内容的には面白くても、数式は小学校レベルのシンプルさが良いのです。 「たとえば年利r%で借りると借金が2倍になる年数の近似式は 72/r」などです。

5 ● ナカケン88
●15ポイント

「ツェラーの公式」とかいいんじゃないでしょうかね。

http://ja.wikipedia.org/wiki/%E3%83%84%E3%82%A7%E3%83%A9%E3%83%BC%E3%81%AE%E5%85%AC%E5%BC%8F

日付から曜日をとってくる関数で、「生まれた日は何曜日か」を調べたり、事件のあった日や記念日なんかの曜日を調べるのにも使えます。また、javascriptであれば、今後の講義でカレンダーを作ったりすればこの内容も活かせますし、講義でやらなくても「カレンダーのような応用例もある」と触れるだけでも面白いと思います。Math.floorを使わないといけないのが、ちょっとネックかもしれませんけども。


lionfan2さんのコメント
「ツェラーの公式」ですが、これは知っていましたが、とんでもなく複雑です!! その割にはできることが曜日計算だけですので、すみません、これは外させてください。

ナカケン88さんのコメント
キビシー(涙)

Lhankor_Mhyさんのコメント
「ツェラーの公式」が複雑なら、「その月の日数を求める関数」というのはどうでしょうか。 >|javascript| function lastDayOfThisMonth(month){ month = (month+9) % 12 + 1; return Math.min( 365, Math.round( ( month * 30.6 ) ) ) - Math.round( ( (month-1) * 30.6 ) ); } [1,2,3,4,5,6,7,8,9,10,11,12].map(function(v){return lastDayOfThisMonth(v)}) // 31,28,31,30,31,30,31,31,30,31,30,31 ||<

lionfan2さんのコメント
Lhankor_Mhy様、ありがとうございます。 ただ [1] すでに Math.min( 365, Math.round( ( month * 30.6 ) ) ) - Math.round( ( (month-1) * 30.6 ) ) が複雑 [2] まだ学生に配列を教えておりません というわけなのです。今回はとっても条件が厳しくて、本当に済みません。

Lhankor_Mhyさんのコメント
数式が複雑、は理解しましたが、配列は使ってないと思うんですが?

ナカケン88さんのコメント
別の案を書こうとしたら一回までしかかけなかった。。。 これで「数式が複雑」ならもう四則演算しかないきがするので、 宝くじの当たる確率or期待値を計算、というのはどうでしょう。 ドリームジャンボの季節ですし。 まぁここに書いてもだめかもしれませんが。。。

lionfan2さんのコメント
Lhankor_Mhy様、失礼いたしました。勘違いでした。 ナカケン88様、了解です。設定を変えて、何回か書き込めるようにします。

lionfan2さんのコメント
今回は条件がきついのはわかっております。 ただ例年、関数は「f(n)=2*n」程度でも、だいぶ難しいみたいなのです。 なので、本質でないところでは、できるだけシンプルな数式で、 でもさすがに「無意味な例題をやらされている」感のないものが欲しいのです。 自分の当初の考えは、引数1つなら消費税計算(税率固定)、引数2つなら税率可変の消費税計算か、BMIです。 ただBMIは、体型を気にする学生もおりますので、あまり好ましくないと思っております。

1-5件表示/9件
4.前の5件|次5件6.
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ