プログラム基礎ガイド
1、ブラックボックス化された
コンピューターの中身をのぞく!!
大前提として
入力したプログラム以外のことはやってくれませんし、余計に入力すれば余計なこと
をします(あるいはエラー)。考えれば当然ですよね。コンピューターはいい意味でも
悪い意味でも言われた処理しか行いません。それを頭の片隅にでも置いておきまし
ょう。
数学関数を通して
ここで言う数学関数とは、C言語やExcelなどで使うsinやlogのことです。
C言語やExcelは使わないという人でも理解していただけるように書いていますので
安心して読み進めてください。
また、大学等でC言語やJavaなどを勉強している方はこのことを知っているとアルゴ
リズムを考えるのが楽になります。
数学関数を簡単にする考え方(2つ)
1、四則演算しか出来ない
2、計算が正確で速い
考え1を「嘘だ!!」と口にする人もいるかと思います。しかし、真実は「コンピュータ
ーは数学関数に関して+−×÷のみで計算している!!」ということです。ので、「1
は真実」であり「それ以外出来ない!!」が正しいのです。ではどうやってsinやlogな
どの難しい関数を計算しているのでしょう。例を挙げてみていきましょう。
例1 三角関数( sin cos tan )
sinはテイラー展開(大学で習う数学の定理)を用いることによって
sin(x)=x-(x^3)/3!+ (x^5)/5!-…..
というように(足し算)(引き算)(掛け算)(割り算)の組み合わせによってあらわされます。30度、45度、60度のよく知られた三角関数もこの方法で出しています。(xはラジアン(高校でやる)です。)また、3!=1*2*3です。3の階乗と読みます。
|
例2 対数関数( log )
logも例1同様テイラー展開によって
log(x)=(x-1)-{(x-1)^2}/2+{(x-1)^3}/3-….
.と表せます。
|
「コンピューターは数学関数に関して四則演算しか出来ない!!」と上で説明しまし
たが、けなしてばかりでは可哀想です。コンピューターのすごい特技は「計算が人間
には絶対かなわない速さと正確さ」です。それを生かしてこそ難しい関数を計算でき
るのです。上の例のテイラー展開は無限個の和なのですが、(近似を出すのには5
項目ぐらいで十分)5項計算するだけでも人間には時間がかかります。それを一瞬
で計算するのですから、コンピューターはすごいです。テイラー展開をすれば大体の
数学の関数はかけるでしょう。次にテイラー展開でない例も挙げておきたいのです
が、四則演算がすごい長くなるので省きます。
コンピューターの長所である「計算が速い」のいい例として「素数計算」があります。
(すごいベタな例)これは、入力した整数が素数か判断するC言語で一番初めに習う
ような例です。
このプログラムを「1、四則演算以外出来ない」「2、計算が速い」で計算させると考え
ると、出来るプログラムは「その数まで割っていって、ずっと割り切れない数は素数」
とすればいいのです。ここで、計算する回数は入力した整数の数(今後N)だけにな
ります。
しかし、割り切れる場合「N=(Nより多い数)*(Nより小さい数)」となるはずです。
よって、計算回数は半分ですむのです。(N/2まで計算すればいいということ)
このように計算をしていく過程においてコンピューターの負担を軽減するのは重要で
す。こういうことを考えていくのもプログラムの楽しみの一つです。
トップページへ
1、ブラックボックス化されたコンピューターの中身をのぞく!!
2、プログラム学習上達法伝授!!
3、初めてのプログラム
4、ポインタを身に着けよう
練習問題