20140218
前回、処理の流れは条件によって分岐できることを説明しました。構造化プログラミングにおける流れの制御には、さらに反復(ループ)という制御があります。

反復(ループ)

反復とは、処理の繰り返しです。与えられた条件が真の間、処理を繰り返します。例えば、次のような処理が反復処理です。

  • 合計金額が5000円になるまでカートに商品を追加する(5000円を超えたら処理を終える)
  • オレンジの数が50個以下の間は、りんごを1個オレンジを2個ずつ追加する

与えられた条件が成立しなくなる(偽)と反復処理が終了します。これを「ループを抜ける」といいます。

反復処理では、条件と処理が適切でなければ、正しい処理が行われません。

  • 最初から条件が成立しない → 反復処理が行われない
  • 反復処理が行われているが、いつまでも条件が成立したままである → 反復処理が終わらない(無限ループ

上記の例で、「オレンジの数が50個以下の間は、りんごを1個ずつ追加する」とするとオレンジの数はいつまでも変わらず、りんごが永遠に追加されてしまうことになります。

while 文

前置判定ループと呼ばれます。
while (条件式) {
処理;
}

条件式が真の間、処理が実行されます。処理の流れをフローチャートで示すと次のようになります。

前置判定ループ
図1:前置判定ループ

条件式が偽になると、while文の次のステートメント処理Cに移ります。
VB/VBAでは、次のように記述します。

Do While/Until 条件式
処理
Loop

Do-while 文

後置判定ループと呼ばれます。

Do {
処理;
} while (条件式)

前のwhile文とは、条件式の位置が異なることに注意してください。このDo-while文では、処理が行われた後に条件判定が行われます。フローチャートで処理の流れを確認します。

後置判定ループ
図2:後置判定ループ

つまり、条件式に関係なく、最低一度は処理が行われます。上記のカートの例で、前置判定と後置判定を比較してみます。初めからカート内に5000円以上の商品が1つあるとします。

  • 前置判定の場合:条件判定が偽→次のステートメント処理Cへ(カート内の商品は1個)
  • 後置判定の場合:処理を実行→条件判定が偽→次のステートメント処理Cへ(カート内の商品は2個)

このように違った結果が得られることに注意する必要があります。

for 文

while、Do-while文の他に、もう一つfor文という制御文があります。カウンタを使用して、反復回数を制御します。for文は次のような書式です。

for (式1; 式2; 式3) {
処理;
}

式1:初期値
式2:継続条件
式3:増減式

例えば、次のように記述します。

for (i = 1; i <= 10; i++) {
画面出力(“これは” + i + “回目のループです。”);
}

i = 1:カウンタ i を初期化します(カウンタが1から始まります)。
i <= 10:カウンタ i が10以下の間処理を繰り返すよう指定します。
i++:処理が行われるたびにカウンタ i に1を加算します。「i++」は「i + 1」と同じ。

画面には、次のように表示されます。

これは1回目のループです。
これは2回目のループです。

これは10回目のループです。

注:コードは便宜上のもので、実際に「画面出力」という関数はありません。

この処理はwhile文を使って次のように記述することもできます。

i = 1;
while (i <= 10) {
画面出力(“これは” + i + “回目のループです。”);
i++;
}

どちらを使用するかは好みもあるようですが、カウンタを使用する処理はfor文を使った方が読みやすいようです。

ここで、カウンタに「i」という変数を使用しています。前に「変数 x」のような名前の付け方はあまり良くないと説明しましたが、一般的にカウンタには変数「i」が使用されます。

まとめ

  • 反復(ループ)処理には、while、Do-while、for文がある
  • 無限ループにならないように注意
  • 前置判定と後置判定の違いに注意
  • カウンタの変数には「i」が使われる

「選択」では、条件に合わせて処理が分岐されるだけでしたが、「反復」ではループ中の変数の変化に注意する必要があります。繰り返し処理の流れをしっかり把握するようにしてください。

以上で、構造化プログラミングにおける3つの論理構造「順次」、「選択」、「反復」の説明を終わります。次回は「サブルーチン」について説明する予定です。

では、また。

訂正:オレンジのハイライト部。「1回目」→「2回目」に訂正しました。
   「ステートメント」を処理A~Cに変更して、対象を明確にしました。併せて図1、図2を変更しました。
   

論理構造その3 – 反復 基礎編第13回
タグ:     

論理構造その3 – 反復 基礎編第13回」への3件のフィードバック

  • 2014年9月18日 12:04 PM
    パーマリンク

    いつも大変ためになる講座をありがとうございます。翻訳者の目線で平易に説明してくださっているので、とてもわかりやすいです。一回でわからなくても、マイペースで何度も読み返せるのもありがたいところです。執筆は大変かと思いますが、がんばってください。今後も続編を楽しみにしています。

    返信
    • 2014年9月19日 12:39 AM
      パーマリンク

      コメントありがとうございます。
      お役に立てているようでなによりです。
      専門外の初心者向けということで、概要だけでも分かっていただけるようシンプルな説明を心懸けています。
      これからもよろしくお願いいたします。

      返信
  • ピンバック:TRA Café

コメントしてみる

%d人のブロガーが「いいね」をつけました。