第一章:基礎知識
5.制御文
プログラムでは同じ処理を何度か実行したいという場合があります。C言語には繰り返し文という物がいくつかあります。そのうちのfor文を説明します。
int x=0; for(int i=1;i<10;i++) { x=x+i; } Caption = x;
このサンプルは1~9を足した物をxに代入しています。
まず文法の説明をします。
for()この括弧の中は 初期値 比較式 制御用の式 が入ります。
for( 初期値 ; 比較式 ; 制御用の式 )
それぞれは;セミコロンで区切ります。
比較式で利用する初期値をまず設定します。初期値は0以外でも数字なら何でもかまいません。そして比較式を書きます。この比較式の条件が成立している間ループすることになります。そして、条件を抜けるために初期値の変数の値を上下させる制御式を書きます。
比較式が成立している間{ }の中(コードブロック)の処理が繰り返されることになります。
このほかにも式を短く書く方法があります。
+= -= *= /=
それぞれ代入先の変数の値に対して代入元の変数の値と計算した上で、値を代入します。
x=5;
x+=10;
xは15になります。
次のサンプルはフォームをクリックして、オブジェクトインスペクタのイベントタブを開き、OnPaintと書かれた部分の右の空白をダブルクリックして作成された関数の中に書き込んでください。
void __fastcall TForm1::FormPaint(TObject *Sender) { int x[9][9]; for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { x[i][j]=(i+1)*(j+1); Canvas->TextOut(i*16,j*16,x[i][j]); } } }
このように入れ子にする事も可能です。このサンプルは掛け算の九九の表を作成したことになります。次ような表示になります。
後ほどコンポーネント編で説明しますが、Canvasというフォームのメンバーで、文字や画像を描き込む為の機能があり、それを利用しています。
ここで注意することはforの中の、変数の初期化で変数を宣言している事で、このサンプルのjはjが宣言されたforのコードブロック内でしか利用することが出来ません。iはjが宣言されたforの中でも利用できます。このiやjの事をローカル変数と呼びます。コードブロック内で宣言したローカル変数は宣言したコードブロックの外側からは呼び出せません。すべての関数の外側に宣言した変数のことをグローバル変数といい、この変数はすべての関数から呼び出すことが可能です。
ちなみにswitch文で利用した break;命令を利用することで、forのコードブロックを1段処理を中断して抜けることが出来ます。
for(i=0 ; i<10;i++){
if( i==5 )break;
}
iが5になったらforのコードブロックを抜けます。if文に{ }がありませんが、これはifやforの後に続く命令が1命令だけであれば{ }を省略できるという仕様があるので問題はありません。
次に同じく繰り返し処理のwhile文を紹介します。次のように書きます。
int x=0; while(x<10) { x++; }
while文はまず括弧に書かれた比較式を見て条件が成立している間(1の間)のみ、コードブロックの処理を継続します。forと違うところは、初期化はwhileよりも前に書かなければいけないことと、比較式の数値を変更するのはコードブロック内で行うことです。
whileの特徴は最初に比較式を確認しているということです。
int x=10; while(x<10) { Caption="この比較式で、ここは実行されません"; x++; }
このwhile文はxが10で比較式は10<10でfalseなので条件が成立していないのでコードブロック内の処理は一切行われません。
while文は最初に比較式を調べて条件が成立していなければ一度も実行されませんでした。次に紹介するdo ~ whileはコードブロック内の処理が最低1回は必ず行われる繰り返し処理になります。
int x=10; do{ x++; Caption=x; }while(x<10);
まずxが10で初期化されています。そしてdo whileのコードブロックが実行され1が加算され、タイトルバーに現在の値を表示します。その後、x<10で比較して成立していないので終了します。