#pragma twice

KAB-studio > プログラミング > #pragma twice > 020 Version 2.9 縦横無尽!

#pragma twice 020 Version 2.9 縦横無尽!

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

 Version 2.9
縦横無尽!

えっと、これまでに見てきたのは……
繰り返す while と、ばあいわけする if だよ
じつは、このふたつがあれば十分。だから、憶えるの面倒だったらこのふ
たつだけでいいよ
とか言って、他の人が書いたプログラム読むときどうするのーなんて言う
んでしょ
ま、ね。でも結局は while と if の派生って感じだから、大丈夫だと思
うよ。まずは do-while を見てみようか

void CCalcDlg::OnBEqual() 
{
    do
    {
        TRACE( "do - while の中です。\n" );
    }while( 0 );
}

あ、 while が後ろに来てる。えっと、ビルドして実行っと

do - while の中です。

あ、1度だけ表示された
 while は最初にチェックしてたけど、 do - while は中カッコを実行し
たあとにチェックします。だから、かならず一度は中カッコの中が実行され
るってわけ
だから1度だけってことね
そ。ちなみにそれ以外は while と同じ。ゼロならやめて、それ以外なら
繰り返す、ってこと
使い道は?
とりあえず1度は実行させたいとき
まんまね
ま、これは while や if と見た目がかなり違うから、個人的には好き
じゃないけどね。じゃ、次、 for を見てみようか
ぱっぱ行くね
これはどんなプログラム?

void CCalcDlg::OnBEqual() 
{
    int iBox
        = 1;
    while( iBox < 6 )
    {
        TRACE( "%d ", iBox );
        ++iBox;
    }
}

えっとねー、まず iBox って変数作って、それに1入れて、で、while の
チェック、……
iBox が6より少ないなら iBox < 6 は1になる、1だと
中カッコの中を実行。中に入って、まず1を表示して、1増やして2にし
て、上に戻って while のチェック、まだ6より少ないからふたたび中カッ
コの中に……で、5を表示して、1増やして6、今度は iBox < 6 がゼロに
なるから、これで終了。ってことは、1から5まで表示ってことね
はい正解。お疲れさま
まーねー
で、プログラムを作るときにはこういう〈単純な繰り返し〉をよくするか
ら、 while じゃなく for っていうので繰り返せるようになってます
ふぉー?

void CCalcDlg::OnBEqual() 
{
    for( int iBox = 1; iBox < 6; ++iBox )
    {
        TRACE( "%d ", iBox );
    }
}

ビルドして実行。あ、結果同じ!
この for を使ったのと、さっきの while はまったく同じ意味だから。for
を分解すると……

    for( 
        int iBox = 1;   //while の前。
        iBox < 6;        //while の小カッコの中。
        ++iBox )        //一周して while に戻る直前。

while のときに長々と書いててたのが、1行に詰まったってことなのね
そういうこと。ただ繰り返しをするときには、for の方がいいかな
なんで?
変数の関係かな。 iBox は繰り返しの計算に使ってるわけでしょ。それが
while だと、変数を作るのも、1増やすのも別々だから
for なら1行にまとまってるものね
そういうこと。じゃ、最後に switch について
すいっち、ね

void CCalcDlg::OnBEqual() 
{
    int iBox = 1;
    
    switch( iBox )
    {
    case 0:
        TRACE( "ゼロです。\n" );
        break;
    case 1:
        TRACE( "1です。\n" );
        break;
    default:
        TRACE( "それ以外です。\n" );
        break;
    }
}

ビルドして実行

1です。

あ、これは if に似てるの?
そう。 switch は、小カッコの中の数字を調べて、中カッコの中の case 
の数字に同じのがあるかどうか調べて、あったらそこに飛んで実行。なかっ
たら default に飛びます
case が else if 、 default が else と同じってことね
だいたいそうなんだけど、まったくおなじってわけでもないんだよね

void CCalcDlg::OnBEqual() 
{
    int iBox = 0;
    
    switch( iBox )
    {
    case iBox:  //エラー!
        TRACE( "おなじです。\n" );
        break;
    default:
        TRACE( "ちがいます。\n" );
        break;
    }
}

あれ? ビルドしたらエラー出たよ?
if と違って、 switch は〈数字〉としか比べられないんだわ。変数とは
比較できないってわけ
へ〜
それに、 if のときは < とか != とか使っていろんな比較ができたで
しょ。でも switch はそれもできないんだわ
自由度低いってことね。あ、そういえばさ、 break ってなに?
そうそう、break も必要なんだよね。これ試してみて

void CCalcDlg::OnBEqual() 
{
    int iBox = 1;
    
    switch( iBox )
    {
    case 0:
        TRACE( "ゼロです。\n" );
    case 1:
        TRACE( "1です。\n" );
    default:
        TRACE( "それ以外です。\n" );
    }
}

ビルドして実行っと
1です。
それ以外です。
あれれ? if だったら〈それ以外です〉はないよね
そう。 switch はその辺を自動的にはしてくれないんだよね。だから、
case 1 を実行したあと、その他のをよけたりはしてくれません。そこで、 
break っていうのを使います
ぶれーく、ね
これは while、 do-while 、 for 、 switch の中カッコからひとつ外へ
抜け出てくれます。だから、こんな使い方もできたり

void CCalcDlg::OnBEqual() 
{
    int iBox
        = 0;

    while( 1 )
    {
        ++iBox;
        TRACE( "%d\n", iBox );
        if( iBox == 5 )
        {
            break;
        }
    }
}

あれ? while ってゼロ以外だとループするんでしょ? これじゃ終わん
ないじゃん
そ。こういうのを〈無限ループ〉っていいます。で、このループから抜け
るのに break を使ってるわけ
?? えっと、なんどもループさせて、 i が5になったら if の次の行
が実行されて、で、 break で…… if の外へ?
ううん、 break は if には効かないから、このときは while の外に出る
ことになるわけ
あ、だから繰り返しがちゃんと止まるんだ。……でもこれって do-while
と一緒じゃない?
ま、そうだけどね。ま、見やすさの違いかな
 do-while が嫌いだから、こっちを使うってこと
ま、そんなとこかな。で!
で?
これまで出てきた〈繰り返しや分岐〉をするものの中で、使うのは if 、 
for、 while のみっつで十分だから
 if で分岐、for と while で繰り返しってことね
そういうこと

/*
    Preview Next Story!
*/
下積みっていつまで〜?
あと2回くらいかな
え? 結構すぐだね
そこまで行けば、色々できるようになるから
というわけで次回
< Version 2.10 関数を作ろう! >
につづく!!
色々ってどんな?(ワクワク)
……いやっ、実は何もできないんだよ、ホント……
水希ちゃん、あたしの目を見て言ってみな〜?
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。