Javaに限らず、他のどのプログラミング言語でプログラムを組むときでも、基本制御構造はプログラミングにおいての基本となります。
これは、C言語のような構造化プログラミング言語だけでなく、Javaのようなオブジェクト指向言語にも同じことが言えます。
今回の記事では、基本制御構造とは何なのかについて解説し、その後で、アルゴリズム、フローチャート、プログラム(ソースコード)の関係について考えていきます。
基本制御構造とは
基本制御構造とは「順次」「選択」「繰り返し」の3つのことを指します。
順次:処理が順番に実行される構造
選択:条件によって分岐する構造
繰り返し:処理を繰り返す構造
この3つの構造がプログラミングの基本となり、どのようなプログラムでも、この3つの基本形に分解できるようになっています。
順次と選択
下図が処理の流れを示す「フローチャート(流れ図)」の例です。
①:1という数値を「変数a」に代入
②:2という数値を「変数b」に代入
③:条件式「変数a」<「変数b」を実行
④:「変数a」より「変数b」の方が大きいため、文字列「変数bの方が大きい」を出力
①から②へのように処理が進むことを「順次」
③から④または③から④´のように条件が成立するか否かによって処理を分岐させることを「選択(もしくは「分岐」)」と言います。
※プログラムの書き方や”変数”などのプログラミング用語については、別の記事で解説します。ここでは、大まかな概要だけをつかんでください。
繰り返し
次に「繰り返し」を含んだ例を挙げます。
①:1という数値を「変数Cnt」に代入
②:「繰り返し」の条件が成立するか否かを判断
「変数Cnt」>10が成立した場合③へ、成立しなかった場合⑤へ
③:「変数Cnt」に1を加算
④:②に戻る
⑤:「変数Cnt」を出力
「繰り返し」は、同等の処理を繰り返したい場合に使用します。「順次」で一処理ずつ記述することもできますが、繰り返しを使用した方がはるかに少ないソースコードで記述できます。
まとめ
プログラミングをする上で、どんなに長く複雑なプログラムコード(ソースコード)であったとしても、分解すれば前述した2つの例のようなコードになります。
つまり、「順次」「選択」「繰り返し」の3つを駆使することで、ひとつのプログラムが完成するということです。
言い換えれば、どんなに複雑なアルゴリズムでも、上記3つの基本形に分解できるというわけです。
ここは非常に大事なところですので、しっかり押さえておいてください。
アルゴリズムとは
さて、上述で「アルゴリズム」という用語をシレッと使いましたが、「アルゴリズム」とは何なのでしょうか。
プログラミングの学習を進めていく上で、このような用語はたくさん出てきますが、何となくではなく、その意味もしっかり押さえておくことも大切です。
アルゴリズムとは、「計算や情報処理の手順を定式化したもの」のことです。
このように形式ばって書くとわかりにくいですが、要するに「手順や計算方法」のことです。
プログラムに処理させるということは、プログラムに行ってもらいたい「目的(最終的に成し遂げたい事柄)」があるはずです。
例えば、「社員ごとの給与を計算し、その結果を得たい」という目的のプログラムがあったとして、その結果に行きつく手順はひとつとは限りません。
その「結果に行きつく手順」のことを「アルゴリズム」と言います。
同じ目的のプログラムを複数のプログラマーに作ってもらったとして、このアルゴリズムというものは三者三様のものが出来上がってくることは珍しくありません。
目的を果たすことができれば、中の手順(アルゴリズム)はどうでもいい、というわけにはいかず、最終的に同じ結果になるのであれば、可能な限り、効率的にすばやく結果を導き出すことが重要になってくることもあります。
それはつまり、アルゴリズムにも優劣が付くということです。
アルゴリズムを図解で表すフローチャート
本記事の最初の方で「フローチャート」という用語も使っています。
フローチャートとは、アルゴリズムをわかりやすく表した流れ図のことです。
頭の中でアルゴリズムを思い描いたとしても、やはりそれを第三者が見てわかりやすいカタチにする必要があります。
そのための手段はいくつかありますが、フローチャートで表すことが多いです。
アルゴリズム、フローチャート、プログラム(ソースコード)の関係を図で表すと以下のようになります。
上図のように、アルゴリズムを考え、フローチャートにして、ソースコードを記述する。
この一連の作業がプログラミングとなります。