2010年1月22日金曜日

sinとcosを表にしてみました。(数学学習のため。。)

sinとcosの関係を理解したくて、ちょっとコードを書いてみました。
高校時代、意味不明でしたが、コードを書いているとわかってきました。

僕が関わる子供たちと、sin,cosの話をして、「どうやったら、わかるようになるかなあ。。」と考えていたので、こういうのはいいかな、と。
echo "<table border='1' cellspacing='0'>";
echo "<thead bgcolor='orange'><tr><th>角度</th><td>cos</td><td>sin</td></tr></thead>";
for($i=0;$i<361;$i=$i+30){
    echo "<tr><th align='right'>{$i}</th><td>".round(cos(deg2rad($i)),3)."</td><td>".round(sin(deg2rad($i)),3)."</td></tr>";
}
echo "</table>";

で、表示結果はこんな感じです。(round関数で、小数点以下3桁まで表示)




数学を簡単なプログラミングを通して学ぶと、一番効果的なんじゃないかと思うこのごろです。。

そのために一番子供たちに簡単に触れられるプログラミング言語はなんでしょうね。。。PHPは手軽ですが、ローカルに環境を作るのが難しいですし。。
探してみませんと。。

ラジアン値のこと、やっと理解。。

ラジアン値ってなんだろう?と思い、
角度からラジアン値を算出する関数deg2rad()を使って調べて、やっと理解しました。

echo deg2rad(45)."<br />";
echo deg2rad(180)."<br />";
echo deg2rad(270)."<br />";
の値はそれぞれ、
0.785398163397
3.14159265359
4.71238898038
です。

要するに「180度」が円周率の値なんですね。
半径の長さに等しい弧に対する中心角の大きさを一ラジアン
という文を見つけましたが、そういうことなんですね。
なるほど。。

昔ならったような気もしますが、完全に失念していました。

でも、これを使えばプログラムを使って円周上に点を置いていくような座標の計算がとても楽になる、とわかって、俄然理解への意欲がわきました。

必要こそ、理解の母ですね。

M_PI(円周率の定数)、便利。

PHPで(他の言語でものようですが)、円周率がM_PIという定数で定義されていて、便利でした。

echo M_PI."<br />";
echo (M_PI/8)."<br />";
echo M_PI_4."<br />";
echo M_PI_2;
の結果は、
3.14159265359
0.392699081699
0.785398163397
1.57079632679
みたいな感じで。

ありがたや。。

2010年1月20日水曜日

正規表現でかっこ()に囲まれた部分を全部削除したかった(解決)

正規表現で、ある文章からかっこ()に囲まれた部分を全部なくしたい、と思い、色々試してやっと実現できたので、メモです。
とにかく何でもいい文字の連続を表現するには、「.*」(ピリオドアスタリスク)でいけるんですね。
preg_replace("/(\(|().*(\)|))/","変えたよ",$str)
要するに、かっこの半角と全角の両方を|で認識させるようにして、半角かっこはもちろんバックスラッシュでエスケープして、それを半角かっこでくくってグループ化し、そのあとに閉じかっこも開きかっこと同様にグループ化して指定して、その間に.*を入れてカッコ内にどんな文字があってもOKになった、と。


やや時間がかかりました。。解決して嬉しいです(笑)
参考になったページはここ。とてもよく分かりましたm(_ _)m「サルにもわかる正規表現入門」。
http://www.mnet.ne.jp/~nakama/

::::::::::::::::::::::::::::::::::::::::::

■追記:この方法に弱点を発見しました。。
いくつもの()に囲まれた部分が、同一文内にあると、一番最初の開きかっこから、一番最後の閉じかっこまでがくくられて、ひとつと認識されてしまい、途中の文章が全部ずっぱり消えてしまいます。。
.*は可能な限り最後までつなげられる、という法則があるからですね。。

さて、困りました。どうしようかな。。

■追記2:一応解決です。応急策。
preg_replace("/(\(|().{5,30}(\)|))/","OK",$str);
みたいに、間にある文字数をだいたい指定してやれば、まあまあいけそうです。ちょっとアナログちっく。

■追記3:指定した文字数がマルチバイトの文字数じゃないので、どうしよう、とおもったら、pregはuというutf-8オプションがあったので、uを追加してやると日本語を一文字として認識してくれたようです。ありがたや。。
preg_replace("/(\(|().{5,10}(\)|))/u","OK",$str);

2010年1月18日月曜日

pos()という関数名はすでにあった。。

自前の関数をつくってpos()と名付けたら、既に予約されてました。
こういうシンプルなのは避けないとだめですね。

遥かなる脱初心者の道。。

関数の引数にあてる変数名は同じの方がいい様子。

自前の関数を作ったらエラーが出るので悩みました。
 syntax error, unexpected '$'

function pretrim($pretrim,$keyword){
中略
}
みたいなのをつくって、

pretrim($answer,$word)として使おうとしていたのが駄目だったようです。

function pretrim($answer,$word){}として引数を同じ変数名にしてやるとOKでした。
よかった。

2010年1月16日土曜日

printf()とsprintf()の違いがわかりました。。

printf()とsprintf()の違いがよくわかりませんでした。が、やっとわかりました。

printf()は出力して、sprintf()は値を返す(変数に代入できる)、ということなんですね。
printf()の中に引数を入れて変数に代入してみたり、
sprintf()でecho()のように出力させようとしてみたりして、うまくいかず、
やっと意味が分かりました。。