#pragma twice

KAB-studio > プログラミング > #pragma twice > 015 Version 2.4 計算をしてみよう!!

#pragma twice 015 Version 2.4 計算をしてみよう!!

前のページへ 表紙・目次へ 次のページへ

 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 楽をしてみよう! >
につづく!!
でも<アプリ>って感じにはほど遠い感じ
一足飛びに教えていじけたのは誰だっけ?
う”〜
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。