Version 2.4
計算をしてみよう!!
『この前のは難しかったなー』
「だから大丈夫だって、前回のほとんどのことは忘れちゃっていいから」
『そうなの?』
「そ。だからいじけないで」
『う”〜』
「今回は<計算>をします」
『そりゃそうよね、計算機作るって話だったんだから』
「そゆこと。えっとまず、これ見てみて」
void CCalcDlg::OnBEqual()
{
int iBox;
iBox = 100;
TRACE( "%d\n", iBox );
}
『あ、これこの前のだ』
「この TRACE() っていうのを使って、変数の中身を表示するから」
『うん、これならなんとか分かるかなー』
「じゃ、まずは<代入>から」
『う”、なんか難しい単語』
「って言っても、<変数の中に数字を入れること>をそう言うだけなんだけ
どね」
『あれ? それって=のことじゃないの?』
「そうそう、だからこの<代入>は、こんなふうにすればOK」
void CCalcDlg::OnBEqual()
{
int iBox;
iBox = 100;
TRACE( "%d\n", iBox );
iBox = 200;
TRACE( "%d\n", iBox );
}
『実行してみると……』
100
200
『ってなったよ』
「どうしてそうなったのか分かる?」
『えっとねぇ……、まず1行目で<数字を入れる箱> iBox を作って、2行
目でその中に100を入れて、3行目で iBox の中身を、アウトプットって
ところに表示して、4行目でまた iBox の中にこんどは200を入れて、ま
た表示した、ってとこ?』
「おっけ! だいたい感じつかめた?」
『なんとなくだけど。ねぇ、最初に入れた100って、どこ行っちゃった
の?』
「そうだね、4行目の時には、 iBox の中にはもう100が入ってるんだけ
ど、その100を捨てたりする必要はないんだわ。上書き、って感じかな」
『じゃ、箱とちょっとイメージ違うね』
「それはたぶん、=のイメージが違うんだと思うよ。=は<新しい数字を入
れる>の。代わりに+=っていうのを使うと<今ある数字に加える>ことに
なるから」
『+=?』
「こんな感じにね」
void CCalcDlg::OnBEqual()
{
int iBox;
iBox = 100;
TRACE( "%d\n", iBox );
iBox += 200; //ここ。
TRACE( "%d\n", iBox );
}
『4行目のとこ、+= になってるね』
「これで実行してみると、次のような感じになります」
100
300
『あ、300になった! へー、つまり100+200ってことなんだ』
「逆の−=ってのもあるよ」
void CCalcDlg::OnBEqual()
{
int iBox;
iBox = 100;
TRACE( "%d\n", iBox );
iBox -= 200;
TRACE( "%d\n", iBox );
}
「どうなると思う?」
『そりゃ、100と−100でしょ』
100
-100
「そゆこと。ここまではどう?」
『バッチリって感じ! って、こんなの小学生だってできるじゃない』
「そりゃそうだ、僕は小学生の時にマスターしてたし」
『うわむっか! へーそりゃよーござんしたねー』
「つ、次はちょっと難しくなるから。今度は普通の+を使ってみます」
『そういう普通のもあるんだ』
void CCalcDlg::OnBEqual()
{
int iBox;
iBox = 100;
TRACE( "%d\n", iBox );
iBox + 200; //ここ。
TRACE( "%d\n", iBox );
}
『あ、4行目が+になった』
「さてこれはどうなるでしょー」
『そりゃ300……って、それじゃ+=と同じよね。試してみよっと』
100
100
『変わってない!』
「というわけで、+と+=は違うんだよね。この行をゆっくり見てみよう
か。まず……」
iBox + 200;
『これはそのままよね』
「iBox には今100が入ってるから、こういう意味になるよね」
100 + 200;
『うんうん』
「+は足し算をしてくれるから……」
300;
「はい、これで終わり。どう?」
『……よーするにただ足しただけで、iBox の中に入れてないってこと?』
「そういうこと。だから、+=と同じことをするなら、こんなふうにしない
とダメなんだよね」
void CCalcDlg::OnBEqual()
{
int iBox;
iBox = 100;
TRACE( "%d\n", iBox );
iBox = iBox + 200;
TRACE( "%d\n", iBox );
}
『うわー、なんか頭こんがらがりそう!』
「そう? だって」
iBox = iBox + 200;
「の=の右っかわはさっきと同じなんだから」
『あ、てことは』
iBox = 300;
『と同じ、で、 iBox に300が入って、+=と同じになる、ってことなん
だ』
「分かってきた?」
『うん、よーするに分解して考えれば分かりやすい、ってことよね』
「うーん、どっちかってゆーと、そういう細かいパーツが組み合わさって、
プログラムができてるってことかな」
『じゃあどんなむつかしープログラムも、元はこんな簡単なのでできてるっ
てことなんだ』
「そうそう。だからあんまり難しく考えない方がいいかな」
『なーんだ、楽勝よね』
「でも難しい部分もあるんだなー」
『え”』
「僕の言ってたこと、なんか変だなってとこない?」
『うーん……』
「ヒントはこの行」
iBox = iBox + 200;
「この行見て、なんか変だと思わない?」
『さっきは、まず iBox + 200 をしちゃって、そういうふうに分解できるっ
て……あ! それ、なんで iBox = iBox を先にしないの?』
「そ! これが難しいことのひとつ。こういう記号を<演算子>っていうん
だけど、この演算子には<優先順位>っていうのがあって、あらかじめ決め
られた順番で実行されるんだよ」
『??』
「つまり、+は=よりも<優先順位>が高いから、=より先に+が実行され
るってこと」
『なーんか、まだよく分かんない』
「そうだねぇ、普通の計算でさ、100+200x10=ってあったら、答
は?」
『そりゃ2100に……あ』
「普通の計算でもかけ算は先にする、ってあるでしょ。そういうのが<優先
順位>。それに今火美ちゃんが言ったことをこの式に当てはめると……」
『……10が答えになっちゃうね』
「この順序は、実際の式とおんなじように小カッコを使うと変えられるから」
void CCalcDlg::OnBEqual()
{
int iBox;
iBox = 100;
TRACE( "%d\n", iBox );
( iBox = iBox ) + 200;
TRACE( "%d\n", iBox );
}
「これは?」
『これがさっきあたしの言ったのよね……小カッコの中が先に実行されるん
だよね』
「だから、iBox の中は100のままってことだね」
『でも、なんか iBox をまた iBox に入れるのって変』
「これも分解して考えると分かりやすいよ?」
『あ……つまり、右側のを先に100にしといて、それを左のに入れる、っ
てこと?』
「そういうこと。=は<右のを左に入れる>だから、左側を100に置き換
える、ってことはないからね。あと、+以外の演算子も見ておこうか」
void CCalcDlg::OnBEqual()
{
int iBox;
iBox = 100 / 10 + 20 * 10;
TRACE( "%d\n", iBox );
}
『質問しつもーん!!』
「*はxで、/は÷だから」
『なんでなんでぇ!?』
「これは昔からの習慣なんだよね、昔はディスプレイの解像度が低かったか
ら、ちゃんとした<かける>を書くと<エックス>見分けがつかなかったん
だよね」
『低いってどんくらい?』
「えっとね……15年前くらいで、320x200だって」
『うわ……』
「もっと昔はもっとすごかったみたいだし……。で、答は?」
『あ、えっと、かけざんわりざんを先にするから、じゅーたす……にひゃく
で210、かな』
「そ。これがさ、優先順位違ってたら困るでしょ」
『そりゃそうねー。こういうのって、計算機よりも便利そう』
「ってゆーか、最初のコンピューターは計算をするためのものだったからね」
『計算って、どんな?』
「たとえばさ、ある町から大砲撃って、ひとつ山越えた隣の町に当てるには
どんな角度でどんな威力で撃てばいいのか、みたいなことを計算してたわけ」
『それって……』
「そ、戦争ってことだね。相手より早く計算できれば先制攻撃できるってわ
けだね」
『だからコンピューターで計算……ねぇ』
「プログラミングにはそういう古いじめじめした所もある、ってところかな」
/*
Preview Next Story!
*/
『今日は簡単だったね』
「これだけでもそれなりに使えるでしょ」
『とりあえず計算機代わりにはなりそ』
「でもこんくらいなら Excel使った方が……」
『というわけで次回』
< Version 2.5 楽をしてみよう! >
「につづく!!」
『でも<アプリ>って感じにはほど遠い感じ』
「一足飛びに教えていじけたのは誰だっけ?」
『う”〜』