コンピュータとコンピュータサイエンスの楽しさを伝えます。

【制御文】プログラムの流れを操る3つのパターン

【制御文】プログラムの流れを操る3つのパターン

プロセッサが担う情報加工作業は様々ですが、その作業の流れの基本パターンはたった3つ。次々に作業を行う「順次実行」、条件に応じて次の作業を決める「条件分岐」、終了条件が満たされるまで作業を繰り返す「反復」です。どんな情報加工作業でも、これら3つの組み合わせで表現できます。

【制御文】プログラムの流れを操る3つのパターン

制御文とは処理の流れを指示するために用いるプログラム文のことで、多くのプログラミング言語では条件分岐と反復のための複数の制御文が用意されています。これらを組み合わせてプログラムを設計していくところはプログラマーの腕の見せ所ですが、バグの源にもなりやすいところなので注意が必要です。

プログラム実行を制御しているハードウェアは制御装置です。命令単位で処理の流れをコントロールできますが、プログラマーにはそれは煩雑すぎます。プログラミング言語は、制御装置の機能を幾つかの制御文に抽象化し、シンプル化と効率向上を実現しているのです。

 

順次実行

順次実行

ある処理を実行し、次の処理に続くという何の変哲もないパターンです。

例えば3人の平均身長の計算は2つのステップの順次実行として表現できます。

 

if文と条件分岐

if文と条件分岐

条件の真偽値を求め、それがtrueとなったときのみ処理を行います。

例:赤組と白組の得点を比較し結果判定します。2つの条件分岐を組み合わせます。

プログラミング言語では、if-else文という制御文を使います。

if (akaTokuten == shiroTokuten)

引き分け;

else if (akaTokuten > shiroTokuten)

赤組優勝;

else

白組優勝;l

 

反復

反復

一律の方法で処理できる案件が複数ある場合には、案件処理方法を1回だけプログラムに書いて、それを各案件に反復して適用するのが効率的です。

案件数Nが反復回数になります。プログラミング時点でNが確定しているならばfor文が使えます。プログラムを実行時点でないとNが確定しない場合や、入力データによって反復回数が変わる場合はwhile文を使います。

 

for文による反復

for文による反復

案件0、案件1、案件2、というように処理を進めて、案件Nが完了するまで反復を続けるのに適した制御文です。

カウンタ変数を使います。カウンタ変数が0のときは案件0、1の時は案件1、というように、カウンタ変数を増やしながら処理を進めていきます。

カウンタ変数の名前は何でもよいですが、i, j, kなどを使うことが多いです。

図の説明

  • カウンタ変数で次の案件を特定します。今はi==1なので案件1を処理中です。

 

while文による反復

while文による反復

何番目の案件かを意識せず、「次の案件がある」という条件がtrueである限り反復を続けます。次の案件がなくなったときに反復完了です。

「次の案件」という概念をプログラムで表現するのはプログラマーの責任です。同じ案件を繰り返すミスをすると無限ループに陥ります。また、処理すべき案件を飛ばしてしまうと、抜け盛れとなってしまいます。

図の説明

  • 処理中の案件が終わると、次の案件に移ります。次の案件が無いときに、反復を終了します。

 

実際の使い方

紅組と白組、どっちの得票が多い?

年に一度の盛大な歌番組も大詰め、視聴者によるデジタルテレビ経由での投票が終わりました。

あとは開票して、各組の得票数を出すだけです。そのためのプログラムのコア部分を示します。

 

for文を使うプログラム

for文を使うプログラム

  • 視聴者からの投票はtouhyou[0]~touhyou[100000]という配列に入っています。
  • touhyou[]は文字列型配列で、各要素には’R’または’W’が入っています。

 

while文を使うプログラム

while文を使うプログラム

  • 視聴者からの投票を取得し、文字列型変数のnextTouhyouに格納する処理がある想定です。
  • nextTouhyouには’R’、’W’、または’E’が入ります。Rは紅組、Wは白組、Eは「次の要素無し」です

 

 

  • Facebook
  • Hatena
  • twitter
  • Google+

2進数で遊ぼう!オリジナル商品

  • facebook
  • twitter

つぶやき

PAGETOP
Copyright © かながわグローバルIT研究所 All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.